a very small update..

I now have the code and the proof that my new learning theory works. I was very anxious till the very end because most of the time my theoretical predictions failed when put to the test. I would make a theoretical calculation, but using many approximations and when everything will be put into code and graphs, I would find some unpleasant surprises :).

This is the set-up used for the 2 color separation. I spent couple of weeks adding this new GUI, so I can inspect each neuron in much more detail.. abandoning for now the complex GUI used for many neurons working in a complex network.

Next I want to separate multiple colors and create a proper presentation with couple of explanations perhaps … or maybe just a video showing the action…

Still haven’t solved the problem of “embedding” for colors… I have a function that takes as an input an RGB value and converts it into a “phase” number, that can be used by the AI algorithm, but is not good enough because is not working for all colors… Some colors translate into very high or very low phase numbers so they cannot be used by the algorithm .. So I’m not sure yet how to show “learning” for all colors.. But more than 2 colors should be a good start…

Molecular descriptors, embedding and frequency

I was discussing how my friend used molecular descriptors and some form of backpropagation to find “similar” molecules for specific purposes. The process was similar or identical (if considered in general terms) with the “embedding” process in AI.. “Embedding” is supposed to convert a type of information in a different type so in the end apples and oranges can be compared. Restricting the output of e perceptron to 0 and 1 or -1 to 1 is also a way to make data comparable still an embedding problem.. Our brain seems to have found the ultimate embedding, transforming all data from all sources, in frequency (and phase) so everything can be compared.

I’m struggling with converting an image data (say RGB values) into something that can be used by the AI algorithm. If information is not converted “properly” (what’s proper is unknown) then the algorithm will fail to detect differences in the input data, fail to learn anything… which may actually be the reason why I spent so much time with no progress what so ever…

I’m still far away from showing anything concrete. My plan was to create a test program that shows how two colors can be learned, but I took a very very twisted approach and now I’m further away from my goal then when I started. Why ? Not sure.. Maybe I believe this is more complex than on paper ? Maybe I believe that even if this works is not proving anything ? So by observing my approach I must conclude that I’m getting ready for multiple problems which cannot be solved unless I understand very fast what the real problem is.. So I’ve been motivated only to construct more an more tools to better visualize the data and eliminate ambiguous options … and still hesitate to take more decisive steps.

what is enough ?

I’ve been making some unexpected progress, I found a learning mechanism which is both simple and reliable and integrate 100% with all of my other ideas. Now, I’m again building a small test to show learning of colors with 3 input neurons. It’s taking a lot of time because since I changed the code to incorporate more C/C++, parts of the code are not working properly or failing completely… So perhaps another week maybe two till I can show my idea in practice. All the test I’ve done so far are in a sort of a manual network, I link by hand neurons, initiate them one by one and such..

Anyway the problem I have now is when to stop “learning”.. The way it works now is as follow : the network learns by itself up to values, then if I want to separate patterns and learn them separately even further, I have to tell it to learn.. Learning behaves like dopamine or serotonin influx, so some constants are altered by an external (or different) mechanism.. Trouble is that this learning would go on till the very limits of the input data.. Assume we have a 10 synapse pattern.. While I see it as a pattern, if I decide, I could also go deeper (up to my visual acuity) with dissecting that pattern into smaller patterns… So I may be able to discard 5 synapses (points) from that pattern and consider they do not meet all criteria to be part of that pattern… And then to the best of my sensory perception I can’t find other differences among the remaining 5 synapses.. My AI does just that at this point… discards everything up to those 5 remaining patterns because I’m not sure how to define criteria that would stop it before reaching that very end.. So how do we know enough is enough ? How do we decide what to learn ?

Anyway, this is now a very very different problem than the ones I had so far.. The important point is that under clearly defined conditions the system has a mechanism of learning. This is all very new to me, so I may get some ideas later on. Right now I’m focusing on building the whole system back to its original functionality and building the color discrimination demo along the way.

What to “input” ?

I have based my learning mechanism on inhibition, it didn’t work. Inhibition favors complex patterns (multiple inputs) over smaller patterns, but we can learn both. Also Inhibition is a complex race, change frequency and the winner becomes hard to predict.

