1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
How to use the hebb synapse demo:
--------------------------------
This demo shows how to use hebbian synapses from within genesis. You will
recall that the way synapses are implemented is using the "synchan" object,
which represents a synaptically-activated channel. Synapses per se are
actually structures within the synchan which are created when a SPIKE
message is added between the spiking object (e.g. a spikegen object) and
the synchan. The synapses have fields that can be accessed (the only
important ones being "weight" and "delay" for synaptic weight and
propagation delay respectively). Thus, one can say
setfield /my_synchan synapse[0].weight 1.0 synapse[0].delay 0.005
Similarly, the way hebbian synapses are implemented is using a
"hebbsynchan" object, which is the same as a synchan except that the
synaptic weights are not fixed but vary as a function of both the pre- and
postsynaptic activities. Synapses become hebb synapses (though they are
still called synapses e.g. the above setfield command would be unchanged).
These hebbian synapses, in addition to the weight and delay fields, have a
field called "pre_activity" which represents an averaging of the
presynaptic spiking activity through that synapse. Note that EACH hebb
synapse has its own "pre_activity" field, just as each synapse has its own
weight and delay field. The postsynaptic activity is the same for all
synapses on the hebbsynchan, and is a function of the averaged membrane
potential of the compartment to which the hebbsynchan is connected. For
more details on how pre- and postsynaptic activities are computed, type
"help hebbsynchan" at the genesis prompt. I strongly suggest you read this
carefully, as otherwise you'll have no idea of what the hebbsynchan is
actually doing or how.
Now type "genesis hebb.g" at the Unix prompt. The demo should come up.
There are six windows that come up, five graph windows and one control
panel. Due to space limitations some of the graph windows overlap; you may
want to raise or lower some windows to make others less visible/more
visible.
The demo has been derived from tutorial4 (Scripts/tutorials/tutorial4.g)
and consists of a simple cell with a soma (/cell/soma) and a single
dendrite (/cell/dend). The soma contains Hodgkin-Huxley voltage-gated
sodium and potassium channels. The dendrite is passive and has a
hebbsynchan attached to it (/cell/dend/Ex_channel). The input to the cell
is a regular stream of spikes generated by putting the output of a pulsegen
object (/input/pulse) directly into a spike generator (spikegen object:
/input/spike). Thus the cell is receiving regular synaptic input onto its
dendrite. The synapse (which we will call a "hebbian synapse") is created
by adding a SPIKE message between /input/spike and /cell/dend/Ex_channel.
This demo has one and only one hebbian synapse.
The graph windows show the following:
1) Membrane potential of the cell.
2) Conductance of the hebbsynchan object.
3) Presynaptic activity of the hebbian synapse.
4) Average membrane potential of the dendrite (calculated in the
hebbsynchan). This is used during weight updates to calculate the
postsynaptic activity, which is, however, not a field in the hebbsynchan
and so can't be plotted directly.
5) Synaptic weight of the hebbian synapse.
The demo has been initialized with various values for the parameters of the
hebbsynchan, including several thresholds, several time constants, the rate
at which the synaptic weight changes, and the minimum and maximum weight of
the synapse. These can be varied using the dialog boxes in the control
panel, as can the rate at which the input spikes occur. In addition, there
is a toggle which controls whether weight changes occur at all. In the
default position it reads "synaptic weight can be changed" and the weight
will, in fact, change. If you push the toggle down it will say "synaptic
weight is fixed" and the weight will not change.
Press the "RUN" button and watch the graphs which display the synaptic
weight and the synaptic conductance. The weight will increase steadily
until it reaches its maximum value of 3.0. As this happens the conductance
waveform will have a progressively larger amplitude. At some point the
conductance will be high enough to get the cell soma to spike. When you
press "RESET" you will note that the weight DOES NOT return to its original
value. The hebbian synapse has no memory of where it started from (neither
do real synapses).
Read the hebbsynchan doc file (type "help hebbsynchan") to learn what the
significance of each of the fields in the hebbsynchan are. Many of these
fields can be set in the dialog boxes on the control panel. You should
play around with these parameters after reading the doc file until you are
satisfied you understand how the hebbsynchan works. One feature is unusual
and not obvious: if you set weight_change_rate to a negative value the
hebbian synapse becomes an anti-hebbian synapse i.e. the sign of all weight
changes is reversed. Try running the simulation with the given parameter
values once, and then change weight_change_rate from 2.0 to -2.0, reset the
simulation and run it again. The weight, which had previously reached its
maximum value of 3.0, now starts to decrease.
Have fun!
Mike Vanier, Caltech 4/96
|