ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CN 스터디] Ch2: Modeling Neural Circuits Made Simple with Python
    카테고리 없음 2025. 2. 3. 01:21

    1.3 Modeling Synapses

    Ionotropic synapes

     

    current-based synapse model - currents are generated directly from presynaptic spike times
    conductance based synapse model - appendix B.3 더 detailed

    Dale's Law: presynaptic neuron는 post synaptic neuron과 같은 타입의 synapse를 가진다.
    excitatory and inhibitory
    80% excitatory neuron - 대부분 pyramidal neurons
    20% inhibitory neuron - interneurons

     

    I: 전류값

    J: 시냅스 가중치 excite > 0, inhibit < 0

    alpha: PSC waveforms

    s: presynaptic spike time

     

    alpha의 조건

    1) a(t): PSC의 시간적 형태를 나타냄

    2) t<0 일 때 alpha = 0 

    3) 적분 값이 1 => 정규화를 위해

    다음과 같은 PSC 파형 모델 식을 세우게 된다. - Exponential Synapse Model 임.

     

    Simulate를 위해 Dirac delta function으로 표현함.

    *Dirac delta function이란?

    특정 점에서 무한히 큰 값을 가지며 전체 넓이가 1이 되도록 정의된 분포로, 함수의 특정 값을 추출하거나 물리적 특이점을 모델링하는 데 사용.

    수식 1.7을 간단히 한 식.

    S: spike density

    Spike density란, Spike라는 이벤트를 기록한 Spike Train에서 델타함수를 적용하여 연속적인 시간 함수로 변환한 것.

    Spike Train: 뉴런이 발화한 시간들의 나열. - 이산적임.

    이런 식으로 spike이 일어난 시간으로 이루어진 dirac 델타 함수를 적용할 수 있다.

    연속적인 시간함수가되면서 컨볼루션을 적용할 수 있음.

     

    # Binarized presynaptic spike train, Spike density로 변환
    Se=np.zeros_like(time)
    Si=np.zeros_like(time)
    Se[np.floor(ExcSpikeTimes/dt).astype(int)]=1/dt
    Si[np.floor(InhSpikeTimes/dt).astype(int)]=1/dt
    
    #Euler solver to compute Is and V
    for i in range(len(time)-1):
        V[i+1]=V[i]+dt*(-(V[i]-EL)+Ie[i]+Ii[i]+Ix[i])/taum 
        Ie[i+1]=Ie[i]+dt*(-Ie[i]+Je*Se[i])/taue
        Ii[i+1]=Ii[i]+dt*(-Ii[i]+Ji*Si[i])/taui

     

    simulation 동안 원하는 PSP를 그리기 위해서는 timescales -> time constant -> synaptic weights 순서로 수정.

     

    2. Measuring and Modeling Neural Variability

     

    2.1 Spike Train Variability, Firing Rates, and Tuning

    Neural Variability: Irregularity of spike가 존재함.

    Binarized spike train: 2ms time window로 사용하면 interval이 짧기 때문에 1 spike or zero spike으로 이분화 할 수 있음. 이는 firing rate 계산할 떄 유용하다.

     

    Firing rate: number of spikes per unit time, spike/s -> Hz 단위

    Cortex Neuron - spike 1-50Hz.

     

    Firing rate 그래프가 불연속적임. 연속적으로 만들기 위해 overlapping time intervals을 사용함.

    다음과 같은 kernel를 사용해서 smoothing 함. 주로 Gaussian kernel 사용함.

    r(t): time-dependent firing rate

    설명: S(t)(spike density)로 표현된 식은 delta function으로 이루어진 discrete한 데이터다. 뾰족한 모양.

    k(t)를 Gaussian kernel 이자 적분 값이 1인 함수로 정의한다.

    t: time, sigma: 표준편차

    -> convultion 시 spike 발생한 시간 근처에서 부드럽게 값이 퍼짐.

    #Gaussian kernel
    k = np.exp(-s**2 / (2 * sigma**2))
    k = k / (np.sum(k) * dt)  # Normalize kernel
    
    #Convolution
    SmoothedRate = np.convolve(S, k, mode='same') * dt

    Dataset: SpikeTimes1Neuron1Theta.npz

    - monkey visual cortex

    - drifting grating stimulation for 1s

    - trial 200번

    - theta: 자극의 각도

     

    Spike Density Array로 쉽게 데이터 저장

    skj: k번쨰 실험, J 번째 spike

    그렇다면 S[k,:]는 k번째 trial의 spike density가 저장되게 된다.

    S = np.zeros((NumTrials, len(time)))  # Spike Density Array 초기화
    S[TrialNumbers, (SpikeTimes/dt).astype(int)] = 1/dt

     

     

    Fano factor: Trial variability를 측정, ratio btw 분산과 평균

    FF=0 neuron이 똑같이 spike

    FF>1 trial to trial variability가 크다.

     

    Orientation tuning in primary visual cortex

    receptive field: 자극에 반응하는 region

    orientation의 angle에 따라 firing rate이 증가함. - highest firing rate = preferred orientation

    하나의 neuron보다 neuron 집단을 통해 분석.

     

    2.2 Modeling Spike Train Variability with Poisson Processes

    Spike train variability: 똑같은 자극을 주더라도 spike의 시간적인 변동성이 존재

     

    How to model spike timing variability?

    => Stochastic process: 시간에 따라 상태가 랜덤하게 변화

    그 중 Point process: 불연속적으로 발생하는 사건.

     

    Counting Process: n(t): t 시간 동안 spike의 갯수.

     

    Instantaneous firing rate: 즉시 발화율

     

    r(t): 시간 t에 뉴런이 발화할 확률, 단위 시간동안 스파이크 발생의 기대값.

     

    정의)

    1. E[N(t,t+ δ )] : 시간 t 근처에서 발생하는 스파이크 개수의 기댓값 

    이를 시간 구간으로 나누므로 단위 시간 당 발생하는 스파이크의 기대값이 된다.

     

    2. 미분으로 표현:

    E[n(t)]: t시간 까지 발생한 스파이크의 총 갯수의 기대값 

    이를 미분하면, 누적된 스파이크 기대값의 시간 변화율

     

    3. Spike density로 표현

    S(t): 특정 시간 t에 스파이크가 발생했는지 여부를 표현

    직관적 이해

    d/dt n(t) = S(t)

    n(t): 시간 t까지 누적된 스파이크의 갯수 /  S(t): 특정시간 t에서 발생한 스파이크

    1) 시간 구간 [a,b] 동안 뉴런이 발생시킬 스파이크의 평균 갯수

    2) 특정 시간 t에서 뉴런이 발화할 즉시 발화율을 시간 구간 [a,b] 에 대해 합산

     

    r(t) 단위 Hz:  spike 수 / s : 단위 시간 동안 발생하는 평균 스파이크 갯수.

    dt : 시간을 곱함. => 총 spike의 갯수.

     

    참고) 이해: 단위 시간 동안 발생할 스파이크의 평균 갯수 또는 강도, t = 0.1 => 0.1초 때 강도, 발화 확률.

     

    Stationary process : 정적 특성일 경우

    Definition: N(a,b) = N( a+t, b+t )

    Theorem. r(t) = r , E[n(t)] = rt

    r(t)가 일정하지만, 스파이크 간의 상관관계는 있을 수 있음.

     

    ex) 

     

    Homogeneous Poisson process (Stationary Poisson process)

    :stationary point process + memoryless property.

    :스파이크 발생이 독립적, 시간 구간마다 독립적

    : spike는 어느 시간 분포에 있어도 동일하게 발화함.

    : n(t)가 푸아송 분포를 따름.

     

    *포아송 분포:  어떤 사건(spike)가 몇 번 발생하는지를 나타내는 확률 분포

    n: spike가 발생한 이벤트 갯수 r: 평균 발생률

     

    n(t)의 분산과 평균이 같다. 

    즉 평균적으로 rt만큼 스파이크가 발생한다고 이해할 수 있다.

     

    Fano factor = 1, trial to trial variability의 기준선.

    subPoisson: FF<1

    superPissson: FF>1

     

    Poisson process를 생성하는 2가지 algorithm

    1. spike times를 직접적으로 생성

    N=np.random.poisson(r*T)
    SpikeTimes=np.sort(np.random.rand(N)*T)

    포아송 분포에서 스파이크 총 갯수를 생성하고

    이를 시간에 랜덤하게 생성하여 순서대로 정렬 #0과1 사이의 난수를 생성

     

    2. spike density를 생성

    S=np.random.binomial(1, r*dt, len(time))/dt

    단위 시간내 스파이크가 발생할 확률을 총 시간 동안 시행하여 스파이크 발생 여부를 구함. (0,1로 이루어진 배열)

    r*dt 의 값이 작아야 함. - 스파이크 발생이 2번 되는 것을 방지하기 위해서이다., *푸아송 정의 때문?

     

    Spike density <-> Spike time switching

    SpikeTimes=np.nonzero(S)[0]*dt
    
    S=np.zeros_like(time)
    S[(SpikeTimes/dt).astype(int)]=1/dt

     

    Multiple i.i.d. trials

     

    Nonstationary spike trains(inhomogeneous Poisson process)

    stationary 에서 r(t)가 시간에 따라 변화하는 특성으로 확장하는 것.

    Inhomogeneous Poisson Process Algorithm: algorithm 2를 일반화.

    r=(20+16*np.sin(2*np.pi*time/200))/1000 
    S=np.random.binomial(1,r*dt,(NumTrials,len(time)))/dt

    r*dt, r(t)*dt로 시간에 의존하는 단위시간에 스파이크가 발생할 확률을 사용함.

    dt가 매우 작아야함.

     

    Q. dt로 나누는 이유: 0,1로 이루어진 이진 행렬에서 dt로 나누어야지, 단위 시간당 스파이크(S(t))로 표현할 수 있음.

     

     

    Q. r(t)*dt를 사용하므로써 시간에 따라 달라진 확률을 구할 때, np.random.binomial로 결국 그것에 따른 이진 행렬로 나타나게 되면, spike density를 표현할 때 확률적인 의미가 퇴색되는 것이 아닌가?

     

    Figure2.4

    A, B: r(t) = 15Hz : Homogeneous Poisson process

    C, D: r(t) = 시간에 따라 변화하는 주기함수: inhomogeneous Poisson process

     

    Exercise 2.2.1

    import numpy as np
    
    #Fano_factor 계산
    def ff(spike_counts):
        return np.var(spike_counts) / np.mean(spike_counts)
    
    #변수
    r=10/1000 # Rate in kHz
    T=1000 # Time interval length
    dt=.1 # Discretized time
    time=np.arange(0,T,dt)
    
    # Generate 10 Poisson processes
    for _ in range(5):
      S = np.random.binomial(1, r * dt, (10, len(time)))
      spike_counts = S.sum(axis=1)  # Sum spikes across time for each trial
      fano_factor = ff(spike_counts)
      print(fano_factor)

     

    2.3 Modeling a Neuron with Noisy Synaptic Input

    - K개의 흥분성, 억제성 뉴런로부터 신호를 받는 single EIF modeling

    여러개 시냅스로 적용한 식

    - r 값이 inhomogenous 한 것처럼, J 값도 일정하거나 inhomogenous할 수 있음.

    - K x r 는 집단 전체에서의 평균 스파이크 발생 빈도라고 볼 수 있음.

     

    Stationary mean values

    - 결국 정류값으로 수렴한다는 의미
    - tau 보통 5ms로 작음

    - figure 2.5 ce 에서 장기적인 평균선임.

    - E[J*S] = J * r = K * j * r

     

    Mean-field theory

    - 결국 같은 말. noise가 있어도 T가 무한으로 가면 평균 전류값으로 수렴한다.

     

    - V(t)는 non linar하기 때문에 mean field theory를 적용하기 쉽지 않음.

    - 정류값과 noise의 input으로 EIF가 도출되는 식으로 표현 가능함

     

    Noise driven or fluctuation-driven spiking

    - EIF에서 정류값 I = 12.75mV, Vth = 15mV 이면 원래 spike가 안됨

    - noise 때문에 spike가 가능해짐

    - Vo : free memebrane potential

    - active current과 spike를 제외한 막전위

    - 선형 방정식 형태

    - mean-field approach 적용하기 쉬움

    -stationary mean free membrane potential는 위와 같음.

     

    fluctuation vs drift-driven regimes

    - drift driven: more regular spike, mean input에 의해 발화

    - fluctuation: irregular spike

    -  f-I curve: firing rate / I정류값: 파란색 점이 fluctuation 지점.

    - 점선 기준 왼쪽은 noise driven, 오른쪽은 drift driven

    - I의 값에 좌우되는 것이 아니라 j와 r의 값에 의해 바뀜.

    - 하지만 I가 큰 영역에서는 r에 대한 함수로 근사할 수 있음.

    - K: 뉴런 갯수, j: 시냅스 가중치 r: 발화율

     

    Mean-field synaptic weight

    - 즉 이렇게 정리할 수 있다. w는 전체 시냅스의 가중치라고 이해하면 됨.

    - 여기서 f 함수는 rectified linear function를 사용함.

    - H는 계단 함수 Heaviside step function이다.

    - 세타: 발화가 시작하는 threshold

    - g: gain 곡선의 기울기

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

Designed by Tistory.