机器学习周报第15周

摘要

RNN是一种经典的循环神经网络,具有简单的结构。它适用于处理短序列数据,但在处理长序列时可能会面临梯度消失或梯度爆炸问题。RNN的主要问题是不能捕捉长距离依赖关系,因为它们只能考虑当前时刻的输入和前一时刻的隐藏状态。GRU(门控循环单元):GRU是一种改进的循环神经网络,具有较简单的结构。它通过门控机制来控制信息的流动,包括更新门和重置门,从而减轻了梯度消失问题。GRU相对于标准RNN更易于训练,同时在某些任务上表现出色。LSTM(长短时记忆网络):LSTM是一种强大的循环神经网络,具有更复杂的结构。它引入了三个门:输入门、遗忘门和输出门,以更好地捕捉长距离依赖关系。LSTM在处理长序列时表现出色,通常用于机器翻译、文本生成和语音识别等任务。

Abstract

RNN is a classical recurrent neural network with a simple structure.It is suitable for processing short sequence data, but may face the problem of gradient vanishing or gradient explosion when processing long sequences.The main problem with RNNs is that they cannot capture long distance dependencies because they can only consider the input at the current moment and the hidden state at the previous moment.GRU (Gated Recurrent Unit) : GRU is an improved recurrent neural network with a simpler structure. It mitigates the gradient vanishing problem by controlling the flow of information through gating mechanisms, including updating gates and resetting gates.GRU is easier to train compared to standard RNNs, while performing well on certain tasks.LSTM (Long Short-Term Memory Network): LSTM is a powerful recurrent neural network with a more complex structure.It introduces three gates: an input gate, a forgetting gate, and an output gate to better capture long-distance dependencies.LSTM performs well when dealing with long sequences and is commonly used for tasks such as machine translation, text generation, and speech recognition.

一、循环神经网络

1.1 不同类型的循环神经网络

如下图所示。“一对一”的结构,当去掉a^时是一种标准类型的神经网络。“一对多”的结构,比如音乐生成或者序列生成。“多对一”,如情感分类,首先读取输入,然后判断他们是否喜欢电影还是不喜欢。还有“多对多”的结构,命名实体识别就是“多对多”的例子,其中T_x = T_y。还有一种“多对多”结构例如机器翻译,T_x和T_y可以不同。
在这里插入图片描述

1.2 语言模型和序列生成

对于语言模型来说,用y来表示这些序列比用x来表示要更好。为了使用RNN模型,首先需要一个训练集(training set),包含一个很大的英文文本语料库(word corpus)或者其它的语言的语料库。语料库是自然语言处理的一个专有名词,意思就是很长的或者说数量众多的英文句子组成的文本。
例如,在训练集中得到这么一句话,“Cats average 15 hours of sleep a day.”(猫一天睡15小时),接下来需要(1)将这个句子标记化(tokenization),建立一个字典,然后将每个单词都转换成对应的one-hot向量,也就是字典中的索引。可能要定义句子的结尾,一般的做法就是增加一个额外的标记,叫做EOS(End Of Sentence),它表示句子的结尾,这样能够帮助你搞清楚一个句子什么时候结束。EOS标记可以被附加到训练集中每一个句子的结尾。在本例中我们,这句话就会有9个输入(如果你加了EOS标记)。同时,我们忽略了标点符号(punctuation),当然想加入字典也可以。
现在还有一个问题如果你的训练集中有一些词并不在你的字典里,比如“The Egyptian Mau is a bread of cat.”的词Mau,可以把Mau替换成一个叫做UNK(unknown words)的代表未知词的标志,我们只针对UNK建立概率模型,而不是针对这个具体的词Mau。完成标识化的过程后,这意味着输入的句子都映射到了各个标志上,或者说字典中的各个词上。(2)下一步我们要构建一个RNN来构建这些序列的概率模型。
训练过程如下图所示。
在这里插入图片描述
当训练完一个序列模型之后,我们要想了解到这个模型学到了什么,一种非正式的方法就是进行一次新序列采样(have a sample novel sequences)。
注意序列模型模拟了任意特定单词序列的概率,我们需要对这些概率分布进行采样(sample)来生成一个新的单词序列。如上图所示:

