李宏毅2020机器学习课程笔记---RNN

RNN

  • RNN
  • LSTM
  • RNN的cost function
  • RNN的应用
  • RNN相关的扩展

RNN

首先,介绍一个自然语言处理任务中常见的应用问题:Slot Filling(填槽)

李宏毅2020机器学习课程笔记---RNN_第1张图片
用户说出一句话,提取出其中的重点,把它填入对应的槽中,比如“目的地”填“台北”,“抵达时间”填“11月2日”

我们可以用之前讲的 前馈神经网络来解决这个问题

李宏毅2020机器学习课程笔记---RNN_第2张图片
输入:一个单词(更准确的说,是它的向量)
输出:这个单词属于某个槽的概率分布
如:输入 “Taipei”,输出它属于 y1= dest 的概率,属于 y2= time of departure 的概率

课上老师介绍了何用向量来表示一个单词(词的向量化、词的编码或者词嵌入)

1-of-N encoding
它是一个长度为 N 的向量,只有 1个数字是1,其它的N−1 个数字都是0。编码使得每个单词在它们各自的维度上,与其它单词是独立的。通常,这个 N 是词汇表的大小。对于出现在词汇表之外的词,还额外引入一个“other”维度

注:其它一些词嵌入的方法见 P22(Word Embedding).

利用前向传播网络来做出现了一些问题。

李宏毅2020机器学习课程笔记---RNN_第3张图片
前向传播神经网络存在的问题:
如果输入的不是“arrive Taipei on November 2nd”,而是“leave Taipei on November 2nd”,那么 “Taipei” 在第一句中是目的地,在第二句中是离开地。
因此,前向传播神经网络需要有一个memory,来存储出现在 “Taipei” 之前的词是 “arrive” 还是 “leave”,由此引入了RNN 。

李宏毅2020机器学习课程笔记---RNN_第4张图片
在前向传播神经网络中加入存储单元 (图中的a1、 a2),每一步执行后,会将隐藏层的输出存储在a1、 a2中。当输入下一个单词时,会从 a1、 a2中读取数据,作为输入之一。
这样子的同一个网络会反复使用,把循环图按照时序展开后如下图所示:
李宏毅2020机器学习课程笔记---RNN_第5张图片
注意我们是用一个网络来进行训练的。

同时,我们处理两个不同的句子

李宏毅2020机器学习课程笔记---RNN_第6张图片
不同句子中,产生的a1的值是不同的。

在介绍完RNN的基本模型后,李老师又介绍了几种新的结构

李宏毅2020机器学习课程笔记---RNN_第7张图片
李宏毅2020机器学习课程笔记---RNN_第8张图片
双向的RNN,在实际应用中,充分考虑了句子的前文和后文对该词的理解。

LSTM

李老师也对现在十分常用的模型 LSTM 进行了讲解

李宏毅2020机器学习课程笔记---RNN_第9张图片
上图李老师为我们展示了lstm 的大致数据走向
该神经元一共被 一个大的memory中心,四个输入和一个输出控制
输入分别为:
待处理数据输入
控制input gate的数值输入(控制新数据是否被叠加)
控制 forget gate 的数值输入(控制memory中的值是否被更新)
控制output gate的数值输入 (控制memory中的值是否被输出)
输出为:处理后的数值输出
下图介绍一下 其计算流程(老师介绍的十分详细,建议听一听)
李宏毅2020机器学习课程笔记---RNN_第10张图片
老师通过多种方式将这个结构进行了讲解。
李宏毅2020机器学习课程笔记---RNN_第11张图片
需要注意的是,LSTM模型的参数比普通的神经网络也多了4倍的参数。

RNN的cost function

和其他的网络一样,RNN的代价也是用交叉熵的和来计算,参数的更新也是采用的反向传播来计算。
李宏毅2020机器学习课程笔记---RNN_第12张图片
但是,效果并不友好,并出现了一些奇特的现象:

李宏毅2020机器学习课程笔记---RNN_第13张图片

接下来,老师详细解释了下面几个问题:

1、解决RNN中训练出现的问题(误差横跳)—是在一篇论文中解释的
使用clipping ,其当梯度大于(阈值t)的时候就不再更新梯度了
2、解释为什么RNN出现了这种奇特的现象(梯度消失,梯度爆炸)
李宏毅2020机器学习课程笔记---RNN_第14张图片
我们可以将参数做小小的变化,看network 的 output 有多大的变化,就可以测出参数梯度变化的大小有多大。
在上图RNN训练过程中,我们输入[1,0,0,0,0,…0]除了一个值为1其余全是0,该RNN结构只有一个线性的神经元,参数为 w 。执行第一次的时候,y1d的输出为1,以此类推,由于RNN中memory和input是相乘的,当执行第1000次的时候,输出y1000 = w的999次方。
那么这时,当w=1时,1000次后的输出为1;当对参数w做小小改变,w=1.01时,1000次后的输出结果就约等于20000,是一个非常大的数,那么这个小小改变就导致参数的梯度非常的大。
同理考虑w = 0.99,和w = 0.01时,对比w=1,w = 1.01时,其输出约等于 0 ,其参数梯度又变得非常的小,这也说明了RNN的误差是非常跳跃的。
李宏毅2020机器学习课程笔记---RNN_第15张图片
3、对此问题有帮助的解决办法

  • LSTM(解决梯度消失)
    李宏毅2020机器学习课程笔记---RNN_第16张图片
  • Clockwise RNN
  • SCRN

RNN的应用

在讲解RNN时,我们便介绍了 one to one(输入一个序列,给每个word一个solt lable) 的应用-(自动买票)
第二种,many to one(输出一句话,产生一个向量)–文章的好坏语感理解
第三种,many to many(输入输出都是一个序列)—语音辨识

RNN相关的扩展

在这节,主要一个论文阅读的分享。
并且引入了注意力机制:

李宏毅2020机器学习课程笔记---RNN_第17张图片
李宏毅2020机器学习课程笔记---RNN_第18张图片
输入数据,利用我们学过的神经网络来找到注意的重点,从记忆中提取我们标识的重点,之后经过学过网络的组织分析给出思考结果。

你可能感兴趣的:(机器学习&深度学习,机器学习,深度学习,神经网络)