[2022]李宏毅深度学习与机器学习第四讲(选修)-RNN
做笔记的目的
1、监督自己把50多个小时的视频看下去,所以每看一部分内容做一下笔记,我认为这是比较有意义的一件事情。
2、路漫漫其修远兮,学习是不断重复和积累的过程。怕自己看完视频不及时做笔记,学习效果不好,因此想着做笔记,提高学习效果。
3、因为刚刚入门深度学习,听课的过程中,理解难免有偏差,也希望各位大佬指正。
RNN介绍
在做槽位填充时,需要对单词进行分类预测,这个任务可以用一个普通的神经网络来做,但是这样涉及到一个问题,就是当一个词输进来时只有一个结果,但是现实中同一个词在不同语境下可能扮演的角色不同。所以,如果神经网络能记住前面输入的内容,那么就有可能达到同一个词输入,因为上下文的不同而输出不同的目的。RNN就可以这么做
RNN的大体架构,把中间结果传递给下一个输入,在图中颜色一眼的代表weight相同,也就是说这里贡献了权重。
这里也可以很容易想到,RNN是可以增加层数的,如下图:
这里单个RNN只能看到左边的信息,所以我们也可以弄两个RNN来做任务,这样就可以看到全局的信息了。
RNN向后面传递信息的方式有两种:
- 把中间向量传递给后面的Elman Netword
- 把输出传递给后面的Jordan Network
一般是Elman Netword比较常见
LSTM
在RNN里面,非常前面的单词对当前词的影响比较小,也就是只能够处理一定的短期依赖,但无法处理长期依赖问题。同时RNN存在梯度爆照和梯度消散的问题,在训练RNN时很可能遇到这样绿色这一条线。
为什么会出现绿色这一条线那?我们看看下面这个图像
RNN的loss非常的陡峭,遇到上图的断层,有可能直接跳过去,也可能落在断层上面,gradient非常大,同时因为之前很平缓所以学习率也比较大,这样就会飞出去。所以一开始很多人train不起来RNN,这里用clipping技术,当gradient大于一定值(15)时把gradient设置为15。那为什么会出现这种情况那?
同样的东西,经过时间向前传播,蝴蝶效应,同样的weight在不同时刻都被用到,慢慢积累变的很大。这些问题可以用LSTM来解决。
LSTM有四个输入,一个输出,他的计算流程如下:
整个LSTM如下图所示,除了传递memory还会传递输出,这两个向量和下一时刻输入拼接一起输入。
LSTM通过输入门、遗忘门、输出门引入sigmoid函数并结合tanh函数,添加求和操作,减少梯度消失和梯度爆炸的可能性。
GRU比LSTM少了一个门,当我们训练数据比较小时,在LSTM上发生了过拟合,不如用用GRU看看结果怎么样。
应用
- 可以做分类,如情感分类
- 可以生成多个输出,如语音识别
语音识别,这里有一个问题是如何区分好棒和好棒棒,一般是用CTC的策略,也就是加入 ϕ \phi ϕ。
机器翻译
也可以是sequence-to-sequence,用同一句话,训练编码器。
RNN vs Structured Learning
两个都有自己的优势,所以可以结合起来,如LSTM+CRF。