注意力机制与外部记忆

    • 引言
    • 注意力
    • 注意力机制
      • 注意力机制的变体
        • 硬性注意力
        • 键值对注意力
        • 多头注意力
        • 小结
        • 指针网络
    • 自注意力模型
    • 人脑中的记忆
    • 记忆增强神经网络
      • 端到端的记忆网络
      • 神经图灵机
    • 基于神经动力学的联想记忆
      • Hopfield网络
    • 总结

神经网络的能力 通用近似原理{前馈神经网络 → \rightarrow 循环神经网络:有界区间连续函数 → \rightarrow 非线性动力系统}, 然而 优化算法和计算力限制 实践中很难达到通用近似的能力 (泛化)

减少计算复杂度:局部连接、权重共享、汇聚操作 {卷积神经网络开始引入}来简化神经网络结构

依然希望在不“过度”增加模型复杂度(主要是模型参数)的情况下来提高模型的表达能力

引言

以有限的算力来应对相对复杂的模型的解决方案

就视觉来说,眼睛每秒钟都会发送千万比特的信息给视觉神经系统.人脑在有限的资源下,并不能同时处理这些过载的输入信息.大脑神经系统有两个重要机制可以解决信息过载问题:注意力记忆机制.

我们可以借鉴人脑解决信息过载的机制,从两方面来提高神经网络处理信息的能力.

  • 一方面是注意力,通过 自上而下的信息选择机制 来过滤掉大量的无关信息;
  • 另一方面是引入额外的外部记忆, 优化神经网络的记忆结构来提高神经网络存储信息的容量.

注意力

人脑可以有意或无意地从这些大量输入信息中选择小部分的有用信息来重点处理,并忽略其他信息.这种能力就叫作注意力(Attention)

注意力一般分为两种:

  1. 自上而下的有意识的注意力,称为聚焦式注意力(Focus Attention). 聚焦式注意力也常称为选择性注意力(Selective Attention). 聚焦式注意力是指有预定目的、依赖任务的,主动有意识地聚焦于某一对象的注意力.
  2. 自下而上的无意识的注意力,称为 基于显著性 的注意(Saliency Based Attention).基于显著性的注意力是 由外界刺激驱动的注意 ,不需要主动干预,也和任务无关

鸡尾酒会效应:
当一个人在吵闹的鸡尾酒会上和朋友聊天时,尽管周围噪音干扰很多,他还是可以听到朋友的谈话内容,而忽略其他人的声音(聚焦式注意力).同时,如果背景声中有重要的词(比如他的名字),他会马上注意到(显著性注意力).

聚焦式注意力一般会随着环境、情景或任务的不同而选择不同的信息.

比如当要从人群中寻找某个人时,我们会专注于每个人的脸部;而当要统计人群的人数时,我们只需要专注于每个人的轮廓.

基于显著性的注意力:最大汇聚、门控机制

以 下 主 要 考 虑 自 上 而 下 的 有 意 识 的 注 意 力 , 称 为 聚 焦 式 注 意 力 \tiny{以下主要考虑自上而下的有意识的注意力,称为聚焦式注意力}

注意力机制

在计算能力有限的情况下,注意力机制(Attention Mechanism)作为一种
资源分配方案, 将有限的计算资源用来处理更重要的信息,是解决信息超载问题的主要手段.

Query-Key-Value

X = [ x 1 , . . . , x N ] ∈ R D × N X=[x_1,...,x_N]\in R^{D\times N} X=[x1,...,xN]RD×N 表示 N N N 组输入信息,其中 D D D 维向量 x n ∈ R D , n ∈ [ 1 , N ] x_n\in R^D,\enspace n\in[1,N] xnRD,n[1,N] 表示一组输入信息.
为了节省计算资源,不需要将所有信息都输入神经网络,只需要从 X X X 中选择一些和任务相关的信息 选 出 ! ! ! \tiny{选出!!!} !!!

注意力机制的计算可以分为两步:

  1. 在所有输入信息上计算注意力分布, okay
  2. 根据注意力分布来计算输入信息的加权平均.

注意力分布 为了从 N N N 个输入向量 [ x 1 , . . . , x N ] [x_1,...,x_N] [x1,...,xN] 中选择出和某个特定任务相关的信息,我们需要引入一个和任务相关的表示,称为查询向量(Query Vector),并通过一个打分函数来计算每个输入向量和查询向量之间的相关性

注意力分布–概率计算:给定一个和任务相关的查询向量 q q q,我们用注意力变量 z ∈ [ 1 , N ] z\in[1,N] z[1,N] 来表示被选择信息的索引位置.
为了方便计算,我们采用一种“软性”的信息选择机制.首先计算在给定 q q q X X X 下,选择第 i 个输入向量的概率 α n \alpha_n αn

