2. 循环神经网络 RNN

2.1 RNN 与序列建模 **

  • RNN 结构

    • 隐藏状态 ht=σ(Uxt+Wht1+b)h_t=\sigma(Ux_t+Wh_{t-1}+b),通常 tanh

    • 输出状态 ot=g(Vht+c)o_t=g(Vh_t+c)

    • 损失 L=tLt=tLoss(ot,yt)L=\sum_t L_t=\sum_t Loss(o_t,y_t)

    • 基于时间的反向传播(Back Propagation Through Time, BPTT)

  • CNN 对序列建模

    • TextCNN:文本序列 -> 二维网格数据

    • 时间卷积网络:因果卷积、空洞卷积

2.2 RNN 中的 Dropout ***

  • Dropout 作用(正则化)

    • 近似 Bagging,但不同网络共享参数

    • 减少神经元共适应关系,更加泛化

  • RNN 中的 Dropout

    • 前馈连接:t => t,循环连接:t => t+1

    • 直观思路:Dropout 前馈连接,但效果不理想,因为大量参数在 循环连接

    • 基于变分推理的 Dropout:所有时刻的循环连接上,采用相同的丢弃方法

    • Zoneout

2.3 RNN 中的长期依赖问题 **

  • 梯度消失 / 爆炸:Wtt0W^{t-t_0}

    • 最大特征值>1,梯度爆炸,梯度裁剪(超过阈值等比收缩)

    • 最大特征值<1,梯度消失,LSTM / GRU

  • 解决方案:初始化1,激活函数,正则化,跳跃连接,LSTM

2.4 长短期记忆网络 LSTM ****

长期依赖问题

  • LSTM

    • 输入门 it=σ(Wixt+Uiht1+bi)i_t=\sigma(W_ix_t+U_ih_{t-1}+b_i),当前状态,多大程度更新到记忆单元中

    • 遗忘门 ft=σ(Wfxt+Ufht1+bf)f_t=\sigma(W_fx_t+U_fh_{t-1}+b_f),之前记忆单元中的信息,多大程度被遗忘掉

    • 输出门 ot=σ(Woxt+Uoht1+bo)o_t=\sigma(W_o x_t+U_o h_{t-1}+b_o),当前输出,多大程度取决于当前记忆单元

    • 内部记忆单元 c~t=tanh(Wcxt+Ucht1)\tilde c_t=\tanh(W_cx_t+U_ch_{t-1}),于是 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)

  • GRU(用更新门 ztz_t 实现 遗忘+记忆)

    • 重置门 rt=σ(Wrxt+Urht1)r_t=\sigma(W_rx_t+U_rh_{t-1}),先前是否被忽略

    • 更新门 zt=σ(Wzxt+Ufzt1)z_t=\sigma(W_zx_t+U_fz_{t-1}),当前是否被更新

    • h~t=tanh(Whxt+Uh(rtht1))\tilde h_t=\tanh(W_hx_t+U_h(r_t\odot h_{t-1})),于是 $h_t=(1-z_t)h_{t-1}+z_t \tilde h_t$

2.5 Seq2Seq 架构 ***

机器翻译、语音识别、自动对话

  • 思想:输入序列 - 编码 - 解码 - 输出序列

  • 核心是 解码环节(贪心法、集束搜索、注意力机制)

  • 信息丢失:序列翻转、注意力机制

Last updated