李宏毅机器学习(11)

本文深入介绍了循环神经网络(RNN),包括Elman Network、Jordan Network、双向RNN和LSTM的工作原理。RNN在处理序列数据时能够存储上下文信息,但训练过程中面临梯度消失和爆炸的问题。LSTM通过门控机制缓解了这些问题,而GRU则简化了LSTM结构。此外,文章还探讨了RNN在Many-to-One、Many-to-Many任务中的应用,并对比了RNN与结构化学习的区别和结合方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RNN

什么是RNN(Recurrent Neural Network)

在之前的所提到的NN,比如CNN,都是没有记忆性的。但如果我们要求NN能处理上下文的信息,比如下面的航空检票系统
在这里插入图片描述
每次输入一条信息,我们想知道每个单词是属于哪一类(slot),即:构建一个NN,输出每个单词属于每个slot的概率。
在第一条信息时,我们已经知道了Taipeidest,因此在处理第二条信息我们要能使用这一信息。
这就要求NN有存储功能。这就是RNN的核心。

Elman Network

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实际的操作并不复杂:在一些神经处有会有一个存储值,每次操作得到新的值后将其存储起来,留到下次使用。
那回到航空检票系统,做法也和上例类似。看似是用了三个神经元,实际上是一个神经元用了三次,大大减少了开支。
在这里插入图片描述
在处理第二条信息时,就会发现:同样的输入可能会有不同的输出。
在这里插入图片描述

Jordan Network

在这里插入图片描述
Elman Network存储的是神经元的值,而Jordan Network存储的是Output的值。通常效果更好。

Bidirectional RNN

RNN也可以双向训练。
在这里插入图片描述

LSTM(Long Short-term Memory)

LSTM的基本架构由3个gate1个Memory组成,如下图:
在这里插入图片描述
在这里插入图片描述

  1. Input Gate:由NN产生一个 z i z_i zi,得到 f ( z i ) = 0   o r   1 f(z_i)=0\ or\ 1 f(zi)=0 or 1,决定输入的值 z z z是否能进入LSTM。
  2. Forget Gate:由NN产生一个 z f z_f zf,得到 f ( z f ) = 0   o r   1 f(z_f)=0\ or\ 1 f(zf)=0 or 1,决定是否遗忘原本存储的值 c c c
  3. Output Gate:由NN产生一个 z o z_o zo,得到 f ( z o ) = 0   o r   1 f(z_o)=0\ or\ 1 f(zo)=0 or 1,决定输入的值 z z z是否能进入LSTM

LSTM的参数是普通神经网络的四倍,一个简单的例子如下:
在这里插入图片描述
在这里插入图片描述
输入Xt先经过线性转化为4个vector组成的 z z z。C是memory的vector。h是上一个LSTM神经元隐层的输出。
在这里插入图片描述
在这里插入图片描述

RNN的Learning

如何训练RNN

Loss Function:对每个输入, 其输出的与相应的reference vector计算cross entropy, cross entropy之和就是loss function
训练方法:Gradient Descent,具体而言是BPTT(不细讲)。
在这里插入图片描述
但出现了一个问题:

  • RNN的error surface要么很平缓要么很陡峭。
  • 参数可能跳到悬崖上,造成loss暴增。
  • 或者跳到悬崖边上(gradient很大),造成参数飞出去(NAN)。
  • 因此RNN的训练是很难的。

在这里插入图片描述
解决方法:

  • clipping: 当gradient>某个阈值时,令gradient = 阈值。
Why

并不是因为来自sigmoid的gradient vanish,因为换成ReLU也存在相同问题。(RNN中把sigmoid换成ReLU效果往往更差)
其实是因为RNN处理的是time sequence, 同样的weight在不同时刻被多次使用。 如下例:
在这里插入图片描述

如何解决

最常用的方法是LSTM。也就是把每个存储单元替换成LSTM即可。
但LSTM可以解决梯度消失的问题,但是难以解决梯度爆炸;
原因在于:

  • Memory and input are added
  • The influence never disappears unless forget gate is closed

目前,还有一种技术叫GRU(Gated Recurrent Unit)。与LSTM基本一样,但只用了两个gate,方法是:

  • 当 input gate 打开时,forget gate 就自动关闭。
  • 把存储单元里的值清掉,新的值才会进来。

Many to one

在这里插入图片描述
之前的例子是input和output一对一的。但RNN可以做到更多东西。
如上,将序列按照顺序在不同时间点输入,最后一个时间点把输出拿出来,经过些处理,得到结果。

Many to Many(Output is shorter)

但语音辨识中,可能遇到更复杂的情况:
正常的网络可能识别出好好好棒棒棒棒棒,然后可以通过Trimming去重,但是这样就无法识别好棒棒
在这里插入图片描述
解决方法:CTC(Connectionist Temporal Classification),在输出中增加空字符。
在这里插入图片描述
在这里插入图片描述

Many to Many(No Limitation)

在这里插入图片描述
其基本思路如上。但是问题是不知道何时停止联想。
引出,其思路也有点类似CTC,在训练中,添加一种output,叫做===,代表“断”。

RNN v.s. Structured Learning

Deep这件事很重要,可以带来很大优势。
在这里插入图片描述
实际上,二者还可以结合在一起。
在这里插入图片描述

  • input的feature先通过RNN与LSTM;
  • 其输出作为 HMM 等的输入;
  • 二者可以一起 Learn 的,可以一起Gradient Descent。

比如:

  • Speech Recognition: CNN/LSTM/DNN + HMM

在这里插入图片描述

  • Semantic Tagging: Bi-directional LSTM + CRF/Structured SVM

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值