At present time, I have succesfully created a Cellular Automaton in Scilab, which can act as if many different Cellular Automata by the use of variables - allowing for variable rules. The main focus during the development however, was to recreate the Game Of Life, by John Conway. Reason for this being that 'Life' is an axiomatic automaton, which is indirectly why it is so widely known . The code of which, viewable on this blog in the preceding post, is self-explantory for anyone familiar with Cellular Automata and matrix manipulation in scilab. The only major downside was the visualisation of the generations, but the visualisation is, apart from easy on the eye, not an important factor in Cellular Automata, as long as you know how to read your CA you can conduct the necessary research and come to a conclusion. The readout, though simplified by visualisation, can be made faster by saving the state of the CA in serialised form, and only asking, say, every X generation to be drawn - or saved as vector image to a .pdf file.
The aim of this program is to imitate a neural network, on a very small scale. For this I use Scilab, the opensource equivalent of Matlab, because I want this code to be easily ran by other people without any cost. There will be a maximum of 1250 neurons at any time during the simulation. This limit was set for computability reasons alone, however, each neuron may have four 'receptors', commonly known as synapses, at any time.
In order for any of the code to make sense, a working understanding of the human nervous system is vital. A few assumptions have to be made, for simplification of the complex processes. First, it should be obvious that prima facie the brain is digital, rather than analog. This was explained in some detail in 'The computer and the brain', by John Von Neumann, so I will keep this discussion short (as the works of Von Neumann are widely available, and should be a priori known to everyone in computerscience).
The digital nature, commonly represented by bits being of either "0" or "1" value. In the human brain, a neuron (nerve cell) either recieves stimulation, or it doesn't. This stimulation however, is of both digital and analog nature. The digital part is prima facie logical and requires no further knowledge, in part due to the clarity of the goal set out by this very post. The analog part however, is not that visible at first sight, thus requires some further explenation. Modelling of the analog part is beyond the extend of my proposed algorithm, due to the problem being tackled is of a different nature than the problem of creating a cellular automaton which acts as the digital part of your brain. The analog part is only visible as soon as we consider neurons with several functions - to illustrate clearly the analog part I will use the simple, and simplified, example of the optic nerve.
In a simplified way, the optic nerve is responsible for what we see - or rather - it sends the data of light hitting our eye to the brain which then interprets this. Imagine the eye tells the brain you are looking at a lamp - how would you know what the brightness is of this lamp? Imagine we have two lamps, lamp A with a brightness of 10, and lamp B, with a brightness of 20. To let the brain know how "bright" the lamp is, the optic nerve has the logical choice to send this as an analog system within a specified timeframe. This means that, when looking at lamp A, the optic nerve might send 50 pulses in 1 millisecond, whilst when looking at lamp B, the optic nerve might send 100 pules in 1 millisecond. Thus explaining the analog nature of our brain.
To keep this preliminary view short, I will only briefly explain how the neurons communicate, before continuing with how we could create logic gates with them.
The communication between neurons can be viewed from three different perspectives, there are chemical events, electrical events and mechanical events. Though, most frequently, the communications is shown via transmission of electric pulses from one neuron to another neuron. The "roads" over which these pulses travel are called axons. Each neuron may hold multiple axons, connected via synapses.
When a neuron sends out a pulse, it can also be viewed from a chemical perspective, and a mechanical one, the chemical composition changes allowing for transmission of electrons, or reacting to the recieving of these electrons. Since I am neither interested in the chemics or mechanics part of the neuron, and feel as though my explenation would be unsatisfactory, I will omit these throughout the rest of this discussion.
It is vital to keep in mind that this proposed automaton models the communication between neurons, not the physiological effects on the neuron during this communication.
Logic gating with neurons.
As before mentioned, the brain prima facie digital, and we want thusly to work with this digital data. As mentioned, the way a neuron transmits data, over an axon, to another neuron can be viewed from three separate perspectives. A chemical, electrical, and mechanical perspective can be found, however, on such microscopic levels we can model it as one process – the sending of data from neuron A to neuron B via electrical pulse. The chemical and mechanical events are largely found inside the neuron itself, but the exact way on which this happens need not be implemented, as the implementation considers communication primarily.
The most reasonable way of implementing this – considering the neurons communicate via electric pulse – is to consider an ‘energy-threshold’ for each neuron. Let us assume that each neuron can create a pulse of 25mV, to create a gating system with neurons, we can use the threshold the neuron needs to send out a pulse. (We violate the principle here that ‘Absence of a signal should never be used as a signal’, as stated by J. Bigelow, but it makes sense to use this from a neurological point of view)
Assume we have a neuron, which is connected with three axons – two of which he can receive input from and a third which he can send a pulse across. Imagine we want to create the logical ‘AND’ gate – we can do this by setting the threshold to 50mV.
|Pulse A||Pulse B||Result|
|0 mV||0 mV||0 mV|
|0 mV||25 mV||25 mV|
|25 mV||0 mV||25 mV|
|25 mV||25 mV||50 mV|
From this, we can see that the only time the threshold value of 50 mV is reached, is when a pulse has come from both neurons. Though a remark has to be made on the simultaneity of the system.
The neuron where the pulse arrives can hold this voltage for a certain period of time, allowing for simultaneity due to containment of energy. This means that, say, pulse A arrives at time t=1ms, and pulse B arrives at t=2ms, the result will still be 50 mV due to the containment. This too, can be modeled rather easily.
Another remark that has to be made, is that a neuron does not necessarily have only 2 synapses (connecting axons), they may very well have 50 of these, in which case some interesting gating tricks could be used – but the threshold system is expandable. (Say, the ‘AND’ gate only works when 10 axons have delivered 225 mV, allowing for 9 out of 10 axons to be needed, instead of all 10, but this, amongst other simplifications, can be left out for the basic model).
The above example should illustrate clearly how one could construct the other gates by using these threshold values, keeping in mind that all complex action which happens on a system can ultimately be brought down to the basic logic gates.
From what is written here, I will construct the cellular automaton - reusing the code base I have created - and posted on this blog. The autamaton, though being limited in size - and clearly efficiency - should show how communication happens between neurons.