α n = p ( z = n ∣ X , q ) = s o f t m a x ( s ( x n , q ) ) = e x p ( s ( x n , q ) ) ∑ j = 1 N e x p ( s ( x j , q ) ) \begin{aligned} \alpha_n &= p(z=n \vert X,q)\\ &= softmax(s(x_n,q))\\ &= \frac{exp(s(x_n,q))} {\sum_{j=1}^{N}{exp(s(x_j,q))}} \end{aligned} αn=p(z=nX,q)=softmax(s(xn,q))=j=1Nexp(s(xj,q))exp(s(xn,q))

s ( x , q ) \mathbf{s(x,q)} s(x,q) 为注意力打分函数

注意力打分函数

Model Info comprehension
加性模型 s ( x , q ) = v T tanh ⁡ ( W x + U q ) \mathbf{s(x,q)}=v^T\tanh(Wx+Uq) s(x,q)=vTtanh(Wx+Uq) 加性模型和点积模型的复杂度差不多
点积模型 s ( x , q ) = x T q \mathbf{s(x,q)}=x^Tq s(x,q)=xTq 更好地利用矩阵乘积,从而计算效率更高.
缩放点积模型 s ( x , q ) = x T q D \mathbf{s(x,q)}=\frac {x^Tq} {\sqrt{D}} s(x,q)=D xTq 当输入向量的维度 D D D 比较高时, 点积模型的值通常有比较大的方差,从而导致Softmax函数的梯度会比较小.因此,缩放点积模型可以较好地解决这个问题.
双线性模型 s ( x , q ) = x T W q \mathbf{s(x,q)}=x^TWq s(x,q)=xTWq 双线性模型是一种 泛化的点积模型 W = U T V W=U^TV W=UTV ,双线性模型可以写为 s ( x , q ) = x T U T V q = ( U x ) T ( V q ) \mathbf{s(x,q)}=x^TU^TVq={(Ux)}^T(Vq) s(x,q)=xTUTVq=(Ux)T(Vq),即分别对 x x x q q q 进行线性变换后计算点积.相比点积模型,双线性模型在计算相似度时 引入了非对称性.

其中 W , U , v W,U,v W,U,v 为可学习的参数 训 练 调 参 、 优 化 \tiny{训练调参、优化} D D D 为输入向量的维度

加权平均 注意力分布 α n \alpha_n αn 可以解释为在给定任务相关的查询 时,第 个输入向量受关注的程度.我们采用一种“软性”的信息选择机制对输入信息进行汇总,
a t t ( X , q ) = ∑ n = 1 N α n x n = E z ∼ p ( z ∣ X , q ) [ x z ] \begin{aligned} att(X,q)&= \sum_{n=1}^{N}{\alpha_nx_n}\\ &=\mathbb{E}_{z\sim p(z\vert X,q)}[x_z] \end{aligned} att(X,q)=n=1Nαnxn=Ezp(zX,q)[xz]
称为软性注意力机制(Soft Attention Mechanism).

注意力机制与外部记忆_第1张图片

注意力机制的变体

硬性注意力

软性注意力选择的信息是 所有输入向量在注意力分布下的期望.

只关注某一个输入向量,叫作硬性注意力(Hard Attention).

硬性注意力有两种实现方式:

  1. 选取最高概率的一个输入向量(最大汇聚)

a t t ( X , q ) = x n ^ = x arg ⁡ max ⁡ n = 1 N α n \begin{aligned} att(X,q)&=x_{\hat n}\\ &=x_{\arg\max_{n=1}^{N}{\alpha_n}} \end{aligned} att(X,q)=xn^=xargmaxn=1Nαn

其中 n ^ \hat n n^ 为概率最大的输入向量的下标

  1. 通过在注意力分布式上随机采样的方式实现

硬性注意力的一个缺点是基于最大采样或随机采样的方式来选择信息,使得 最终的损失函数与注意力分布之间的函数关系不可导 ,无法使用反向传播算法进行训练.
因此,硬性注意力通常需要使用强化学习来进行训练.
为了使用反向传播算法,一般使用软性注意力来代替硬性注意力.

键值对注意力

用键值对(key-value pair)格式来表示输入信息,其中“键”用来计算注意力分布 α n \alpha_n αn ,“值”用来计算 聚合信息.

