Population Vector Algorithm(PVA)

背景

Population Vector Algorithm(PVA)是运动神经解码领域很常见的一种解码方法。主要是基于运动神经学领域的一个发现:神经元的发放率和当前的运动方向之间存在余弦调制的关系,即tuning curve[1]。基于这一简单的线性关系,于是有了PVA算法。

算法推导:

  1. 信号预处理 这里的算法推导主要针对神经元集群解码,因为PVA的主要应用还是在神经元解码中 首先,采集到的spike信号是以发放次数的方式存储的,这里需要先转换成发放率的形式,即: f r [ n ] = s p k [ n ] Δ t (1) fr[n]=\frac{spk[n]}{\Delta t} \tag{1} fr[n]=Δtspk[n](1)

  2. 其中, f r [ n ] fr[n] fr[n]表示 n n n时刻神经元的发放率, Δ t \Delta t Δt表示一个bin的长度,通常的取值为20ms,30ms,50ms,1000ms等。 s p k [ n ] spk[n] spk[n]表示神经元在第 n n n个bin中发放的次数。 然后,对发放率做一个FIR滤波,主要目的是平滑发放率曲线,计算公式如下:

    s [ n ] = ∑ i = 1 W − 1 f r [ n − i ] h [ i ] (2) s[n]=\sum_{i=1}^{W-1}{fr[n-i]h[i]} \tag{2} s[n]=i=1W1fr[ni]h[i](2)

    其中, h [ i ] h[i] h[i]表示滤波器的卷积函数,可以根据需求选取, W W W表示滤波器的阶数,可以根据实际需要选择。

    PVA算法原理 PVA算法的提出,主要是根据实验中观察到的现象。在猴子将手臂移动向不同的方向时,不同的神经元发放的率产生了变化,我们由此假设,神经元的发放率跟运动方向是有关系的,所以我们想到,用余弦曲线的方式,去拟合神经元的发放率与运动方向之间的关系。首先,我们假设每个神经元都有一个自己的偏好方向 θ P D \theta_{PD} θPD,假设此时,猴子手臂的运动方向为 θ \theta θ,那么此时神经元的发放率为: f = m ∗ c o s ( θ − θ P D ) + b 0 (3) f=m*cos(\theta-\theta_{PD})+b_0 \tag{3} f=mcos(θθPD)+b0(3)

    其中, m m m为表征神经元活泼性的参数,即有的神经元可能表征的偏好方向一样,但是在偏好方向上的发放率变化是不一样的。 b 0 b_0 b0表示神经元的基础发放率,即在静息状态下的基础发放率。 f f f表示的是神经元在猴子手臂朝向 θ \theta θ方向运动时的发放率,注意这里是发放率不是spike count,虽然两者可以通过bin转换,但是公式推导的时候两者还是不一样的。 公式 ( 3 ) (3) (3)表示了单个神经元的发放与运动的关系。猴子大脑M1区域的神经元是很多的,对不同的方向肯定有不同的偏好性。那么如何处理这种不一致性呢,我们的方法是用矢量求和的形式,得出一个此时最可能的运动方向。即: u ⃗ = 1 N ∑ i = 1 n m ∗ c o s θ P D (4) \vec{u}=\frac{1}{N} \sum_{i=1}^{n}{m*cos{\theta_{PD}}} \tag{4} u =N1i=1nmcosθPD(4)

    这里 u ⃗ \vec{u} u 表示神经元此时解码出来的运动方向,这里也能部分表征运动速度,但是速度的大小也与实际的运动距离有关,所以,运动速度的计算如下:

    v = k ∗ u ⃗ + σ (5) v=k*\vec{u}+\sigma \tag{5} v=ku +σ(5)

    这里 k k k表示实际速度与计算得出的速度的比例, σ \sigma σ表示实际速度与解码得到的速度之间的误差,以上就是PVA算法的主要原理 3. 参数计算 那么,现在的问题在于,如何计算PVA算法中的几个参数,这里我们用最小二乘法的方式,求最小误差情况下的参数 b 0 , m , θ P D b_0,m,\theta_{PD} b0,m,θPD,我们将公式 ( 3 ) (3) (3)换一种写法,即:

    f = b 0 + b 1 ∗ c o s θ + b 2 ∗ s i n θ (6) f = b_0 + b_1 * cos \theta + b_2 * sin \theta \tag{6} f=b0+b1cosθ+b2sinθ(6)

    再考虑 c o s θ cos{\theta} cosθ s i n θ sin{\theta} sinθ这两个量,对应在速度中,可以表示为归一化过后的 v x v_x vx v y v_y vy,只要在 [ − 1 , 1 ] [-1,1] [1,1]这个区间内所以,将公式 ( 6 ) (6) (6)写成:

    f = b 0 + b 1 ∗ v x + b 2 ∗ v y (7) f = b_0 + b_1 * v_x + b_2 * v_y \tag{7} f=b0+b1vx+b2vy(7)

    用最小二乘法计算,误差为:

    ϵ = ∑ i = 1 n ( b 0 + b 1 ∗ v x + b 2 ∗ v y − f ) 2 (8) \epsilon = \sum_{ i=1 }^{n}{(b_0 + b_1 * v_x + b_2 * v_y - f)^2} \tag{8} ϵ=i=1n(b0+b1vx+b2vyf)2(8)

    最终计算结果根据要推导一下,这里先暂时不写,回去再补充 所以,极值在偏导数为 0 0 0的地方取得,即: ∂ ϵ ∂ b 0 = 0 (9) \frac{\partial{\epsilon}}{\partial{b_0}}=0 \tag{9} b0ϵ=0(9) ∂ ϵ ∂ b 1 = 0 (10) \frac{\partial{\epsilon}}{\partial{b_1}}=0 \tag{10} b1ϵ=0(10) ∂ ϵ ∂ b 2 = 0 (11) \frac{\partial{\epsilon}}{\partial{b_2}}=0 \tag{11} b2ϵ=0(11)

    解上述方程,可以得到 b 0 , b 1 , b 2 b_0,b_1,b_2 b0,b1,b2的值,即:

    β = ( A T ∗ A ) − 1 A T B (12) \beta=(A^T*A)^{-1}A^TB \tag{12} β=(ATA)1ATB(12)

    其中, β = ( b 0 , b 1 , b 2 ) \beta=(b_0,b_1,b_2) β=(b0,b1,b2) A A A为运动信息矩阵, B B B为神经信号矩阵。

    延伸

    PVA作为运动神经解码领域最基础的解码器之一,已经使用了很长的时间,随着研究的不断深入,PVA的缺陷也体现了出来,那就是当采集到的神经集群如果偏好方向分布不均匀,很容易造成解码信息出现偏移,所以有了后来的Optimal Linear Estimation(OLE)算法,算是对这一问题的弥补。后续会补充这一内容
    当然,神经生物学也有了不断的发展,也提出了其他的理论,例如dynamic model[2]。后续再补充dynamic model的内容
    代码链接:
    后续会附上代码链接
    [1]A. Georgopoulos, A. Schwartz, and R. Kettner, “Neuronal population coding of movement direction,” Science, vol. 233, no. 4771, pp. 1416–1419, Sep. 1986, doi: 10.1126/science.3749885.
    [2]M. M. Churchland et al., “Neural population dynamics during reaching,” Nature, vol. 487, no. 7405, pp. 51–56, Jul. 2012, doi: 10.1038/nature11129.

你可能感兴趣的:(Algorithm,Neural,Computation)