Next I tried using repetition as the bases for learning, frequent patterns will become favored over less frequent ones.. But this got me nowhere, within the limits of my system, everything eventually becomes well known pattern, because a learning variable cannot increase forever… so 2+ 2 is equally probable to be 2,3,4,5 and so on. So when everything is learned, nothing is..

This brings me to this topic… The input should provide the information, but how to encode / decode it. I have 3 parameters that I use to send information to the network:

Frequency, Phase and Sequence (sometimes I refer to sequence as timing ). So far I just made abstract assignments, I mostly kept Frequency constant and abandoned Sequence a while back. So I used only Phase like, 3 means this, 4 means this.. Nothing concrete. Meanwhile forgetting what 3 meant … This seems chaotic because only in retrospect I realized what I was doing… I just focused on “learning”… using simple patterns of a line of 2 pixels or 4 pixels, linear or cross.. But learning has to be better correlated with the input. So lately I’ve been working in actually converting a real image in an input, rather than creating abstract 0/1 patterns because I’m sure there are thing I’m missing and the network may not be receiving actually information through the input. But I still don’t know what I’m doing. I converted RGB data to LMS and randomly made input neurons as favoring RG or B frequencies. I liked the idea of LMS because I don’t want zero input values for any color, but I don’t like that for some colors the output of LMS is extremely small, that means the network will be blind to those colors, but it doesn’t matter that much for now, I will work only with colors that give adequate response, maybe even dropping the conversion to LMS since that has its own problems.. Having neurons that respond differently to colors creates chaos instantly but maybe this is what I need to move things forward …

“Learning” is still eluding me. Even without LTP/D or without inhibition there should still be a leaning mechanism, the network should learn something.. good/bad doesn’t matter. A set of variables should change because of a given pattern and remain so… In my case, many variable change, but they change back or getting altered by new patterns so much so that there is no more a correlation between initial pattern and some variables… I believe the problem comes from the fact that I don’t have a mechanism for Phase learning.. Phase is easily discriminated but I don’t see how I could make a neuron phase specific. So still in the dark but making progress by constantly discarding thing that don’t work 🙂

Inhibition brings order to chaos

I knew this should happen but only now I could see it in my simulations.. The question is now, how to get to it without me manually changing the inhibition value ? Whatever I tried, failed so far… But this is important otherwise I get random results in all the layers..

Some Updates

I have reached some limits using Python, Tkinter and Matplotlib and I had to switch to DearPyGUI and converting more code into C through Cython. This took awhile but results are good for now, I did not realized how slow was Matplotlib with plot drawing..

Now that I have more tools to see what’s going on, I realized that LTD/P effects are more complex than I envisioned.. if a neuron responds faster to an input signal (say because of an LTP effect, or higher frequency input signal or because it has more connections or because is less inhibited ) then it immediately alters the flow of information … Weak synapses become oriented resulting in (as of now) unpredictable results.

Inhibition is also more complex, a neuron under inhibition could be forced to wait for the second activation signal to become activated, but I’m still not sure of how to do it… Right now the neuron remains in an undefined state when inhibited… Is not firing but is not in re-pause either, I haven’t decided what to do with it..

With more speed I could let the synapses form and break indefinitely and it became clear that there are strong synapses defined by data flow and weak synapses that form and break immediately, about 10% are weak synapses..

1+1=2

Let’s abstract away that operation and consider instead: S1S1S3S4 activates S5, where S1 stands for Symbol 1 (number 1), S2 stands for symbol 2 (the + sign) and so on. If the first 4 symbols are activated they should then activate symbol 5 (which is the result, number 2). My assumption is that we actually do NO other types of calculations other than sequence association. So even if we appear to do new, complex calculations we actually use known small steps to achieve an unknown result.