( K , V ) = [ ( k 1 , v 1 ) , . . . , ( k n , v n ) ] (K,V)=[(k_1,v_1),...,(k_n,v_n)] (K,V)=[(k1,v1),...,(kn,vn)] 表示 N N N 组输入信息,给定任务相关的查询向量 q q q 时,注意力函数为
a t t ( ( K , V ) , q ) = ∑ n = 1 N α n v n = ∑ n = 1 N e x p ( s ( k n , q ) ) ∑ j = 1 N e x p ( s ( k j , q ) ) v n \begin{aligned} att((K,V),q) &=\sum_{n=1}^{N}{\alpha_nv_n}\\ &= \sum_{n=1}^{N} {\frac{exp(s(k_n,q))}{\sum_{j=1}^{N}{exp(s(k_j,q))}}v_n} \end{aligned} att((K,V),q)=n=1Nαnvn=n=1Nj=1Nexp(s(kj,q))exp(s(kn,q))vn

K = V K=V K=V 时,键值对模式就等价于普通的注意力机制. C o m p r e h e n s i o n : \tiny{\textcolor{red}{Comprehension:}} Comprehension:

注意力机制与外部记忆_第2张图片

多头注意力

多头注意力(Multi-Head Attention)是利用多个查询 Q = [ q 1 , . . . , q M ] Q=[q_1,...,q_M] Q=[q1,...,qM] ,来并行地从输入信息中选取多组信息.
每个注意力关注输入信息的不同部分.

a t t ( ( K , V ) , Q ) = a t t ( ( K , V ) , q 1 ) ⊕ . . . . ⊕ a t t ( ( K , V ) , q n ) att((K,V),Q)=att((K,V),q_1)\oplus....\oplus att((K,V),q_n) att((K,V),Q)=att((K,V),q1)....att((K,V),qn)
其中 ⊕ \oplus 表示向量拼接

小结

在之前介绍中,我们假设所有的输入信息是同等重要的,是一种扁平(Flat)结构,注意力分布实际上是在所有输入信息上的多项分布。

指针网络

指针网络(Pointer Network)是一种序列到序列模型,输入是长度为 N N N 的向量序列 X = x 1 , . . . , x N X=x_1,...,x_N X=x1,...,xN ,输出是长度为 M M M 的下标序列 c 1 : M = c 1 , c 2 , . . . , c M , c m ∈ [ 1 , N ] , ∀ m c_{1:M}=c_1,c_2,...,c_M,\quad c_m\in[1,N],\enspace \forall m c1:M=c1,c2,...,cM,cm[1,N],m

和一般的序列到序列任务不同,这里的输出序列是输入序列的下标(索引) – 异步的序列到序列的方式–文本翻译

条件概率 p ( c 1 : M ∣ x 1 : N ) p(c_{1:M}\vert x_{1:N}) p(c1:Mx1:N) 可以写为
p ( c 1 : M ∣ x 1 : N ) = ∏ m = 1 M p ( c m ∣ c 1 : ( m − 1 ) , x 1 : N ) ≈ ∏ m = 1 M p ( c m ∣ x c 1 , . . . , x c m − 1 , x 1 : N ) \begin{aligned} p(c_{1:M}\vert x_{1:N})&= \prod_{m=1}^{M}{p(c_m\vert c_{1:(m-1)},x_{1:N})}\\ &\approx \prod_{m=1}^{M}{p(c_m\vert x_{c_1},...,x_{c_{m-1}},x_{1:N})} \end{aligned} p(c1:Mx1:N)=m=1Mp(cmc1:(m1),x1:N)m=1Mp(cmxc1,...,xcm1,x1:N)
其中条件概率 p ( c m ∣ x c 1 , . . . , x c m − 1 , x 1 : N ) p(c_m\vert x_{c_1},...,x_{c_{m-1}},x_{1:N}) p(cmxc1,...,xcm1,x1:N) 可以通过注意力分布来计算.

假设用一个循环神经网络对 x c 1 , . . . , x c m − 1 , x 1 : N x_{c_1},...,x_{c_{m-1}},x_{1:N} xc1,...,xcm1,x1:N 进行编码得到向量 h m h_m hm ,则
p ( c m ∣ c 1 : ( m − 1 ) , x 1 : N ) = s o f t m a x ( s m , n ) p(c_m\vert c_{1:(m-1)},x_{1:N})=softmax(s_{m,n}) p(cmc1:(m1),x1:N)=softmax(sm,n)

其中 s m , n s_{m,n} sm,n 为在解码过程的第步时, h m h_m hm h n h_n hn 的未归一化的注意力分布,即

s m , n = v T tanh ⁡ ( W x n + U h m ) , ∀ n ∈ [ 1 , N ] s_{m,n}=v^T\tanh(Wx_n+Uh_m),\enspace \forall n\in [1,N] sm,n=vTtanh(Wxn+Uhm),n[1,N]
其中 v , W , U v,W,U v,W,U 为可学习的参数.