①第一步:对你想要模型生成的一个词进行采样。现在第一个时间步得到的输出是经过softmax层后得到的概率,然后根据这个softmax的分布进行随机采样。Softmax分布给你的信息就是第一个词a的概率是多少,第一个词是aaron的概率是多少,第一个词是zulu的概率是多少,还有第一个词是UNK(未知标识)的概率是多少,这个标识可能代表句子的结尾,然后对这个向量使用numpy命令为:
np.random.choice,来根据向量中这些概率的分布(according to distribution)进行采样,这样就能对第一个词进行采样了。
②然后继续下一个时间步,把采样得到的y帽作为输入(input)。注意到不管第一个时间步得到的是什么词,都要传递到下一个位置作为输入(input)。
③然后再到下一个时间步,无论你得到什么样的用one-hot码表示的选择结果,都把它传递到下一个时间步,然后对第三个词进行采样。不管得到什么都把它传递下去,一直这样直到最后一个时间步。
在这里插入图片描述

1.3 RNN的梯度消失

基本的RNN算法还有一个很大的问题,就是梯度消失(vanishing gradients)的问题。下图是个语言模型的例子。有两个句子:“The cat, which already ate ……, was full.”和“The cats, which ate ……, were full.”它们都有长期的依赖(have very long-term dependencies),前面的单词对句子后面的单词有影响。但是基本的RNN模型(上图编号1所示的网络模型),不擅长捕获这种长期依赖效应。
对于RNN而言,首先从左向右前向传播,然后反向传播,同样存在梯度消失问题,后面层的输出误差很难影响到前面层的计算,实际上神经网络很难意识到它要记住的是单数还是复数单词,然后在序列后面生成依赖单复数形式的was或者were。所以基本的RNN模型会有很多局部影响,这是基本的RNN算法的一个缺点(weakness),不擅长处理长期依赖的问题。
尽管我们一直在讨论梯度消失问题,但是,之前在讲很深的神经网络时也提到了梯度爆炸。在反向传播时,随着层数的增多,梯度不仅可能指数型的下降,也可能指数型的上升。事实上梯度消失在训练RNN时是首要的问题(bigger problem),尽管梯度爆炸也是会出现,但是梯度爆炸很明显,因为指数级大的梯度会让你的参数变得极其大,以至于你的网络参数崩溃。你会看到很多NaN,或者不是数字的情况,这意味着网络计算出现了数值溢出(numerical overflow)。如果你发现了梯度爆炸的问题,一个解决方法就是用梯度修剪(gradient clipping)。梯度修剪的意思就是观察你的梯度向量,如果它大于某个阈值(threshold),缩放梯度向量,保证它不会太大,这就是通过一些最大值(maximum value)来修剪的方法。因此,如果你遇到了梯度爆炸,如果导数值很大,出现了NaN或者不是数字的情况,就用梯度修剪,这是相对比较鲁棒的,这是梯度爆炸的解决方法。
在这里插入图片描述

1.4 GRU单元

门控循环单元(Gated Recurrent Unit),它改变了RNN的隐藏层,使其可以更好地捕捉深层连接,并改善了梯度消失问题。
在每个时间步,我们将用一个候选值(candidate)重写记忆细胞,它替代了c^(t)的值,我们用tanh激活函数来计算,公式如下:
在这里插入图片描述
重点(key)来了,在GRU中真正重要的思想是有一个门,把这个门叫做gamma u,这是一个下标为u(字母u代表update)的大写希腊字母Γ,是一个0到1之间的值。实际上这个值是把这个式子带入sigmoid函数得到的,公式如下:
在这里插入图片描述
首先我们得到候选值,然后门决定是否要更新它。①于是记忆细胞 c ( t ) c^{(t)} c(t)被设定为0或者1,这取决于你考虑的单词在句子中是单数还是复数,这里单数情况我们先假定它被设为了1,如果是复数的情况我们就把它设为0。②GRU单元会一直记住记忆细胞c^(t)的值。③门Γ_u的作用就是决定什么时候会更新这个值,特别是当你看到词组the cat,即句子的主语猫,这就是一个好时机去更新这个值。然后当你使用完它的时候,“The cat, which already ate…, was full.”,然后你就可以忘记它了。
在这里插入图片描述

