Towards a biologically plausible model of LGN-V1 pathways (Lian et al 2019)

 Download zip file 
Help downloading and running models
"Increasing evidence supports the hypothesis that the visual system employs a sparse code to represent visual stimuli, where information is encoded in an efficient way by a small population of cells that respond to sensory input at a given time. This includes simple cells in primary visual cortex (V1), which are defined by their linear spatial integration of visual stimuli. Various models of sparse coding have been proposed to explain physiological phenomena observed in simple cells. However, these models have usually made the simplifying assumption that inputs to simple cells already incorporate linear spatial summation. This overlooks the fact that these inputs are known to have strong non-linearities such as the separation of ON and OFF pathways, or separation of excitatory and inhibitory neurons. Consequently these models ignore a range of important experimental phenomena that are related to the emergence of linear spatial summation from non-linear inputs, such as segregation of ON and OFF sub-regions of simple cell receptive fields, the push-pull effect of excitation and inhibition, and phase-reversed cortico-thalamic feedback. Here, we demonstrate that a two-layer model of the visual pathway from the lateral geniculate nucleus to V1 that incorporates these biological constraints on the neural circuits and is based on sparse coding can account for the emergence of these experimental phenomena, diverse shapes of receptive fields and contrast invariance of orientation tuning of simple cells when the model is trained on natural images. The model suggests that sparse coding can be implemented by the V1 simple cells using neural circuits with a simple biologically plausible architecture."
1 . Lian Y, Grayden DB, Kameneva T, Meffin H, Burkitt AN (2019) Toward a Biologically Plausible Model of LGN-V1 Pathways Based on Efficient Coding Frontiers in Neural Circuits 13:13
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network;
Brain Region(s)/Organism: Neocortex;
Cell Type(s): Abstract rate-based neuron;
Gap Junctions:
Simulation Environment: MATLAB;
Model Concept(s): Hebbian plasticity;
Implementer(s): Lian, Yanbo [yanbol at];
function array = DisplayA( OnOff, A, resizeFactor, numColumns, onFlag )
%  This function display the columns of A in an image where each rectangle
%  of the image represents the column of A
% OnOff: which part of A should be displayed
% A: may represent the connections between two populations
% resizeFactor: the factor for a higher resolution
% numColumns: # of rectangles in each row of the image
% onFlag: whether to display the image

if isequal( OnOff, 'ON') || isequal( OnOff, 'on')
    A = A( 1:size(A,1)/2, : );
elseif isequal( OnOff, 'OFF') || isequal( OnOff, 'off')
    A = A( size(A,1)/2+1:size(A,1), : );
elseif isequal( OnOff, 'ONOFF') || isequal( OnOff, 'onoff')
    A = A( 1:size(A,1)/2, : ) - A( size(A,1)/2+1:size(A,1), : );

[L0, M] = size(A); % L: length of the column; M: number of columns of A
sz0 = ceil( sqrt(L0) ); % The smallest size of a square large enough to display each column

% Zero-padded version of A
A_Padded = zeros(sz0^2, M);
A_Padded(1:L0, 1:M) = A;

% Set defaul value for 'resizeFactor'
if ~exist('resizeFactor','var')

sz = sz0 * resizeFactor; % size of the resized square
L = sz^2; % 
A_Padded = reshape(imresize(reshape(A_Padded,sz0,sz0,M),resizeFactor,'lanczos3'),L,M);

% By default, the displayed image is square unless defined by 'numColumns'
if ~exist('numColumns', 'var')
    nCol = ceil(sqrt(M));
    nCol = numColumns;
nRow = ceil(M/nCol); % number of rows of the displayed image

buf = 1; % thickness of the boundary between different blocks in the image
black = 1.02;

% The array that saves the pixel values of the displayed image
array= black * ones( buf + nRow * (sz+buf), buf + nCol * (sz+buf) ); 

% fill 'array ' column by column
m=1; % index of the column of A
for i = 1 : nRow
    for j = 1 : nCol
        if m < M + 1
            % clim: larget absolute value in m-th column of A
            clim = max( abs( A_Padded(:,m) ) );
            if clim==0
            % fill m-th column of A into 'array'
            array(  buf + (i-1) * (sz+buf) + (1:sz), ...
                    buf + (j-1) * (sz+buf) + (1:sz) ) = ...
                    reshape(A_Padded(:,m), sz, sz) / clim;
        m = m + 1; % update m with the index of next column

% The image will be displayed by default unless stated otherwise
if ~exist('onFlag', 'var')
    onFlag = 1;

% Display the image
if onFlag == 1
    imagesc(array,[-1 black]);
    axis image off


Loading data, please wait...