注意力机制与外部记忆_第3张图片

自注意力模型

当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络 分 割 成 定 长 数 据 段 ? ? \tiny{分割成定长数据段??} ?? 或循环网络进行编码来得到一个相同长度的输出向量序列

注意力机制与外部记忆_第4张图片

基于卷积或循环网络的序列编码都是一种局部的编码方式,只建模了输入信息的局部依赖关系. \quad\quad {卷积–窗口之内 循环神经网络 – LTSM 长短期记忆网络(因:梯度消失爆炸)}

如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:

  1. 增加网络的层数,通过一个深层网络来获取远距离的信息交互
  2. 使用全连接网络 {待学习参数多but有限的算力}

全连接网络是一种非常直接的建模远距离依赖的模型,但是无法处理变长的输入序列. \quad {卷积也只能处理定长数据段}

不同的输入长度,其连接权重的大小也是不同的.
这时我们就可以利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(Self-Attention Model).

注意力机制与外部记忆_第5张图片

假设输入序列为 X = [ x 1 , . . . , x N ] ∈ R D v × N X=[x_1,...,x_N]\in \mathbb{R}^{D_v\times N} X=[x1,...,xN]RDv×N ,自注意力模型的具体计算过程如下:

  1. 对于每个输入 x i x_i xi,我们首先将其线性映射到三个不同的空间,得到查询向量 q i ∈ R D k q_i \in \mathbb{R}^{D_k} qiRDk、键向量 k i ∈ R D k k_i \in \mathbb{R}^{D_k} kiRDk 和值向量 v i ∈ R D v v_i \in \mathbb{R}^{D_v} viRDv
    对于整个输入序列,线性映射过程可以简写为
    Q = W q X ∈ R D k × N K = W k X ∈ R D k × N V = W v X ∈ R D v × N Q=W_qX\in \mathbb{R}^{D_k\times N}\\ K=W_kX\in \mathbb{R}^{D_k\times N}\\ V=W_vX\in \mathbb{R}^{D_v\times N} Q=WqXRDk×NK=WkXRDk×NV=WvXRDv×N
    其中 Q = [ q 1 , . . , q N ] , K = [ k 1 , . . . , k N ] , V = [ v 1 , . . . , v N ] Q=[q_1,..,q_N],K=[k_1,...,k_N],V=[v_1,...,v_N] Q=[q1,..,qN],K=[k1,...,kN],V=[v1,...,vN] 分别是由查询向量键向量值向量构成的矩阵.

  2. 对于每一个查询向量 q n ∈ Q q_n\in Q qnQ,利用键值对注意力机制,可以得到输出向量 h n h_n hn
    h n = a t t ( ( K , V ) , q n ) = ∑ j = 1 N α n j v j = ∑ j = 1 N s o f t m a x ( s ( k j , q n ) ) v j \begin{aligned} h_n&=att((K,V),q_n)\\ &=\sum_{j=1}^{N}{\alpha_{nj}v_j}\\ &=\sum_{j=1}^{N}{softmax(s(k_j,q_n))v_j} \end{aligned} hn=att((K,V),qn)=j=1Nαnjvj=j=1Nsoftmax(s(kj,qn))vj
    其中 n , j ∈ [ 1 , N ] n,j\in[1,N] n,j[1,N] 为输出和输入向量序列的位置, α n j \alpha_{nj} αnj 表示第个输出关注到第个输入的权重.

如果使用缩放点积来作为注意力打分函数,输出向量序列可以简写为
H = V s o f t m a x ( K T Q D k ) H=V softmax(\frac{K^TQ}{\sqrt{D_k}}) H=Vsoftmax(Dk KTQ)
其中 s o f t m a x ( ⋅ ) softmax(\cdot) softmax() 为按列进行归一化的函数

注意力机制与外部记忆_第6张图片

自注意力模型可以作为神经网络中的一层来使用,既可以用来替换卷积层和循环层 ,也可以和它们一起交替使用(比如 可以是卷积层或循环层的输出).
自注意力模型计算的权重 α i j \alpha_{ij} αij 只依赖于 q i q_i qi k j k_j kj 的相关性,而忽略了输入信息的位置信息.因此在单独使用时,自注意力模型一般 需要加入位置编码信息来进行修正

自注意力模型可以扩展为多头自注意力(Multi-Head Self-Attention)模型,在多个不同的投影空间中捕捉不同的交互信息.

人脑中的记忆

外部记忆

人脑中的记忆具有周期性和联想性.

记忆周期 记忆一般分为长期记忆和短期记忆.

  • 长期记忆(Long-Term Memory),也称为结构记忆或知识(Knowledge),体现为神经元之间的连接形态,其更新速度比较慢.
  • 短期记忆(Short-Term Memory)体现为神经元的活动,更新较快,维持时间为几秒至几分钟.

