Skip to Content
Deep Learning

4-RNN

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

记忆能力

  • 延时神经网络:非输出层前增加延时器

    • ht(l)=f(ht(l),ht1(l1),,htK(l1))h_t^{(l)}=f(h_t^{(l)},h_{t-1}^{(l-1)},\cdots,h^{(l-1)}_{t-K})
    • 在时间维度上共享权值
  • 有外部输入的非线性网络:每个时刻 tt 有一个外部输入,产生一个输出 yty_t

    • 自回归模型:yt=ω0+k=1Kωkytk+ϵty_t=\omega_0+\sum_{k=1}^K\omega_ky_{t-k}+\epsilon_t
    • 有外部输入的非线性自回归模型:yt=f(xt,xt1,,xtKx,yt1,yt2,,ytKy)y_t=f(x_t,x_{t-1},\cdots,x_{t-{K_x}},y_{t-1},y_{t-2},\cdots,y_{t-K_y})
  • 循环神经网络:ht=f(ht1,xt)h_t=f(h_{t-1},x_t)

    • 循环神经网络的通用近似定理(2009):以任何准确率近似任何一个非线性动力系统

      st=g(st1,xt)yt=o(st)s_t=g(s_{t-1},x_t)\newline y_t=o(s_t)

    • 图灵完备(1991):所有图灵机可以被一个由使用 Sigmoid 型激活函数的神经元构成的全连接循环网络进行模拟

  • 外部记忆单元

RNN

  • 简单神经网络
    • zt=Uht1+Wxt+bz_t=Uh_{t-1}+Wx_{t}+b
    • ht=f(zt)h_t=f(z_t)
    • yt=Vhty_t=Vh_t
  • 应用模式
    • 序列到类别
      • x1:T=(x1,,xT)x_{1:T}=(x_1,\cdots,x_T) 按不同时刻输入到网络中
      • y{1,,C}y\in\{1,\cdots,C\}
      • 序列特征:hTh_T or 1Tt=1Tht\frac{1}{T}\sum_{t=1}^Th_t
    • 同步序列到序列(序列标注)
      • x1:T=(x1,,xT)x_{1:T}=(x_1,\cdots,x_T) 按不同时刻输入到网络中
      • y1:T=(y1,,yT)y_{1:T}=(y_1,\cdots,y_T)
      • y^t=g(ht),t[1,T]\hat y_t=g(h_t),\forall t\in[1,T]
    • 异步序列到序列(编码器-解码器)
      • x1:T=(x1,,xT)x_{1:T}=(x_1,\cdots,x_T) 按不同时刻输入到网络(编码器)中
      • y1:M=(y1,,yM)y_{1:M}=(y_1,\cdots,y_M) 按不同时刻输入到网络(解码器)中,初始隐状态为 hTh_T
      • y^t=g(hT+t)\hat y_t=g(h_{T+t})
  • 随时间反向传播(BPTT):每层对应每个时刻
    • δt,k=Ltzk=diag(f(zk))UTδt,k+1\delta_{t,k}=\frac{\partial L_t}{\partial z_k}=\text{diag}(f'(z_k))U^T\delta_{t,k+1}
    • LtU=k=1tδt,khk1T\frac{\partial L_t}{\partial U}=\sum_{k=1}^t\delta_{t,k}h^T_{k-1}
    • LU=t=1Tk=1tδt,khk1T\frac{\partial L}{\partial U}=\sum_{t=1}^T\sum_{k=1}^t\delta_{t,k}h^T_{k-1}
    • 在一次完整前向传播和反向计算后才能更新参数
  • 实时循环学习(RTRL)
  • 堆叠循环神经网络(SRNN)
    • 循环多层感知机(1991):ht(l)=f(U(l)ht1(l)+W(l)ht(l1)+b(l))h_t^{(l)}=f(U^{(l)}h_{t-1}^{(l)}+W^{(l)}h_t^{(l-1)}+b^{(l)})
  • 双向循环神经网络(Bi-RNN)

长程依赖问题

  • 长程依赖问题
    • 梯度消失:Lthk\frac{\partial L_t}{\partial h_k} 梯度消失,参数 UU 更新主要靠相邻状态
    • ht=ht1+g(xt,ht1;θ)h_t=h_{t-1}+g(x_t,h_{t-1};\theta): 梯度爆炸,记忆容量不足
    • 梯度爆炸:不稳定
  • 长短期记忆网络(LSTM, 2000)
    • 内部状态 ct=ftct1+itc~tc_t=f_t\odot c_{t-1}+i_t\odot \tilde{c}_t
    • 外部状态 ht=ottanh(ct)h_t=o_t\odot \tanh(c_t)
    • {0,1}\{0,1\}
    • 遗忘门 ft=σ(Wfxt+Ufht1+bf)f_t=\sigma(W_fx_t+U_fh_{t-1}+b_f) 控制内部状态遗忘多少信息
    • 输入门 it=σ(Wixt+Uiht1+bi)i_t=\sigma(W_ix_t+U_ih_{t-1}+b_i) 控制候选状态保存多少信息
    • 输出门 ot=σ(W0xt+U0ht1+b0)o_t=\sigma(W_0x_t+U_0h_{t-1}+b_0) 控制内部状态输出多少给外部状态
    • 候选状态 c~t=tanh(Wxt+Uht1+b)\tilde{c}_t=\tanh(Wx_t+Uh_{t-1}+b)
  • LSTM 变体
    • 无遗忘门(1997)
    • peephole 连接:三个门同时依赖于上一时刻记忆单元 ct1c_{t-1}
    • 耦合输入门与遗忘门:ct=(1it)ct1+itc~tc_t=(1-i_t)\odot c_{t-1}+i_t\odot\tilde{c}_t
  • 门控循环网络(GRU, 2014)
    • ht=ztht1+(1zt)h~th_t=z_t\odot h_{t-1}+(1-z_t)\odot \tilde{h}_t
    • 更新门 zt=σ(Wzxt+Uzht1+bz)z_t=\sigma(W_zx_t+U_zh_{t-1}+b_z)
    • 重置门 rt=σ(Wrxt+Urht1+br)r_t=\sigma(W_rx_t+U_rh_{t-1}+b_r)
    • 候选状态 h~t=tanh(Wcxt+Uh(rtht1)+b)\tilde{h}_t=\tanh(W_cx_t+U_h(r_t\odot h_{t-1})+b)

图结构

  • 递归神经网络(RecNN):hi=f(hπi)h_i=f(h_{\pi_i})
    • 建模自然语言句子的语义
  • 图神经网络(GNN)
    • mt(v)=uN(v)f(ht1(v),ht1(u),e(u,v))m_t^{(v)}=\sum_{u\in N(v)}f(h^{(v)}_{t-1},h_{t-1}^{(u)},e^{(u,v)})
    • ht(v)=g(ht1(v),mt(v))h_t^{(v)}=g(h_{t-1}^{(v)},m_t^{(v)})
    • 读出函数:ot=g({hT(v)vV})o_t=g(\{h_T^{(v)}|v\in V\})