李宏毅机器学习笔记5--RNN

其实感觉课程中关于RNN这部分讲的不是很细,很多都是泛泛而谈大体的框架,有点晕……

RNN引入

Recurrent Neural Network搭建的目的是为了使神经网络有一定记忆,可以储存之前的输入,这对对话系统、机器翻译等等有很大帮助。

见下图RNN神经元工作示意图:
在这里插入图片描述
一个RNN神经元在第一个word输入后除去输出相应值,还会将隐藏层信息(Elman)或者输出层信息(Jordan)储存起来等待下次输入。这样就可以保证,在上下文语境不同的时候,即使有相同输入,输出也是不同的,这符合日常对话等的常识。
在这里插入图片描述
上图所示的神经元从工作原理便可以发现其对上文具有一定记忆能力,但是对于下文是没有记忆能力的,但是实际上像文章阅读、翻译等还是需要对于下文的记忆。
故为使神经元具有记忆上下文的能力,引入了Ridirectional RNN,见下图示意:
在这里插入图片描述

RNN 梯度

事实上,RNN的训练是比较困难的,见梯度示意图:
在这里插入图片描述
其梯度会出现突然的下降或者上升,导致在训练中整个程序可能会崩掉。正如上图所示,解决方法之一就是对梯度进行clipping,对于大于阈值的梯度进行修剪可以从程序上避免这一点。
那,为什么会出现这种情况呢?
在这里插入图片描述
正如上图所示,因为RNN神经元的参数w会在多个时间序列中不断重复使用,存在一些邻接点在经过多次迭代后会产生突变,这在梯度上的表现就是梯度“悬崖”的存在。

LSTM引入

RNN因为有以上缺点,所以在现在使用不是很多,RNN中现在使用普遍的是LSTM(Long Short-term Memory)。

LSTM可以控制memory的储存、input的输入以及output的输出,更像神经元:
在这里插入图片描述
具体来看,LSTM结构为:
在这里插入图片描述
语言描述如下:

  1. 输入 z z z 经过一个Sigmoid激活函数然后会和由 z i z_i zi 控制的Input Gate相乘,得到 f ( z i ) g ( z ) f(z_i)g(z) f(zi)g(z)
  2. 然后该值 f ( z i ) g ( z ) f(z_i)g(z) f(zi)g(z) 会和memory相加,注意memory c c c 相加前要经过Forget Gate筛选,及 c f ( z f ) cf(z_f) cf(zf),则此刻有 f ( z i ) g ( z ) + c f ( z f ) f(z_i)g(z) + cf(z_f) f(zi)g(z)+cf(zf),这也是神经元下一时刻的memory c ′ c' c
  3. 在经过激活函数后,将由Output Gate控制是否生成输出,及 f ( z o ) h ( c ′ ) f(z_o)h(c') f(zo)h(c)

在实际使用中, z i , z f , z o z_i,z_f,z_o zi,zf,zo的生成和此刻的输入和记忆以及上一时刻的输出都是有关的:
在这里插入图片描述
一个小问题是为什么LSTM可以一定程度上避免RNN的梯度问题呢?

课程中讲的自己有些不太理解,便自己瞎说几句。

以RNN中的Elman network为例:
在这里插入图片描述
上述公式中和LSTM最大的不同在于哪里呢?
在于LSTM对于memory和input的调节参数并不是固定值,在不同时间时会根据上下文以及输入调整memory和input的参数,这样不会使得参数在较长时间序列迭代中产生指数次的explode或者vanish;
与之相反的是RNN中Memory和Input的参数在训练后都是定值,在不断迭代过程中参数的微小差距可能被极端放大,这也使得训练较为棘手。

LSTM训练

BPTT……待施工

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值