循环神经网络与应用

循环神经网络

  • RNN :循环神经网络,处理的是后续的输出与之前的内容有关联的任务。

  • RNN引入“记忆”的概念

  • “循环”2字来源于其每个源于都执行相同的任务,但是输出依赖于输入和“记忆”。NMT: neural machine translation

一.场景与多种应用:模仿生成论文(生成序列)

二.层级结构
在这里插入图片描述

  1. x t x_{t} 是时间 t t 处 的输入
  2. S t S_t 是时间 t t 处的“记忆”, S t = f ( U X t + W S t 1 ) S_t=f(UX_t+WS_{t-1}) , f f 可以是 t a n h tanh
  3. O t O_t 是时间 t t 处的输出,如果是预测下个词的话,可能是 s o f t m a x softmax 输出的属于每个候选词的概率, O t = s o f t m a x ( V S t ) O_t=softmax(VS_t)
    W W U U 是参数的矩阵
  • 参数复用:每个时间点上用的 U U , V V , W W 都是同一个参数
  • O t O_t 只与 S t S_t 有关系
    结构细节:
  • 1.可以把因状态 S t S_t 视作“记忆体”,捕捉了之前时间点上的信息;
  • 2.输出 O t O_t 由当前时间及之前所有的“记忆”共同计算得到;
  • 3.实际应用中, S t S_t 并不能捕捉和保留之前所有的信息;
  • 4.不同于CNN,这里的RNN其实整个神经网络都共享一组参数( W W , U U , V V ),极大减小了需要训练和预估的参数量;
  • 5.图中的 O t O_t 在有些任务下是不存在的,比如文本情感分析,其实只需要最后的output结果就行。

三.多种RNN
双向RNN:1.有些情况下,当前的输出不只依赖于之前的序列元素,还可能依赖之后的序列元素。比如从一段话踢掉部分词,让你补全。
直观理解:双向RNN叠加
在这里插入图片描述
深层双向RNN和双向RNN的区别是每一步/每个时间点我们设定多层结构
在这里插入图片描述
4.BPTT算法
MLP(DNN)与CNN用BP算法求偏导
BPTT和BP是一个思路,不过既然有step,就和时间t有关系
在这里插入图片描述
1:16:12处
5.生成模型与图像描述

LSTM
1.长时依赖问题
(Long short-term Memory)
LSTM 是RNN的一种,大体结构几乎一样,区别是:1.它的“记忆细胞”被改造过;2.该记的信息会一直传递,不该记的会被“门”截断。
LSTM关键:“细胞状态”
细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易
LSTM怎么控制“细胞状态”
通过“门”让信息选择性通过,来去除或者增加信息到细胞状态
包含一个sigmoid神经网络曾和一个pointwise乘法操作
sigmoid层输出0到1之间的概率值,描述每个部分有多少量可以通过。0代表“不允许任何量通过”,1就指“允许任何量通过”

LSTM的几个关键“门”与操作
第一步:决定从“细胞状态”中丢弃什么信息 = =\rightarrow “忘记门”
f t = δ ( W t . [ h t 1 , x t ] + b f ) f_t=\delta(W_t.[h_{t-1},x_t]+b_f)

第二步:决定放什么新信息到“细胞状态”中
S i g m o i d Sigmoid 层决定什么值需要更新
T a n h Tanh 层创建一个新的候选值向量 C t ^ \hat{C_t}
上述2步是为状态更新做准备
i t = δ ( W i . [ H t 1 , x t ] + b i ) i_t=\delta(W_i.[H_{t-1},x_t]+b_i)
C t ^ = t a n h ( W c . [ h t 1 , x t ] + b C ) \hat{C_t}=tanh(W_c.[h_{t-1},x_t]+bC)

第三步:更新“细胞状态”
1.更新 C t 1 C_{t-1} C t C_t
2.把旧状态与 f t f_t 相乘,丢弃掉我们确定需要丢弃的信息
3.加上 i t C t ^ i_t*\hat{C_t} 。这就是新的候选值,根据我们决定更新每个状态的程度进行变化

第四步:基于“细胞状态”得到输出
1.首先运行一个sigmoid层来确定细胞状态的哪个部分得到输出
2.接着用tanh处理细胞状态(得到一个在-1到1之间的值),再将它和sigmoid门的输出相乘,输出我们确定要输出的那部分。
3.比如我们可能需要单复数信息来确定输出“他”还是“他们”。
O t = δ ( W o [ h t 1 , x t ] , b o ) O_t=\delta (W_o[h_{t-1},x_t],b_o)
h t = O t t a n h ( C t ) h_t=O_t*tanh(C_t)

LSTM相较于RNN会较少猪队友的影响,本质是前者求导是加法方式,后者是乘法方式。

变种1:

  • 增加“peephole connection”
  • 让门层也会接受细胞状态的输入

变种2:

  • 通过使用coupled忘记和输入门
  • 之前是分开确定需要忘记和添加的信息,这里是一同做出决定。
    C t = f t C t 1 + ( 1 f t ) C t ^ C_t=f_t*C_{t-1}+(1-f_t)*\hat{C_t}

四.GRU(Gated Recurrent Unit)

  • 将忘记门和输入门合成来一个单一的更新门
  • 同样还混合来细胞状态和隐藏状态,和其他一些改动
  • 比标准LSTM简单

Z t = δ ( W z . [ h t 1 , x t ] ) Z_t=\delta(W_z.[h_{t-1,x_t}])
r t = δ ( W r . [ h t 1 , x t ] ) r_t=\delta(W_r.[h_{t-1},x_t])
h t ^ = t a n h ( W . [ r t h t 1 , x t ] ) \hat{h_t}=tanh(W.[rt*h_{t-1},x_t])
h t = ( 1 z t ) h t 1 + z t y t ^ h_t=(1-z_t)*h_{t-1}+z_t*\hat{y_t}

发布了113 篇原创文章 · 获赞 51 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/weixin_43055882/article/details/94549278
今日推荐