论文 Neuronal spike-rate adaptation supports working memory in language processing 总结
为什么写这篇文章
本文总结了PNAS 2020中的论文“Neuronal spike-rate adaption supports working memory in language processing”,该论文提出了一个新的spiking神经元模型,并且仅依靠细胞的膜状态(论文中实际指的就是膜电压)实现了记忆的功能。网络中的突触权重在初始化之后就会固定死,所以对于一般的工作——将突触作为记忆载体,这是一种不错的尝试。
如果想完全通过论文搞清楚他们的工作核心是比较困难的,我花了两周时间仔细阅读了论文和appendix,但文章对于实验细节交代的不是很清楚,故而对于其work flow还是有些疑惑。幸好论文的作者给出了两个实验的matlab代码,通过代码就很快弄明白了他们的工作。所以本文会先简要过一下文章的重要内容,然后单独拿出来实验来讲,通过实验搞清楚他们提出的模型是如何完成特定任务的。
论文快速浏览
Abstract
传统的观点认为持续升高的突触活动or短期的突触变化是实现记忆的途径,这里提出的方式是利用内在可塑性下调神经元的放电速率从而实现记忆。信息被存于降低点火频率的系数中(?),并且不需要线索即可访问。记忆的跨度是和参数的时间常数有关的,也和静息的细胞状态有关。调整时间长时,内存会有一种干扰效应。
Significance
信息在单个神经元的层面被存储和读写。依赖于以前的输入历史,神经元展示了不同的spike响应,这种调整成为一种短时程处理记忆的方式。论文作者通过降低细胞活跃性的spike-rate adaptation (SRA) 实现了这个调整方式。
Introduction
Working memory (WM) 是一种在短时间段维持和处理信息的能力。现在主要有两种方式:
- sustained firing
- synaptic theories
WM的language processing任务,有两个特点:
- 对于句子的意义的提示可能出现在句子的任意位置 (context-dependent)
- 句子中单词的相对位置很重要 (order-sensitive)
以上两问题对于持久spike和突触可塑性都是难解决的。
本文提出了内在可塑性 (Intrinsic plasticity),内在可塑性有三个体现:
- 点火阈值的降低
- 细胞超极化(spike)的减少
- 静息电位的变化
最后,论文作者是通过逐渐降低细胞活跃性的 short-lived neural adaption 实现了WM
Method
Neuron Model
使用基础神经元模型是LIF模型,并设置使用了固定的点火阈值,具有不应期和SRA机制。微分方程如下:
在这个公式中,I(t)后面都是论文作者在LIF神经元模型的基础上面加的,
g
r
e
f
g_{ref}
gref是一个抑制作用较强的不应期函数,但是衰减很快,故而作用强烈但短暂,
g
s
r
a
g_{sra}
gsra是一个抑制作用较弱的不应期函数,但是衰减很慢,故而作用较弱但长久,这里借用实验中的一个图来说明一下:
图中黑线代表某个神经元的膜电压,蓝线代表神经元对应
g
r
e
f
g_{ref}
gref的数值,红线代表神经元对应
g
r
e
f
g_{ref}
gref的数值。
E
k
E_k
Ek是
g
s
r
a
g_{sra}
gsra的逆转电压,应该也是一个超参数。可以看到在神经元每次点火的时候,
g
r
e
f
g_{ref}
gref和
g
s
r
a
g_{sra}
gsra都会上升一个固定的数值,此外这两个数值都以指数速度衰减,只是ref衰减快,sra衰减慢。他们的衰减公式为:
膜电压公式中的电流是总电流,总电流是外部单词输入的电流加上内部电流,某个单词连接到某个神经元都是固定的。内部电流的计算公式如下:
虽然外部单词输入的电流没有衰减,但是内部电流是有衰减的。
Network graphs
网络中有1000个以上类型的神经元,其中80%是兴奋性的,20%是抑制性的。网络是前馈的,网络中突触权重在0到1之间。网络中的突触是随机建立的稀疏的突触连接,并且要保证这个图中没有圈(但是代码中没有找到这个思想的体现)。
实验
实验1 (Fig E,F)
第一个实验主要是展示 g s r a g_{sra} gsra随着神经元点火的变化,这里主要讲fig e和f。首先网络中输入了一些泊松背景噪声,这些噪声由50个神经元产生,并和网络中的1000个神经元进行全连接。所以网络中的神经元在一个时间步上是有可能产生多个spike的。代码如下:
% generate random Poisson background activity
numBgNeurons = 50; % each neuron in the network is targeted by this amount of background neurons
rex = 6; % input rate in Hz for each neuron
bgSpikes = zeros(numBgNeurons,size(T,2));
BGspikeTrains = zeros(numTot,size(T,2));
for jj = 1:numTot
for kk = 1:numBgNeurons
vt = rand(size(T)); % 他的方法是一次把所有时间的算完
spikes = (rex*dt) > vt;
bgSpikes(kk,:) = spikes;
end;
sumSpikes=sum(bgSpikes,1);
BGspikeTrains(jj,:) = sumSpikes; % 计算网络中每个神经元在所有时刻收到的spike的个数
end;
接下来按照顺序将刺激输入对应的神经元中,刺激由50个神经元产生,并输入指定的神经元群体中。论文要输入序列“123”、“312”、“231”,并选择了1~60号神经元作为接收刺激的神经元,其中1到20对应于序列中的1、21到40对应2,41到60对应3。顺序和持续时间规定如下:
% stimulus order, e.g., 123
stimuli{1} = [1 0.05 0.1; 2 0.15 0.1; 3 0.25 0.1];
% 中间那个数据应该是0.05是起始,0.1是duration 就是50~150、150~250、250~350
stimuli{2} = [3 0.05 0.1; 1 0.15 0.1; 2 0.25 0.1];
stimuli{3} = [2 0.05 0.1; 3 0.15 0.1; 1 0.25 0.1];
fig1e中的红线是20个神经元的 g s r a g_{sra} gsra的平均值,还是比较好理解的,f中的曲线有高低错落是因为作者给它弄成了线性组合,使读者容易看出不同的曲线,1的系数是0.166,2的系数是-0.44,3的系数是0.99。
实验2
实验描述
本实验是要求预测句子中每个单词的语义角色。
输入数据
输入的数据是一个连续的序列,我先来解释一下数据的结构。输入的形式是:
X = [
1, 7, 5, 0, 0, 1, 1;
2, 7, 6, 0, 0, 2, 1;
3, 7, 1, 0, 0, 3, 1;
4, 3, 4, 0, 0, 4, 1;
5, 3, 3, 0, 0, 5, 1;
6, 3, 3, 1, 0, 6, 1;
7, 3, 2, 2, 0, 7, 1;
8, 1, 2, 3, 0, 8, 1;
9, 1, 3, 4, 1, 9, 1;
10, 0, 1, 5, 0, 10, 1;
11, 4, 4, 0, 0, 1, 2;
4, 3, 4, 0, 0, 2, 2;
12, 3, 5, 0, 0, 3, 2;
13, 3, 3, 0, 0, 4, 2;
6, 3, 3, 1, 0, 5, 2;
以上是部分数据。每条数据的长度固定为7,每列的含义是:
- 单词的索引(通过这个索引查表可以知道这是什么单词)。
- 目标的角色(就是语义角色)。
- 单词的长度(字母数)。
- 与句中第一个动词的距离(be动词不算)。第一个动词前的都是0,动词自己是0,动词的语态 比如-ed -par 都是距离动词的距离是1。
- 是不是句子中的最后一个单词。
- 该单词在句子中的位置。
- 现在是第几个句子。
语义角色一共有8种:‘PATIENT’, ‘AGENT’, ‘THEME’, ‘ACTION’, ‘RECIPIENT’, ‘EXPERIENCER’, ‘EOS’, ‘GOAL’。除去EOS是标点符号不用识别,最后就是要预测每个单词属于7个语义中的哪一种,所以本质上是一个7分类问题。
数据如何输入进入网络:输入的一共有75个不同的单词,每个单词会随机连接网络中5%的神经元,注意连接的突触也是有权重的,不是全部为1。突触一旦建立就不会再改变了。
wordInp = inW(:,inputWords(k)); % 取出从单词k到所有神经元的突触强度
I = (inpApp*wordInp + resApp*intInp); % 总电流是外部单词输入的电流加上内部电流,某单词连接到某神经元都是固定的
网络点火速率调整
在膜状态被记录之前,网络的点火频率要被调整到固定的区间内,这样做是为了确保具有不同神经元参数
τ
s
r
a
\tau_{sra}
τsra和
Δ
s
r
a
\Delta_{sra}
Δsra的网络显示出可比较的活动水平。
有两个调整阶段,一个是外部输入阶段,一个是内部突触。
在外部输入调整频率阶段,内部电流将不会加入总电流中(也就是内部的突触全部断开),此时网络的频率在2
±
\pm
± 0.2范围内就会停止调整。在频率过高或者过低时就会通过调整参数inpApp来控制外部电流大小,从而控制点火频率。
在第二个调整阶段同理,只是内部突触不断开,并且在频率过高或者过低时就会通过调整参数resApp来控制内部电流大小。此时网络的频率在5
±
\pm
± 0.5范围内就会停止调整
模型评估
当网络点火频率调整好后,参数inpApp和resApp固定,12500条数据开始输入进入网络,每个单词会产生一条膜状态的记录,最终存储在一个(12500
×
\times
× 1000)的矩阵中。对于每条记录,膜电压会以200Hz的频率采样,并在单词结束的时候将膜电压再除以采样次数。
最终训练和测试数据就是这个12500
×
\times
× 1000的矩阵,标签就是每条数据对应单词的语义,所以这个问题就转换为了将1000个特征的数据进行7分类的问题。
到了这一步有很多方法可以解决以上问题,在接下来的步骤中论文中使用的是传统机器学习方法,即logistic回归,并且使用了5折交叉验证。
机器是i5-8265u,包含点火速率调整,网络运行时间411s。
交叉验证时每次选2500条数据测试,余下的训练,每次的运行时间和准确率分别为:
第一个准确率是在全部数据中的,第二个准确率仅计算了每个句子最后一个单词,我估计是句子最后一个单词的语义比较单一,所以准确率高。
实验3
未完待续。这个实验的代码是R语言写的,所以还没有看。但是这个实验的任务是找出每个句子中某个固定语义的单词,和上面那个实验还是比较像的,所以不妨碍我们理解这个论文的工作核心。