(*^ ::[paletteColors = 128; showRuler; automaticGrouping; currentKernel; fontset = title, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L1, e8, 24, "Times"; ; fontset = subtitle, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L1, e6, 18, "Times"; ; fontset = subsubtitle, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, italic, L1, e6, 14, "Times"; ; fontset = section, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, grayBox, M22, bold, L1, a20, 18, "Times"; ; fontset = subsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, blackBox, M19, bold, L1, a15, 14, "Times"; ; fontset = subsubsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, whiteBox, M18, bold, L1, a12, 12, "Times"; ; fontset = text, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ; fontset = smalltext, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 10, "Times"; ; fontset = input, noPageBreakBelow, nowordwrap, preserveAspect, groupLikeInput, M42, N23, bold, L1, 12, "Courier"; ; fontset = output, output, inactive, noPageBreakBelow, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L-5, 12, "Courier"; ; fontset = message, inactive, noPageBreakBelow, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L1, 12, "Courier"; ; fontset = print, inactive, noPageBreakBelow, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L1, 12, "Courier"; ; fontset = info, inactive, noPageBreakBelow, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L1, 12, "Courier"; ; fontset = postscript, PostScript, formatAsPostScript, output, inactive, noPageBreakBelow, nowordwrap, preserveAspect, groupLikeGraphics, M7, l34, w282, h287, L1, 12, "Courier"; ; fontset = name, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, italic, L1, 10, "Times"; ; fontset = header, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Geneva"; ; fontset = Left Header, nohscroll, cellOutline, 12, "Geneva"; ; fontset = footer, inactive, nohscroll, noKeepOnOnePage, preserveAspect, center, M7, L1, 12, "Geneva"; ; fontset = Left Footer, cellOutline, blackBox, 12, "Geneva"; ; fontset = help, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 10, "Times"; ; fontset = clipboard, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Geneva"; ; fontset = completions, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Courier"; ; fontset = special1, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Geneva"; ; fontset = special2, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Geneva"; ; fontset = special3, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Geneva"; ; fontset = special4, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Geneva"; ; fontset = special5, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Geneva"; ;] :[font = title; inactive; preserveAspect; spaceBelow = 10; startGroup; ] Self-organization of Orientation Sensitive Cells in the Primary Visual Cortex CS 267A, Spring, 1992 Ted Bujewski :[font = section; inactive; Cclosed; preserveAspect; blackBox; startGroup; ] Introduction :[font = text; inactive; preserveAspect; endGroup; ] During the 1960's two researchers at the Harvard Medical School, David Hubel and Torsten Wiesel conducted a series of experiments [3, 4,5,6] which demonstrated that the visual system in cats and monkeys is structured in a hierarchy of computational complexity. At each level in the hierarchy, cells respond to input from a wider range of the visual field and also to more abstract phenomena. At the lowest level, in the retina and the lateral geniculate nucleus (LGN), neurons respond primarily to brightness contrast and position. As one proceeds up the hierarchy, one encounters cortical cells which respond to orientated line segments which are sensitive to location, movement, or line terminations. In addition to the hierarchical nature of the visual system, Hubel and Wiesel also discovered that the orientation sensitive cells in the visual cortex are grouped into columns perpendicular to the cortical surface. Within each colum, all of the neurons respond to lines of the same orientation. In addition, neighboring columns respond to similar orientations resulting in an orderly shift from one orientation to another as one goes from one column to the next. To explain the development of this type of structure, Hubel and Wiesel proposed that it is predetermined genetically. Subsequent research by Hirsch and Spinalli on kittens [2], however, showed that it was possible for the environment to modify cortical structure for some time after birth. This lead others to speculate that some type of self-organization must be involved in cortical formation to provide for this plasticity. In 1973, von der Malsburg [7] presented a neural network model of the primary visual cortex to demonstrate that this type of self organization could result from a simple learning procedure. This notebook attempts to implement this model as closely as possible. :[font = section; inactive; initialization; Cclosed; preserveAspect; blackBox; startGroup; ] Definitions :[font = input; initialization; preserveAspect; endGroup; ] *) Off[General::spell]; Off[General::spell1]; (* :[font = section; inactive; preserveAspect; blackBox; startGroup; ] Neural Model :[font = subsection; inactive; Cclosed; preserveAspect; grayBox; startGroup; ] Network Architecture :[font = text; inactive; preserveAspect; ] To simulate the center-surround nature of neuronal structure, the network was chosen to consist of two hexogonal arrays. One array, eCortex, is composed of excitatory cells (E-cells) and the other array, iCortex, consists of inhibatory cells (I-cells). These arrays are considered to be two cortical layers, one on top of the other. The hexagonal arrangement provides each cell with an approximately circular neighborhood of surrounding cells. To simplify computations each hexagonal array is stored in Mathematica as a rectangular array and operated on as a one dimensional list. Conceptually, however, it is treated as rows of neurons which form a hexagonal shape. To avoid problems at the boundaries, it is assumed that the first row of cells and the last row are actually the same row and that the first and last cells of each row are neighbors. Taking this into account the network is really more like a pinched torus. Since the first and last rows are considered to be the same, for computational convenience, only the first row has been included in the hexagon. The arrays are therefore initialized as follows: ;[s] 7:0,1;133,2;141,1;205,2;213,1;506,3;517,1;1127,-1; 4:0,16,12,Times,0,14,0,0,0;4,13,9,Times,0,12,0,0,0;2,13,9,Times,1,12,0,0,0;1,13,9,Times,2,12,0,0,0; :[font = input; initialization; preserveAspect; ] *) cortexXdim = 29; cortexYdim = 14; eGrid = Table[0, {cortexYdim}, {cortexXdim}]; iGrid = Table[0, {cortexYdim}, {cortexXdim}]; (* :[font = text; inactive; preserveAspect; ] Because we are using a rectangular data structure to represent a hexagon, it is necessary to create a list of those places in the array which contain neurons. :[font = input; preserveAspect; ] mask = {{8},{10},{12},{14},{16},{18},{20},{22}, {36},{38},{40},{42},{44},{46},{48},{50},{52}, {64},{66},{68},{70},{72},{74},{76},{78},{80},{82}, {92},{94},{96},{98},{100},{102},{104},{106},{108}, {110},{112},{120},{122},{124},{126},{128},{130}, {132},{134},{136},{138},{140},{142},{148},{150}, {152},{154},{156},{158},{160},{162},{164},{166}, {168},{170},{172},{176},{178},{180},{182},{184}, {186},{188},{190},{192},{194},{196},{198},{200}, {202},{204},{206},{208},{210},{212},{214},{216}, {218},{220},{222},{224},{226},{228},{230},{232}, {234},{236},{238},{240},{242},{244},{246},{248}, {250},{252},{254},{256},{258},{260},{264},{266}, {268},{270},{272},{274},{276},{278},{280},{282}, {284},{286},{288},{294},{296},{298},{300},{302}, {304},{306},{308},{310},{312},{314},{316},{324}, {326},{328},{330},{332},{334},{336},{338},{340}, {342},{344},{354},{356},{358},{360},{362},{364}, {366},{368},{370},{372},{384},{386},{388},{390}, {392},{394},{396},{398},{400}}; :[font = text; inactive; preserveAspect; ] To initialize the internal state of the neurons we pick a random number between 0 and some maximum initial signal value and map it onto the grid. :[font = input; preserveAspect; ] eMaxSignal = 1.25; iMaxSignal = 1.25; eCortex := MapAt[Plus[#,Random[Real, eMaxSignal]]&, Flatten[eGrid], mask]; iCortex := MapAt[Plus[#,Random[Real, iMaxSignal]]&, Flatten[iGrid], mask]; :[font = text; inactive; preserveAspect; ] In order to visualize the network, the mask can be mapped onto the array and then displayed with a density plot. The color of a cell represents the internal state of the neuron. :[font = input; preserveAspect; startGroup; ] ListDensityPlot[Partition[eCortex, 29], Frame->False] :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 282; ] %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.033156 0.019231 0.068681 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash 0 setgray gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 29 string 29 14 8 [29 0 0 14 0 0] { currentfile 1 index readhexstring pop } image 0000000000000083002E00EC000F00EF00AD00AE00250000 0000000000 0000000000000E00E900590060002000CC00B5008C000300 0000000000 00000000008800E6000700E9008E00A900CE002D000600CF 0000000000 00000000EF00EA00A800740054003400CF004300F200B900 CE00000000 000000130076003300B10019004D000B000C00D9005D00E1 006D000000 0000360091000A003A00150032001100A80084008200C600 23001E0000 004000C2006600390034006E00A000500065007400D400A1 0045007000 BA001200CE008A002B00FC007700F6000100E6000800C500 9500F30003 00E6000F002800A80048008A001000A300CB00F300300071 0015007400 0000B2001D005E009800A300850091003C000500D600FC00 A500210000 000000D5001B00EF004D0094001000BA0032005800FD00FF 001C000000 00000000B3006200F200E4008D0030003A00B300FA000B00 F800000000 00000000000600EF005F00E7001D002B0029001D00FA003E 0000000000 0000000000001200600059008100E800520096009300D700 0000000000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.05239 0.01923 moveto 0.05239 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.08554 0.01923 moveto 0.08554 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.1187 0.01923 moveto 0.1187 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.15186 0.01923 moveto 0.15186 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.18501 0.01923 moveto 0.18501 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.21817 0.01923 moveto 0.21817 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.25133 0.01923 moveto 0.25133 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.28448 0.01923 moveto 0.28448 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.31764 0.01923 moveto 0.31764 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.3508 0.01923 moveto 0.3508 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.38395 0.01923 moveto 0.38395 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.41711 0.01923 moveto 0.41711 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.45027 0.01923 moveto 0.45027 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.48342 0.01923 moveto 0.48342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.51658 0.01923 moveto 0.51658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.54973 0.01923 moveto 0.54973 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.58289 0.01923 moveto 0.58289 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.61605 0.01923 moveto 0.61605 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.6492 0.01923 moveto 0.6492 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.68236 0.01923 moveto 0.68236 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.71552 0.01923 moveto 0.71552 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.74867 0.01923 moveto 0.74867 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.78183 0.01923 moveto 0.78183 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.81499 0.01923 moveto 0.81499 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.84814 0.01923 moveto 0.84814 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.8813 0.01923 moveto 0.8813 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.91446 0.01923 moveto 0.91446 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.94761 0.01923 moveto 0.94761 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.08791 moveto 0.98077 0.08791 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.15659 moveto 0.98077 0.15659 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.22527 moveto 0.98077 0.22527 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.29396 moveto 0.98077 0.29396 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.36264 moveto 0.98077 0.36264 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.43132 moveto 0.98077 0.43132 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.5 moveto 0.98077 0.5 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.56868 moveto 0.98077 0.56868 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.63736 moveto 0.98077 0.63736 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.70604 moveto 0.98077 0.70604 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.77473 moveto 0.98077 0.77473 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.84341 moveto 0.98077 0.84341 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.91209 moveto 0.98077 0.91209 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore % End of Graphics MathPictureEnd :[font = output; output; inactive; preserveAspect; endGroup; endGroup; ] The Unformatted text for this cell was not generated. Use options in the Actions Settings dialog box to control when Unformatted text is generated. ;[o] -DensityGraphics- :[font = subsection; inactive; Cclosed; preserveAspect; grayBox; startGroup; ] Network Wiring :[font = text; inactive; preserveAspect; ] The two arrays are connected together to form a two dimensional cortical structure. Each active E-cell directly excites its immediately neighboring E-cells with a strength eeStrength and its immediately neighboring I-cells (including the I-cell directly below the active E-cell) with a strength eiStrength. Each active I-cell inhibits its next-to-immediate E-cell neighbors with a strength ieStrength. The I-cells do not inhibit other I-cells, only E-cells. The strength of connection is meant to represent the sum of all of the postsynaptic potentials which are transfered through the synapses from one cell onto the dendrites and the cell body of the other. The internal state of a cell is determined by the sum of its inputs from active neighboring cells, external input, and an exponential decay factor. The decay factor is included to represent two aspects of cell behavior: the decay of postsynaptic potentials and the polarization which follows the generation of an action potential. A cell is considered to be active if its internal state exceeds a certain threshold. The values of eeStrength, eiStrength, ieStrength, and threshold which are used, were found by trial and error to provide a stable solution. These values are given below: ;[s] 16:0,1;172,2;173,3;183,1;295,3;306,1;391,3;402,1;1074,3;1084,1;1101,3;1124,1;1125,3;1136,1;1141,3;1151,1;1259,-1; 4:0,16,12,Times,0,14,0,0,0;8,13,9,Times,0,12,0,0,0;1,13,10,Courier,1,12,0,0,0;7,13,9,Times,1,12,0,0,0; :[font = input; preserveAspect; ] eeStrength = 0.4; ieStrength = -0.3; eiStrength = 0.286; threshold = 1.0; :[font = text; inactive; preserveAspect; ] The output signal of a cell is the amount by which the internal state of the cell is above threshold. We can therfore write the thresholding function ;[s] 4:0,0;1,1;91,2;101,1;152,-1; 3:1,16,12,Times,0,14,0,0,0;2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0; :[font = input; preserveAspect; ] outputSignal[x_] := If[x < threshold, 0., x - threshold]; :[font = text; inactive; preserveAspect; ] This function can then be mapped onto the entire network at once ;[s] 2:0,0;1,1;66,-1; 2:1,16,12,Times,0,14,0,0,0;1,13,9,Times,0,12,0,0,0; :[font = input; preserveAspect; ] eSignal := MapAt[outputSignal, eCortex, mask]; iSignal := MapAt[outputSignal, iCortex, mask]; :[font = text; inactive; preserveAspect; ] The input to each E-cell from its neighboring E-cells can then be written as :[font = input; preserveAspect; ] eeInput := eeStrength (RotateLeft[eSignal, 2] + RotateRight[eSignal,2] + RotateLeft[eSignal, cortexXdim - 1] + RotateLeft[eSignal, cortexXdim + 1] + RotateRight[eSignal,cortexXdim - 1] + RotateRight[eSignal,cortexXdim + 1]); :[font = text; inactive; preserveAspect; ] and the input to each E-cell from its neighboring I-cells can be written as :[font = input; preserveAspect; ] ieInput := ieStrength (RotateLeft[iSignal, 4] + RotateRight[iSignal,4] + RotateLeft[iSignal, cortexXdim - 3] + RotateLeft[iSignal, cortexXdim + 3] + RotateLeft[iSignal, 2*cortexXdim - 2] + RotateLeft[iSignal, 2*cortexXdim] + RotateLeft[iSignal, 2*cortexXdim + 2] + RotateRight[iSignal, cortexXdim - 3] + RotateRight[iSignal, cortexXdim + 3] + RotateRight[iSignal, 2*cortexXdim - 2] + RotateRight[iSignal, 2*cortexXdim] + RotateLeft[iSignal, 2*cortexXdim + 2]); :[font = text; inactive; preserveAspect; ] The input to each I-cell from neighboring E-cells can be expressed similarly :[font = input; preserveAspect; ] eiInput := eiStrength (RotateLeft[eSignal, 2] + RotateRight[eSignal,2] + RotateLeft[eSignal, cortexXdim - 1] + RotateLeft[eSignal, cortexXdim + 1] + RotateRight[eSignal,cortexXdim - 1] + RotateRight[eSignal,cortexXdim + 1]); :[font = text; inactive; preserveAspect; endGroup; ] This is an additive model [1]. No shunting terms are included to bound the output signal of a neuron. Instead, the network is designed so that the inhibitory cells limit the output of excitatory neurons. :[font = subsection; inactive; Cclosed; preserveAspect; grayBox; startGroup; ] Afferent Input :[font = text; inactive; preserveAspect; ] A set of afferent fibers provides the cortex with input from the retina. Each afferent fiber projects to all of the E-cells in the exitatory cortical plane. There are no projections to the inhibitory plane. The strengths of the connections between afferent fibers and E-cells, aeStrength, is determined at random from a uniform distribution in the interval [0, maxAfferentStrength]. To provide these values they are generated from a unifrom distribution. ;[s] 5:0,1;279,2;290,1;363,2;383,1;462,-1; 3:0,16,12,Times,0,14,0,0,0;3,13,9,Times,0,12,0,0,0;2,13,9,Times,1,12,0,0,0; :[font = input; preserveAspect; ] afferentYdim = cortexXdim * cortexYdim; afferentXdim = 19; maxAfferentStrength = 0.25; aeStrength = Table[Random[Real, {0., maxAfferentStrength}], {afferentYdim}, {afferentXdim}]; :[font = text; inactive; preserveAspect; ] Whenever the retina is hit by light in the receptive field of an afferent fiber, it causes the appropriate afferent fiber to fire. All fibers which are not stimulated remain silent. The input to an E-cell from an afferent fiber is therefore considered to be all or nothing. If we denote the strengths of the signals of the afferent fibers by aSignals, the input to an E-cell from its afferent fibers can then be determined ;[s] 5:0,1;346,2;352,1;353,2;354,1;428,-1; 3:0,16,12,Times,0,14,0,0,0;3,13,9,Times,0,12,0,0,0;2,13,9,Times,1,12,0,0,0; :[font = input; preserveAspect; ] getAeInput[pattern_] := ( aeGrid = Table[0, {afferentYdim}]; Do [ aeGrid[[k]] = Apply[Plus, aeStrength[[k]] aSignal[pattern]];, {k, 1, afferentYdim} ]; aeInput = MapAt[Plus[#,aeGrid]&, Flatten[aeGrid], mask]; ) :[font = text; inactive; preserveAspect; endGroup; ] where pattern is the stimulus applied to the network. This is explained in more detail below. ;[s] 3:0,1;5,2;13,1;95,-1; 3:0,16,12,Times,0,14,0,0,0;2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0; :[font = subsection; inactive; Cclosed; preserveAspect; grayBox; startGroup; ] System Equations :[font = text; inactive; preserveAspect; ] Now that all of the cortical inputs have been defined, it is possible to write down the equations which govern the evolution of our model cortex. To model the temporal aspects of our model would require a system of nonlinear differential equations. To simplify matters, we will only consider the steady state of our system. This results in a set of algebraic equations. After obtaining the set of algebraic equations, it is possible to absorb the decay factor which we discussed earlier into the connection strengths. This leads to the following set of equations :[font = input; preserveAspect; ] eCellEquations := Map[Equal[#,0]&, Apply[Plus, {eeInput, ieInput, aeInput}]] iCellEquations := Map[Equal[#,0]&, eiInput] :[font = text; inactive; preserveAspect; ] To solve these equations we define the following procedure :[font = input; preserveAspect; endGroup; ] getSolution := ( solution = Flatten[Solve[ Join[eCellEquations, iCellEquations]]]; eCortex = ReplaceAll[eCortex, solution]; iCortex = ReplaceAll[iCortex, solution];) :[font = subsection; inactive; Cclosed; preserveAspect; grayBox; startGroup; ] Learning Rule :[font = text; inactive; preserveAspect; ] In order for the system to self organize, there must exist some mechanism for self-modification based upon external input. This implies some type of learning rule. The rule which is used for this model is: the strength of a connection between an afferent fiber and an E-cell is increased if the stimulation from an afferent fiber leads to the firing of an E-cell. The amount of increase is proportional to the signal on the afferent fiber and the output signal of the E-cell. This is a form of Hebbian learning. At every learning step, the values in aeStrength are increased as follows ;[s] 3:0,1;554,2;565,1;592,-1; 3:0,16,12,Times,0,14,0,0,0;2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0; :[font = input; preserveAspect; ] learningRate = .05; modifyAeStrength[pattern_] := ( Do [ aeStrength[[r]] = aeStrength[[r]] + (learningRate * aSignal[pattern] * eSignal[[r]]), {r, afferentYdim} ]; ) :[font = text; inactive; preserveAspect; ] In order to contain the values of the connection strengths, aeStrength is also normalized at each step so that the sum of the connection strengths for each E-cell remains constant. This is given by: ;[s] 3:0,1;59,2;70,1;201,-1; 3:0,16,12,Times,0,14,0,0,0;2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0; :[font = input; preserveAspect; endGroup; ] totalStrength = Table[0, {afferentYdim}]; normalizeAeStrength := ( Do [ totalStrength[[n]] = Apply[Plus, aeStrength[[n]]], {n, afferentYdim} ]; Do [ aeStrength[[m]] = aeStrength[[m]] * afferentXdim/2 * maxAfferentStrength / totalStrength[[m]], {m, afferentYdim} ]; ) :[font = subsection; inactive; Cclosed; preserveAspect; grayBox; startGroup; ] Input Patterns :[font = text; inactive; preserveAspect; ] A standard set of nine stimuli is presented to the network for training purposes. Each stimulus consistes of 7 active afferent fibers out of the total 19. The aeSignal of those fibers which are active is set to one. The inactive fibers remain at zero. To encourage the formation of orientation columns, the stimuli are arranged in patterns which resemble bars at different orientations. As in the cortex, the organization of the input patterns is in the form of a hexagonal array in order to approximate a circular receptive field. The patterns will be stored as a list of positions in the hexagon receptiveField. ;[s] 5:0,1;161,2;170,1;604,2;619,1;623,-1; 3:0,16,12,Times,0,14,0,0,0;3,13,9,Times,0,12,0,0,0;2,13,9,Times,1,12,0,0,0; :[font = input; preserveAspect; ] receptiveFieldSize = 19; receptiveField = Table[0, {receptiveFieldSize}]; pattern1 = {{2},{5},{6},{10},{14},{15},{18}}; pattern2 = {{2},{3},{6},{10},{14},{17},{18}}; pattern3 = {{3},{6},{7},{10},{13},{14},{17}}; pattern4 = {{6},{7},{9},{10},{11},{13},{14}}; pattern5 = {{7},{8},{9},{10},{11},{12},{13}}; pattern6 = {{4},{8},{9},{10},{11},{12},{16}}; pattern7 = {{4},{5},{9},{10},{11},{15},{16}}; pattern8 = {{1},{4},{5},{10},{15},{16},{19}}; pattern9 = {{1},{2},{5},{10},{15},{18},{19}}; :[font = text; inactive; preserveAspect; ] The afferent signal, aSignal, is then found by mapping these patterns onto receptiveField. ;[s] 5:0,1;20,2;28,1;74,2;89,1;92,-1; 3:0,16,12,Times,0,14,0,0,0;3,13,9,Times,0,12,0,0,0;2,13,9,Times,1,12,0,0,0; :[font = input; preserveAspect; ] aSignal[pattern_] := MapAt[Plus[#,1]&, receptiveField, pattern] :[font = text; inactive; preserveAspect; ] For display purposes the afferent signal can then be mapped onto a rectangular grid :[font = input; preserveAspect; ] hexagonMap = {3,5,7,11,13,15,17,19,21,23, 25,27,29,31,33,35,39,41,43}; :[font = input; preserveAspect; ] gridDimension = 45; :[font = input; preserveAspect; ] displayField[pattern_] := ( grid = Table[0, {gridDimension}]; Do[ grid[[hexagonMap[[i]]]] = grid[[hexagonMap[[i]]]] + aSignal[pattern][[i]] + .1, {i, 19}]; ListDensityPlot[Reverse[Partition[grid, 9]], Frame->False, DisplayFunction->Identity] ) :[font = text; inactive; preserveAspect; ] To display all nine patterns we construct a table :[font = input; preserveAspect; ] patternArray = {pattern1, pattern2, pattern3, pattern4, pattern5, pattern6, pattern7, pattern8, pattern9}; :[font = input; preserveAspect; startGroup; ] patternTable = Table[ displayField[patternArray[[j]]], {j, 1, 9}]; Show[ GraphicsArray[ Partition[patternTable, 3]]] :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 30; pictureTop = 14; pictureWidth = 201; pictureHeight = 231; ] %! %%Creator: Mathematica %%AspectRatio: 1.15234 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.02381 0.952381 0.027437 0.952381 [ [ 0 0 0 0 ] [ 1 1.152344 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: Graphics [ ] 0 setdash 0 setgray gsave grestore 0 0 moveto 1 0 lineto 1 1.15234 lineto 0 1.15234 lineto closepath clip newpath gsave % Start of sub-graphic gsave 0.02381 0.82729 0.32143 1.12491 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.106838 0.019231 0.192308 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 9 string 9 5 8 [9 0 0 5 0 0] { currentfile 1 index readhexstring pop } image 00006600FF00660000 006600FF00FF006600 66006600FF00660066 006600FF00FF006600 00006600FF00660000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.12607 0.01923 moveto 0.12607 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.23291 0.01923 moveto 0.23291 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.33974 0.01923 moveto 0.33974 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.44658 0.01923 moveto 0.44658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.55342 0.01923 moveto 0.55342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.66026 0.01923 moveto 0.66026 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.76709 0.01923 moveto 0.76709 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.87393 0.01923 moveto 0.87393 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.21154 moveto 0.98077 0.21154 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.40385 moveto 0.98077 0.40385 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.59615 moveto 0.98077 0.59615 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.78846 moveto 0.98077 0.78846 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.35119 0.82729 0.64881 1.12491 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.106838 0.019231 0.192308 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 9 string 9 5 8 [9 0 0 5 0 0] { currentfile 1 index readhexstring pop } image 0000FF00FF00660000 006600FF0066006600 66006600FF00660066 0066006600FF006600 00006600FF00FF0000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.12607 0.01923 moveto 0.12607 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.23291 0.01923 moveto 0.23291 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.33974 0.01923 moveto 0.33974 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.44658 0.01923 moveto 0.44658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.55342 0.01923 moveto 0.55342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.66026 0.01923 moveto 0.66026 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.76709 0.01923 moveto 0.76709 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.87393 0.01923 moveto 0.87393 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.21154 moveto 0.98077 0.21154 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.40385 moveto 0.98077 0.40385 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.59615 moveto 0.98077 0.59615 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.78846 moveto 0.98077 0.78846 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.67857 0.82729 0.97619 1.12491 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.106838 0.019231 0.192308 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 9 string 9 5 8 [9 0 0 5 0 0] { currentfile 1 index readhexstring pop } image 0000FF006600660000 00FF00FF0066006600 66006600FF00660066 0066006600FF00FF00 000066006600FF0000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.12607 0.01923 moveto 0.12607 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.23291 0.01923 moveto 0.23291 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.33974 0.01923 moveto 0.33974 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.44658 0.01923 moveto 0.44658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.55342 0.01923 moveto 0.55342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.66026 0.01923 moveto 0.66026 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.76709 0.01923 moveto 0.76709 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.87393 0.01923 moveto 0.87393 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.21154 moveto 0.98077 0.21154 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.40385 moveto 0.98077 0.40385 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.59615 moveto 0.98077 0.59615 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.78846 moveto 0.98077 0.78846 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.02381 0.49991 0.32143 0.79753 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.106838 0.019231 0.192308 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 9 string 9 5 8 [9 0 0 5 0 0] { currentfile 1 index readhexstring pop } image 000066006600660000 00FF00FF0066006600 6600FF00FF00FF0066 0066006600FF00FF00 000066006600660000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.12607 0.01923 moveto 0.12607 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.23291 0.01923 moveto 0.23291 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.33974 0.01923 moveto 0.33974 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.44658 0.01923 moveto 0.44658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.55342 0.01923 moveto 0.55342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.66026 0.01923 moveto 0.66026 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.76709 0.01923 moveto 0.76709 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.87393 0.01923 moveto 0.87393 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.21154 moveto 0.98077 0.21154 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.40385 moveto 0.98077 0.40385 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.59615 moveto 0.98077 0.59615 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.78846 moveto 0.98077 0.78846 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.35119 0.49991 0.64881 0.79753 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.106838 0.019231 0.192308 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 9 string 9 5 8 [9 0 0 5 0 0] { currentfile 1 index readhexstring pop } image 000066006600660000 00FF00660066006600 FF00FF00FF00FF00FF 00660066006600FF00 000066006600660000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.12607 0.01923 moveto 0.12607 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.23291 0.01923 moveto 0.23291 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.33974 0.01923 moveto 0.33974 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.44658 0.01923 moveto 0.44658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.55342 0.01923 moveto 0.55342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.66026 0.01923 moveto 0.66026 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.76709 0.01923 moveto 0.76709 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.87393 0.01923 moveto 0.87393 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.21154 moveto 0.98077 0.21154 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.40385 moveto 0.98077 0.40385 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.59615 moveto 0.98077 0.59615 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.78846 moveto 0.98077 0.78846 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.67857 0.49991 0.97619 0.79753 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.106838 0.019231 0.192308 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 9 string 9 5 8 [9 0 0 5 0 0] { currentfile 1 index readhexstring pop } image 000066006600660000 00660066006600FF00 FF00FF00FF00FF00FF 00FF00660066006600 000066006600660000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.12607 0.01923 moveto 0.12607 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.23291 0.01923 moveto 0.23291 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.33974 0.01923 moveto 0.33974 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.44658 0.01923 moveto 0.44658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.55342 0.01923 moveto 0.55342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.66026 0.01923 moveto 0.66026 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.76709 0.01923 moveto 0.76709 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.87393 0.01923 moveto 0.87393 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.21154 moveto 0.98077 0.21154 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.40385 moveto 0.98077 0.40385 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.59615 moveto 0.98077 0.59615 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.78846 moveto 0.98077 0.78846 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.02381 0.17253 0.32143 0.47015 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.106838 0.019231 0.192308 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 9 string 9 5 8 [9 0 0 5 0 0] { currentfile 1 index readhexstring pop } image 000066006600660000 0066006600FF00FF00 6600FF00FF00FF0066 00FF00FF0066006600 000066006600660000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.12607 0.01923 moveto 0.12607 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.23291 0.01923 moveto 0.23291 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.33974 0.01923 moveto 0.33974 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.44658 0.01923 moveto 0.44658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.55342 0.01923 moveto 0.55342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.66026 0.01923 moveto 0.66026 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.76709 0.01923 moveto 0.76709 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.87393 0.01923 moveto 0.87393 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.21154 moveto 0.98077 0.21154 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.40385 moveto 0.98077 0.40385 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.59615 moveto 0.98077 0.59615 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.78846 moveto 0.98077 0.78846 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.35119 0.17253 0.64881 0.47015 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.106838 0.019231 0.192308 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 9 string 9 5 8 [9 0 0 5 0 0] { currentfile 1 index readhexstring pop } image 000066006600FF0000 0066006600FF00FF00 66006600FF00660066 00FF00FF0066006600 0000FF006600660000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.12607 0.01923 moveto 0.12607 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.23291 0.01923 moveto 0.23291 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.33974 0.01923 moveto 0.33974 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.44658 0.01923 moveto 0.44658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.55342 0.01923 moveto 0.55342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.66026 0.01923 moveto 0.66026 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.76709 0.01923 moveto 0.76709 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.87393 0.01923 moveto 0.87393 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.21154 moveto 0.98077 0.21154 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.40385 moveto 0.98077 0.40385 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.59615 moveto 0.98077 0.59615 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.78846 moveto 0.98077 0.78846 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.67857 0.17253 0.97619 0.47015 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.106838 0.019231 0.192308 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 9 string 9 5 8 [9 0 0 5 0 0] { currentfile 1 index readhexstring pop } image 00006600FF00FF0000 0066006600FF006600 66006600FF00660066 006600FF0066006600 0000FF00FF00660000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.12607 0.01923 moveto 0.12607 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.23291 0.01923 moveto 0.23291 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.33974 0.01923 moveto 0.33974 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.44658 0.01923 moveto 0.44658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.55342 0.01923 moveto 0.55342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.66026 0.01923 moveto 0.66026 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.76709 0.01923 moveto 0.76709 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.87393 0.01923 moveto 0.87393 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.21154 moveto 0.98077 0.21154 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.40385 moveto 0.98077 0.40385 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.59615 moveto 0.98077 0.59615 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.78846 moveto 0.98077 0.78846 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic grestore % End of Graphics MathPictureEnd :[font = output; output; inactive; preserveAspect; endGroup; ] The Unformatted text for this cell was not generated. Use options in the Actions Settings dialog box to control when Unformatted text is generated. ;[o] -GraphicsArray- :[font = text; inactive; preserveAspect; endGroup; endGroup; ] The white squares represent active afferent fibers. The other squares are inactive. :[font = section; inactive; Cclosed; preserveAspect; blackBox; startGroup; ] Network Simulation :[font = text; inactive; preserveAspect; ] The network is simulated by solving the set of algebraic equations given in the procedure getSolution. To allow the network to reach a stable state, the equations are solved iteratively until the change from one step to the next is very small. At each iteration, the network is presented with an input pattern which is picked at random from one of the 9 standard patterns. After a stable state is achieved, learning begins as described above. ;[s] 3:0,1;89,2;101,1;450,-1; 3:0,16,12,Times,0,14,0,0,0;2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0; :[font = subsection; inactive; preserveAspect; grayBox; startGroup; ] Achieving Equilibrium :[font = text; inactive; preserveAspect; fontSize = 14; ] In this section we will simulate the network until equilibrium is reached. ;[s] 1:0,1;76,-1; 2:0,16,12,Times,0,14,0,0,0;1,13,9,Times,0,12,0,0,0; :[font = input; preserveAspect; ] fire[x_] := If[x > 0., 1., 0.]; firingCells := MapAt[fire, eSignal, mask]; :[font = input; preserveAspect; ] numIterations = 1; numSnapshots = 3; firingPlot = Table[{}, {numSnapshots}]; normalizeAeStrength; Do[ Do[ inputPattern = patternArray[[ Random[Integer, {1,9}] ]]; getAeInput[inputPattern]; getSolution;, {numIterations} ]; firingPlot[[s]] = ListDensityPlot[Partition[firingCells, 29], Frame->False, DisplayFunction->Identity], {s, numSnapshots} ]; :[font = input; preserveAspect; startGroup; ] Show[ GraphicsArray[ Partition[firingPlot, 3] ] ] :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 504; pictureHeight = 157; ] %! %%Creator: Mathematica %%AspectRatio: 0.3125 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.02381 0.952381 0.00744 0.952381 [ [ 0 0 0 0 ] [ 1 0.3125 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: Graphics [ ] 0 setdash 0 setgray gsave grestore 0 0 moveto 1 0 lineto 1 0.3125 lineto 0 0.3125 lineto closepath clip newpath gsave % Start of sub-graphic gsave 0.02381 0.00744 0.32143 0.30506 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.033156 0.019231 0.068681 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 29 string 29 14 8 [29 0 0 14 0 0] { currentfile 1 index readhexstring pop } image 00000000000000000000000000FF000000FF000000FF0000 0000000000 00000000000000000000FF0000000000FF0000000000FF00 0000000000 0000000000000000000000000000000000000000000000FF 0000000000 000000000000000000000000000000000000000000000000 0000000000 000000000000000000FF0000000000000000000000000000 0000000000 000000000000FF0000000000FF000000FF00000000000000 0000000000 000000FF0000000000000000000000FF0000000000FF0000 00FF000000 0000000000000000FF00000000000000000000000000FF00 0000000000 000000FF00000000000000000000000000FF00FF000000FF 000000FF00 0000000000000000000000000000FF00FF00000000000000 0000000000 0000000000000000000000FF000000FF000000FF000000FF 0000000000 00000000FF0000000000FF000000FF000000FF00FF000000 0000000000 0000000000000000000000000000000000FF000000000000 0000000000 000000000000000000000000000000000000FF0000000000 0000000000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.05239 0.01923 moveto 0.05239 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.08554 0.01923 moveto 0.08554 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.1187 0.01923 moveto 0.1187 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.15186 0.01923 moveto 0.15186 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.18501 0.01923 moveto 0.18501 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.21817 0.01923 moveto 0.21817 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.25133 0.01923 moveto 0.25133 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.28448 0.01923 moveto 0.28448 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.31764 0.01923 moveto 0.31764 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.3508 0.01923 moveto 0.3508 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.38395 0.01923 moveto 0.38395 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.41711 0.01923 moveto 0.41711 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.45027 0.01923 moveto 0.45027 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.48342 0.01923 moveto 0.48342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.51658 0.01923 moveto 0.51658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.54973 0.01923 moveto 0.54973 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.58289 0.01923 moveto 0.58289 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.61605 0.01923 moveto 0.61605 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.6492 0.01923 moveto 0.6492 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.68236 0.01923 moveto 0.68236 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.71552 0.01923 moveto 0.71552 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.74867 0.01923 moveto 0.74867 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.78183 0.01923 moveto 0.78183 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.81499 0.01923 moveto 0.81499 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.84814 0.01923 moveto 0.84814 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.8813 0.01923 moveto 0.8813 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.91446 0.01923 moveto 0.91446 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.94761 0.01923 moveto 0.94761 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.08791 moveto 0.98077 0.08791 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.15659 moveto 0.98077 0.15659 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.22527 moveto 0.98077 0.22527 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.29396 moveto 0.98077 0.29396 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.36264 moveto 0.98077 0.36264 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.43132 moveto 0.98077 0.43132 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.5 moveto 0.98077 0.5 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.56868 moveto 0.98077 0.56868 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.63736 moveto 0.98077 0.63736 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.70604 moveto 0.98077 0.70604 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.77473 moveto 0.98077 0.77473 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.84341 moveto 0.98077 0.84341 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.91209 moveto 0.98077 0.91209 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.35119 0.00744 0.64881 0.30506 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.033156 0.019231 0.068681 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 29 string 29 14 8 [29 0 0 14 0 0] { currentfile 1 index readhexstring pop } image 00000000000000000000000000FF000000FF000000FF0000 0000000000 00000000000000000000FF0000000000FF0000000000FF00 0000000000 0000000000000000000000000000000000000000000000FF 0000000000 000000000000000000000000000000000000000000000000 0000000000 000000000000000000FF0000000000000000000000000000 0000000000 000000000000FF0000000000FF000000FF00000000000000 0000000000 000000FF0000000000000000000000FF0000000000FF0000 00FF000000 0000000000000000FF00000000000000000000000000FF00 0000000000 000000FF00000000000000000000000000FF00FF000000FF 000000FF00 0000000000000000000000000000FF00FF00000000000000 0000000000 0000000000000000000000FF000000FF000000FF000000FF 0000000000 00000000FF0000000000FF000000FF000000FF00FF000000 0000000000 0000000000000000000000000000000000FF000000000000 0000000000 000000000000000000000000000000000000FF0000000000 0000000000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.05239 0.01923 moveto 0.05239 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.08554 0.01923 moveto 0.08554 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.1187 0.01923 moveto 0.1187 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.15186 0.01923 moveto 0.15186 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.18501 0.01923 moveto 0.18501 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.21817 0.01923 moveto 0.21817 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.25133 0.01923 moveto 0.25133 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.28448 0.01923 moveto 0.28448 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.31764 0.01923 moveto 0.31764 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.3508 0.01923 moveto 0.3508 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.38395 0.01923 moveto 0.38395 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.41711 0.01923 moveto 0.41711 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.45027 0.01923 moveto 0.45027 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.48342 0.01923 moveto 0.48342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.51658 0.01923 moveto 0.51658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.54973 0.01923 moveto 0.54973 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.58289 0.01923 moveto 0.58289 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.61605 0.01923 moveto 0.61605 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.6492 0.01923 moveto 0.6492 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.68236 0.01923 moveto 0.68236 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.71552 0.01923 moveto 0.71552 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.74867 0.01923 moveto 0.74867 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.78183 0.01923 moveto 0.78183 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.81499 0.01923 moveto 0.81499 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.84814 0.01923 moveto 0.84814 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.8813 0.01923 moveto 0.8813 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.91446 0.01923 moveto 0.91446 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.94761 0.01923 moveto 0.94761 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.08791 moveto 0.98077 0.08791 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.15659 moveto 0.98077 0.15659 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.22527 moveto 0.98077 0.22527 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.29396 moveto 0.98077 0.29396 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.36264 moveto 0.98077 0.36264 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.43132 moveto 0.98077 0.43132 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.5 moveto 0.98077 0.5 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.56868 moveto 0.98077 0.56868 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.63736 moveto 0.98077 0.63736 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.70604 moveto 0.98077 0.70604 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.77473 moveto 0.98077 0.77473 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.84341 moveto 0.98077 0.84341 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.91209 moveto 0.98077 0.91209 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic % Start of sub-graphic gsave 0.67857 0.00744 0.97619 0.30506 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.033156 0.019231 0.068681 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 29 string 29 14 8 [29 0 0 14 0 0] { currentfile 1 index readhexstring pop } image 00000000000000000000000000FF000000FF000000FF0000 0000000000 00000000000000000000FF0000000000FF0000000000FF00 0000000000 0000000000000000000000000000000000000000000000FF 0000000000 000000000000000000000000000000000000000000000000 0000000000 000000000000000000FF0000000000000000000000000000 0000000000 000000000000FF0000000000FF000000FF00000000000000 0000000000 000000FF0000000000000000000000FF0000000000FF0000 00FF000000 0000000000000000FF00000000000000000000000000FF00 0000000000 000000FF00000000000000000000000000FF00FF000000FF 000000FF00 0000000000000000000000000000FF00FF00000000000000 0000000000 0000000000000000000000FF000000FF000000FF000000FF 0000000000 00000000FF0000000000FF000000FF000000FF00FF000000 0000000000 0000000000000000000000000000000000FF000000000000 0000000000 000000000000000000000000000000000000FF0000000000 0000000000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.05239 0.01923 moveto 0.05239 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.08554 0.01923 moveto 0.08554 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.1187 0.01923 moveto 0.1187 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.15186 0.01923 moveto 0.15186 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.18501 0.01923 moveto 0.18501 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.21817 0.01923 moveto 0.21817 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.25133 0.01923 moveto 0.25133 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.28448 0.01923 moveto 0.28448 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.31764 0.01923 moveto 0.31764 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.3508 0.01923 moveto 0.3508 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.38395 0.01923 moveto 0.38395 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.41711 0.01923 moveto 0.41711 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.45027 0.01923 moveto 0.45027 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.48342 0.01923 moveto 0.48342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.51658 0.01923 moveto 0.51658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.54973 0.01923 moveto 0.54973 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.58289 0.01923 moveto 0.58289 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.61605 0.01923 moveto 0.61605 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.6492 0.01923 moveto 0.6492 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.68236 0.01923 moveto 0.68236 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.71552 0.01923 moveto 0.71552 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.74867 0.01923 moveto 0.74867 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.78183 0.01923 moveto 0.78183 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.81499 0.01923 moveto 0.81499 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.84814 0.01923 moveto 0.84814 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.8813 0.01923 moveto 0.8813 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.91446 0.01923 moveto 0.91446 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.94761 0.01923 moveto 0.94761 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.08791 moveto 0.98077 0.08791 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.15659 moveto 0.98077 0.15659 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.22527 moveto 0.98077 0.22527 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.29396 moveto 0.98077 0.29396 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.36264 moveto 0.98077 0.36264 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.43132 moveto 0.98077 0.43132 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.5 moveto 0.98077 0.5 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.56868 moveto 0.98077 0.56868 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.63736 moveto 0.98077 0.63736 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.70604 moveto 0.98077 0.70604 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.77473 moveto 0.98077 0.77473 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.84341 moveto 0.98077 0.84341 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.91209 moveto 0.98077 0.91209 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic grestore % End of Graphics MathPictureEnd :[font = output; output; inactive; preserveAspect; endGroup; ] The Unformatted text for this cell was not generated. Use options in the Actions Settings dialog box to control when Unformatted text is generated. ;[o] -GraphicsArray- :[font = input; preserveAspect; endGroup; ] :[font = subsection; inactive; preserveAspect; grayBox; startGroup; ] Learning Phase :[font = text; inactive; preserveAspect; ] After equilibrium is reached, the learning rule described above is implemented. :[font = input; preserveAspect; startGroup; ] numIterations = 15; numSnapshots = 4; learningPlot = Table[{}, {numSnapshots}]; Do[ Do[ inputPattern = patternArray[[ Random[Integer, {1,9}] ]]; getAeInput[inputPattern]; getSolution; modifyAeStrength; normalizeAeStrength;, {numIterations} ]; learningPlot[[t]] = ListDensityPlot[Partition[firingCells, 29], Frame->False, DisplayFunction->Identity], {t, numSnapshots} ]; :[font = output; output; inactive; preserveAspect; endGroup; ] The Unformatted text for this cell was not generated. Use options in the Actions Settings dialog box to control when Unformatted text is generated. ;[o] -GraphicsArray- :[font = input; preserveAspect; startGroup; ] Show[GraphicsArray[learningPlot[[3]]]] :[font = postscript; PostScript; formatAsPostScript; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 282; ] %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.02381 0.952381 0.02381 0.952381 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: Graphics [ ] 0 setdash 0 setgray gsave grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath gsave % Start of sub-graphic gsave 0.02381 0.02381 0.97619 0.97619 MathSubStart /Courier findfont 10 scalefont setfont % Scaling calculations 0.019231 0.033156 0.019231 0.068681 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath %%Object: DensityGraphics [ ] 0 setdash gsave gsave grestore grestore 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath clip newpath % Start of gray image gsave 0.01923 0.01923 translate 0.96154 0.96154 scale 29 string 29 14 8 [29 0 0 14 0 0] { currentfile 1 index readhexstring pop } image 00000000000000FF00FF00FF000000FF00FF000000FF0000 0000000000 000000000000FF000000000000000000000000000000FF00 0000000000 00000000000000FF000000FF000000FF00FF0000000000FF 0000000000 00000000FF00FF00FF00FF000000FF00FF000000FF00FF00 0000000000 0000000000000000000000FF0000000000FF00FF00FF0000 0000000000 000000000000FF00FF000000FF00FF0000000000FF00FF00 FF00000000 00FF000000FF000000FF00FF00FF00FF0000000000000000 0000000000 000000000000000000000000FF00000000000000FF000000 0000FF0000 000000000000000000FF00FF00FF00000000000000FF00FF 0000000000 000000000000FF00000000000000FF000000000000000000 0000000000 00000000000000FF00000000000000FF000000FF00000000 0000000000 000000000000FF000000000000000000FF00FF00FF00FF00 0000000000 00000000000000FF00FF00FF000000000000000000FF0000 0000000000 0000000000000000FF0000000000FF00000000000000FF00 0000000000 pop grestore % End of image gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.01923 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.05239 0.01923 moveto 0.05239 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.08554 0.01923 moveto 0.08554 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.1187 0.01923 moveto 0.1187 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.15186 0.01923 moveto 0.15186 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.18501 0.01923 moveto 0.18501 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.21817 0.01923 moveto 0.21817 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.25133 0.01923 moveto 0.25133 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.28448 0.01923 moveto 0.28448 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.31764 0.01923 moveto 0.31764 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.3508 0.01923 moveto 0.3508 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.38395 0.01923 moveto 0.38395 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.41711 0.01923 moveto 0.41711 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.45027 0.01923 moveto 0.45027 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.48342 0.01923 moveto 0.48342 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.51658 0.01923 moveto 0.51658 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.54973 0.01923 moveto 0.54973 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.58289 0.01923 moveto 0.58289 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.61605 0.01923 moveto 0.61605 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.6492 0.01923 moveto 0.6492 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.68236 0.01923 moveto 0.68236 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.71552 0.01923 moveto 0.71552 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.74867 0.01923 moveto 0.74867 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.78183 0.01923 moveto 0.78183 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.81499 0.01923 moveto 0.81499 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.84814 0.01923 moveto 0.84814 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.8813 0.01923 moveto 0.8813 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.91446 0.01923 moveto 0.91446 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.94761 0.01923 moveto 0.94761 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.98077 0.01923 moveto 0.98077 0.98077 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.01923 moveto 0.98077 0.01923 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.08791 moveto 0.98077 0.08791 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.15659 moveto 0.98077 0.15659 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.22527 moveto 0.98077 0.22527 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.29396 moveto 0.98077 0.29396 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.36264 moveto 0.98077 0.36264 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.43132 moveto 0.98077 0.43132 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.5 moveto 0.98077 0.5 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.56868 moveto 0.98077 0.56868 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.63736 moveto 0.98077 0.63736 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.70604 moveto 0.98077 0.70604 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.77473 moveto 0.98077 0.77473 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.84341 moveto 0.98077 0.84341 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.91209 moveto 0.98077 0.91209 lineto stroke grestore gsave 0.0015 setlinewidth 0.01923 0.98077 moveto 0.98077 0.98077 lineto stroke grestore MathSubEnd grestore % End of sub-graphic grestore % End of Graphics MathPictureEnd :[font = output; output; inactive; preserveAspect; endGroup; endGroup; endGroup; ] The Unformatted text for this cell was not generated. Use options in the Actions Settings dialog box to control when Unformatted text is generated. ;[o] -GraphicsArray- :[font = section; inactive; Cclosed; preserveAspect; blackBox; startGroup; ] Comments :[font = subsection; inactive; Cclosed; preserveAspect; grayBox; startGroup; ] Analysis :[font = text; inactive; preserveAspect; endGroup; ] In attempting to duplicate von der Malsberg's results, there were a several details which were not specified in his paper which had to be experimented with. These were: the initial values for the internal states of the neurons, the sequence with which the input patterns were presented to the network, and how the boundary conditions were handeled. For the inital values, two approaches were attempted: initial values of 0 (in which case initially all inputs would come from the afferent fibers) and random values uniformly distributed between 0 and 1.25 and also 0 and 1.5. For the input pattern sequence, the patterns were presented at random by choosing a psuedorandom number between 0 and 9. The boundary conditions were chosen so that rows and columns of the array wrap around forming a pinched torus. Given these assumptions, I was unable to duplicate von der Malsburg's results. There did not appear to be any self-organization occuring after 45 learning steps. It is unclear if this is a fault in the simulation, in the assumptions, or in von der Malsburg's model. :[font = subsection; inactive; Cclosed; preserveAspect; grayBox; startGroup; ] Computational Intensity :[font = text; inactive; preserveAspect; endGroup; endGroup; ] This simulation is very computionally intensive and complex. The MacIIcx in the lab ran out of RAM. The NeXTStation was able to handle some iterations of the algorithm, but it too had frequent memory problems. Because of memory problems and the length of the computation time involved it was difficult to try different approaches and parameter values in order to duplicate von der Malsberg's results. In order to reduce the computational load, reducing the array sizes was considered but not implemented because it was uncertain whether a smaller network would produce meaningful results. :[font = section; inactive; Cclosed; nowordwrap; preserveAspect; blackBox; leftNameWrapOffset = -1; startGroup; ] References :[font = text; inactive; nowordwrap; hscroll; preserveAspect; endGroup; endGroup; ] 1. Grossberg, S., "Nonlinear Neural Networks: Principles, Mechanisms, and Architectures," Neural Networks, vol. 1, 1988, pp. 17-61. 2. Hirsch, H. V. B. and Spinelli, D. N., "Visual Experience Modifies Distribution of Horizontally and Vertically Oriented Receptive Fields in Cats," Science, no. 168, 1970, pp. 869-871. 3. Hubel, D. H., and Wiesel, T. N., "Receptive Fields, Binocular Interaction and Functional Architecture in the Cat's Visual Cortex," Journal of Physiology (London), vol. 160, no. 1, 1962, pp. 106-154. 4. Hubel, D. H., and Wiesel, T. N., "Shape and Arrangement of Columns in Cat's Striate Cortex," Journal of Physiology (London), vol. 165, no. 3, 1963, pp. 559-568. 5. Hubel, D. H., and Wiesel, T. N., "Receptive Fields and Functional Architecture in Two Nonstriate Visual Areas (18 and 19) of the Cat," Journal of Neuro- physiology (London), vol. 28, no. 2, 1965, pp. 229-289. 6. Hubel, D. H., and Wiesel, T. N., "Receptive Fields and Functional Architecture in Monkey Striate Cortex," Journal of Physiology (London), vol. 195, no. 1, November 1968, pp. 215-244. 7. von der Malsberg, Chr., "Self-organization of Orientation Sensitive Cells in the Striate Cortex," Kybernetik, 14, pp. 85-100. ;[s] 20:0,0;1,1;99,2;112,1;298,2;302,1;490,2;518,1;670,2;691,1;891,2;911,1;912,2;929,1;1095,2;1117,1;1276,2;1278,1;1300,2;1311,1;1330,-1; 3:1,16,12,Times,0,14,0,0,0;10,13,9,Times,0,12,0,0,0;9,13,9,Times,2,12,0,0,0; ^*)