神经图灵机

Neural Turing Machines原文

  • 读记忆(Read Heads)

    把时刻tt的记忆看作是一个N×MN \times M的矩阵MtM_t,读的过成首先生成长度为NN的定位权重向量wtw_t,表示NN个记忆位置的权值大小,读出的记忆向量为rtr_t:

rt=iNwt(i)Mt(i)   iwt(i)=1r_t=\sum_i^Nw_t(i)M_t(i) \ \ \ \sum_iw_t(i)=1

对$N$条记忆进行加权求和

  • 写记忆(Write Heads)

    类似LSTM:擦除向量$e_t$,增加向量$a_t$

    • 擦除操作:
    Mt(i)=Mt1(1wt(i)et(i))M_t'(i)=M_{t-1}(1-w_t(i)e_t(i))
    • 增加操作:
    Mt(i)=Mt(i)+wt(i)at(i)M_t(i)=M_t'(i)+w_t(i)a_t(i)

    神经图灵机的关键是定位向量$w_t$,其它的是由控制器(LSTM,MLP)输出

  • 定位机制(Addressing Mechanism)

    结合了基于内容和基于位置的两种方法

    • 基于内容(Content-based Addressing)

      wtc(i)=exp(βtK[kt,Mt(i)])jexp(βtK[kt,Mt(j)])w_t^c(i)=\frac {\exp(\beta_tK[k_t,M_t(i)])}{\sum_j\exp(\beta_tK[k_t,M_t(j)])}

      $K[...]$是余弦相似度计算:

      K[u,v]=uvuvK[u,v]=\frac{u \cdot v}{\Vert u\Vert \cdot \Vert v\Vert}

      $\beta_t$是控制器输出

    • 基于位置(Location-based Addressing)

      • 插值(Interpolation)

        wtg=gtwtc+(1gt)wt1w_t^g=g_tw_t^c+(1-g_t)w_{t-1}

        $g_t$有控制器生成

      • 偏移(shift)

        w~t(i)=j=0N1wtg(j)st(ij)\tilde w_t(i)=\sum_{j=0}^{N-1}w_t^g(j)s_t(i-j)

        每一个$\tilde w_t(i)$都与相邻元素有关

      • 重塑(Sharping)

      wt(i)=w~t(i)γtjw~t(j)γtw_t(i)=\frac{\tilde w_t(i)^{\gamma_t}}{\sum_j\tilde w_t(j)^{\gamma_t}}