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..


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.


  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…

A new year 2023 !

2022 has come and gone with little to show for. I’ll try to summarize all problems and progress for the past year:

  1. Synapse kinetics – as far as I can tell this works as intended, but the model is a crude approximation of the glutamate cycle within the synapse and some parts perhaps should be changed, but it all depends if the approximation is good enough. I don’t have enough information yet to say if it is good enough or not, because other parts of the system are not working well, or not at all.
  2. LTP/D – the change in AMPA receptors (or any other change) at the synapse level are still not clear to me. I don’t have a theory of what should be accomplished by this change. Literature data is too vague on this and the conditions under which the changes occur are not for sure determined. Experimental data is clear enough but the conditions that lead to changes don’t seem that would happen under normal neuronal conditions, therefore is hard to infer from that data, how is that used for information processing. Is clear to me that a neuron cannot work with multiple frequencies synapses regardless of how LTP/D would work. Is not clear to me if there are multiple frequencies, I envision mechanisms where all frequencies are the same (starting from the amacrine cells) but there is a difference only on the phase of the signal. Is clear to me that LTP/D, regardless of how it works specifically, would change the direct correlation between incoming and outgoing frequencies, meaning a high incoming frequency signal could lead to a low (relative) firing frequency on the postsynaptic neuron, because of a low gain in AMPA receptors..
  3. Synaptic Connections. I worked under the premise: “neurons that fire together, wire together” and I implemented 6 different mechanisms (st of rules) for connecting 2 neurons. However in the end there are detailed that make the whole concept uncertain. I have assumed that a neurons when activates will send a signal in its proximity promoting axonal growth from close by neurons which will lead to forming a connection. The problem here comes from the following unknowns: – how far is that signal spreading ? How fast ? How much does it last ? I have assigned equal “probabilities” to form a connection based on distance but this approach leads to a problem o symmetry, too many neurons would become identical and will fail to separate incoming signals. Ignoring the unknowns there is an additional fundamental problem. There is a mechanism that leads to breaking a synapse, that mechanisms seems to supersede the mechanism of forming a synapse. So the mechanism of forming a synapse could be totally random and will still work because the control comes from the synapse breaking mechanism. Yet having equal binding probabilities should have worked too, but it doesn’t because of symmetry, so there still have to be some rules for forming a new connection but I failed to find anything convincing.
  4. Inhibitory neurons – I believe they are a must, but there are also too many unknowns: should they completely stop a neuron from firing or just modify the firing frequency ?? Both mechanisms seem reasonable but I cannot form any theory of how should they work because of unknown details: do they have same activation potential ? do they have same repolarization time ? Can the repolarization time change as a hard to reverse change ? Since they are otherwise regular neurons I still have to deal with all the other problems LTP/D, synapse connection/breaking. I have also to understand how much to inhibit the other neurons, is the level of inhibition a fixed values ? Can it change, be increased or decreased.
  5. Feedback mechanism – I have implemented a way of changing the behavior of a synapse when a feed-back signal is present, but I have no idea of why I should feedback a negative or positive signal… When or why should I change a synapse through feedback ? I have thought of an abstract reason, just declare a neuron good and one bad and if the signal reaches either an appropriate signal should be sent back.. But because of all the other problems I could never test this hypothesis.

What are the predictions for 2023 ? Considering all the unknowns, I don’t believe I will make significant progress in 2023.. All 5 bullet points should work “correctly” otherwise nothing will work… There are many many combination among the 5 and no working theory, so trial and error it is… That takes a lot of time and my motivation is not good either, discovering 10 000 ways of failing may seem fun at the beginning but after a while it takes a toll on you..

How is color processed ?

This too broad of a question to have a simple answer :). I’ve been trying to make a color separation for the past month or so… That seemed simple enough.. but no luck… To separate colors I needed first to have a clear understanding of the role of LTP/D in information processing.. I thought there was the problem … but no.. I’m quite sure now that a neuron cannot accept inputs of various frequencies at the same time… Neurons that receive different colors can accept only a single color at a time, they are color selective it seems.. I don’t understand how a red line (for example) is seen as continuous, when in fact some of its neurons fire at different frequencies (because they may be specific to blue or green)…

So LTP/P does not have the role of synchronizing synapses from neurons receiving different colors. This was one of my working hypothesis for a role of LTP/D.. Now I have no role in mind for LTP/D… again, nothing..

Another thing, any application of LPT/D leads to an irreversible alteration… Running pattern 1 then 2 then 1 again => the response for pattern 1 before and after pattern 2, are not the same.. Now it just happen to be this way, but should it be this way ? or should I get the same response for pattern 1 always ? I’m not quite sure anymore, I thought I should always get the same response… But even if I don’t get the same response, I get the same relative response… it still fires before a competing pattern.. Still, I don’t have sufficient evidence that this would be the case all the time, it’s reasonable to believe that will not always be the case, but even so, this way of working, where the current result dependents on history, may be the correct one … Would be easier to get always the same response for pattern 1, but that does not seem possible… Say there are 3 synapses firing for Pattern 1… If synapse one is also part of pattern N, it will get altered, then when running again in pattern 1, the end result will be a different answer for pattern 1.. Without LTP/D I would always get the same result… so why LTP/D in the first place…