短期记忆是神经连接的暂时性强化,通过不断巩固、强化可形成长期记忆.

长期记忆可以类比于人工神经网络中的权重参数,而短期记忆可以类比于人工神经网络中的隐状态.

工作记忆

联想记忆 大脑记忆的一个主要特点是通过联想来进行检索的
指一种学习和记住不同对象之间关系的能力 \quad\quad {按内容寻址}

联想记忆是指一种可以通过内容匹配的方法进行寻址的信息存储方式,也称为基于内容寻址的存储(Content-Addressable Memory,CAM).
作为对比,现代计算机的存储方式是根据地址来进行存储的,称为随机访问存储(Random Access Memory,RAM).

借鉴人脑中工作记忆,可以在神经网络中引入一个 外部记忆单元 来提高网络容量.

外部记忆的实现途径有两种:

  1. 结构化的记忆,这种记忆和计算机中的信息存储方法比较类似,可以分为多个记忆片段,并按照一定的结构来存储;
  2. 基于神经动力学的联想记忆,这种记忆方式具有更好的生物学解释性.

注意力机制与外部记忆_第7张图片

记忆增强神经网络

为了增强网络容量 ,我们可以引入辅助记忆单元,将一些和任务相关的信息保存在辅助记忆中,在需要时再进行读取,这样可以有效地增加网络容量. \quad buffer

这个引入的辅助记忆单元一般称为外部记忆(External Memory),以区别于循环神经网络的内部记忆(即隐状态).

这种装备外部记忆的神经网络也称为记忆增强神经网络(Memory Augmented Neural Network,MANN),或简称为记忆网络(Memory Network,MN)

注意力机制与外部记忆_第8张图片

主网络C: 也称为控制器(Controller),负责信息处理,以及与外界的交互(接受外界的输入信息并产生输出到外界).主网络还同时通过读写模块和外部记忆进行交互. \quad 神经网络主体

外部记忆单元M: 外部记忆单元用来存储信息,一般可以分为很多记忆片段(Memory Segment),这些记忆片段按照一定的结构来进行组织.

记忆片段一般用向量来表示,外部记忆单元可以用一组向量 M = [ m 1 , . . . , m N ] M=[m_1,...,m_N] M=[m1,...,mN] 来表示.这些向量的组织方式可以是集合、树、栈或队列等.

大部分信息存储于外部记忆中,不需要全时参与主网络的运算.

读取模块 : 根据主网络生成的查询向量 q r q_r qr,从外部记忆单元中读取相应的信息 r = R ( M , q r ) r=R(M,q_r) r=R(M,qr)

写入模块 : 根据主网络生成的查询向量 q w q_w qw 和要写入的信息 a a a 来更新外部记忆 M = W ( M , q w , a ) M=W(M,q_w,a) M=W(M,qw,a)

这种结构化的外部记忆是带有地址的,即每个记忆片段都可以按地址读取和写入

按内容寻址 使用注意力机制来进行,通过注意力机制可以实现一种“软性”的寻址方式, 即计算一个在所有记忆片段上的分布,而不是一个单一的绝对地址

比如读取模型 R \mathbb{R} R 的实现方式可以为
r = ∑ n = 1 N α n m n “ 内 容 读 取 ” 过 程 α n = s o f t m a x ( s ( m n , q r ) ) “ 寻 址 ” 过 程 \begin{aligned} r&= \sum_{n=1}^{N}{\alpha_nm_n} &&“内容读取”过程 \\ \alpha_n&=softmax(s(m_n,q_r)) &&“寻址”过程 \end{aligned} rαn=n=1Nαnmn=softmax(s(mn,qr))

通过引入外部记忆, 可以将神经网络的参数和记忆容量“分离” ,即在少量增加网络参数的条件下可以大幅增加网络容量.因此,我们可以将注意力机制看作一个接口,将信息的存储与计算分离.

外部记忆从记忆结构、读写方式等方面可以演变出很多模型.比较典型的结构化外部记忆模型包括 端到端记忆网络神经图灵机等.

端到端的记忆网络

在端到端记忆网络中,外部记忆单元是只读的

端到端记忆网络(End-To-End Memory Network,MemN2N)采用一种可微的网络结构,可以多次从外部记忆中读取信息

给定一组需要存储的信息 m 1 : N = { m 1 , . . . , m N } m_{1:N}=\lbrace m_1,...,m_N\rbrace m1:N={m1,...,mN}, 为简单起见,这两组记忆单元可以合并,即 A = C A=C A=C