There are couple of problems here:

  1. How is it known what symbol S5 is ? In other words is S5 just a label saved in an outside system, other than the AI algorithm itself ? If I were to save S5 as part of the AI algorithm what would that be ?
  2. Assume that S5 is already known as a visual representation for number 2, which is to say, there is a neuron somewhere that would specifically light up when the system sees the image of number 2. Should this specialized neuron also light up when seeing that abstract association ? (S1S2S3S4)
  3. I could combine 1 and 2, but there is still a problem with this approach. This approach leads to the idea that for every specific thing we know, there is a specific neuron that encodes it. Do I know more things then the number of neurons in my brain ? I’m not sure, because there are many things I know, but I don’t know that I know them… My guess is that we don’t have as many neurons as required to store all the information we have stored in out brains, so my conclusion is that we may have single neurons encoding single (specific) objects/labels, but we must also be using multiple neurons in various combinations for storing some data.. But if information is so distributed then I get back full circle to the first question.. How is S5 known ?

LTP/D what it is and what it is not

After many trials and tribulations I have come to a conclusion regarding LPT/D role in information processing. The conclusion seems so obvious in hindsight… but what can you do.

WHAT it is NOT.

  1. Synapse strength, which is modulated through Long Term Depression and Potentiation, cannot serve as a variable for “learning” as in cannot be used as a “weight” as is considered in today’s state of the art Artificial intelligence algorithms.
  2. Cannot be used to synchronize synapses of different frequencies or different phase.

WHAT it IS.

  1. LTP/D is used to establish what a pattern is. I know I’m vague on this one 🙂 but things could go in many directions still.

Base on these conclusions I will continue the development of the rest of the algorithms.

So far I have: Synapse kinetics and Synapse modulation. Next on the list is Connectivity, forming and breaking synapses, followed by Inhibition, followed by FeedBack.

I’ve started work on Connectivity and these are the questions I have so far:

A. What is the input like for a neuron ? This may seem like a simple question but I’m not sure of the answer. The data received from sensors is phase modulate or frequency modulated or both ?I’ve studied how the eye process the data, and it seems that there is the possibility that input can start with different phases but the off time be changed, essentially resulting in signals with different phase but same frequency. Is not something that is obvious, but it is something that I think I need as an input. The simplest was was to just assume different input frequencies but I found no way to work with different frequencies (as in at the same time have synapses firing at different frequencies on the same neuron). This part may require a lot of work, so far I simulated, poorly, an input with various frequencies but maybe it’s time to do an actual conversion of pixel data to frequency and phase..

B. How is the size of a receiving field established, for a complex cell ? Why is it not bigger or smaller ?

C. How far a hypothetical chemical signal from a firing neuron would spread ? How long it will be present in the environment ? How fast does it spread ?

D How fast can a synapse be formed or removed ? Is that time a variable ?

Frequency or phase ?

I’ve put all my money in frequency and I believed all talk about encoding data in phase to be absurd… But as with many other ideas I seem to have been wrong… maybe. Since the beginning of the year I’ve been on fire, tones of ideas and predictions that worked well, still there are things missing, things that don’t work at all. Anyway at some point I did some theoretical calculations and discovered that I was calculating the frequency wrong, inputs at a certain frequency should result in same output frequencies, solving one of my biggest problems. What should differ is the phase, in some cases the amplitude as well. This realization unleashed many many options not available before. Still the use of frequency remains a mystery. A single neuron cannot work with synapses firing at different frequencies, eventually the frequency in minority will be removed. This puts into question how colors are to be dealt with. If neurons sensitive to different colors fire at different frequencies that’s going to be a mess, but colors could be separated and tracked…. If they fire with same frequencies but different phase that’s fitting well into my algorithms, but the color is lost in the first layer. But generally speaking same frequency should carry from the sensory input till the last layer, rendering frequency useless…

What is “generalization” ?

I’ve been pondering this question for a while now. If x is a Cat, then x + dx is everything that can be still recognized as a Cat… the bigger dx the more “general” the inference. dx has to have a dx_Max, if dx > dx_Max then x+dx cannot be recognized as a Cat. As far as I can tell this is how “Deep Learning” does generalization and I believe this is how we do generalization too.. How am I trying to do generalization ? The same basically but the source of errors (what changes dx value) are multiple… In the end, whatever signal activates a neuron N, is a Cat…