Skip to Content
Deep Learning

注意力机制与外部记忆

2020-06-16Original-language archivelegacy assets may be incomplete

注意力机制

  • 认知神经科学中的注意力
    • 聚焦式注意力
    • 基于显著性的注意力
    • 鸡尾酒会效应
  • 基于显著性的注意力机制:最大汇聚、门控
  • 注意力分布:
    • 输入变量:[x1,,xN][x_1,\cdots,x_N]
    • 查询变量:qq
    • 注意力变量:z=nz=n 选择第 nn 个输入变量
    • 注意力打分函数:s(x,q)s(x,q)
      • 加性模型:s(x,q)=vtanh(Wx+Uq)s(x,q)=v^\top \tanh(Wx+Uq)
      • 点积模型:s(x,q)=xqs(x,q)=x^\top q
      • 缩放点积模型:s(x,q)=xqDs(x,q)=\frac{x^\top q}{\sqrt{D}}
      • 双线性模型:s(x,q)=xWqs(x,q)=x^\top Wq
    • 注意力分布:αn=p(z=nX,q)=softmax(s(xn,q))\alpha_n=p(z=n|X,q)=\text{softmax}(s(x_n,q))
  • 软性注意力机制:att(X,q)=n=1Nαnxn\text{att}(X,q)=\sum_{n=1}^N\alpha_nx_n
  • 硬性注意力机制:无法使用反向转播,通常用强化学习训练
    • att=xn^,n^=argmaxαn\text{att}=x_{\hat n},\hat n=\arg\max\alpha_n
    • 随机采样
  • 键值对注意力
    • 输入信息:[(k1,v1),,(kN,vN)][(k_1,v_1),\cdots,(k_N,v_N)]
    • 注意力函数:n=1Nexp(s(kn,q))jexp(s(kj,q))vn\sum_{n=1}^N\frac{\exp(s(k_n,q))}{\sum_j\exp(s(k_j,q))}v_n
  • 多头注意力:att((K,V),Q)=att((K,V),qi)\text{att}((K,V),Q)=\oplus\text{att}((K,V),q_i)
  • 结构化注意力
  • 指针网络(2015):序列到序列模型,输出下标
    • p(c1:Mx1:N)=m=1Mp(cmc1:(m1),x1:N)m=1Mp(cmxc1:cm1,x1:N)p(c_{1:M}|x_{1:N})=\prod_{m=1}^M p(c_m|c_{1:(m-1)},x_{1:N})\approx\prod_{m=1}^Mp(c_m|x_{c1:c_{m-1}},x_{1:N})
    • p(cmc1:(m1),x1:N)=softmax(sm,n)p(c_m|c_{1:{(m-1)},x_{1:N}})=\text{softmax}(s_{m,n})
    • sm,n=vtanh(Wxn+Uhm)s_{m,n}=v^\top\tanh(Wx_n+Uh_m)

自注意力模型

  • 变长向量序列
    • 卷积网络或循环网络编码
    • 自注意力模型(内部注意力模型)
  • 如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互,另一种方法是使用全连接网络
  • QKV 模式
    • 输入序列:X=[x1,,xN]RDx×NX=[x_1,\cdots,x_N]\in\mathbb{R}^{D_x\times N}
    • 输出序列:H=[h1,,hN]RDv×NH=[h_1,\cdots,h_N]\in\mathbb{R}^{D_v\times N}
    • 查询向量:qiRDk,Q=WqXq_i\in\mathbb{R}^{D_k},Q=W_qX
    • 键向量:ki,Q=WqXRDk×Nk_i,Q=W_qX\in\mathbb{R}^{D_k\times N}
    • 值向量:vi,V=WvXRDv×Nv_i,V=W_vX\in\mathbb{R}^{D_v\times N}
    • hn=att((K,V),qn)h_n=\text{att}((K,V),q_n)

记忆

  • 人脑记忆
    • 整体效应储存(分布式)
    • 周期性
      • 长期记忆(结构记忆,知识)
      • 短期记忆
      • 工作记忆(约 4 组项目)
    • 联想记忆:基于联想检索

记忆增强神经网络(MANN/MN)

  • 基本模块
    • 主网络(控制器)
    • 外部记忆单元:分为多个记忆片段 M=[m1,,mN]M=[m_1,\cdots,m_N]
    • 读取模块:根据主网络的查询向量 qrq_r,读取 r=R(M,qr)r=R(M,q_r)
    • 写入模块:根据主网络的查询向量 qωq_\omega 和需写入信息 aa 更新 M=W(M,qω,a)M=W(M,q_\omega,a)
  • 按内容寻址:注意力机制
    • r=n=1Nαnmnr=\sum_{n=1}^N\alpha_n m_n
    • α=softmax(s(mn,qr))\alpha=\text{softmax}(s(m_n,q_r))
  • 端到端记忆网络(MemN2N,2015):外部记忆只读
    • m1:N={m1,,mN}m_{1:N}=\{m_1,\cdots,m_N\}
    • 转换成两组记忆片段 A,CA,C 分别用来寻址和输出
    • r=n=1Nsoftmax(anq)cnr=\sum_{n=1}^N\text{softmax}(a_n^\top q)c_n
    • y=f(q+r)y=f(q+r)
    • 多跳操作:q(k)=r(k1)+q(k1)q^{(k)}=r^{(k-1)}+q^{(k-1)}
  • 神经图灵机(2014)
    • 外部记忆:MRD×NM\in\mathbb{R}^{D\times N}
    • 控制器:神经网络
    • 每个时刻 tt,接受 xt,ht1,rt1x_t,h_{t-1},r_{t-1} 输出 hth_t,生成查询向量 qtq_t,删除向量 ete_t 和增加向量 ata_t
    • 读操作:αt,n=softmax(s(mt,n,qt))\alpha_{t,n}=\text{softmax}(s(m_{t,n},q_t))
      • 读向量:rt=n=1Nαt,nmt,nr_t=\sum_{n=1}^N\alpha_{t,n}m_{t,n}
    • 写操作:mt+1,n=mt,n(1αt,net)+αt,nαtm_{t+1,n}=m_{t,n}(1-\alpha_{t,n}e_t)+\alpha_{t,n}\alpha_t

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

  • Hopfield 网络
    • 状态:{+1,1}\{+1,-1\}
    • 更新规则:si=si+sgn(j=1Mωijsj+bi)s_i=s_i+\text{sgn}(\sum_{j=1}^M\omega_{ij}s_j+b_i)
    • 能量函数:E=12i,jωijsisjibisiE=-\frac{1}{2}\sum_{i,j}\omega_{ij}s_is_j-\sum_ib_is_i
    • 权重对称:ωii=0,ωij=ωji\omega_{ii}=0,\omega_{ij}=\omega_{ji}
    • 稳定性:能量函数多次迭代后收敛
    • 吸引点:稳定状态,局部最优点,有限,网络储存的模式
    • 信息储存(学习规则):赫布规则 ωij=1Nn=1Nxi(n)xj(n)\omega_{ij}=\frac{1}{N}\sum_{n=1}^Nx_i^{(n)}x_j^{(n)}
    • 储存容量:数量为 MM 的二值神经元网络,总状态数为 2M2^M,有效稳定点状态数即储存容量
      • Hopfield: 0.14 MM
      • 玻尔兹曼机: 0.6 MM,收敛较慢