首先将其转换成 两组记忆片段 A = [ a 1 , . . . , a N ] A=[a_1,...,a_N] A=[a1,...,aN] C = [ c 1 , . . . , c N ] C=[c_1,...,c_N] C=[c1,...,cN] ,分别存放在两个外部记忆单元中,其中 A A A 用来进行寻址, C C C 用来进行输出
主网络根据输入生成,并使用键值对注意力机制来从外部记忆中读取相关信息,

r = ∑ n = 1 N s o f t m a x ( a n T q ) c n r=\sum_{n=1}^N{softmax(a_n^Tq)c_n} r=n=1Nsoftmax(anTq)cn

并产生输出
y = f ( q + r ) y=f(q+r) y=f(q+r)
其中(⋅)为预测函数.当应用到分类任务时,(⋅)可以设为Softmax函数.

多跳操作 为了实现更复杂的计算,我们可以 让主网络和外部记忆进行多轮交互. 在第轮交互中,主网络根据上次从外部记忆中读取的信息 r ( k − 1 ) r^{(k-1)} r(k1) 循 环 网 络 思 想 \tiny{循环网络思想} ,产生新的查询向量

q ( k ) = r ( k − 1 ) + q ( k − 1 ) q^{(k)}=r^{(k-1)}+q^{(k-1)} q(k)=r(k1)+q(k1)

其中 q ( 0 ) q^{(0)} q(0) 为初始的查询向量, r ( 0 ) = 0 r^{(0)}=0 r(0)=0

假设第轮交互的外部记忆为 A ( k ) A^{(k)} A(k) C ( k ) C^{(k)} C(k) ,主网络从外部记忆读取信息为
r ( k ) = ∑ n = 1 N s o f t m a x ( ( a n ( k ) ) T q ( k ) ) c n ( k ) r^{(k)}=\sum_{n=1}^{N}{softmax((a_n^{(k)})^Tq^{(k)})c_n^{(k)}} r(k)=n=1Nsoftmax((an(k))Tq(k))cn(k)

在 轮交互后,用 y ^ = f ( q ( K ) + r ( K ) ) \hat y=f(q^{(K)}+r^{(K)}) y^=f(q(K)+r(K)) 进行预测.这种多轮的交互方式也称为多跳(Multi-Hop)操作.
多跳操作中的参数一般是共享的.为了简化起见,每轮交互的外部记忆也可以共享使用,比如 A ( 1 ) = . . . = A ( K ) A^{(1)}=...=A^{(K)} A(1)=...=A(K) C ( 1 ) = . . . = C ( K ) C^{(1)}=...=C^{(K)} C(1)=...=C(K)

注意力机制与外部记忆_第9张图片

神经图灵机

神经图灵机中的外部记忆是可读写的

图灵机 Mem+IO+C+P
注意力机制与外部记忆_第10张图片

神经图灵机 (Neural Turing Machine,NTM)主要由两个部件构成:控制器外部记忆

控制器:一个前馈或循环神经网络 \quad 主网络、神经网络主体
外部记忆: M ∈ R D × N M\in \mathbb{R}^{D\times N} MRD×N N个D维的记忆片段
注意力机制与外部记忆_第11张图片

在每个时刻,控制器接受当前时刻的输入 x t x_t xt 、上一时刻的输出 h t − 1 h_{t-1} ht1 和上一时刻从外部记忆中读取的信息 r t − 1 r_{t-1} rt1,并产生输出 h t h_t ht, 即 h t = C o n t r o l l e r ( x t , h t − 1 , r t − 1 ) , h t u p d a t e h_t=Controller(x_t,h_{t-1},r_{t-1})\quad ,h_t \enspace update ht=Controller(xt,ht1,rt1),htupdate , 同时生成和读写外部记忆相关的三个向量:查询向量 q t q_t qt、删除向量 e t e_t et 和增加向量 a t a_t at
然后对外部记忆 M t \mathcal{M}_t Mt 进行读写操作,生成读向量 r t r_t rt 和新的外部记忆 M t + 1 M_{t+1} Mt+1

读操作 在时刻, 外部记忆的内容记为 M t = [ m t , 1 , . . . , m t , N ] M_t=[m_{t,1},...,m_{t,N}] Mt=[mt,1,...,mt,N] ,读操作为从外部记忆 M t M_t Mt读取信息 r t ∈ R D r_t\in \mathbb{R}^D rtRD

  • 首先通过注意力机制来进行基于内容的寻址,即
    α t , n = s o f t m a x ( s ( m t , n , q t ) ) \alpha_{t,n}=softmax(s(m_{t,n},q_t)) αt,n=softmax(s(mt,n,qt))
    注意力分布 α t , n \alpha_{t,n} αt,n 是记忆片段 m t , n m_{t,n} mt,n 对应的权重,并满足 ∑ n = 1 N α t , n = 1 \sum_{n=1}^N{\alpha_{t,n}=1} n=1Nαt,n=1
  • 根据注意力分布 α t \alpha_t αt,可以计算读向量(read vector) r t r_t rt 作为下一个时刻控制器的输入.
    r t = ∑ n = 1 N α n m t , n ⋅ r_t=\sum_{n=1}^{N}{\alpha_nm_{t,n\cdot}} rt=n=1Nαnmt,n

