李宏毅老师课程:Recurrent Neural Network

Example Application

Slot Filling(槽填充)

在智能客服、智能订票系统中,往往会需要slot filling技术,它会分析用户说出的语句,将时间、地址等有效的关键词填到对应的槽上,并过滤掉无效的词语

有一个问题,如下图,神经网络会先处理“arrive”和“leave”这两个词汇,然后再处理“Taipei”,这时对NN来说,输入是相同的,它没有办法区分出“Taipei”是出发地还是目的地

这个时候如果NN在看到“Taipei”的时候,还能记住之前已经看过的“arrive”或是“leave”,就可以根据上下文得到正确的答案
在这里插入图片描述
这种有记忆力的神经网络,就叫做Recurrent Neural Network(RNN)

在RNN中,hidden layer每次产生的output a1、a2,都会被存到memory里,下一次有input的时候,这些neuron就不仅会考虑新输入的x1、x2,还会考虑存放在memory中的a1、a2
在这里插入图片描述

Slot Filling with RNN

用RNN处理Slot Filling的流程举例如下:

  • “arrive”的vector作为x1输入RNN,通过hidden layer生成a1,再根据a1生成y1,表示“arrive”属于每个slot的概率,其中a1会被存储到memory中
  • “Taipei”的vector作为x2输入RNN,此时hidden layer同时考虑x2和存放在memory中的a1,生成a2,再根据a2生成y2,表示“Taipei”属于某个slot的概率,此时再把a2存到memory中
  • 依次类推
    在这里插入图片描述
    这个时候,即使输入同样是“Taipei”,我们依旧可以根据前文的“leave”或“arrive”来得到不一样的输出
    在这里插入图片描述

Elman Network & Jordan Network

RNN有不同的变形:

  • Elman Network:将hidden layer的输出保存在memory里
  • Jordan Network:将整个neural network的输出保存在memory里

由于hidden layer没有明确的训练目标,而整个NN具有明确的目标,因此Jordan Network的表现会更好一些
在这里插入图片描述

Bidirectional RNN(双向RNN)

RNN 还可以是双向的,你可以同时训练一对正向和反向的RNN,把它们对应的hidden layer拿出来,都接给一个output layer,得到最后的结果
在这里插入图片描述

LSTM

长短期记忆(Long Short-term Memory):可以被理解为比较长的短期记忆,因此是short-term,而非是long-short term

Three-gate

LSTM有三个gate:

  • 当某个neuron的输出想要被写进memory cell,它就必须要先经过一道叫做input gate的闸门,如果input gate关闭,则任何内容都无法被写入,而关闭与否、什么时候关闭,都是由神经网络自己学习到的
  • output gate决定了外界是否可以从memory cell中读取值,当output gate关闭的时候,memory里面的内容同样无法被读取
  • forget gate则决定了什么时候需要把memory cell里存放的内容忘记清空,什么时候依旧保存

整个LSTM可以看做是4个input,1个output:

  • 4个input=想要被存到memory cell里的值+操控input gate的信号+操控output gate的信号+操控forget gate的信号
  • 1个output=想要从memory cell中被读取的值
    在这里插入图片描述

Memory Cell

如果从表达式的角度看LSTM,它比较像下图中的样子

  • z z z是想要被存到cell里的输入值
  • z i z_i zi是操控input gate的信号
  • z 0 z_0 z0是操控output gate的信号
  • z f z_f zf是操控forget gate的信号
  • a a a是综合上述4个input得到的output值
    在这里插入图片描述

LSTM Example

下图演示了一个LSTM的基本过程, x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3是输入序列, y y y是输出序列,基本原则是:
x 2 = 1 x_2 = 1 x2=1时,将 x 1 x_1 x1的值写入memory
x 2 = − 1 x_2 = -1 x2=1时,将memory里的值清零
x 3 = 1 x_3 = 1 x3=1时,将memory里的值输出
当neuron的输入为正时,对应gate打开,反之则关闭
在这里插入图片描述

LSTM for RNN

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Learning Target

Loss Function

依次输入model,比如“arrive”必须要在“Taipei”前输入,不能打乱语序
在这里插入图片描述

Training

训练使用梯度下降法,为了计算方便,这里采取了反向传播(Backpropagation)的进阶版,Backpropagation through time,简称BPTT算法
在这里插入图片描述
我们希望随着epoch的增加,参数的更新,loss应该要像下图的蓝色曲线一样慢慢下降,但在训练RNN的时候,可能会遇到类似绿色曲线一样的学习曲线,loss剧烈抖动,并且会在某个时刻跳到无穷大,导致程序运行失败
在这里插入图片描述

Error Surface

分析可知,RNN的error surface,即loss由于参数产生的变化,是非常陡峭崎岖的

下图中, z z z轴代表loss, x x x轴和 y y y轴代表两个参数 w 1 w_1 w1 w 2 w_2 w2,可以看到loss在某些地方非常平坦,在某些地方又非常的陡峭

如果此时你的训练过程类似下图中从下往上的橙色的点,它先经过一块平坦的区域,又由于参数的细微变化跳上了悬崖,这就会导致loss上下抖动得非常剧烈

如果你的运气特别不好,一脚踩在悬崖上,由于之前一直处于平坦区域,gradient很小,你会把参数更新的步长(learning rate)调的比较大,而踩到悬崖上导致gradient突然变得很大,这会导致参数一下子被更新了一个大步伐,导致整个就飞出去了,这就是学习曲线突然跳到无穷大的原因
在这里插入图片描述
想要解决这个问题,就要采用Clipping方法,当gradient即将大于某个threshold的时候,就让它停止增长,比如当gradient大于15的时候就直接让它等于15

Help Techniques

LSTM可以把error surface上那些比较平坦的地方拿掉,从而解决梯度消失(gradient vanishing)的问题,但它无法处理梯度崎岖的部分,因而也就无法解决梯度爆炸的问题(gradient explode),因此训练时可以放心地把learning rate设的小一些
在这里插入图片描述
另一个版本GRU (Gated Recurrent Unit),只有两个gate,需要的参数量比LSTM少,不容易过拟合,能把input gate和forget gate连起来,当forget gate把memory里的值清空时,input gate才会打开,再放入新的值

More Applications

在Slot Filling中,我们输入一个word vector输出它的label,除此之外RNN还可以做更复杂的事情

  • 多对一
  • 多对多

Sentiment Analysis(情绪分析)

在这里插入图片描述

Key term Extraction(关键词提取)

在这里插入图片描述

Output is shorter

以语音识别为例,输入是一段声音信号,每隔一小段时间就用1个vector来表示,因此输入为vector sequence,而输出则是character vector

如果依旧使用Slot Filling的方法,只能做到每个vector对应1个输出的character,识别结果就像是下图,可使用Trimming把重复内容消去,剩下“好棒”
在这里插入图片描述

使用CTC算法可区分“好棒”和“好棒棒”,它的基本思想是,输出不只是字符,还要填充NULL,输出的时候去掉NULL就可以得到连词的效果
在这里插入图片描述
本文图片来自李宏毅老师课程PPT,文字是对李宏毅老师上课内容的笔记或者原话复述,在此感谢李宏毅老师的教导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值