tag:blogger.com,1999:blog-69239472829263242082024-03-08T09:55:10.081+01:00Entropic and Fractal IntelligenceSo called "Intelligente behaviour" can be defined in a pure thermodinamic languaje, using just "entropy". Formulaes look pretty intimidating, but once you get the idea, coding it into a working AI is quite simple.
Fractalizing the same idea takes away entropy calc form the AI and makes it work much better.Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.comBlogger93125tag:blogger.com,1999:blog-6923947282926324208.post-35125942513379705952020-01-06T21:45:00.002+01:002020-01-06T21:54:39.275+01:00Graph entropy 8: Negative probabilitiesAfter some introductory posts defining 4 generalized entropies, named H<sub>1</sub> to H<sub>4</sub>, and using the last two of them to define a Tree-Graph Entropy (that you should had read first, starting <a href="http://entropicai.blogspot.com/2018/06/graph-entropy-1.html" target="_blank">here</a>) I will try now to extend the usage of entropies H<sub>3</sub> and H<sub>4</sub> to the unknown realm of... negative probabilites!<br />
<br />
<a name='more'></a><br />
<br />
<h2>
Negative probabilities </h2>
But wait... what the point is in even considering that negative probabilities are a "thing"? What they do represent, if anything, in a real world case?<br />
<br />
Good question! Well, imagine the example of the car engines, we designed our eperiment to detect gas and electric engines, but we could had found cars using a hidrogen engine too! If it hapends, we would end up with and impossible event -finding a car with a totally different kind of engine- having a real probability.<br />
<br />
So let's say a 1% of the cars were found to use an "alien" hidrogen engine. This new pi = 0.01 is not adding information to our experiment, in fact, it is proven us wrong in our assumptions, so it is decreasing our -pretended- knowledge: it is acting as a negative entropy, so I decided to try using it as negative probability, assigning it the value p = -0.01<br />
<br />
It really makes no sense to just add a negative sign and pretend entropy will be lower, the original formula does not allow for negative probabilities, so a little fix was needed, not much really:<br />
<br />
<div style="text-align: center;">
H<sub>2</sub>(P) = ∏(2-|p<sub>i</sub>|<sup>p<sub>i</sub></sup>) </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
If we now <a href="https://www.wolframalpha.com/input/?i=Plot+%28%282-%7Cx%7C%5Ex%29%2C+%281%2BLn%282-%7Cx%7C%5Ex%29%29%29+from+x%3D-1+to+1" target="_blank">plot both entropies generators in the new extended range (-1, 1)</a>, this is what you get:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<img alt="" src="data:image/png;base64,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" /> </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
So, when a negative probability is added to the formula, you are multiplying by a coeficient smaller that 1, so lowering the resulting product entropy, as intended!</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
In fact, for p=-0.01, the added term in the product is 0.952871, meaning the H<sub>2</sub> entropy of the experiment results will be 0.471285% lower than initially expected, what makes perfect sense to me.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
So what if those two entropies can handle this case? Not sure if it could be of any use for some real experimental setup, but it is really funny to play around with those ideas, so I did (and, should you find a proper case for this, I am open to collaboration!).</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
</div>
<br />
<br />Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com1tag:blogger.com,1999:blog-6923947282926324208.post-89402512117690416442019-12-26T13:07:00.003+01:002019-12-26T13:10:54.953+01:00Got cited at MIT Technology Review!While updating "Fractal AI" <a href="https://arxiv.org/abs/1803.05049" target="_blank">paper at arXiv </a>to fix a silly typo in a formula (btw: do intelligent typo errors even exists?) I was surprised to discover that it was cited in the <a href="https://www.technologyreview.com/" target="_blank">MIT Technology Review</a> blog as one of "The Best of the Physics arXiv" of the week it was published!<br />
<br />
<br />
<div style="text-align: center;">
<a href="https://www.technologyreview.com/s/610615/the-best-of-the-physics-arxiv-week-ending-march-24-2018/" target="_blank"><img alt="https://www.technologyreview.com/s/610615/the-best-of-the-physics-arxiv-week-ending-march-24-2018/" height="640" src="data:image/png;base64,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oaZpWilxrUgU7d6929M53n//fYvV6cWLFxU9UygUslhz3ETRJ5984vsamqY5hNGbN28c79tPKYpUkWCyCz0gb9myH3f27FmPLZMQQghxp2Gi6MWLF9i1a5dDQHz55Zd48eIFXr9+jbm5OaGlxO47cuLECccxe/fuxdjYGO7fv4/79+/j9OnTDmvIjh078OLFi/yDSybr3bt348SJE8hkMjhy5IjwmEOHDgEQi6Ji6ejowNDQEIaGhvD+++8Ljylf1hOJlY6ODnz33Xd49eoVXr16he+++05oHTt27FjpPCpRdPv2bcffdu3ahS+//BLPnj3D+vo67t+/L63fcn+fs2fPCs91/vx53L9/H3Nzc7hw4YLUklQURd98843jb+XiVXW9xcXFKlorIYQQYqVhoqi3t9cxgYosAuvr646JvyhCALHFIB6PC/OojY2NSSdcmZApiqYiN2/edBwXCoUAyEXR2bNnLVag9fV1oejJZDIAgG+//dbxt2QyKXSofv36NTo6OhzHF61XMlH06tUrx/LTzp07Lc7Q5YiseidPngSQt9TZLWs7d+4UOmdns1mh71JRFL1588ZhIfvoo48c57ELSy6dEUIIqTUNEUUvX76UCgIR3333neP4og+OXVzZLS7lrK+vo6OjA/v27SuV3t7e/IPbzrFz505pUtiPPvrIcXw2mxWKonIBV87Kyorj2E8++QQAhNYxlRXkhx9+cByfSqUAyEXRF1984fj/U6dOSa+xvr7uEDM7duzAmzdvhMJUdS6RsCz38RI5UJeLU1HdqRyyCSGEkEpoiCgSTeJXrlxxbK8uFtEkWpwE7VakaDRa0b3az//+++9Lj+3v73cc/+zZM6EoOn/+vOdrFgWUfVlRZCmxY6+HvXv3ApCLopMnTzr+323b/YULFxy/uX//Pq5cueL4f9WOOtEzlosikcgqX0I7f/6873snhBBC/NIQUSRaxvJbTpw4AQCOZRuZZcYN+/lVwRv9iCKZ1Up0zUOHDgmtIJ999pnr/YuW416+fCkVRXZr186dO12vIfJBunLlijAMgtvWffvyl303oP3v5cLQfu+qHWqEEEJIpTREFImsFH5LMpnEs2fPHP9f7mTs68Ft57FP0uX4EUWqgIIiUSTyJ1ItLRY5ffq043dzc3NSUWS31HiJNr60tOQ418mTJysSRXZ/Jnt9261BO3bs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hbBvoDUMDkXxOTrLHT1JKCqw6vS8lz/weON1cu8/ponDYW2ZwsjJhqKRCxvd0/t7j7FxjXLEYEJpLnx8n3q9zoObFSYn593WoGqZ3HIndTrVEla4RPV7sSimiIjI8/NcVrS+tWAzloyRHOusaJ0cK3Lx8u9941/cafXu1PLgKfkz2TDGWIyWF7m9B3s3ZhmPGIyJUVq8zR573F4sETMGExln9saeOyW/FMMYQ2R8lqu1Bo3aMuVRC2PCZGeuUms0qF2dIRs2GGuU8nLNa7E6YG06SdjqTLO/XDLutP+xH/NFo8bVmSxhY7BGyyze3nOn6Z9LYRlDODvjbe8q51KWO3PunevUGgAN1t+KEzIWkfg4hfc+5897t3knH8EYi9S5D7i91zqFn3JxzF1KwFhhYpMVNlo5qFrCmBDxnI1t58kkJ1m4pyHXIiIiz0rffSYiIiKCQpGIiIgIcEKh6JtvvmFnZ0evl/j6+uuvT+JSioiIfG+dSCg6ODhgYmJCr5f4+pd/+ZeTuJQiIiLfW+o+ExEREUGhSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBFIpEREREAIUiEREREUChSERERARQKBIREREBXsVQ1Dzk0HnZOyEiIiLfN69MKKpdKZE5FcYyCSrbL3tvRDwHG1QmY8QyRd6cmGB67eBl71GfvdsfsXixyFgsy/yz3DvNeyxMRglZYU7Fkpxe2uJ79fmkUeP6BxXO59JE7OrL3ht55TSoXf+Ayvkc6YiNSshwnP1PmU6GsUIRYrHMK1mH+p1QKGqw/m6RdMRgjCE2bmPbrVeRsWgIk6hwXH29NRfHnGAo2qteJBcPYYzBxGbY7K3ht3/B+VyckDGE4jneXW+czIafwd6NCkVvn8PJ0+45zKWJRtMUF26x/716Sh2vUVtmOjOCZQwmNt4ud8WJFPFMjouXfx9wzhr8qhDCRMpc811yZ3cV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" width="385" /></a></div>
<br />
<br />
I will just say "wow"...Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com0tag:blogger.com,1999:blog-6923947282926324208.post-76458080051892905092019-12-26T12:36:00.002+01:002019-12-26T12:51:50.596+01:00Visiting Graz UniversityThis 17th of December 2019 I was invited by Manfred Füllsack from Graz University in Austria to give a talk on a really interesting workshop titled "Future State Maximization".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7joGU5S4zrZ3q1Z2b2Bck-8RE2bjRULXrxXXH7JkAe5bD9rMnr08guDuuBUaskw5_ryvR0Ku00ZByHa95_LsUxGmdschEosg65_s_k1cF3PqdfP3yXEysd3Wduz1_tVZx56W5hxBkxRM3/s1600/Workshop+Futuer+State+Maximization_Anzeige.pdf.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1123" data-original-width="793" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7joGU5S4zrZ3q1Z2b2Bck-8RE2bjRULXrxXXH7JkAe5bD9rMnr08guDuuBUaskw5_ryvR0Ku00ZByHa95_LsUxGmdschEosg65_s_k1cF3PqdfP3yXEysd3Wduz1_tVZx56W5hxBkxRM3/s400/Workshop+Futuer+State+Maximization_Anzeige.pdf.png" width="281" /></a></div>
<br />
<a name='more'></a><br />
<br />
The workshop basically included any form of future state optimization, mainly including Causal Entropic Forces and Empowerment approaches.<br />
<br />
It was very interesting to meet and know the really few people out there caring about this concept of maximizing some entropy measure -actually it always boiled down to a mutual information measurement- that will be happening in the future.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNZkBF4dOHb4rzDCZpqqlGKjraoWgAjxlF6HDZCuKL985qUTZ_qEBL2BAJ5b4_J7OV4RI_HhTvsnLYrbDRvBFNOP9V3iX2m8GtR5qoF7I-BiAROi5G1om8_-VY1Xdkpy-cB5pbf9Ur0pMt/s1600/20191217_160926-01.jpeg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="681" data-original-width="1600" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNZkBF4dOHb4rzDCZpqqlGKjraoWgAjxlF6HDZCuKL985qUTZ_qEBL2BAJ5b4_J7OV4RI_HhTvsnLYrbDRvBFNOP9V3iX2m8GtR5qoF7I-BiAROi5G1om8_-VY1Xdkpy-cB5pbf9Ur0pMt/s400/20191217_160926-01.jpeg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Speakers and organizers</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
If I had to summarize my impressions in a single thought, it may well be that all approaches we were discussing initially take the form of an elegant concept with an intractable formulation, but, ultimately they all can be cracked down to a simpler form, then applied to some real world problems with amazing results.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
That said, the most intriguingly truth I learnt in Graz is that this hot-spicy-wine thing they drink all over the city places at night, do smell like teenager's used socks, but you eventually get used to it, and even enjoy!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLlV-JrhbOVQOb23-9BvUJmzcdV1ekn9RfgbJG7BVYdBRRPN2PS9PzMmml9YFfwUYmoEtSMh_xHXkMKgtmxYYb3uqRBVsz0Pt_Ro_ecsgWXFHQQq2yehiszmw_mjOjVMcExnLQKkJMsCE9/s1600/20191216_185213.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="900" data-original-width="1600" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLlV-JrhbOVQOb23-9BvUJmzcdV1ekn9RfgbJG7BVYdBRRPN2PS9PzMmml9YFfwUYmoEtSMh_xHXkMKgtmxYYb3uqRBVsz0Pt_Ro_ecsgWXFHQQq2yehiszmw_mjOjVMcExnLQKkJMsCE9/s320/20191216_185213.jpg" width="320" /></a></td></tr>
<tr align="center"><td class="tr-caption" style="text-align: center;">Guillem painfully trying to get used to it </td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Guillem prepared <a href="https://docs.google.com/presentation/d/1ZkrfHSchUDXSdSv9eRjk-tUAertezRmeqyb7EtSD64o" target="_blank">these slides</a> with really nice videos of Fractal AI solving some Montezuma rooms while <a href="https://docs.google.com/presentation/d/12pUoXBceslyX5TUwfpJ2sr20UHZdu1I0IG8Q_1ltA7I/edit?usp=sharing" target="_blank">my slides</a> focused more on the theoretical grounds of FAI.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<blockquote class="twitter-tweet">
<div dir="ltr" lang="en">
300k samples of MsPacman using a FractalAI Swarm. Each point corresponda to the UMAP embedding of frames, and the red line corresponds to the game displayed in the right part of the screen. <a href="https://t.co/fXQd8us2NA">pic.twitter.com/fXQd8us2NA</a></div>
— Guillem Duran (@Miau_DB) <a href="https://twitter.com/Miau_DB/status/1207379418383036417?ref_src=twsrc%5Etfw">December 18, 2019</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com0tag:blogger.com,1999:blog-6923947282926324208.post-64481907377617613112019-02-04T22:31:00.002+01:002019-02-05T09:56:06.734+01:00The Gordian Knot of AGIAll the people working in AI I have ever meet had the same feeling you can read here and there: what we do with Deep Learning is fantastic and opens a number of totally new fields for us to solve, and Reinforced Learning is going one step further, but it doesn't feel like if it were "real" intelligence, not like the general and "plastic" intelligence we feel, flowing in our own brains, it feels more like a powerful tool in our untrained hands.<br />
<br />
I totally agree. Deep learning is very good at making sense of our "observation" of the world, building an internal state that, in practical terms, can be used as if we had direct acces to the real system state, and also predicting the most probable next states of the system, thats true, but even if we could make it so perfectly that our agent had magical acces to the real system state and a perfect simulation of it, even in that ideal case, we don't real know what to do with this valuable information.<br />
<a name='more'></a><br />
<br />
A real AGI needs to address two very different problems before being a complete AGI.<br />
<br />
First, it must <b>learn</b> to extract an usable state out of a serie of observations, and also to predict our future next observation of the system, given that we take this or that decision and take the corresponding action.<br />
<br />
But once you have it, you need to <b>decide</b> on your next action, and this step is even more important in showing real intelligence that the previous one: if an agent were able to exactly predict its next observation, but was unable to take the most "intelligent" decision out of it, then it would be just a waste of learning, but if another agent, having incomplete knoledge of its environment and its evolution, is able to take meaninful and intelligent decisions, we would all agree in that the second one is more intelligent than the first.<br />
<br />
All the state of the art in AI is mainly focused on the first problem, the sensorial part of the problem where you learn to deal with a stream of raw data, make sense out of it, and predict its sequence, but there is basically nothing about as general and powerful for how to actually decide and choose our next action.<br />
<br />
We have control theory, we have Monte Carlo Tree Search (MCTS), and we have Reinforced Learning (RL) and AlphaZero, so yes, there is something, but to be honest, they are not up to the task of teaming up with neural networks and deep learining and provide a general, easy and computationally efficient way to take optimal decisions.<br />
<br />
Reinforced Learning (RL), being the main contendient here, lacks a trully powerful way of scanning the future outcomes of the actions being choosen, instead, it is based on learning, from memories of past episodes, to predict a "q-value" or the "expected reward" after a period.<br />
<br />
Taking the action with the highest q-value works to some extent, but not so much actually. Adding MCTS helpsa lot -AlphaZero uses it with great results- but <a href="https://entropicai.blogspot.com/2015/10/maze-fractal-vs-entropic.html" target="_blank">you can not actually scan a ver y complex future landscape using a one-path-at-a-time schema and be efficient at the same time</a> and, in my opinion, this is the point when we loose faith on the "reality" of the intelligence we build.<br />
<br />
In the other hand, Fractal Monte Carlo (<a href="https://entropicai.blogspot.com/2018/02/fractal-ai-goes-public.html" target="_blank">FMC</a>) algorithm provides the second part of an AGI in a compact and efficient code, it is able to scan any future landscape, works on continuous or discreted decision spaces, and is general enough to fit with the second task requeriments, so the question is: will the mix of a pair of equally effcient algorithms, one for the learning part (DL) and a second one for the decision part (<a href="https://entropicai.blogspot.com/2018/02/fractal-ai-goes-public.html" target="_blank">FMC</a>) produce the synergies and couplings and eventually produce this AGI behaviour we want?<br />
<br />
My answer is yes, and for a simetry question: the algorithms we use for AI and RL (neural networks, q-learning, bayesian inference, etc) are all based of learning from memories taken from past episodes. We don't use any ahead-looking algorithm, except for Monte Carlo methods we could add to the mix. But all the used Monte Carlo variations base its inner working in plotting one new path at a time, to consider one of the possible futures after another.<br />
<br />
This aproach is <a href="https://entropicai.blogspot.com/2015/10/maze-fractal-vs-entropic.html" target="_blank">not able to deal with complex spaces</a>, it just doesn't deliver. Only by building all the path simulteneously and allowing the different paths to <a href="https://entropicai.blogspot.com/2015/12/fractal-ai-collaboration.html" target="_blank">cooperate</a> we can do it, but this involves building fractal trees of paths instead of threads of linear, causally connected paths of states. <a href="https://entropicai.blogspot.com/2016/04/understanding-mining-example.html" target="_blank">A fractal ahead algorithm</a> is, in my opinion, the actual Gordian Knot of AGI.<br />
<br />
But an AGI without a consciousness is an AGI whose goals have to be externally given. This is general AI in some sense, but not a real AGI as we humans are: this is one step above what we will get, but not so far!Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com2tag:blogger.com,1999:blog-6923947282926324208.post-45981500831388289042018-10-24T12:17:00.000+02:002019-01-10T13:15:45.098+01:00Hacking Reinforced LearningMy good friend and close colleague <a href="https://twitter.com/Miau_DB" target="_blank">Guillem</a> had a really busy year attending talks about Reinforced Learning in several events like <a href="https://it-events.com/events/8527/materials/2325" target="_blank">Piter Py 2017</a> (Saint Petersburg, Russia), <a href="https://ep2018.europython.eu/conference/talks/hacking-reinforcement-learning" target="_blank">Europython 2018</a> (Edinburgh, UK) or <a href="https://2018.es.pycon.org/talk/hackeando-el-reinforcement-learning" target="_blank">PyConEs 2018</a> (Málaga, Spain), and <a href="https://twitter.com/PyDataMallorca" target="_blank">PyData Mallorca</a> (among others!) introducing <a href="http://entropicai.blogspot.com/2018/02/fractal-ai-goes-public.html" target="_blank">Fractal Monte Carlo</a> to a broad audience.<br />
<br />
All the talks versed about RL, but the talks held at Europython (english) and PyConES (spanish) were both about "hacking RL" by introducing Fractal Monte Carlo (FMC) algorithm as a cheap and efficient way to generate lots of high quality rollouts of the game/system being controlled.<br />
<br />
<a name='more'></a><br />
Basically, standard RL methods start by generating random rollouts of the games, to then slowly learn to mimic the most successful episodes in those rollouts, expecting that, over time, the rollout quality (i.e. the game scoring) of the newly generated ones (using the learned policy as a prior instead of just taking random choices) will tend to improve.<br />
<br />
This will eventually happen, but very slowly and not necessarily toward a global optimal policy.<br />
<br />
Can we hack this standard method and get a faster, more reliable training phase? Yep! As far as we can predict the system's next state within some certainly level (call it having an approximated, probabilistic, stochastic simulator of your system) we can use it to generate a set of very high scoring games to learn from.<br />
<br />
Here you have the first talk: "Hacking Reinforced Learning" at Europython 2018 (English):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/rZpZU8LHPco/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/rZpZU8LHPco?feature=player_embedded" width="320"></iframe></div>
<br />
There is also a spanish version from Pycones 2018:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/N72s_OFMv8U/0.jpg" src="https://www.youtube.com/embed/N72s_OFMv8U?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
And the more generic talk "Reinforced Learning for developers" at Piter Py 2017 (English):<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/Suss2PJeiLc/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/Suss2PJeiLc?feature=player_embedded" width="320"></iframe></div>
<br />
If you prefer Russian, there is a real-time translated version too:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/5J1jUMElwxU/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/5J1jUMElwxU?feature=player_embedded" width="320"></iframe></div>
<br />
<br /><br />Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com0tag:blogger.com,1999:blog-6923947282926324208.post-13510405092271391072018-10-16T11:16:00.002+02:002020-01-06T21:48:45.298+01:00Graph entropy 7: slidesAfter the series of six posts about Tree-Graph Entropy (starting <a href="https://entropicai.blogspot.com/2018/06/graph-entropy-1.html" target="_blank">here</a>), I have prepared a <a href="https://docs.google.com/presentation/d/e/2PACX-1vTEnWhDyeSO1T5-V-JEOY_IMP39LenEahjzbepe10TlyBZVTsSVGccfJR6ryA1JHxQwRbh1htQD0pC4/pub?start=false&loop=false&delayms=5000" target="_blank">short presentation about Graph Entropy</a>, mainly to clarify the concepts to my own (and to anyone interested) and present some real-world use cases. <br />
<br />
<iframe allowfullscreen="true" frameborder="0" height="299" mozallowfullscreen="true" src="https://docs.google.com/presentation/d/e/2PACX-1vTEnWhDyeSO1T5-V-JEOY_IMP39LenEahjzbepe10TlyBZVTsSVGccfJR6ryA1JHxQwRbh1htQD0pC4/embed?start=false&loop=false&delayms=5000" webkitallowfullscreen="true" width="480"></iframe>
<br />
<br />
One of the most interesting ideas introduced in this presentation is a method for, once you had defined the entropy of all the nodes in a static disrected and acyclic and directed graph (a tree), to easily update all those entropy values as the graph evolves over time, both altering the conditional probability of some connections, as also by adding or taking connections, by considering nodes and connection as cellular automaton that can adjust its internal entropies asynchronously.<br />
<br />
You can also jump to the original <a href="https://docs.google.com/presentation/d/1qQJjBzsdSGaU3vptpAOGcQXsHzt91mZx8au9DFtoyfg/edit?usp=sharing" target="_blank">google slides version</a> if you want to comment on a particular slide.<br />
<br />
If this was not enought for you and what to read more weird things about those entropies, you can dive into the unknown realm of negative probabilities entropy <a href="https://entropicai.blogspot.com/2020/01/graph-entropy-8-negative-probabilities.html" target="_blank">here</a>! <br />
<br />
<b>Update (24 Oct 2018):</b> this post was referenced in the article "<a href="https://www.mdpi.com/1099-4300/20/11/813" target="_blank">A Brief Review of Generalized Entropies</a>"where the (c, d) exponents of these generalized entropies are calculated.<br />
<br />
<br />Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com0tag:blogger.com,1999:blog-6923947282926324208.post-1068360797788238762018-08-25T18:33:00.000+02:002018-08-25T18:50:56.723+02:00Curiosity solving Atari games<div class="separator" style="clear: both; text-align: left;">
Some days ago I read in tweeter about playing Atari games without having access to the reward, that is, without knowing you score at all. This is called "curiosity driven" learning as your only goal is to scan as much space as possible, to try out new things regardless of the score it will add or take. Finally, a NN learns from those examples how to move around in the game just avoiding its end.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<blockquote class="twitter-tweet" data-lang="es">
<div dir="ltr" lang="en">
Large-Scale Study of Curiosity-Driven Learning: this is one of the most amazing RL paper I’ve seen since the DeepMind Atari paper in 2013, definitely worth a read!<br />
paper: <a href="https://t.co/0VcTLn0H3K">https://t.co/0VcTLn0H3K</a><br />
video: <a href="https://t.co/NmX9yAgWyS">https://t.co/NmX9yAgWyS</a> <a href="https://t.co/Or6TtyVPDw">pic.twitter.com/Or6TtyVPDw</a></div>
— Tony Beltramelli (@Tbeltramelli) <a href="https://twitter.com/Tbeltramelli/status/1030055759185362944?ref_src=twsrc%5Etfw">16 de agosto de 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Our FMC algorithm is a planning algorithm, it doesn't learn form past experiences but decide after sampling a number of possible future outcomes after taking different actions, but still it can scan the future without any reward.</div>
<a name='more'></a><br />
<br />
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
While performing this scan, a balance coefficient in the range [0, 1] allows us to focus more on exploration (look for new places, curiosity) or in exploitation (maximise the value of you reward) by biasing the virtual reward of the walkers.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
VR = Distance * Reward^Balance</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This coefficient changes the weight of the reward -thus the importance of exploitation- relative to the importance of diversity, represented by the distance to a random walker, the exploration part, on the decisions of the walkers.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
For instance, a balance of 1 makes both equally important, while setting the balance to 0 push the reward term to a totally irrelevant 1.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
So I decided to give it a try using the swarm example notebook in the <a href="https://github.com/FragileTheory/FractalAI" target="_blank">github repo</a>. Set the game to "MsPacman-ram-v0" so we are using RAM dumps as observations (we can not see the screen), balance to 0, and number of walkers to 400, as we know this number of parallel paths are barely enough for keeping Ms Pacman safe from ghosts at any game level.</div>
<br />
As a reference, the actual records on playing Atari-2600 game "Ms Pacman" are:<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<ol>
<li><b>Human world record: 290,090</b></li>
<li><b>Learning algorithm:5,913</b> (NNet duelling, "Noisy Networks for Exploration", Deepmind, 2018).</li>
<li><b>Planning algorithm: 30,785</b> (p-IW(1), "Blind Search for Atari-Like Online Planning Revisited", Alexander Shleyfman, Alexander Tuisov, Carmel Domshlak, 2016).</li>
</ol>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
As you can see on the next screenshot, FMC was able to score well above all actual records, passing the hard limit score of 1 million and getting a score of 1,200,000 on a game of about than 35 hours (game time).</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJlZXDp2YHzOuC58d7qonrW_uYLVx7rw7IVMlmJxkaHIFHZE2ATNOk6qUuKSxI9xTese0p4my25_mJGBXRiIRdye7tQ-WdoxqFrd1SqoAzT-asG_Y01RhDu67QomdE1-xVvGOTvH2CQtyj/s1600/MsPacman+ram+noreward+993k.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="916" data-original-width="1144" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJlZXDp2YHzOuC58d7qonrW_uYLVx7rw7IVMlmJxkaHIFHZE2ATNOk6qUuKSxI9xTese0p4my25_mJGBXRiIRdye7tQ-WdoxqFrd1SqoAzT-asG_Y01RhDu67QomdE1-xVvGOTvH2CQtyj/s400/MsPacman+ram+noreward+993k.png" width="400" /></a></div>
<br />
As a couple of interesting comparisons to get an idea of the improvement FMC can represent please consider that:<br /><br /><ul>
<li>In the initially cited article, curiosity driven learning scored about 2,500. </li>
<li>The best planning algorithm, p-IW(1), used 150,000 paths (vs 400) to score 30,785. </li>
</ul>
<br />In deed it is not such a big deal, after all, if you managed to have an immortal agent walking around Ms Pacman mazes indefinitely, eventually it will walk every corridor and clean the levels, one after another, until the end of time, so it was just a matter of giving it some CPU time and wait.<br /><br />As a tech note, it took me about 24 hours of wall time in an Intel i7-6700HQ @ 2.60Ghz x 8 cores, 12 GB RAM hp envy laptop. Remember to just adjust workers=32 in the happy event of having four times more cores than I do!Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com0tag:blogger.com,1999:blog-6923947282926324208.post-51631824887199845652018-08-03T22:40:00.000+02:002018-09-19T11:12:41.871+02:00Roadmap to AGIArtificial General Intelligence (AGI) is the holy grail of artificial intelligence and my personal goal from 2013, where this blog started. I seriously plan to build one AGI from scratch, with the help of my good friend Guillem Duran, and here is how I plan to do this: a plausible and doable raodmap to build an efficient AGI.<br />
<br />
Plase keep in mind we both use our spare time to work on it so, even if the roadmap is practically finished in the theorical aspects, coding it is kind of hard and time-consuming -we don't have acces to any extra computer power except for our personal laptops- so at the actual pace, don't spect anything spectacular in a near future.<br />
<br />
That said, the thing is doable in terms of a few years given some extra resources, so let's start now!<br />
<br />
<h2>
AGI structure</h2>
A general intelligence, being it artificial or not, is a compound of only three modules, each one with its own purpose that can do its job both autonomously and cooperating with the other modules.<br />
<br />
It is only when they work together that we could say it is "intelligence" in the same sense we consider our selves intelligent. May be their internal dynamics, algorithms and physical substrate are not the same nor even close, but the idea of the three subsystems and their roles are always the same in both cases, just they are solved with different implementations.<br />
<br />
In this initial post I just enumerate the modules, the state of its developemnt, and its basic functions. In next posts I will get depper into the details of each one. Interactions between moduels will be covered later, when the different modules are properly introduced<br />
<br />
<a name='more'></a><br />
<h2>
Module #1: Learning</h2>
<b>Definition:</b> This module uses learning to build a simulator of the agent's world from the raw sensorial inputs.<br />
<br />
<b>Basic function:</b> The module will process the raw sensorial inputs, learns to build a representation of the world (as an embedding of those sensorial inputs) and then use it to predict the next state of the world -its representation- as it will probably perceive it in the next moment.<br />
<br />
<b>Development:</b> It is a standar deep learning task, so this part is easy... once you find the right layer topology and a lot of GPU time to train it some hundreds of times until it does it job.<br />
<br />
<h2>
Module #2: Planning</h2>
<b>Definition:</b> This module scan the future outcomes -or consecuences- of taking diferent actions and decide which one will actually take the agent in order to behave intelligently.<br />
<br />
<b>Basic function:</b> This module is a modified version of the actual FMC algorithm showed in our github repo. It reads the actual state of the world from the module #1 as a representation, uses its predictive skills to build a number of paths the world could follow, form a tree with them following the FMC rules, and finally choose the action with more leaf nodes attached.<br />
<br />
<b>Development:</b> This module is already done and working like a charm. It really outperform any other planning algorithm out there (it beated all SoTA algorithm we could find, about 11 and all of the 50 Atari games used to test them in the literature with 360 times fewer samples on average), works perfectly fine on continuous spaces, and based on a first-principles theory of intelligence (of mine ;). <br />
<br />
<h2>
Module #3: Consciousness</h2>
<b>Definition:</b> This module select the relative importance of the different goals available to the intelligence to build the reward function used by module #2.<br />
<br />
<b>Basic function:</b> Basically, it changes the "personality" of the agent real time, making it more interested on some kind of things and less on others in orther to maximize some property of the tree built by module #2 on its internal process of deciding. The effect is autoselecting the goals to follow depending on the most probable world evolution so that the agent has an enjoyable and highly rewarding future in most of them.<br />
<br />
<b>Development:</b> This is not as complicated as it sounds, actually it is about using FMC a second time on top of the first, but instead of deciding on the next action to take, now you decide on the next "personality change" of the agent using the same idea but with a deeply different form of entropy: the entropy of the whole tree as a graph (as opposed to using the entropy of only the final leaf nodes as in standard FMC), or its "graph entropy". So it is still waiting for a "coding slot", and will be for a time!<br />
<br />
<h2>
Conclusions </h2>
There are some important pieces of the model left out and lots of implementation details worth mentioning, but this is basically all it takes to build an AGI: A sensorial part that deals with inputs and builds a useful simulation of the world, an intelligent planning part that uses the simulation to scan the future and decide, and a final part that defines and modify the reward function to follow.<br />
<br />
On its actual form, it is doable in a few years, but the part that have to learn the world dynamics, the ANN, is the weakest part with the most difficult task, it would be the bottleneck of the AGI.<br />
<br />
In a short period of time, a link to the next probable post will be: here.<br />
<br />
<br />Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com2tag:blogger.com,1999:blog-6923947282926324208.post-87202666761892406472018-07-18T13:59:00.001+02:002020-01-06T21:10:55.437+01:00Graph entropy 6: SeparabilityThis is 6th post on a serie, so you should had read the previous posts (and in the correct order) first. If you just landed here, please start your reading <a href="http://entropicai.blogspot.com/2018/06/graph-entropy-1.html" target="_blank">here</a> and follow the links to the next post until you arrive here again, this time with the appropiated backgroud.<br />
<br />
In the standard Gibbs-Shannon entropy, the 4th Shannon-Khinchin axiom about separability says 2 different things (that we will label here as sub-axioms 4.1 and 4.2 respectively) that, given two independent distributions P and Q, the entropy of the combined distribution PxQ is:<br />
<br />
<div style="text-align: center;">
Axiom 4.1) H(PxQ) = H(P) + H(Q)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
When P and Q are not independent, this formula becomes an inequality:</div>
<div style="text-align: left;">
</div>
<div style="text-align: center;">
Axiom 4.2) H(PxQ) ≤ H(P) + H(Q)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Graph entropy, being applied to graphs instead of distributions, allows for some more forms of combining two distributions, giving not one but at least three intersting inequalities:</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKC-tIDjgzxSDC4WqTMKic_w49pSmJCLnUkHJDxXZYh15e_V_tRqUJngeha2HR8hrpf3My3aHfOOtZQFdnEla2ic4boelffFvMp0pKqxNuvxxgcDz4g5rwG_zqnrpx9c6eeokXeIuIDy63/s1600/Separation+axioms.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="540" data-original-width="960" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKC-tIDjgzxSDC4WqTMKic_w49pSmJCLnUkHJDxXZYh15e_V_tRqUJngeha2HR8hrpf3My3aHfOOtZQFdnEla2ic4boelffFvMp0pKqxNuvxxgcDz4g5rwG_zqnrpx9c6eeokXeIuIDy63/s400/Separation+axioms.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<a name='more'></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
I have not even tried to prove any of them, and it doesn't look easy to me, but I have made several millions of tests with pairs of random distributions and no counterexample was found so far, so it is just a personal conjeture that the three innequalities can be proven right.<br />
<br />
If you calculate the ratios between 1st and 2nd figures (R1), between 2nd and 3rd (R2) and finally between 3rd and 4rd (R3), then average some thousands of them for random distributions of 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 and 200 items and plot them, this is the interesting result:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqbcrI_uUPEDwIUJY899OErxOQTZBjPBkU-39bvv2SJKlqobdTiMwIFMNf4oFIH0OFcizdcWG8x_-8e9Yu7zlV1-ZNlp79aVJN5dcS31abZlxorh-tFTL4NaXo9FJGhEmdHskfDY4YSJBq/s1600/Relations+R1-R3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="538" data-original-width="878" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqbcrI_uUPEDwIUJY899OErxOQTZBjPBkU-39bvv2SJKlqobdTiMwIFMNf4oFIH0OFcizdcWG8x_-8e9Yu7zlV1-ZNlp79aVJN5dcS31abZlxorh-tFTL4NaXo9FJGhEmdHskfDY4YSJBq/s400/Relations+R1-R3.png" width="400" /></a></div>
<br />
Well, that was all about graph entropies I had for now, in future posts I may talk about some practical usage of the new entropy... or not!<br />
<br />
<b>Note:</b> graph entropy, being constrined by those four nice innequalities, doesn't actually account for neither of the 2 sub-axioms. Is there any -generalized- entropy meeting at least 4.1? Yes! There was one and only one, the <a href="https://en.wikipedia.org/wiki/Tsallis_entropy" target="_blank">Tsallis generalized entropy</a> does!<br />
<br />
In the meanwhile, you can check the slides I have prepared <a href="https://entropicai.blogspot.com/2018/10/graph-entropy-slides.html" target="_blank">here</a>.Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com0tag:blogger.com,1999:blog-6923947282926324208.post-90746499327592615832018-06-13T20:33:00.001+02:002020-01-06T20:58:27.873+01:00Graph entropy 5: RelationsAfter some introductory posts (that you should had read first, starting <a href="http://entropicai.blogspot.com/2018/06/graph-entropy-1.html" target="_blank">here</a>) we face the main task of defining the entropy of a graph, something looking like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_o2xoA4vuUcyj3HcSNNG4qrPW6qtCDDs75o-t9WiiQJfR0WP1-S7QpbMlewLQb3gs1PNU7ROSL5Es3HNxKQzaw00eVegYERjud4UMCGfoYeKhppueNKM2UOEJlBkTU_qfqSDhw5AlC6Z_/s1600/Screenshot-2018-6-12+Path+entropy2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="359" data-original-width="367" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_o2xoA4vuUcyj3HcSNNG4qrPW6qtCDDs75o-t9WiiQJfR0WP1-S7QpbMlewLQb3gs1PNU7ROSL5Es3HNxKQzaw00eVegYERjud4UMCGfoYeKhppueNKM2UOEJlBkTU_qfqSDhw5AlC6Z_/s320/Screenshot-2018-6-12+Path+entropy2.png" width="320" /></a></div>
<br />
<h2>
Relations</h2>
We will start by dividing the graph into a collection of "Relations", a minimal graph where a pair of nodes A and B are connected by an edge representing the conditional probability of both events, P(A|B):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLp4Dl32SixSHTVr7i2CQLsQafG2imRMX4IgJEj8uneHucjiFjoNcsKXv9t55H71wZLLzaqpJBt2u2vDhgUlzfq27xadRGDj4bl9aw4ZmX21DeNpX9uWs4FuT9cD1oZd_ks374qKxSaLSi/s1600/Relation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="413" data-original-width="253" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLp4Dl32SixSHTVr7i2CQLsQafG2imRMX4IgJEj8uneHucjiFjoNcsKXv9t55H71wZLLzaqpJBt2u2vDhgUlzfq27xadRGDj4bl9aw4ZmX21DeNpX9uWs4FuT9cD1oZd_ks374qKxSaLSi/s320/Relation.png" width="196" /></a></div>
<br />
<a name='more'></a><br />
<h3>
Nodes</h3>
Nodes represent events: B could be "choose a random car from a parking lot" and B "the car has a gas engine inside".<br />
<br />
Nodes will hold two forms of entropy: a 'raw' entropy in the form of a <a href="http://entropicai.blogspot.com/2018/06/graph-entropy-3-changing-rules.html" target="_blank">H</a><a href="http://entropicai.blogspot.com/2018/06/graph-entropy-3-changing-rules.html" target="_blank"><sub>2</sub> entropy</a>, and a 'processed' entropy H as a <a href="http://entropicai.blogspot.com/2018/06/graph-entropy-3-changing-rules.html" target="_blank">H</a><a href="http://entropicai.blogspot.com/2018/06/graph-entropy-3-changing-rules.html" target="_blank"><sub>3</sub> entropy</a>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbb8Vaq5i9NBmSDKF-pNxiQK5J3Rda1Mwl2N5JTnAr_WZSZTo6B4EMuso84lsXKb52Jc_9vYWHLRqFO7PUm3MOEUB-fdDTA9jNZM8USgW33v3pGX874QLY7IS65JzarvrwhN2-tvYHEFT1/s1600/Node.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="334" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbb8Vaq5i9NBmSDKF-pNxiQK5J3Rda1Mwl2N5JTnAr_WZSZTo6B4EMuso84lsXKb52Jc_9vYWHLRqFO7PUm3MOEUB-fdDTA9jNZM8USgW33v3pGX874QLY7IS65JzarvrwhN2-tvYHEFT1/s320/Node.png" width="222" /></a></div>
<br />
When a new node is created, raw entropy is set to 1 -so new inputs will just multiply the raw entropy as they come in- and H is then 1+log(1) = 1, so we will just initialise both to 1.<br />
<br />
<h3>
Edges</h3>
<span style="font-family: inherit;">Edges represent the relation between A and B, the conditional probability of happening A given that B already happened.</span><br />
This conditional probability defines an "entropy bit" of (2-p<sup>p</sup>) that will modify any entropy passing by the edge:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-4BhqinqPDbWMDrA050pkHvVo5MinR-KbmtY4wd20nItsRv52tmwcYuXR-6G6c_VSrb2guMlFUqQ9gLQ64Gyi9kYb37VNARelb6Fa1Vg9FbHkRPIgOMXPOLIYSQQ9l4Us-LrJyQJPyq4z/s1600/Edge.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="502" data-original-width="300" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-4BhqinqPDbWMDrA050pkHvVo5MinR-KbmtY4wd20nItsRv52tmwcYuXR-6G6c_VSrb2guMlFUqQ9gLQ64Gyi9kYb37VNARelb6Fa1Vg9FbHkRPIgOMXPOLIYSQQ9l4Us-LrJyQJPyq4z/s320/Edge.png" width="191" /></a></div>
<br />
Edges have three internal variables that initialise to 1 as before:<br />
<br />
<ul>
<li>P = P(A|B) is the conditional probability between A and B.</li>
<li>S = Input = External entropy H of the origin node A.</li>
<li>𝛟' = Last value sent to end node B. </li>
</ul>
<br />
When P or S change (A send a new input value S, or P is recalculated and modified externally), the edge perform those steps:<br />
<br />
<ul>
<li>𝛟 = Input value S times (2-p<sup>p</sup>).</li>
<li>Send Output = 𝛟/𝛟' to end node B.</li>
<li>Update 𝛟' = 𝛟.</li>
</ul>
That was all, we have defined how to calculate the entropy of a graph using two king of cellular automatons (the node and the edge) connected so they can send information down to the root node.<br />
<br />
<br />
Being this entropy defined as a swarm of cellular automaton that autonomously send information to other automatons as required will allows us to make fast recalculation of the entropy as a probability changes or a node is added or taken from the graph, but also allows for a massive use of parallelization and distribution of big systems.<br />
<br />
Now that we know the method, we can revisit the '<a href="http://entropicai.blogspot.com/2018/06/graph-entropy-4-distribution-vs-graph.html" target="_blank">cars by engine example</a>' and compute the graph entropy:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdQpsLio0pc1KOOxQl7oBUwYfwI14Txw7QMEt9glSL9mgnI444kzPbBCQOACUfI3FW08VMSkuoIDQ9UMQGtKpo6D6Q0Q_2VXlWIT1mSkRwdx5oeqUJvuVzgdIYQSKEiwSDPA-YsnIPzpcs/s1600/Screenshot-2018-6-13+Path+entropy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="539" data-original-width="488" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdQpsLio0pc1KOOxQl7oBUwYfwI14Txw7QMEt9glSL9mgnI444kzPbBCQOACUfI3FW08VMSkuoIDQ9UMQGtKpo6D6Q0Q_2VXlWIT1mSkRwdx5oeqUJvuVzgdIYQSKEiwSDPA-YsnIPzpcs/s400/Screenshot-2018-6-13+Path+entropy.png" width="361" /></a></div>
<br />
Before taking the structure of the graph into account, we calculated the entropy of the final distribution to be 1.6297, now that the internal structure is added, it raised up to 1.77, just a little higher than before, as expected.<br />
<br />
In the <a href="https://entropicai.blogspot.com/2018/07/graph-entropy-6-separability.html" target="_blank">next post</a> I will be dealing with the infamous 4th Shannon-Khinchin axiom of separability, just to make sure it is comparable with the standard Gibbs entropy and other kind of generalised entropies.<br />
<br />
<br />Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com0tag:blogger.com,1999:blog-6923947282926324208.post-69324840275362931502018-06-12T15:05:00.002+02:002018-08-03T22:37:01.365+02:00Graph entropy 4: Distribution vs GraphIn previous posts, after <a href="http://entropicai.blogspot.com/2018/06/graph-entropy-1.html" target="_blank">complaining about Gibbs cross-entropy</a> and <a href="https://entropicai.blogspot.com/2018/06/graph-entopy-2-first-replacement.html" target="_blank">failing to find an easy fix</a>, I presented a <a href="https://entropicai.blogspot.com/2018/06/graph-entropy-3-changing-rules.html" target="_blank">new product-based formula for the entropy</a> of a probability distribution, but now I plan to generalise it to a graph.<br />
<br />
Why is it so great to have an entropy for graphs? Because distributions are special cases of graphs, but many real-world cases are not distributions, so the standard entropy can not be applied correctly on those cases.<br />
<br />
<h2>
Graph vs distribution</h2>
Let's take a simple but relevant example: there is a parking lot with 500 cars and we want to collect information about the kind of engines they use (gas engines and/or electric engines) to finally present a measurement of how much information we have.<br />
<br />
We will assume that 350 of them are gas-only cars, 50 are pure electric and 100 are hybrids (but we don't know this in advance).<br />
<br />
<h3>
Using distributions</h3>
If we were limited to probability distributions -as in Gibbs entropy- we would say there are three disjoint subgroups of cars ('Only gas', 'Only electric', 'Hybrid') and that the probabilities of a random car to be on one subgroup are P = {p<sub>1</sub> = 350/500 = 0.7, p<sub>2</sub> = 50/500 = 0.1, p<sub>3</sub> = 100/500 = 0.2}, so the results of the experiment of inspecting the engines of those car has an Gibbs entropy of:<br />
<br />
<div style="text-align: center;">
H<sub>G</sub>(P) = -<span style="font-size: large;">𝚺</span>(p<sub>i</sub> × log(p<sub>i</sub>)) = 0.2496 + 0.3218 + 0.2302 = <b>0.818</b></div>
<br />
If we use the new H<sub>2 </sub>and H<sub>3</sub> formula, we get a different result, but the difference is just a matter of scale:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
H<sub>2</sub>(P) = ∏(2 - p<sub>i</sub><sup>p<sub>i</sub></sup>) = 1.2209 * 1.2752 * 1.2056 = 1.8771</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
H<sub>3</sub>(P) = 1 + Log(1.8771) = <b>1.6297</b></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkc-pWlvumKTLB11v_Dj6yR0BgiUkVe2wGRzkAdDX5pTrlJCpJPKHAX4OsHLUnpJl-fJyJ31GdbxiW28oP1CJgbBhy8QeRXw-EJV0rBiJPdQD_qcXL7M-PCOtX_pr_9MBBNG3zphVIVbZ5/s1600/Screenshot-2018-6-12+Path+entropy.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="287" data-original-width="293" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkc-pWlvumKTLB11v_Dj6yR0BgiUkVe2wGRzkAdDX5pTrlJCpJPKHAX4OsHLUnpJl-fJyJ31GdbxiW28oP1CJgbBhy8QeRXw-EJV0rBiJPdQD_qcXL7M-PCOtX_pr_9MBBNG3zphVIVbZ5/s1600/Screenshot-2018-6-12+Path+entropy.png" /></a></div>
<br />
<a name='more'></a><br />
Those entropies are incomplete: we are assuming we have three different -and totally independent- results, but this is not true, there is a hidden structure not represented in the distribution: hybrids cars are gas and electric cars at the same time.<br />
<br />
In other words: we say we have the same information about engines that we would have about colours (if 0.7 of the cars were red, 0.2 blue, and 0.1 green), but this is not correct as engines have an internal structure colours don't have.<br />
<br />
<h3>
Using graphs</h3>
When using graphs we will not assume we know about the existence of 'hybrid cars', instead, we will perform two independent measurements (how many of the cars have some gas engine, and how many have an electric engine) and repeat the same schema until no more information can be obtained.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlH7dGJW6HVC23a1JuLiG796RALyCHeMOutuh7LWYewXP5-HtZBZi9KJ6ijmYtc12rSMKTbEJXf-yOVc5zpKI9Ak3UD8EJRhZvA4Jv79XzjevU1I6Mf_BGkLrQR9hydw7Wrc0t1ZuMKADc/s1600/Screenshot-2018-6-12+Path+entropy2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="359" data-original-width="367" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlH7dGJW6HVC23a1JuLiG796RALyCHeMOutuh7LWYewXP5-HtZBZi9KJ6ijmYtc12rSMKTbEJXf-yOVc5zpKI9Ak3UD8EJRhZvA4Jv79XzjevU1I6Mf_BGkLrQR9hydw7Wrc0t1ZuMKADc/s320/Screenshot-2018-6-12+Path+entropy2.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
We would initially find that 350+100 = 450 cars have a gas engine, so P(G) = 450/500 = 0.9, while 50+100 = 150 cars will have an electric one so P(E) = 150 / 500 = 0.3.<br />
<br />
Please note here how (0.9, 0.3) is not a distribution, as its summary is 1.2, meaning there must exists some kind of intersection between the two categories (the hybrid cars), so we are not still done with the graph.<br />
<br />
If now we focus on G (the 90% of the cars where a gas engine were detected) and repeat the same process, we would find that all of them have -again- a gas engine (P(G|G) = 1) but only 22% have an electric engine (P(E|G) = 100/450 = 0.222).<br />
<br />
Repeating the process in E (cars with an electric engine) would produce similar probabilities: P(G|E) = 0.666, P(E|E) = 1.<br />
<br />
Please note that, from here, no more repetitions are needed, as repeating at the two new nodes, (G|E) and (E|G), as they both are representing 'hybrid cars', will always have gas and electric engines with probabilities of 1, meaning no more info can be obtained.<br />
<br />
This graph is then representing everything we know about 'car engines' in the form of a tree-like structure made of two components:<br />
<ul>
<li><b>Nodes</b> represent events: node X correspond to the event "I randomly choose a car from the parking lot", while node G represent the event "I detect a gas engine is in the car".</li>
<li><b>Edges</b> represent conditional probabilities of events: P(G|X) = 0.9 means "detecting a gas engine is in a car" if I first "randomly choose a car from the parking lot" is 90%.</li>
</ul>
<br />
In order to define the actual entropy value for a tree-structure like this, we will perform a recursive process, starting on the upper leaf-nodes and going down to the root node, where the graph entropy will be finally obtained.<br />
<br />
We will first need to break the problem into its smallest components and trace a plan on how to mix small parts into bigger ones until we can finally obtain the root entropy of the graph... but it is lunch time! I will be commenting on these final calculations on a<a href="https://entropicai.blogspot.com/2018/06/graph-entropy-5-relations.html" target="_blank"> next pos</a>t.<br />
<br />
Bon appetit!Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com2tag:blogger.com,1999:blog-6923947282926324208.post-40242394597435237452018-06-11T16:13:00.001+02:002018-06-12T15:07:04.489+02:00Graph entropy 3: Changing the rulesAfter showing that the standard <a href="http://entropicai.blogspot.com/2018/06/graph-entropy-1.html" target="_blank">Gibbs cross-entropy was flawed</a> and tried to fix it with a also flawed initial formulation of <a href="http://entropicai.blogspot.com/2018/06/graph-entopy-2-first-replacement.html" target="_blank">"free-of-logs" entropy</a>, we faced the problem of finding a way to substitute a summary by a product without breaking anything important. Here we go...<br />
<br />
When you define an entropy as a summary, each of the terms is supposed to be a "a little above zero": small and positive 𝛆 ≥0 so, when you add it to the entropy it can only slightly increase the entropy. Also, when you add a new probability term having (p=0) or (p=1), you need this new term to be 0 so it doesn't change the resulting entropy at all.<br />
<br />
Conversely, when you want to define an entropy as a product of terms, they need to be "a little above 1" in the form (1+𝛆), and the terms associated with the extreme probabilities (p=0) and (p=1) can not change the resulting entropy, so they need to be exactly 1.<br />
<br />
In the previous entropy this 𝛆 term was defined as (1-p<sub>i</sub><sup>p<sub>i</sub></sup>), and now we need something like (1+𝛆) so why not just try with (2-p<sub>i</sub><sup>p<sub>i</sub></sup>)?<br />
<br />
Let us be naive again an propose the following formulas for entropy and cross-entropy:<br />
<br />
<div style="text-align: center;">
H<sub>2</sub>(P) = ∏(2-p<sub>i</sub><sup>p<sub>i</sub></sup>)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
H<sub>2</sub>(Q|P) = ∏(2-q<sub>i</sub><sup>p<sub>i</sub></sup>)</div>
<br />
Once again it looks too easy to be worth researching, but once again I did, and it proved (well, my friend <a href="http://www.umh.es/contenido/pdi/:persona_5536/datos_es.html" target="_blank">José María Amigó</a> actually did) to be a perfectly defined generalised entropy of a really weird class, with <a href="https://epljournal.edpsciences.org/articles/epl/abs/2011/02/epl13272/epl13272.html" target="_blank">Hanel-Thurner exponents</a> being (0, 0), something never seen in the literature.<br />
<br />
As you can see, this new cross-entropy formula is perfectly well defined for any combination of p<sub>i</sub> and q<sub>i</sub> (in this context, we are assuming 0<sup>0</sup> = 1) and, if you graphically compare both cross-entropy terms, you find that, for <a href="https://www.wolframalpha.com/input/?i=plot+(-p*log(q))++from+q%3D0+to+1+from+p%3D0+to+1" target="_blank">the Gibbs version</a>, this term is unbounded (when q=0 the term value goes up to infinity):<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR-HHqp4b5Dg4lIHD-sd3NHItQFaaby-h4osBpN_Q2_3o_0dWu8Q6s5qCvDd9nqkX6fV5edDGJ8WXwxLBM3ZZiuDDKc743RM3vJKTbCLdXhbg1r3KBnaklE-6nb16HgX3IbF97FvQm4KHO/s1600/cross-entropy-gibbs.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="360" data-original-width="226" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR-HHqp4b5Dg4lIHD-sd3NHItQFaaby-h4osBpN_Q2_3o_0dWu8Q6s5qCvDd9nqkX6fV5edDGJ8WXwxLBM3ZZiuDDKc743RM3vJKTbCLdXhbg1r3KBnaklE-6nb16HgX3IbF97FvQm4KHO/s320/cross-entropy-gibbs.png" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span id="docs-internal-guid-9b46f84d-ee84-f891-f880-8496e10754c6" style="background-color: transparent; color: #666666; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">𝛟</span><span style="background-color: transparent; color: #666666; font-family: "arial"; font-size: 6.6pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: sub; white-space: pre;">G</span><span style="background-color: transparent; color: black; font-family: "lato"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">(p, q) = -(p × log(q))</span></td></tr>
</tbody></table>
<br />
<span id="docs-internal-guid-10b62b42-ee83-9b3f-5887-a56fd5aac2e8" style="background-color: transparent; clear: right; color: black; float: right; font-family: "lato"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; margin-bottom: 1em; margin-left: 1em; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<br />
In the new multiplicative form of entropy, <a href="https://www.wolframalpha.com/input/?i=plot+(2-q%5Ep)+from+q%3D0+to+1+from+p%3D0+to+1" target="_blank">this term</a> is 'smoothed out' and nicely bounded between 1 and 2:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicb4Be4_QF3StkKuU4WUZgAZJM97Rx54DK9Rl0Ygc1wC5tudR10OKN3FtOxZOi4IrcjPG-dwMClfOMFekpQ8sgl7fIxJqXW6tFib8sRk-8p3-Pr3TFfCeVxNHiciEQYX7qncjpf0SOVn6W/s1600/cross-entropy-H2.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="360" data-original-width="322" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicb4Be4_QF3StkKuU4WUZgAZJM97Rx54DK9Rl0Ygc1wC5tudR10OKN3FtOxZOi4IrcjPG-dwMClfOMFekpQ8sgl7fIxJqXW6tFib8sRk-8p3-Pr3TFfCeVxNHiciEQYX7qncjpf0SOVn6W/s320/cross-entropy-H2.png" width="286" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span id="docs-internal-guid-041aa503-ee85-a0a7-e039-59e93fbed221" style="background-color: transparent; color: #666666; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">𝛟</span><span style="background-color: transparent; color: #666666; font-family: "arial"; font-size: 6.6pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: sub; white-space: pre;">2</span><span style="background-color: transparent; color: black; font-family: "lato"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">(p, q) = (2-</span><span style="background-color: transparent; color: black; font-family: "lato"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"><span style="background-color: transparent; color: black; font-family: "lato"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">q</span><span style="background-color: transparent; color: black; font-family: "lato"; font-size: 6.6pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: super; white-space: pre;">p</span>)</span><span style="background-color: transparent; color: black; font-family: "lato"; font-size: 6.6pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: super; white-space: pre;"></span></td></tr>
</tbody></table>
<br />
<br />
<a name='more'></a><br />
Just to make sure it was what it looked like, I directly -and naively- sent an email to Stefan Thurner asking for his expert opinion: surprisingly, he kindly answered me! It was a big surprise for him too, so it was official: I had quite an extrange entropy on my hands.<br />
<br />
The next question was whether or not this entropy had a nice replacement for the 4th axiom or, in other words, if the entropy of the Cartesian product PxQ of two independent distributions, H(P, Q), was bounded by some elegant combination of the entropies of P and Q, H(P) and H(Q).<br />
<br />
It turned out that I needed to modify it a little bit in order to get a decent separability property, so I defined a third generalised entropy (this is the last one, promised!):<br />
<br />
<div style="text-align: center;">
H<sub>3</sub>(P) = 1 + log(H<sub>2</sub>(P)) = 1 + log(∏(2 - p<sub>i</sub><sup>p<sub>i</sub></sup>))</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
H<sub>3</sub>(Q|P) = 1 + log(H<sub>2</sub>(Q|P)) = 1 + log(∏(2 - q<sub>i</sub><sup>p<sub>i</sub></sup>))</div>
<br />
If now you compare the four generator functions, one for Gibbs entropy and three more for the new multiplicative ones, you can <a href="https://www.wolframalpha.com/input/?i=Plot+(-x*Ln(x)),+(1-x%5Ex),+(2-x%5Ex),+(1%2BLn(2-x%5Ex))+from+x%3D0+to+1" target="_blank">see how related they are</a>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfOU3rwUfWaVSMzAe9tGNCQXqeGMB_YyLXgV-ztZJscQ5lg7FBipkBkLKrsKjoCD-kxVCk3WZVgRNn-yT7X1iQX8O4NbVx_3cYpHpBvEtT2yzTqX9dKsiTj0SiOcSBaaZU-R3390DYfD5S/s1600/4+functions.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="260" data-original-width="543" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfOU3rwUfWaVSMzAe9tGNCQXqeGMB_YyLXgV-ztZJscQ5lg7FBipkBkLKrsKjoCD-kxVCk3WZVgRNn-yT7X1iQX8O4NbVx_3cYpHpBvEtT2yzTqX9dKsiTj0SiOcSBaaZU-R3390DYfD5S/s1600/4+functions.png" /></a></div>
<br />
<br />
It really didn't change much at a first glance, except that now exponents were again (1, 1) and it started to show some interesting separability properties/inequations, but the most interesting property was hidden: you could combine different distributions in a tree-like structure and still get a coherent value of entropy... it seemed to be a graph entropy instead of a distribution entropy.<br />
<br />
This was far from evident. You needed to define some strange combination of those two multiplicative forms of entropy, H<sub>2</sub> and H<sub>3</sub>, before you were able to see the "graph side" of it.<br />
<br />
In <a href="http://entropicai.blogspot.com/2018/06/graph-entropy-4-distribution-vs-graph.html" target="_blank">the next post</a> I will be showing how to define this entropy over any directed -and acyclic- graph, so we will be basically extending the concept of entropy of a distributions to a much broader audience.Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com0tag:blogger.com,1999:blog-6923947282926324208.post-48778947394714712992018-06-10T23:30:00.000+02:002018-06-11T16:14:04.859+02:00Graph Entopy 2: A first replacementAs I commented on a <a href="https://entropicai.blogspot.com/2018/06/graph-entropy-1.html#more" target="_blank">previous post</a>, I found that there were cases where cross-entropy and KL-divergence were not well defined. Unluckily, in my theory those cases where the norm.<br />
<br />
I had two options: Not even mentioning it, or try to go and fix it. I opted for the first as I had no idea of how to fix it, but I felt I was hiding a big issue with the theory under the carpet, so one random day I tried to find a fix.<br />
<br />
Ideally, I thought, I would only need to replace the (p<sub>i</sub> × log(p<sub>i</sub>)) part with something like (p<sub>i</sub><sup>p<sub>i</sub></sup>), but it was such a naive idea I almost gave up before having a look, but I did: how different do those two functions looks like when <a href="http://www.wolframalpha.com/input/?i=plot+(-p*ln(p)),+(p%5Ep)+from+p%3D0+to+p%3D1" target="_blank">plotted on their domain interval (0, 1)</a>?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWS-2kMSJ8okwp4Wvob-685-uiyad2Pj7bEO76dowaJvkSNw0PK10rRFfIDFlQEoJzwmLLQXrDjXg8DEdDcN-PisfnpeQtltIbIP-igejYgcq7HnLH5srj5h3jvjfdNX3bgPnfNa87yh5b/s1600/%25C3%25ADndice.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="219" data-original-width="411" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWS-2kMSJ8okwp4Wvob-685-uiyad2Pj7bEO76dowaJvkSNw0PK10rRFfIDFlQEoJzwmLLQXrDjXg8DEdDcN-PisfnpeQtltIbIP-igejYgcq7HnLH5srj5h3jvjfdNX3bgPnfNa87yh5b/s320/%25C3%25ADndice.png" width="320" /></a></div>
Wow! They were just mirror images one of each other! In fact, you only need a small change to match them: <a href="http://www.wolframalpha.com/input/?i=plot+(-p*ln(p)),+(1-p%5Ep)+from+p%3D0+to+p%3D1" target="_blank">(1-(p<sub>i</sub><sup>p<sub>i</sub></sup>)):</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpILDpu8OTm2rBeYwO32hCpP417c82zVMsPHFgImMfikqqr2VFnxmgieyFda29Pzb-vtx3r0YoO7ImGdvfoyxWN4FUMCaN_3zy2G0tOKJGiIuyboYnmiW72ZWKW6wAPDhSPXNWOXcxyxXQ/s1600/%25C3%25ADndice2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="223" data-original-width="406" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpILDpu8OTm2rBeYwO32hCpP417c82zVMsPHFgImMfikqqr2VFnxmgieyFda29Pzb-vtx3r0YoO7ImGdvfoyxWN4FUMCaN_3zy2G0tOKJGiIuyboYnmiW72ZWKW6wAPDhSPXNWOXcxyxXQ/s320/%25C3%25ADndice2.png" width="320" /></a></div>
<div style="text-align: left;">
<br />
<a name='more'></a></div>
<div style="text-align: left;">
It was even more similar after <a href="http://www.wolframalpha.com/input/?i=plot+4%2F5*(-p*ln(p)),+(1-p%5Ep)+from+p%3D0+to+p%3D1" target="_blank">using a k=4/5</a>:<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcNLBqVhU-dVTIeo_IXL43dpBlzyy24mtvUbZxhdga_RC1gIXOR2WzMwgXHgSzmRulnN4YdHGtMz3GobLueewzvwNLKhWf5ZGReQOPiLYamE3DZvXdTIzkAfExk94ei9CIAzqcff4aBO5h/s1600/%25C3%25ADndice3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="217" data-original-width="415" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcNLBqVhU-dVTIeo_IXL43dpBlzyy24mtvUbZxhdga_RC1gIXOR2WzMwgXHgSzmRulnN4YdHGtMz3GobLueewzvwNLKhWf5ZGReQOPiLYamE3DZvXdTIzkAfExk94ei9CIAzqcff4aBO5h/s320/%25C3%25ADndice3.png" width="320" /></a> </div>
</div>
<div style="text-align: left;">
<br />
So my first attempt to build a new entropy was this:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
H<sub>1</sub>(P) = -k*<span style="font-size: large;">𝚺</span>(1-(p<sub>i</sub><sup>p<sub>i</sub></sup>))</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Surprisingly it proved to be a real generalised entropy with quite a standard <a href="https://epljournal.edpsciences.org/articles/epl/abs/2011/02/epl13272/epl13272.html" target="_blank">Hanel-Thurner exponents</a> of (1, 1), but it was not nicely separable, there was nothing near a 4th axiom replacement for this, so basically it was an interesting bullshit I wasted some weeks working on.</div>
<div style="text-align: left;">
<br />
After trying to find the quadrature of the circle for some time, I realised I only reverted part of the logarithmic problem: the summary <span style="font-size: large;"><span style="font-size: small;">𝚺 sign should had been replaced with the original multiplication one, </span></span><span style="font-size: large;"><span style="font-size: small;">∏. The entropy I was looking for was a multiplication of terms, not a summary as usually expected.</span></span></div>
<div style="text-align: left;">
<span style="font-size: large;"><span style="font-size: small;"><br /></span></span></div>
<div style="text-align: left;">
<span style="font-size: large;"><span style="font-size: small;">But how can you build an entropy out of multiplications and still make sense? The first three axioms of entropy had never been applied to a multiplicative form to my knowledge, so it was an uncharted landscape to explore or, who knows, just a totally waste of time.</span></span></div>
<div style="text-align: left;">
<span style="font-size: large;"><span style="font-size: small;"><br /></span></span></div>
<span style="font-size: small;">We will see if I wasted my time again in <a href="https://entropicai.blogspot.com/2018/06/graph-entropy-3-changing-rules.html" target="_blank">a next post</a>. By now, just take my word on this: there was a way! </span>Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com2tag:blogger.com,1999:blog-6923947282926324208.post-70206956400739149822018-06-10T18:50:00.000+02:002020-01-06T20:57:09.369+01:00Graph entropy 1: The problem<br />
This post is the first on a series about a new form of entropy I came
across some months ago while trying to formalise <a href="https://arxiv.org/abs/1803.05049" target="_blank">Fractal AI</a>, the possible uses for it as a entropy of a graph, and how I plan to apply it to neural network learning and even to generate conscious behaviour in agents. <br />
<br />
<h2>
Failing to use Gibbs</h2>
The best formula so far accounting for the entropy of a discrete probability distribution P={p<sub>i</sub>} is the so-called Gibbs-Boltzmann-Shannon entropy:<br />
<br />
<div style="text-align: center;">
H(P) = -k*<span style="font-size: large;">𝚺</span>(p<sub>i</sub> × log(p<sub>i</sub>))</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
In this famous formula, the set of all the possible next states of the systems is divided into a partition P with n disjoint subsets, with p<sub>i</sub> representing the probability of the next state being in the i-th element of this partition. The constant k can be anything positive so we will just assume k=1 for us.</div>
<div style="text-align: left;">
<br /></div>
Most of the times we will be interested in the cross-entropy between two distributions P={p<sub>i</sub>} and Q={q<sub>i</sub>}, or the entropy of Q given P, H(Q|P), a measure of how different they both are or, in terms of information, how much new information is in knowing Q if I already know P. <br />
<br />
In that case, the Gibbs formulation for the cross-entropy goes like this:<br />
<br />
<div style="text-align: center;">
H(Q|P) = -<span style="font-size: large;">𝚺</span>(p<sub>i</sub> × log(q<sub>i</sub>))</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Cross-entropy is the real formula defining an entropy, as the entropy of P can be defined as its own cross-entropy H(P|P), having the property of being the maximal value of H(Q|P) for all possible distributions Q.<br />
<br />
<div style="text-align: center;">
H(P) = H(P|P) ≥ H(Q|P)</div>
<br />
As good and general as it may looks, this
formula hides a very important limitation I came across when trying to
formalise the Fractal AI theory: if, for some index you have q<sub>i</sub>=0 then if p<sub>i</sub> is not zero too, the above formula is simply not defined, as log(0) is as undefined as 1/0 is.</div>
<a name='more'></a><br />
<div style="text-align: left;">
In the entropy formula for a single distribution P, this defect was not showing up, as p<sub>i</sub> was multiplying the log, making the limit as p<sub>i</sub> tends to zero to be well defined with a value of zero... but in the more general cross-entropy formula, the problem was really there.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
As a mathematician I was horrified. I searched on the net for papers discussing this deep problem but was unable to find much, so I went to some DL specialists and asked them for the solution they were applying when using cross-entropy as a loss function for gradient descent, hoping to discover that there were an easy and satisfactory fix, but there wasn't! They were just replacing probabilities lower than an epsilon, with epsilon. They were clipping the offending values out of sight. Ouch!</div>
<br />
How could it be that the two most important derivations from the concept of entropy (cross-entropy and divergence) were not well defined under the Gibbs formulation of entropy? Why was the Gibbs formulation so defective and where did the defect came from?<br />
<br />
<h2>
The origins of entropy</h2>
Any formula using the log of a probability is, in principle, flawed. Probabilities can naturally be zero, and log is not defined for zero, so using log of a probability is not actually a good idea.<br />
<br />
In its original form, Gibbs didn't use logarithms. Gibbs started by noticing what is known as the original form of the Gibbs inequality:<br />
<br />
<h3>
Gibbs original inequation</h3>
For any distribution P={p<sub>i</sub>}, the product ∏(p<sub>i</sub><sup>p<sub>i</sub></sup>) is always positive and greater-or-equal than the product ∏(q<sub>i</sub><sup>p<sub>i</sub></sup>) for any other distribution Q={q<sub>i</sub>}.<br />
<br />
<div style="text-align: center;">
∏(p<sub>i</sub><sup>p<sub>i</sub></sup>) ≥ ∏(q<sub>i</sub><sup>p<sub>i</sub></sup>)</div>
<br />
It was a very nice inequality as it was, but Gibbs thought he could apply logarithms on both sides without breaking the inequality and, at the same time, use it to define entropy itself, making it easy to compute the entropy of two independent system by just adding their corresponding entropies.<br />
<br />
He named this property "strong additivity" and it is the 4rd Shannon-Khinchin axiom needed for a function to be consider as a full entropy (btw, functions meeting only the first 3 axioms are called "generalized entropies") and then they proved that only this formula fitted into those four axioms (well, what they really proved is that this is the only possible form of entropy using a <b>summary</b> of terms... but nothing about multpiplicative or other possible forms... hum... interesting!).<br />
<br />
This step resulted in the actual form of the entropy as a summary of logarithmic terms, and is in the root of all subsequent problems with the cross-entropy. My opinion is that this 4rd axiom is not a real axiom but a somehow desirable property that is not worth the high cost we paid for it.<br />
<br />
Once we know the problem the cross-entropy has and the root causes, we are ready to explore other ways of measuring entropy without using logs, but it will have to be in a <a href="https://entropicai.blogspot.com/2018/06/graph-entopy-2-first-replacement.html" target="_blank">next post</a>.Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com3tag:blogger.com,1999:blog-6923947282926324208.post-91981113736629463972018-03-14T15:26:00.000+01:002018-03-15T15:19:29.029+01:00Fractal AI "recipe"Now that <a href="https://entropicai.blogspot.com.es/2018/02/fractal-ai-goes-public.html" target="_blank">the algorithm is public</a> and people is trying to catch up, it can be of help -mainly to us- to have a simplistic schema of what it does, with no theories nor long formulae, nothing extra but the raw skeleton of the idea, so you can read it, get an idea, and go on with your life.<br />
<br />
I will try to simplify it to the sweet point of becoming... almost smoke!<br />
<br />
<h2>
<u>Ingredient list:</u></h2>
<ol>
<li>A system you can -partially- inspect to know its actual state -or part of it- as a vector.</li>
<li>A simulation you can ask "what will happen if system evolves from initial state X<span style="font-size: xx-small;">0</span> for a dt".</li>
<li>A distance between two states, so our "state space" becomes a metric space.</li>
<li>A number of "degree of freedom" the AI can push. </li>
</ol>
<br />
<a name='more'></a>Let's comment on this ingredient list and find each ingredient counterpart in the Atari case:<br />
<br />
<h3>
1) System</h3>
This is the game you are playing. Your state is the RGB image as a vector -or the contents of the RAM, it doesn't really matter at all- that doesn't really reveal the state completely, it is just an observation of it.<br />
<br />
In this case our system state is discrete, each vector component is a byte from 0 to 255. But it is not important, in the rocket example the state is made of real numbers, and could be done of whatever you need (as far as you know how to define a distance).<br />
<br />
<h3>
2) Simulation</h3>
This is the OpenAI Atari environment itself: we can feed it with an state (a RAM dump in this case, regardless of being using images or RAM as observations) and ask it to make a simulation tick, so we get as output the state of the game in the next frame.<br />
<br />
In this case, the simulation is practically perfect, as the Atari games use to be deterministic (same situation, same reaction), but we don't ask it to be so nice, it could be non-deterministic (so trying the same simulation n times yields slightly different results each time) and the algorithm will just cope with it.<br />
<br />
<h3>
3) Distance</h3>
Given two states, let say two PNG images, what we have is a couple of vectors, so defining a distance is easy, just use the euclidean distance, but hey, you could try any other distance as far as it is... at least informative.<br />
<br />
<h3>
4) Degrees of freedom</h3>
This is the list of the state vector coordinates that the AI can play with: in our case, the nine button states from an old Atari game pad. The walkers will change them randomly as they build the paths, and the final output of the AI will be a vector of changes to be made to those state components.<br />
<br />
Again, they are discrete values in the Atari case, but in the rocket example they are continuous values, 'entropic forces' to be applied to the 'joysticks' positions.<br />
<br />
<h2>
<u>Parameters:</u></h2>
We have only three parameters that define the 'causal cone' (the 'portion of the future') we will be scanning before deciding.<br />
<br />
<h3>
1) Time horizon</h3>
It is the 'deepth' of the scanning, the number of steps we will be looking into the future before deciding.<br />
<br />
<h3>
2) Number of walkers</h3>
How many 'random paths' we want to simulate, or how many 'states' will our fractal have.<br />
<br />
It is just like in a Monte Carlo simulation, but instead of being 'random, independent, linear paths' here they are 'almost random, not independent, fractal paths' (made of sections of paths glued together).<br />
<br />
The nice thing here is: You will need about 1000 time less fractal paths than you would need linear paths in a standard Monte Carlo approach. Apart from this, this is a Monte Carlo schema.<br />
<br />
<h3>
3) Samples per step</h3>
Each of the simulations we will need to do in order to build our paths and make a decision is said to be a 'sample' of the system. Actually, the number of samples used is auto-magically set before each step in order to make sure that all the walkers arrive to its time horizon destination, so this is just a 'safe limit' to avoid using too much computational resources.<br />
<br />
In the standard game play, this number of samples adjusts to the difficulty quite nicely but, whenever the game stop reacting to the press of the buttons (mainly on the new level animations) the AI will tend to use all available resources to try to control its future... it will slow down the thinking by using as many samples as possible but hey, if there is a bug hidden on the code, it will find and make use of it!<br />
<br />
In the case of the Atari environments, we have another two 'minor' parameters:<br />
<ul>
<li>The 'reaction time' in frames (remember, Atari games work at 20 fps, so a reaction time of 5 means 4 decisions per second, steadily and restless).</li>
<li>The name of the game! I still find it magic to just write the name of a game and play it for the first time!</li>
</ul>
<br />
<h2>
<u>Algorithm:</u></h2>
So we have a Monte Carlo schema where 100 walkers are simultaneously generating 100 random paths of a given depth/length in small jumps or ticks. This far it is just standard stuff.<br />
<br />
An important difference to note is that, while MCTS is an exploration only algorithm that needs an additional heuristic to make the decision, FMC makes that decision in the process of scanning, as a by-product... a very useful one! <br />
<br />
If we should have to write a recipe for the individual walkers to follow this standard MCTS schema it would look like this:<br />
<ol>
<li>Perturb the degrees of freedom (chose a random change to be added for each of them).</li>
<li>Add this perturbation to your state (actually press the buttons).</li>
<li>Simulate a new dt.</li>
<li>Go to 1 until your time t is the initial time t0 plus the desired time horizon.</li>
</ol>
The Fractal AI does it like that:<br />
<ol>
<li>Choose a random walker from the pool and read its state.</li>
<li>Calc. the distance D to your actual state.</li>
<li>Calc. the reward R in your actual position.</li>
<li>Calc. your 'Virtual reward' VR = D*R</li>
<li>Choose -again- a random walker from the pool and read its state.</li>
<li>Calc. the probability of cloning by comparing yours vs his virtual rewards.</li>
<li>If you opted for cloning, do it: overwrite your state with the received one, and go to 1.</li>
<li>Otherwise (you decided not to clone), we are in the standard Monte Carlo case: </li>
<li>Perturb the degrees of freedom (chose a random change to be added for each of them).</li>
<li>Add this perturbation to your state (actually press the buttons).</li>
<li>Simulate a new dt.</li>
<li>Go to 1 until your time t is the initial time t0 plus the desired time horizon. </li>
</ol>
If you want to compare the paths and behaviours generated by both approaches in the same environment, an image is worth 1000 words and a video 1000 images, so watch both videos from this <a href="https://entropicai.blogspot.com.es/2015/10/maze-fractal-vs-entropic.html" target="_blank">old comparison</a>:<br />
<br />
Linear paths:<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/HtYwOI-f6EY/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/HtYwOI-f6EY?feature=player_embedded" width="320"></iframe></div>
<br />
Fractal paths:<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/yx695HfQoMY/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/yx695HfQoMY?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
There are some other small details not commented here, like using the number of samples as the stop condition or adjusting it real-time to use less samples, but they are just implementation details you can safely forget, and they are defined on the code.<br />
<br />
<h3>
Making the decision</h3>
In MCTS there are many ways to make your final decision, basically they select the maximum scoring path found, and follow it, but there are far more complicated schemes.<br />
<br />
In FMC making the decision is part of the whole process, and it goes like this:<br />
<br />
<ul>
<li>When a walker takes its initial decision on its first step starting in the agent state, this initial decision is stored as an 'attachment' to the walker state, so it carries a copy of this decision with it all the way.</li>
<li>When a walker decides to clone to another walker position, it clones its state, overwriting its initial decision with the other walker initial decision.</li>
<li>At the end of the cycle, when walkers reach the time horizon, the decision is just the average of the initial decisions of the resulting walkers.</li>
</ul>
<br />
And that was all!Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com0tag:blogger.com,1999:blog-6923947282926324208.post-53336237465999952092018-02-15T14:36:00.003+01:002020-05-19T23:10:53.779+02:00Fractal AI goes public!Today we are glad to announce that we are finally releasing the "Fractal AI" artificial intelligence framework to the public!<br />
<br />
This first release includes:<br />
<ul>
<li><a href="https://arxiv.org/abs/1803.05049" target="_blank">Fractal AI: A fragile theory of intelligence</a> A nice to read small book in PDF with theory, algorithm, pseudo-code, experiments, etc.</li>
<li><a href="https://github.com/FragileTheory/FractalAI" target="_blank">github.com/FragileTheory/FractalAI</a> with working python code to beat almost all of the actual Atari games.</li>
<li><a href="https://www.youtube.com/watch?v=5J1jUMElwxU&list=PLEXwXLT-a6beFPzal3OznPQC0pieccAle" target="_blank">Tons of videos</a> showing Fractal AI at work, along with some talks, etc. </li>
</ul>
<br />
We have modified Fractal AI a little so now it is more powerful than ever, in fact we have been able to beat a lot of the actual records (from state-of-the-art neural network like DQN or A3C) with about 1000 samples per strep (and remember, no learning, no adaptation to any game, same code for all of them).<br />
<br />
We are specially proud of beating even some absolute human world records, but hey, it was going to happen anyhow!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/WtCbFWcWwcM" width="560"></iframe>
</div>
Fractal AI playing Ms Packman. It reached an unknow score limit of 999,999 present in a total of 15 games. Fractal AI beated the best human records in 49 out of 50 games.<br />
<br />
<a name='more'></a><br />
<br />
The parameters for testing on Atari games are few and well explained in the hit-and-run notebook example included: Name of the game, and 3 simple numbers to adjust time horizon, reaction time, and number of paths. The CPU needed at any moment auto adjusts -but you can and should hard-limit it- so you can beat some games like boxing in real time.<br />
<br />
<br />
I copy-paste here the abstract and a very preliminary score table from the <a href="https://github.com/FragileTheory/FractalAI/blob/master/README.md" target="_blank">great intro</a> <a href="https://twitter.com/Miau_DB" target="_blank">Guillem</a> has done for the release:<br />
<br />
<h2>
Abstract</h2>
<a href="https://docs.google.com/document/d/13SFT9m0ERaDY1flVybG16oWWZS41p7oPBi3904jNBQM/edit?usp=sharing" rel="nofollow">Fractal AI</a> is a theory for general artificial intelligence. It allows to derive new mathematical tools that constitute the foundations for a new kind of stochastic calculus, by modelling information using cellular automaton-like structures instead of smooth functions.<br />
In this repository we are presenting a new Agent, derived from the first principles of the theory, which is capable of solving Atari games several orders of magnitude more efficiently than other similar techniques, like Monte Carlo Tree Search <b>[<a href="https://github.com/FragileTheory/FractalAI#bibliography">1</a>]</b>.<br />
The code provided shows how it is now possible to beat some of the current state of the art benchmarks on Atari games, using less than 1000 samples to calculate each one of the actions when MCTS uses 3 Million samples. Among other things, Fractal AI makes it possible to generate a huge database of top performing examples with very little amount of computation required, transforming Reinforcement Learning into a supervised problem.<br />
The algorithm presented is capable of solving the exploration vs exploitation dilemma, while maintaining control over any aspect of the behavior of the Agent. From a general approach, new techniques presented here have direct applications to other areas such as: Non-equilibrium thermodynamics, chemistry, quantum physics, economics, information theory, and non-linear control theory.Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com4tag:blogger.com,1999:blog-6923947282926324208.post-25437915182551089532017-07-06T22:06:00.001+02:002018-06-11T16:20:08.833+02:00Retrocausality and AIRetrocausality is about physical things in the present affecting things in the past. Wow, read it twice. If it sounds to you like breaking the most basic rules of common sense and our most basic intuitions of how things work, you are right, but as weird as it sounds... somehow it makes perfect sense.<br />
<br />
Today I found this <a href="https://m.phys.org/news/2017-07-physicists-retrocausal-quantum-theory-future.html" target="_blank">inspiring article in phys.org</a> about retrocausality. Basically it proves that, if the time symmetry found in all known physic laws is to be accepted as a fundamental law, as it actually is, then causality must go on both directions too, so as unreal it could sound to us, macro-sized humans, it is more than plausibly retrocausality is in the very nature of our world.<br />
<br />
Once accepted as a possibility, it solves much of the actual issues with quantum theories: action-at-distance, non-locality, Bell theorem... and it is not more or less plausible than other alternatives, like no-time-symmetry, many-worlds or even the Copenhagen model, so by accepting one "counter-intuitive" possibility, quantum world get less intimidating. I buy it!<br />
<br />
Reading it reminded me of one the many variations of the Fractal AI I tried in the past, I wrote about it in the post about the <a href="http://entropicai.blogspot.com.es/2015/06/using-feynman-integrals.html" target="_blank">Feynman fractal AI</a>, a model where signal travelled back and forth in time. Here you have a naive drawing of it:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI8UXD_baUFg-GufwwlOA0ZM2Bp5S1qxEAWtTGbTIwMlsy14Y2_0OFOQQgr-_KbEsXhCv2JL4U3jAdlPc_nYXiPAWnFZQaN7BgrzzO0IQSc7sYxNl-6ElgQWpWRlrfaO1k4G3Sd_EYnzI5/s1600/2015-06-17+23.22.14.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="536" data-original-width="1600" height="133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI8UXD_baUFg-GufwwlOA0ZM2Bp5S1qxEAWtTGbTIwMlsy14Y2_0OFOQQgr-_KbEsXhCv2JL4U3jAdlPc_nYXiPAWnFZQaN7BgrzzO0IQSc7sYxNl-6ElgQWpWRlrfaO1k4G3Sd_EYnzI5/s400/2015-06-17+23.22.14.jpg" width="400" /></a></div>
<br />
The idea was nice and it was as smart as the "standard" fractal AI, but it could not improve it at all, it was just another way of doing the same stuff, but more complicated, so I finally drooped this idea in the bag of the almost-good ones.<br />
<br />
<a name='more'></a><br />
Here you have a nice video of it. The different colours are just a trail of visited positions, the real action is on the black spots: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/9CKrJUGYgwY/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/9CKrJUGYgwY?feature=player_embedded" width="320"></iframe></div>
<br />
Would it be possible to build neuronal networks that relay on this concept for learning as you use them, NN without a separate learning phase, where signals arrived at different time-shifts could interact? Well, it makes sense to me, as, when a signal gets the incorrect answer, we are actually penalising its past actions by reducing the weight of previously visited neuronal paths.<br />
<br />
I am aware LSTM NN basically do that, but I think about a basic model that use it at the most basic levels, and where learning is not based on any gradient but in past actions of wrongly processed signals.<br />
<br />
I just find it the natural way to go... but if and only if the universe has a T-symmetry!Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com2tag:blogger.com,1999:blog-6923947282926324208.post-69125359382508844822017-06-28T13:24:00.000+02:002018-06-11T16:20:31.129+02:00Solved atari gamesThe list of environments from <a href="https://gym.openai.com/">OpenAI</a> that we have already played so far is steadily growing, so I had to made a list to keep track of them. Here we keep and share this growing list, along with it scorings and how it compares with the "second-best" algorithm in the OpenAI gym.<br />
<br />
For the interested people: We base all on our work on the "<a href="https://physics.aps.org/articles/v6/46">Causal Entropic Forces</a>" by <a href="http://www.alexwg.org/">Alexander Wissner-Gross</a> and apply the ideas outlined in the <a href="http://entropicai.blogspot.com.es/2017/06/fractal-optimising-first-paper.html">G.A.S. algorithm</a>. We are not actually learning in any way, so all games are independent from each other and first-ever played game is as godd as the 100th game.<br />
<br />
First, we list the already finished environments. They include 100 games played and an official scoring in OpenAI gym as the average of those 100 games:<br />
<br />
1. <a href="https://gym.openai.com/evaluations/eval_NDkU4oVNTDy6pME9ytMJeg">Atari - MsPacman-ram-v0</a>: average score of <b>11.5k</b> vs <a href="https://gym.openai.com/evaluations/eval_HnfEWxEQcKMMLYYASEyYQ">9.1k</a> (x1.2)<br />
<br />
This was the first env. to be finished and uploaded, so it represent
our <a href="http://entropicai.blogspot.com.es/2017/06/openai-first-record.html">first official record</a>. We decided to use the "ram" version
(instead of the image version) because it is irrelevant for our
algorithm but not for a more standard approach, so we had an extra
punch.<br />
<br />
The main issue here was a dead Pacman takes about
15 frames to be noticeable on screen (there is a short animation) so you
need to think in advance at least those 15 frames (ticks) in order to
start detecting death.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/QZvl5JqDaxQ/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/QZvl5JqDaxQ?feature=player_embedded" width="320"></iframe></div>
<br />
<a name='more'></a><br />
<br />
<br />
2. <a href="https://gym.openai.com/evaluations/eval_dJjksNFuSGKPSYPv09JWdg">Atari - Qbert-ram-v0</a>: avg. score of <b>18.4k</b> vs <a href="https://gym.openai.com/evaluations/eval_wUIAxbU8TZSMppySFNd3w">4.2k</a> (x4.3)<br />
<br />
Next one was Qbert, just because it solved quickly. Here action is not so fast, once you decide to jump left, it takes a considerable amount of frames for the decision to complete so you can take a second decision. That is why, in this case, we scan one frame every two (Pacman used all frames).<br />
<br />
Note: One "frame" is internally composed of 2 consecutive frames as the atari screen seems to use an interlaced schema (odd frames only fill odd lines, line in PAL or SECAM tv standards).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/j0w7fuoJuD0/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/j0w7fuoJuD0?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
The rest of the cases have not completed the mandatory 100 games, it takes too long to make it (Guillem's laptop is causing about 1.3% of the actual global warming ;-) so they do not have an official scoring. Instead, I will use the aprox. average of completed games.<br />
<br />
<br />
3. <a href="https://gym.openai.com/evaluations/eval_i1hcB1bESbO20DNCtSVYw">Atari - MsPacman-v0</a>: avg. score (4 games) of <b>~9k</b> vs <a href="https://gym.openai.com/evaluations/eval_8Wwndzd8R62np8CxVQWEeg">6.3k</a> (x1.4)<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
Our <a href="http://entropicai.blogspot.com.es/2017/06/fractal-vs-pack-man.html">first ever test</a> was done on this environment. After 4 games the results where too evident to waste more CPU (adding more resources we could beat it at any level we wish, at the expense of CPU time) so we moved on to the "ram" version to explore.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/WtCbFWcWwcM/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/WtCbFWcWwcM?feature=player_embedded" width="320"></iframe></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
4. <a href="https://gym.openai.com/evaluations/eval_iyQTuphhQ1tNxQd9h5JjQ">Atari - Tennis-ram-v0</a>: avg. score (1 game) of <b>~8</b> vs <a href="https://gym.openai.com/evaluations/eval_xqEMDSmsQFmOcgZtZVMF2w">0.01</a> (x800)<br />
<br />
This time it is quite difficult to compare with others algorithms, as beating the embeded "old days AI" is quite complicated for a general algorithm (it was designed to play against human level players after all): most of the algorithms in OpenAI scored just 0.0, and only one was able to marginally win (due to the biased scoring system of picking the best 100 episodes, so the more you play, the higest your score gets).<br />
<br />
Scoring x800 times as good as the second one is, in this case, just meaning "I am the fisrt and only algorithm actually solving it, so you can not compare me". <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/8NLaNJhxkVA/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/8NLaNJhxkVA?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
5. <a href="https://gym.openai.com/evaluations/eval_bNB0Dcr2RQG8zLVKkXg">Atari - VideoPinball-ram-v0</a>: avg. score (21 games) of <b>~500k</b> vs <a href="https://gym.openai.com/evaluations/eval_bsrJ1DkPQSOZoMCPihM3AA">28k</a> (x17.8)<br />
<br />
The CPU power we applied here made the AI almost unbeatable, with about +50% it would never die. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/SmSTW4RHjr0/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/SmSTW4RHjr0?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
6. <a href="https://gym.openai.com/evaluations/eval_RjbC9jQtSz2u3LF7shKZxQ">Classic Control - CartPole-v0:</a> avg. score (10 games) of 0.0 vs <a href="https://gym.openai.com/evaluations/eval_0z8gR2gRJCME6KNUdO9yg">0.0</a> (x1)<br />
<br />
This one is not froman atari game, so not really in the list, but is a classic example we wanted to share anyhow.<br />
<br />
The scoring here is weird, you only need to survive for a given amount of time (about 4 seconds) to get 200 points and win this game. You solved the game when the average of the last 100 games is above 195 points, and the number of games/episodes you played before those 100 "good ones" is your showed score.<br />
<br />
So a score of 0.0 means that your first 100 games averaged above 195 and the game was cosidered solved. You can not get more that this, so here the absolute record was already reached. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/ImpsGX-IbC8/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/ImpsGX-IbC8?feature=player_embedded" width="320"></iframe></div>
<br />
That is all by now, I will be updating this post to reflect any new acomplishment in our quest to solve as many environments form OpenAI as we can.<br />
<br />
<br />Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com8tag:blogger.com,1999:blog-6923947282926324208.post-20520987390815203492017-06-18T15:26:00.002+02:002017-06-27T14:41:49.532+02:00OpenAI first record!We have just submitted our first official scoring on <a href="https://gym.openai.com/">OpenAI gym</a> for the atari game "<a href="https://gym.openai.com/envs/MsPacman-ram-v0">MsPackMan-ram-v0</a>" based on RAM (so you do not see the screen image, instead you "see" a 128 KB RAM dump).<br />
<br />
Our just <a href="https://gym.openai.com/evaluations/eval_NDkU4oVNTDy6pME9ytMJeg">submitted algorithm "Fractal AI"</a> played 100 consecutive games -the minimum allowed for an official scoring- and get an average score for the best 10 games of <b>11543 +/- 492</b>, well above previous record of 9106 +/- 143, so we are actually #1 on this particular atari game:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://gym.openai.com/evaluations/eval_NDkU4oVNTDy6pME9ytMJeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="816" data-original-width="1024" height="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8ICNACzjdz8RBp0RPPl_JiWZkyY-mREUgkPoBvwsxWrRutbwwXLyR_RK5w8OfnEedm3qSg1uBcprVbGM8DWUNw7UQ7RlcdkbOhcVtL-8GKdGq1kZO26kyM1dyKsafjtYa_QBjJ4Rz52ST/s320/Captura+de+pantalla+2017-06-18+14.42.14.png" width="320" /></a></div>
<a href="https://gym.openai.com/evaluations/eval_NDkU4oVNTDy6pME9ytMJeg"></a><br />
<a name='more'></a><a href="https://gym.openai.com/evaluations/eval_NDkU4oVNTDy6pME9ytMJeg"><br /></a>
Previous record by <a href="https://gym.openai.com/evaluations/eval_HnfEWxEQcKMMLYYASEyYQ">MontrealAI</a> achieved an average scoring of 9106 +/- 143 after playing about <b>300k consecutive games</b>. When you inspect its learning ratio, you notice how different our approach is:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-XYtx9Nf5E0RB8GllyxSLpv1WfVhEetgcGODIdv8XyKDfaQRT2CjvYEBgUMChnqZFzFxug0gX8No5CLOmTUWrQSxZt1gNNYKN9ozl5W6imuRJ6DS_jhI_OU7fJnECJJoVj5dXXpImcHwP/s1600/Captura+de+pantalla+2017-06-18+14.41.59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="816" data-original-width="1024" height="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-XYtx9Nf5E0RB8GllyxSLpv1WfVhEetgcGODIdv8XyKDfaQRT2CjvYEBgUMChnqZFzFxug0gX8No5CLOmTUWrQSxZt1gNNYKN9ozl5W6imuRJ6DS_jhI_OU7fJnECJJoVj5dXXpImcHwP/s320/Captura+de+pantalla+2017-06-18+14.41.59.png" width="320" /></a></div>
<br />
As you can see, it is a pure "Learning algorithm", meaning that it starts with zero knowledge and a also near-zero scoring, and as it learns from more games, it gets better and better scoring, so after learning from 300.000 games, it can achieve scores of about 9.000 points.<br />
<br />
In contrast, Fractal AI is a pure-intelligence algorithm, it doesn't learn at all by its own (on its simpler incarnation), so to get better scoring, you need more thinking power (more CPU or a better implementation).<br />
<br />
If we super-impose both graphs, this difference is quite evident:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLWBmBur5A41cxwRBj7I_uemTch6TIehPZJh4gJ7ve7asjvrpdv-zLhTmo3iEczvUVtz1OTEiCkE861OC_jpzdKO5ufRvy_nfxzoFpYgPY31Mpdq11wA8k4Hoo6DZXuLAJkg3V-PAM10rc/s1600/MixedPackMan.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="298" data-original-width="1327" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLWBmBur5A41cxwRBj7I_uemTch6TIehPZJh4gJ7ve7asjvrpdv-zLhTmo3iEczvUVtz1OTEiCkE861OC_jpzdKO5ufRvy_nfxzoFpYgPY31Mpdq11wA8k4Hoo6DZXuLAJkg3V-PAM10rc/s640/MixedPackMan.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
The X-axis is a problem here, 100 vs 300k makes Fractal AI's graph to "compact" into a single vertical line on the left-most limit, but it cast a realistic image of the situation: Fractal AI, with the amount of CPU allowed (converted into number of walkers and ticks used to think) consistently ranges in the 5k - 20k, with some peaks here and there, but it doesn't get better with expertise like learning ones.<br />
<br />
Adding learning is, of course, the next step, as it would make the algorithm orders of magnitude better (given it time) and faster (learning allows as to cut down number of walkers over time saving most of the CPU needed without learning), but until then, we will try to beat some more atari games and other OpenAI environments we already worked on in the past (but never submitted) like the pole or the hill climbing classic control ones.<br />
<br />
<b>Update</b>: <a href="https://gym.openai.com/evaluations/eval_bNB0Dcr2RQG8zLVKkXg">Qbert</a> also has official score now (27/6/2017)!Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com16tag:blogger.com,1999:blog-6923947282926324208.post-55774338325416566882017-06-15T19:11:00.000+02:002017-06-15T19:21:21.690+02:00Fractal optimising, a first paperThe fractal "family" of algorithms actually started as a <a href="http://entropicai.blogspot.com.es/2015/05/fractal-function-optimization.html">very naïve</a> optimising algorithm: after all, intelligence is just about maximising a certain "utility function", so they are quite related.<br />
<br />
Once the fractal AI was done, the optimisation facet was again re-visited with a much <a href="http://entropicai.blogspot.com.es/2016/02/serious-fractal-optimizing.html">more promissing results</a> to later abandon it again.<br />
<br />
And finally, with the help of our friend <a href="http://www.umh.es/contenido/pdi/:persona_5536/datos_es.html">José María Amigó</a> from the Miguel Hernandez University, we wrote an article about this fractal algorithm we named "GAS" (namely for "<a href="https://arxiv.org/abs/1705.08691">General Algorithmic Search</a>" but it was actually for the capitals on our names, <a href="https://twitter.com/Miau_DB">Guillem</a>, Amigó and Sergio) and compared it against other similar ones out there (Basin hopping, Descent evolution and Cuckoo search).<br />
<br />
<a name='more'></a><br /><br />
The paper is already out in <a href="https://arxiv.org/abs/1705.08691">arXiv</a> but a big publication rejected it because 10 particles Lennard-Jones only accounts for a 20 variables optimisation, and for todays standard, it happends that less than hundreds of variables is just not so interesting... anyhow, this is my first ever paper, so I am very glad.<br />
<br />
A second paper could be released sometime if we re-visit the issue again, I have some nice ideas about dealing with big L-J clusters, so who knows, it may even work!Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com2tag:blogger.com,1999:blog-6923947282926324208.post-79225635795128239002017-06-08T20:09:00.003+02:002017-06-27T14:36:46.082+02:00Fractal VS Pack-ManLast week my friend <a href="https://twitter.com/miau_db">Guillem</a> adapted the fractal AI for the <a href="https://gym.openai.com/envs#atari">OpenAI Atari games</a> (OpenAI is a "gym" for AIs), in particular he focused on "<a href="https://gym.openai.com/envs/MsPacman-v0">Ms Pack Man</a>", an environment labeled as "unsolved" as I write this.<br />
<br />
Yesterday the work was almost done and the first videos came out of the pipeline and, to be honest, the results have stonished me, it worked out far beyond my always-optimistic high spectations.<br />
<br />
So here is the video that made me so happy yesterday:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/WtCbFWcWwcM/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/WtCbFWcWwcM?feature=player_embedded" width="320"></iframe></div>
<br />
<a name='more'></a><br />
<br />
Just to put it in context: Your algorithm is only capable of "seeing" the game screen, and has the ability to push (or not) any of the four buttons available. Nothing more. Out from this mere information, build an algorithm that presses the buttons "intelligently" so the game's score gets as high as you can, as soon as you can. Pretty hard.<br />
<br />
After adapting our algorithm to the atari APIs, we set a very modest fractal of only 105 walkers and allowed it to only "see" 2 seconds in the future. Not much to be fair.<br />
<br />
The algorithm does not understand what the purpose of the game is, how many players are on the screen or anything about the game itself, nothing, just the images of the game as a raw integer array, and the corresponding score (smartly extracted for the screen shots).<br />
<br />
The algorithm is able to score as much as 20.000 points and solve four screens without previous training. Surely, with more walkers and more seconds it could beat by far this scoring, but this is not where the power of the idea lies.<br />
<br />
If you use those "pretty good games" as examples to train a standard neuronal network, you could make it learn much faster than todays methods based on random games.<br />
<br />
Inversely, if this trained neuronal network could be used by the fractal AI to be smarter by "learning" form the past decisions, its "efficiency" could drastically jump spme prders of magnitude (the example above is not using any neuronal network).<br />
<br />
And we have built a nice circular procces: better games examples means a better neuronal network, that in turn means a better fractal AI, that will generate even better games, that will make the NN smarter, and so on.<br />
<br />
The tests on this strange mix are already being ran, and my expectation sub-routines are disabled until tomorrow.<br />
<br />
<b>Update (27/06/2017)</b>: It is going to take more than a day, so in the meanwhile, here you have some other atari games played from OpenAI. All of them were played from the ram dump and, of course, without any trainig. For comparation purpouses, I am including the average score from the Fractal AI games vs the second "best-so-far" algorithm on OpenAI:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/j0w7fuoJuD0/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/j0w7fuoJuD0?feature=player_embedded" width="320"></iframe> </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://gym.openai.com/evaluations/eval_dJjksNFuSGKPSYPv09JWdg">Qbert-ram-v0</a> (184k vs 4k)</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/8NLaNJhxkVA/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/8NLaNJhxkVA?feature=player_embedded" width="320"></iframe></div>
<div style="text-align: center;">
<a href="https://gym.openai.com/evaluations/eval_iyQTuphhQ1tNxQd9h5JjQ">Tennis-ram-v0</a> (8 vs 0.01)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/SmSTW4RHjr0/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/SmSTW4RHjr0?feature=player_embedded" width="320"></iframe></div>
<div style="text-align: center;">
<a href="https://gym.openai.com/evaluations/eval_bNB0Dcr2RQG8zLVKkXg">VideoPinball-ram-v0</a> (500k vs 20k)</div>
<div style="text-align: center;">
<br /></div>
Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com6tag:blogger.com,1999:blog-6923947282926324208.post-77256237322161897042017-03-03T17:36:00.002+01:002017-06-12T13:27:28.750+02:00Imperfect informationIn the actual incarnation of the fractal AI, we need to supply it with its exact state, all the interactions with environment (the simulation) and the potential function, hand crafted, to be followed. This is know as having "perfect information".<br />
<br />
Having perfect information of any system is just not feasible, so my models are not usable in real environments, with real drones, moving real motors, as all of them are unknow for us and we will have just some sensor's outputs as our information.<br />
<br />
This week I have visited the <a href="http://retecog2013.unizar.es/">Cognitive Sciencies research team at Zaragoza University</a> as a guest for a short but intense seminary about my fractal inteligence algoritms in an effort to team with them here and there, but they really emphasized on the sensorial approach -imperfect information case- in order to make our works compatible.<br />
<br />
<a name='more'></a><br />
<br />
So I have been thinking on how the actual fractal AI can be reduced to having only a number of sensor of the world around -and its on internal state- and some motors or actuators to work with. May be I will have it adapted in a couple of months, as I already have an easy way to properly do it, but it doesn't fit on the margins of this book ;)<br />
<br />
The idea is basically to mimic how a baby learns how to use his muscles to move around just form the information it gets from some sensor, in a continuous proccess of trial-and-error as you move around randomly, learning so, with time, the correct/optimal behaviour just emerges.<br />
<br />
I will be posting news about it as I develope the idea into real code and make some new videos of new-born rockets with only some distance sensors around it as they learn to fly themselves.<br />
<br />
BTW, there will be a long video of the first session of the seminary -the other two sessions were more informal and were not recorded- where I explain the fractal inteligence at deep. I will also publish the presentation (I need to translate it to english first) along with a big doc I have crafted with all the theory and pseudo-code I use, so you could produce your own fractal AIs in the same level -or even higher, as it includes the fractal memory schema, something I have not showed on videos on this blog- than the ones you have seen in the latest videos. Also the python code we use to work on some OpenAI problems will be released. <br />
<br />
So keep tuned!Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com2tag:blogger.com,1999:blog-6923947282926324208.post-11143632716296479822016-09-08T22:38:00.002+02:002017-06-12T13:27:50.235+02:00Generating consciousnessOne week ago I wrote <a href="http://entropicai.blogspot.com.es/2016/08/what-is-consciousness.html">this post</a> about an insight on what could "consciousness" be like, and I imagined it as something not-so hard to gasp as we always thought. Today I come back with a "pseudo-code" version of it on my mind.<br />
<br />
Those new ideas have come along with an effort in our company to port the fractal algorithm into a distributed, highly scalable architecture. A work in progress that is already producing a great speed-up in our tests.<br />
<br />
This new architecture allows me to play with big groups of fractals diseminated over a network of PCs, all doing the same decision work in paralell, to later join all their findings and take a "collegiated" decision.<br />
<br />
More interestingly, I can now "pack" some fractals to work as one big fractal and replicate it endlessly to build a tree of cooperating fractals as a nice way to distribute work over the PCs on the network.<br />
<br />
But how to arrange them to distribute the work even more efficiently? By building it as a "fractal of fractals", a tree of fractals whose structure evolves dynamically as you use it, to finally form a nice tree-like fractal that adapts its form to live in the environment you gave to it.<br />
<br />
<a name='more'></a><br />
<br />
This new bigger structure, even when used as a static tree-like graph (easier to build on real life PCs) has the power of generating not only intelligence, but consciousness.<br />
<br />
To understand wath this consciousness is, we need to zoom this big fractal tree-like structure from a detailed close-up up to the bigger picture.<br />
<br />
At a microscope level, the fractal is made up of "states" of the system. A "future" the agent is imagining when thinking is just a possible future state that we make evolve in time to form the fractal structure, but the very tip of this future is just an state, a "position" of our agent.<br />
<br />
This initial node of the fractal only knows how to simulate itself to tell us where the agent will be after a little time step pass. If you should calculate this evolution using physics, you should find the feasible change in the state that would make the entropy (of the whole system, the universe) grow at a higher speed (if the 2nd law of thermodynamics is to be assumed). You could think of it as a decision problem: the system have to decide where to go in order to maximize the entropy of the universe.<br />
<br />
Now we have a "small" fractal as the one I use for intelligence: a tree-like structure that evolves in time, having on each of its tips -final nodes- a feasible future state.<br />
<br />
The effect of this new structure is quite similar to the one seen before: it aims to maximize an entropy again, but calculated after a time horizon, and by doing so, instead of having a "physically correct behaviour", we get an "intelligent behaviour". Kind of magic.<br />
<br />
But this fractal is goal-less so it can only generate the simpliest form of intelligence: the "Common sense". To make it trully intelligent, you need to add a goal and modify the entropy formula to take it into account (basically by tampering with the ergodic principle a little).<br />
<br />
As far as you only supply one goal, the fractal can add it to the entropy formula and generate an intelligent behaviour in the agent aimed to try to full-fill your (his?) goal.<br />
<br />
That is really *all* an intelligence can make at this level: maximize one goal intelligently in a really generic way.<br />
<br />
But wait, in my code and videos I manage to make the agents to follow a set of simultaneous -and conflicting- goals, like keep energy high, keep health high, get the rocks into the cave, etc. How?<br />
<br />
Well, I just add them together into a single super-goal and ask the AI to follow only this one. Easy trick.<br />
<br />
The problem here is that the mix of goals is made up by apply a well-choosen relative strength for each of the goals. May be I need to set them to 90% important for "keep energy high" and only 10% for the health and nothing for the rest in order to survive on hostile environments, as when the food is not so abundant. These vector of weigths for the different goals you have is kind of an art to set manually, as it defines the "personality" of the agent, and you really need a brave agent to survive in some environments, while a gentle one may work better in a more kind environmet.<br />
<br />
I tried many times to automatically adjust those coefs by using the fractal I had, but finally I understood that this fractal could never achive this. Anyhow, I added a "master volume" so I could modify how "temperamental" was the agent (as opposed to "common sense" only, that occurs at volume level zero), the "risk control" module, a nice heuristic that prevent the AI to forget about safety and just go straight into the food.<br />
<br />
But if now zoom out again and watch the full fractal, a "fractal of fractals of future states", you would see again a tree-like structure like before, but now nodes seems bigger as there is a whole fractal of futures inside.<br />
<br />
Now comes the magic: each node of this super-fractal represent a whole previous fractal, even with its own values for the goal strenghts if I wish... so I can "play" with slightly different personalities -adding noise into the initial goal mix- and compare the resulting small-fractals produced after a decision is beign made.<br />
<br />
To compare between to fractals I need a new super-goal that will signal the best fractal gowth among all the fractals that forms oure super-fractal, and this goal is aimed to maximize how "beautifull" the fractal is... yes, it sounds crazy, but it is the way I do it manually: try some goal strengths, record a small video, repeat with another goal mix, compare videos... the right choice always produce the most pleasant tree structure, one that seems more "alive" and fresch than the others.<br />
<br />
I call this the "leafy coficient" some times, others the "enlightment coeficient" (as it seems to me that thinking with these kind of good-looking fractals is the actual key for enlightment) but the winner was the "cat coefficient", as the more cats a video has, the more visits it receive (quite a silly winner I must admit, but now it is a meme in my head).<br />
<br />
Using this "cat coef" as the potential (and euclidean distance over the goal strenght coefs vector) I can make grow this "fractal of fractals" exactly in the same way the small-one did, except that now its pourpouse, apart of taking the best decisions, is also to decide how to change its "personality" to adapt, wich goals should have a the higher priority over time.<br />
<br />
So physics was about deciding where will simulation move the agent (physical laws) forming a line in time, intelligence is a one-level fractal that decides where to go -pushing over the degrees of freedom of the system, the "agent's joysticks"- in order to maximize a goal over long periods of time, while consciousness is a two-levels fractal, self-similar with the previous one, that apart from helping take the right decisions, can change the goal-mix in real time to better adapt its personality to the situations and the future to come.<br />
<br />
I don't spect to be playing with "consciousness" in the next few months, it is not needed for the problems I am working on, but as the new structure of the code is so perfect for what I need, adding it should be even easy to code, at least using an "static tree" model.Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com11tag:blogger.com,1999:blog-6923947282926324208.post-53431939360404171412016-08-01T14:23:00.002+02:002017-07-04T16:01:52.548+02:00What is Consciousness?Some days ago I wrote a little about <a href="http://entropicai.blogspot.com.es/2015/09/fractal-algorithm-basics.html">how this fractal AI works</a>, it was not too detailed and the really important details were intentionally left unsolved. I promise to fill the gaps in short for you to be able to try the fractals by your self, but not now.<br />
<br />
Today I want to give an overview of how the "complete fractal AI algorithm" could look like in some months, the ideas I am actually working on, and specially some random thoughts about consciousness.<br />
<br />
The part I am now working at is about how to add memory to the fractal AI. This far, fractal AI was totally memory-less, meaning it does not learn from experience at all. I now call this an pure instinct-drive or intuitive mind. When you ask something to this AI, it thinks on the problem from scratch, and gives you an answer that is good enough for evolving in this medium with intelligence, a "real time " decision making algorithm good enough for many task.<br />
<br />
But while driving a rocket on a difficult environment is hard but can be done with just an intuitive fractal AI, most NP-hard problems -problems where the time needed to solve it grows exponentially with the size of the problem to be solved- are usually not so easy to solve just with pure intelligence, usually you need something more to guide the intuition.<br />
<br />
<a name='more'></a><br />
<br />
<h3>
Memory fractal</h3>
Trying to solve one of those hard problems I came into the conclusion that I needed to let the algorithm to play with the problem for a time so it could somehow memorise those decisions that, in retrospective, proved to be right over time, and use all those memories to help the AI decide better and better as more experiences were stored and processed.<br />
<br />
I could solve the problem with a simplified version of this idea, now I am working in generalising the method used into a truly fractal model of memory that will work in conjunction with the "memory-less" AI: The memory-less AI will create those memories, and the memories will help the AI by showing it paths of successive decisions that, in similar circumstances, worked fine. It acts as a new goal the AI have to follow, a goal that bases its potential in how similar this state is with those in memories, and on how good or dab those memories were.<br />
<br />
I can not show you anything about it as it is not coded on the rocket case (I use the rockets as my general case, as it is a really complete problem to test new ideas) and the preliminary use I am making of it is still not working OK. Basically I need to use a fractal model of memory instead of the more classical one I am using now, until then, I only have clues on how it should work out.<br />
<br />
But I can tell you something interesting: My "perfect fractal", what I called the "<a href="http://entropicai.blogspot.com.es/2015/06/using-feynman-integrals.html">Feynman fractal</a>" as it allowed time travelling (Feynman integrals or Feynman diagrams allows particles and paths to travel time reversed or not, and both directions are equally important), is actually equivalent to a memory fractal if the memory is really coded as another form of fractal.<br />
<br />
It doesn't work as I spected at all, futures does not need to actually travel back in time, instead, recalling past memories and using them to decide makes the same effect and are much simpler to manage mentally and in the code than a complex <a href="http://entropicai.blogspot.com.es/2015/10/two-ways-fractal-first-approach.html">time travelling fractal</a>.<br />
<br />
<h3>
Consciousness</h3>
Ah! The holly Grial of AI, consciousness! I always dream some day, after I could deeply understand the fractal mind, I could naturally see what consciousness really is. I spected it to be some surprisingly twist to the fractal structure, like time travelling, but in some magic way I could not imagine.<br />
<br />
But now I think it may not be such a dramatic thing after all, instead it may be just a simple way to modify the internal parameters used in the fractal AI as it is used, a way to change your mind own working parameters to accommodate what is to come.<br />
<br />
Although the idea is still half-baked in my mind, the following "real brain" example could clarify it a little:<br />
<br />
Your intelligence, being it a neuronal network or not, uses some "scale of values" to measure how good or bad something is. For instance, feeling hunger could have a relative importance to your intelligence of 0.34, while begin thirsty may well be a little more important, 0.65 for instance.<br />
<br />
That is your normal "scale of values", the one that serves you well in everyday life. But imagine you need to travel a long river crossing a desolated region. Your mind will probably decide to lower the importance of water and raise the importance of food, as it can foresee that the lack of food will be the real problem during your journey.<br />
<br />
This process is actually not making you smarter, or using memories to guide you through the river course, instead is fine-tuning you internal thinking params so the resulting behaviour is more probably going to save your life.<br />
<br />
A process that modify all the inner params of an AI to better adapt to the changing environment is, as I now see it, a proto-form of consciousness, and generalising the process to fuse with the actual fractal AI could not only make it 100% parameter-less but, given enough intelligence and memory, make what we recognise as "consciousness" to slowly emerge in the agent behaviour.<br />
<br />
So my bet is: the fewer hidden params exists in your AI algorithm that the algorithm itslef can not evaluate and change if needed, the more conscious your algorithm will be. It is not an easy trck to have an AI that can change its own working at will, but this is the way I will try to go after the summer time.<br />
<br />
As a side note, black-box algorithm like a neuronal network would prove harder to dress up with the "emperor new clothes" of consciousness?Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com3tag:blogger.com,1999:blog-6923947282926324208.post-74020555505939141052016-05-06T19:35:00.005+02:002017-06-12T13:31:49.070+02:00Pathfinding problemIn my first contact with <a href="http://www.lifl.fr/~talbi/">professor Talbi</a> he proposed me to try to solve the <a href="https://en.wikipedia.org/wiki/Pathfinding">Pathfinding</a> general problem with my algorithms, as the examples I showed in my talk were quite similar to solving it.<br />
<br />
The Pathfinding problem consist in finding the shortest path from point A to B and it is useful not only in programming robots to go here and there, many other problem relates to finding this path.<br />
<br />
So I borrowed time here and there to prepare a couple of videos and
yesterday I have a second meeting with him to show the videos along with
the real-time example where the agent follows the mouse. Here you have the video I prepared for the meeting:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/AoiGseO7g1I/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/AoiGseO7g1I?feature=player_embedded" width="320"></iframe></div>
<br />
<a name='more'></a><br />
There is a very nice way to solve it when the points are limited to some "cities" and special points (cross-roads) and you can only move from points by using "roads". In this case you are finding the shortest path over a directed graph, like in a GPS navigation app where you can only go from one cross-road to another using the exiting roads sections, the beautiful and simple <a href="https://en.wikipedia.org/wiki/Dijkstra's_algorithm">Dijsktra's algorithm</a>.<br />
<br />
The other case when the pathfinding problem can be solved is when the geometry of the zones where you can walk is simple and you can triangulate it so the allowed-to-walk area is fully covered with non-overlapping triangles. In this case you have the <a href="https://en.wikipedia.org/wiki/Any-angle_path_planning">Any-angle path planning</a> algorithm.<br />
<br />
But in my code, there is no need for the areas to be triangulated, the frontiers can be quite rough or even fuzzy, like in the video, where I added gray areas where the agent can walk, but at a cost (he dislike being on gray areas).<br />
<br />
As you can see, the power of the algorithm is based on the space scanning, the fractal is able to cover the whole space quite easily, while at the same time, concentrate in the more promising paths until the end point is reached.<br />
<br />
At the end of the video, the energy of the "robot" was very low, there was no gas to make another go, so I halted it and added energy drops along the paths. As there is a "keep energy level high" goal always on in my agents, it detects the drops and change the path so he can feed and refill the energy tank.<br />
<br />
So the "shortest path" is not exactly the path being found, instead it is managing a set of goals and trying to find a path where all of them are maximised at the same time, a multi-objective friendly path.<br />
<br />
Before going to sleep I prepared a second video where a rocket and a robot try to find the shortest path while avoiding collisions as they cause damage (and a "keep health level high" is also in the pack). The collaborative code is not 100% done, strange things happens with 3 or 4 agents that need revisiting, but two agents was ok for the actual implementation:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/R61FRUf-F6M/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/R61FRUf-F6M?feature=player_embedded" width="320"></iframe></div>
<br />
Basically, the fractal AI I am using is quite capable of solving this problem (given enough CPU and time) in a continuous way -in this case- but also a complete path can be extracted easily form any iteration of the algorithm that reaches the point B if needed.<br />
<br />Sergio Hernandezhttp://www.blogger.com/profile/18108694861191833007noreply@blogger.com2