写操作 外部记忆的写操作可以分解为两个子操作:删除和增加.

  • 首先,控制器产生删除向量(erase vector) e t e_t et 和增加向量(add vector) a t a_t at ,分别为要 从外部记忆中删除的信息和要增加的信息.
    • 删除操作是根据注意力分布来按比例地在每个记忆片段中删除 e t e_t et
    • 增加操作是根据注意力分布来按比例地给每个记忆片段加入 a t a_t at

具体过程如下:
m t + 1 , n = m t , n ( 1 − α t , n e t ) + α t , n a t ∀ n ∈ [ 1 , N ] m_{t+1,n}=m_{t,n}(1-\alpha_{t,n}e_t)+\alpha_{t,n}a_t\quad \forall n\in [1,N] mt+1,n=mt,n(1αt,net)+αt,natn[1,N]

通过写操作得到下一时刻的外部记忆 M t + 1 M_{t+1} Mt+1

基于神经动力学的联想记忆

将基于神经动力学(Neurodynamics)的联想记忆模型引入到神经网络以增加网络容量.

联想记忆模型(Associative Memory Model)主要是通过神经网络的动态演化来进行联想,有两种应用场景.

  1. 输入的模式和输出的模式在同一空间,这种模型叫作自联想模型(AutoAssociative Model).自联想模型可以通过前馈神经网络或者循环神经网络来实现,也常称为自编码器(Auto-Encoder,AE).

  2. 输入的模式和输出的模式不在同一空间,这种模型叫作异联想模型(Hetero-Associative Model).从广义上讲,大部分机器学习问题都可以被看作异联想,因此异联想模型可以作为分类器使用.

联想记忆模型可以利用神经动力学的原理来实现按内容寻址的信息存储和检索. 一个经典的联想记忆模型为Hopfield网络.

Hopfield网络

除了作为机器学习模型外,神经网络还可以作为一种记忆的存储和检索模型. 单层反馈神经网络

Hopfield网络(Hopfield Network)是一种循环神经网络模型,由一组互相连接的神经元组成.
Hopfield 网络也可以认为是 所有神经元都互相连接的不分层的神经网络. 每个神经元既是输入单元,又是输出单元,没有隐藏神经元.一个神经元 和自身没有反馈相连,不同神经元之间连接权重是对称的.

注意力机制与外部记忆_第12张图片

假设一个Hopfield网络有 个神经元,第 个神经元的更新规则为