1.5 长短期记忆(LSTM)

LSTM是一个比GRU更加强大和通用的版本,LSTM与GRU在细节上有一些差异。如下图所示,左侧是GRU的公式,有两个门(gates):更新门Γ_u(the update gate)和相关门Γ_r(the relevance gate)。LSTM的新特性之一是不只有一个更新门控制,还有遗忘门Γ_f(the forget gate)以及有一个新的输出门Γ_o(output gate)
在这里插入图片描述
下方的三张图,把它们按照时间次序连接起来,这里输入 x ( 1 ) x^{(1)} x(1) x ( 2 ) x^{(2)} x(2) x ( 3 ) x^{(3)} x(3),对于这条红色直线,这条线显示了只要你正确地设置了遗忘门和更新门,LSTM是相当容易把a的值一直往下传递到右边,这就是为什么LSTM和GRU非常擅长于长时间记忆某个值,对于存在记忆细胞中的某个值,即使经过很长很长的时间步。
在这里插入图片描述
对于LSTM和GRU,两者的优缺点分别如下:
①GRU的优点(advantage)是这是个更加简单的模型,所以更容易创建一个更大的网络,而且它只有两个门,在计算性上也运行得更快,然后它可以扩大模型的规模。

②LSTM的优点(advantage)为更加强大和灵活,因为它有三个门而不是两个。
总的来说,无论是GRU还是LSTM,都可以用它们来构建捕获更加深层连接的神经网络。

1.6 双向神经网络

回顾命名实体识别的例子,在判断第三个单词Teddy是不是人名的一部分时,我们只看了前三个单词,除了这些信息我们还需要更多的信息。因为根据前3个单词无法判断他们说的是Teddy熊,还是前美国总统Teddy Roosevelt,所以这是一个非双向的或者说只有前向的RNN。不管这些单元(上图方形区域)是标准的RNN块,还是GRU单元或者是LSTM单元,只要这些构件都是只有前向的。
在这里插入图片描述
如下图所示就是双向循环神经网络(bidirectional recurrent neural network),并且这些基本单元不仅仅是标准RNN单元,也可以是GRU单元或者LSTM单元。事实上,很多的NLP问题,对于大量有自然语言处理问题的文本,有LSTM单元的双向RNN模型是用的最多的。所以如果有NLP问题,并且文本句子都是完整的,首先需要标定这些句子,一个有LSTM单元的双向RNN模型,有前向和反向过程是一个不错的首选。
以上就是双向RNN的内容,这个改进的方法不仅能用于基本的RNN结构,也能用于GRU和LSTM。
通过这些改变,可以用一个用RNN或GRU或LSTM构建的模型,并且能够预测任意位置,即使在句子的中间,因为模型能够考虑整个句子的信息。这个双向RNN网络模型的缺点(disadvantage)就是你需要完整的数据的序列(the entire sequence of data)才能预测任意位置。比如构建一个语音识别系统,那么双向RNN模型需要考虑整个语音表达,你需要等待这个人说完,然后获取整个语音表达才能处理这段语音,并进一步做语音识别。对于实际的语音识别的应用通常会有更加复杂的模块(somewhat more complex modules),而不是仅仅用我们见过的标准的双向RNN模型。但是对于很多自然语言处理的应用,如果你总是可以获取整个句子,这个标准的双向RNN算法实际上很高效(very effective)。
在这里插入图片描述

总结

RNN(循环神经网络),GRU(门控循环单元)和LSTM(长短时记忆网络)都是深度学习中常用的序列模型,用于处理时间序列数据或其他具有序列结构的数据。下周我将继续学习RNN的内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值