s i = { + 1 i f ∑ j = 1 M w i j s j + b i ≥ 0 − 1 o t h e r w i s e s_i=\begin{cases} +1 & if \sum_{j=1}^{M}{w_{ij}s_j+b_i}\ge 0\\ -1 & otherwise \end{cases} si={+11ifj=1Mwijsj+bi0otherwise

此 处 离 散 的 , D H N N , 神 经 元 状 态 只 有 1 和 − 1 \tiny{此处离散的,DHNN,神经元状态只有1和-1} DHNN11

其中 w i j w_{ij} wij 为神经元 和 之间的连接权重, b i b_i bi 为偏置

连接权重 w i j w_{ij} wij 有以下性质:
w i i = 0 ∀ i ∈ [ 1 , M ] 和自身没有反馈相连 w i j = w j i ∀ i , j ∈ [ 1 , M ] 不同神经元之间连接权重是对称的 w_{ii}=0 \quad \forall i\in [1,M] \quad\quad \text{和自身没有反馈相连}\\ w_{ij}=w_{ji} \quad \forall i,j \in [1,M] \quad \text{不同神经元之间连接权重是对称的} wii=0i[1,M]和自身没有反馈相连wij=wjii,j[1,M]不同神经元之间连接权重是对称的

Hopfield 网络的更新可以分为异步和同步两种方式.

  • 异步更新是指每次更新一个神经元,神经元的更新顺序可以是随机或事先固定的.

  • 同步更新是指一次更新所有的神经元,需要有一个时钟来进行同步.
    第 时刻的神经元状态为 s t = [ s t , 1 , s t , 2 , . . . , s t , M ] T s_t=[s_{t,1},s_{t,2},...,s_{t,M}]^T st=[st,1,st,2,...,st,M]T ,其更新规则为
    s t = f ( W s t − 1 + b ) s_t=f(Ws_{t-1}+b) st=f(Wst1+b)
    s 0 = x , W ∈ R M × M , b ∈ R M s_0=x ,W\in R^{M\times M},b\in R^M s0=x,WRM×M,bRM, f ( ⋅ ) f(\cdot) f() 为非线性阶跃函数.

能量函数 在Hopfield网络中,我们给每个不同的网络状态定义一个标量属性,称为“能量”.Hopfield网络的能量函数(Energy Function) 定义为

E = − 1 2 ∑ i , j w i j s i s j − ∑ i b i s i = − 1 2 s T W s − b T s \begin{aligned} E&=-\frac 1 2 \sum_{i,j}{w_{ij}s_is_j}-\sum_{i}{b_is_i}\\ &=-\frac 1 2 s^TWs -b^Ts \end{aligned} E=21i,jwijsisjibisi=21sTWsbTs

H o p f i e l d 网 络 是 稳 定 的 ? ? ? 证 明 ? ? ? \textcolor{red}{Hopfield网络是稳定的 ??? 证明???} Hopfield??? ,即能量函数经过多次迭代后会达到收敛状态.
权重对称保证了能量函数在神经元激活时单调递减,而不对称的权重可能导致周期性振荡或者混乱. 反馈型神经网络(Hopfield)——稳定性

异步情况
注意力机制与外部记忆_第13张图片

注意力机制与外部记忆_第14张图片
∑ i = 1 n w i j x i − T j = n e t j ( t ) x j + 1 = s g n ( n e t j ) sgn为阶跃函数符号函数 \sum_{i=1}^{n}{w_{ijx_i}-T_j}=net_j(t)\\ x_{j+1}=sgn(net_j)\quad \text{sgn为阶跃函数符号函数} i=1nwijxiTj=netj(t)xj+1=sgn(netj)sgn为阶跃函数符号函数

注意力机制与外部记忆_第15张图片
注意力机制与外部记忆_第16张图片

同步情况
注意力机制与外部记忆_第17张图片

注意力机制与外部记忆_第18张图片
注意力机制与外部记忆_第19张图片

给定一个外部输入,网络经过演化,会达到某个稳定状态.这些稳定状态称为吸引点(Attractor). 反馈型神经网络(Hopfield)——吸引子
在一个Hopfield网络中,通常有多个吸引点,每个吸引点为一个能量的局部最优点.

注意力机制与外部记忆_第20张图片

联想记忆 Hopfield网络存在有限的吸引点(Attractor),即能量函数的局部最小点.
每个吸引点都对应一个“管辖”区域 R u \mathscr{R}_u Ru.若输入向量落入这个区域,网络最终会收敛到.因此,我们可以把吸引点看作网络中存储的模式(Pattern). \quad 反馈型神经网络(Hopfield)——吸引子
将网络输入 作为起始状态,随时间收敛到吸引点 上的过程作为检索过程 :x → \rightarrow u 联想记忆过程

信息存储 信息存储是指将一组向量 x 1 , . . . , x N x_1,...,x_N x1,...,xN 存储在网络中的过程.

存储过程主要是调整神经元之间的连接权重,因此可以看作一种学习过程.

Hopfield网络的学习规则有很多种.一种最简单的学习方式为:神经元 和 之间的连接权重通过下面公式得到

w i j = 1 N ∑ n = 1 N x i ( n ) x j ( n ) w_{ij}=\frac 1 N\sum_{n=1}^{N}{x_i^{(n)}x_j^{(n)}} wij=N1n=1Nxi(n)xj(n)

其中 x i ( n ) x_i^{(n)} xi(n) 是第个输入向量的第维特征.

如果 x i x_i xi x j x_j xj 在输入向量中相同的概率越多,则 w i j w_{ij} wij 越大.这种学习规则和人脑神经网络的学习方式十分类似.

在人脑神经网络中,如果两个神经元经常同时激活,则它们之间的连接加强;
如果两个神经元经常不同时激活,则连接消失.这种学习方式称为赫布规则(Hebbian Rule,或 Hebb’s Rule).

存储容量 对于联想记忆模型来说,存储容量为其能够可靠地存储和检索模式的最大数量.
对于数量为 的互相连接的二值神经元网络,其总状态数为 2 M 2^M 2M,其中可以作为有效稳定点的状态数量就是其存储容量.
模型容量一般与网络结构和学习方式有关.

总结

源:以有限的算力来处理足够复杂的神经网络

注意力机制是一种(不严格的)受人类神经系统启发的信息处理机制.

注意力 、联想

你可能感兴趣的:(笔记)