第十二周:深度学习基础

第十二周:深度学习基础

摘要

RNN是一种适用于序列数据建模的神经网络,通过共享权重和循环连接来处理时间相关的信息。然而,传统的RNN面临着梯度消失和爆炸的问题,导致难以处理长期依赖关系。为了克服这个问题,出现了GRU和LSTM这两种改进的循环神经网络结构。GRU通过引入更新门和重置门,增强了对历史信息的处理能力。更新门决定了前一时刻的记忆状态是否被更新,重置门则控制了历史信息在当前计算中的遗忘程度。这使得GRU相比传统RNN更灵活地捕捉长期依赖关系,并且具有更少的参数,更易于训练。LSTM则引入了更加复杂的记忆细胞单元,通过遗忘门、输入门和输出门的组合来控制信息的流动。遗忘门决定了过去的记忆状态对当前记忆细胞的哪些部分进行遗忘,输入门决定了当前输入对记忆细胞的哪些部分进行更新,而输出门则决定了最终隐藏状态的哪些部分进行输出。LSTM以其较长的记忆时长和良好的长期依赖建模能力,在多种序列任务中取得了优异的表现。

Abstract

RNN is a neural network suitable for modeling sequential data to process time-dependent information through shared weights and recurrent connections. However, traditional RNNs face the problem of vanishing gradients and explosions, making it difficult to handle long-term dependencies. To overcome this problem, two improved recurrent neural network structures, GRU and LSTM, have emerged.GRU enhances the processing of historical information by introducing update gates and reset gates. The update gate determines whether the memory state of the previous moment is updated or not, and the reset gate controls how much historical information is forgotten in the current computation. This makes GRU more flexible in capturing long-term dependencies and easier to train with fewer parameters than traditional RNNs.LSTM, on the other hand, introduces more complex memory cell units that control the flow of information through a combination of forgetting gates, input gates, and output gates. The forgetting gate determines which parts of the current memory cell are forgotten by past memory states, the input gate determines which parts of the memory cell are updated by the current input, and the output gate determines which parts of the final hidden state are outputted.LSTM has achieved excellent performance in a wide range of sequential tasks due to its long memory duration and good long-term dependency modeling ability.

1. RNN(回顾)

引言
在学习RNN网络时,我们在这举的例子是Slot Filling。
“Slot filling” 是一种自然语言处理(NLP)任务,通常与命名实体识别(NER)和信息提取(IE)相关联,在自然语言处理中,“slot” 指的是一些特定的信息字段,而 “slot filling” 则是填充这些字段的过程,这个任务的主要目标是从给定的文本中提取特定信息,并将这些信息填充到预定义的字段或槽中。

那这个该如何去实现呢?

这个可以用一个前馈神经网络来实现,输入的是一个词向量,然后将其输入到神经网络中,而输出的则是一个概率分布,而这个概率分布则是代表每一个输入的词汇属于Slot的几率,但是这样也存在一些缺陷,前馈神经网络无法完全准确的输出这个概率分布,我们希望我们的神经网络是有记忆力的,而RNN网络则是有记忆力的神经网络。

RNN原理
在RNN网络中, 每一次我们网络中的隐藏层产生输出的时候, 这个输出的数据都会被存到记忆单元中, 下次如果再有词向量输入, 此时的隐藏层不会只处理输入端的词向量, 它会将之前存在记忆单元的词向量一并输入, 如下图, 即下次输入不止是 x 1 , x 2 x_1, x_2 x1,x2, 同时还会将记忆单元 a 1 , a 2 a_1, a_2 a1,a2 中的词向量输入至隐藏层.
在这里插入图片描述
所以现在我们要用RNN处理Slot Filling这个问题, 例如输入的句子为: arrive Taipei on November 2nd. 而 arrive 这个词就可以作为 x 1 x_1 x1 输入隐藏层中, 而通过隐藏层输出 a 1 a^1 a1, 根据 a 1 a^1 a1 产生 y 1 y^1 y1, y 1 y^1 y1 则是每个 Slot 产生的几率, 然后将 a 1 a^1 a1 存到记忆单元store中, 接下来将 Taipei 作为 x 2 x_2 x2 输入到隐藏层中, 此时隐藏层会同时处理上一轮记忆单元中的词 a 1 a^1 a1 和 这一轮输入的词 x 2 x^2 x2, 通过该隐藏层得到 a 2 a^2 a2, 产生 y 2 y^2 y2, 然后将 a 2 a^2 a2 存到该轮的记忆单元中. 上述例子中的句子中其他词也以此类推. 如下图为详细过程
在这里插入图片描述
上述是同一个神经网络, 在不同的时间点被使用了三次., 有了记忆单元后, 上面我们所说的前馈神经网络的不足之处也就得到了解决, 就比如下图中, 红色 Taipei 前面的记忆单元里是 leave, 而绿色 Taipei 前面的记忆单元里是 arrive, 它们之前的词向量均不一样, 故而即便二者是同一个词 Taipei, 由于隐藏层处理的词向量不同, 输出的值也会不同, 但在前馈神经网络中, 这种问题无法解决.
在这里插入图片描述
而一个RNN网络中的隐藏层可以是多个, 通过多个隐藏层得到最后的输出, 而每一个隐藏层输出的数据都会被存到记忆单元中, 在下一轮的词向量输入时, 每一个隐藏层会把在前一个时间点存在记忆单元中的数据和当前时间点的词向量一并输入至隐藏层中, 从而实现了记忆功能, 具体推导过程见 第六周: 深度学习基础. 如图

在这里插入图片描述

2. GRU

GRU代表门控循环单元(Gated Recurrent Unit),是一种用于循环神经网络(RNN)和长短时记忆网络(LSTM)之类的序列建模任务的神经网络架构。GRU是由Cho等人于2014年提出的,旨在解决传统RNN面临的梯度消失问题,同时减少了LSTM的复杂性。

GRU它改变了RNN的隐藏层,使其更好的捕捉深层连接,并改善了梯度消失问题,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
让我用一个图来(下图所示)解释一下GRU单元。

GRU单元输入 c < t − 1 > c^{<t-1>} c<t1>对于上一个时间步,先假设它正好等于 a < t − 1 > a^{<t-1>} a<t1>,所以把这个作为输入,然后 x < t > x^{<t>} x<t>也作为输入,然后把这两个用合适权重结合在一起,再用tanh计算,算出 c ^ < t > \hat c^{<t>} c^<t>,即 c t c^{t} ct的替代值,再用一个不同的参数集,通过sigmod激活函数,算出 Γ u \Gamma_{u} Γu(更新门),最后所有值通过另一个运算符结合,产生记忆细胞的新值 c t = a t c^{t}=a^{t} ct=at,通过Softmax,预测出 y < t > y^{<t>} y<t>,这就是一个简易的GRU单元。如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/a7007c2a746448cfa918b9f5c12e821f.png
它的优点就是通过门决定,当你从左到右扫描一个句子的时候,这个时候是要更新某个记忆细胞还是不更新,不更新(上图编号11所示,中间 Γ u = 0 \Gamma_{u}=0 Γu=0,且一直为0,表示一直不更新)的话就是直到你真的需要使用记忆细胞的时候(上图编号12所示),这可能在句子之前就决定了。因为sigmoid的值,现在因为门很容易取到0值,只要这个值是一个很大的负数,再由于数值上的四舍五入,上面这些门大体上就是0,或者说非常非常非常接近0。所以在这样的情况下,这个更新式子(上图编号13所示的等式)就会变成 c < t > = c < t − 1 > c^{<t>}=c^{<t-1>} c<t>=c<t1>,这非常有利于维持细胞的值。因为 Γ u \Gamma_{u} Γu很接近0,可能是0.000001或者更小,这就不会有梯度消失的问题了。即 c < t > c^{<t>} c<t>几乎就等于 c < t − 1 > c^{<t-1>} c<t1>,而且 c < t > c^{<t>} c<t>的值也很好的被维持了,即使经过很多很多的时间步(上图编号14所示)。这就是缓解梯度消失问题的关键,因此允许神经网络运行在非常庞大的依赖词上,比如说cat和was单词即使被中间的很多单词分割开。
在这里插入图片描述
现在我们来了解下一些实现的细节,在这个式子中, c t c^{t} ct 可以是一个向量(上图编号1所示),如果你有100维的隐藏的激活值,那么 c t c^{t} ct 也是100维的, c t ^ \hat{c^t} ct^也是相同的维度, Γ u \Gamma_u Γu也是相同维度的,这样的话“ ∗ ”实际上就是元素对应的乘积,所以这里的 Γ u \Gamma_u Γu,即如果门是一个100维的向量, Γ u \Gamma_u Γu也就是100维的向量,里面的值几乎都是0或者1,就是说这100维的记忆细胞 c < t > c^{<t>} c<t>就是你要更新的比特。当然在实际应用中 Γ u \Gamma_u Γu不会真的等于0或者1,有时候它是0到1的一个中间值(上图编号5所示),但是这对于直观思考是很方便的,就把它当成确切的0,完全确切的0或者就是确切的1。元素对应的乘积做的就是告诉GRU单元哪个记忆细胞的向量维度在每个时间步要做更新,所以你可以选择保存一些比特不变,而去更新其他的比特。

完整的GRU单元
对于完整的GRU单元我要做的一个改变就是在我们计算的第一个式子中给记忆细胞的新候选值加上一个新的项,我要添加一个门 Γ r \Gamma_r Γr(下图编号1所示),你可以认为 r 代表相关性(relevance)。这个 Γ r \Gamma_r Γr 门告诉你计算出的下一个 c < r > c^{<r>} c<r>的候选值 c t ^ \hat{c^t} ct^ c < t − 1 > c^{<t-1>} c<t1>之间的相关性。计算这个门 Γ r \Gamma_r Γr需要参数,正如你看到的这个,一个新的参数矩阵 W r W_r Wr Γ r = σ ( W r [ c < t − 1 > , x < t > ] + b r ) \Gamma_r=\sigma(W_r[c^{<t-1>},x^{<t>}]+b_r) Γr=σ(Wr[c<t1>,x<t>]+br)
在这里插入图片描述
所以这就是GRU,即门控循环单元,这是RNN的其中之一。这个结构可以更好捕捉非常长范围的依赖,让RNN更加有效。

3. LSTM

在这里插入图片描述
这就是LSTM主要的式子(上图编号2所示),我们继续回到记忆细胞c和更新它的候选值 c ^ < t > \hat{c}^{<t>} c^<t>。在LSTM中我们不再有 a < t > a^{<t>} a<t>或者 a < t − 1 > a^{<t-1>} a<t1>,我们也舍弃了GRU中的相关门,其中上图LSTM的式子中, c ^ < t > \hat{c}^{<t>} c^<t>是候选值, Γ u \Gamma_u Γu是更新门, Γ f \Gamma_f Γf是遗忘门, Γ o \Gamma_o Γo是输出门, c < t > c^{<t>} c<t>是记忆细胞, a < t > a^{<t>} a<t>是最终的输出值。
在LSTM的每个时间步里面,都有一个记忆细胞,这个东西给予了LSTM选择记忆功能,使得LSTM有能力自由选择每个时间步里面记忆的内容。
在这里插入图片描述
这个记忆细胞在我们LSTM结构当中是从 c < t − 1 > c^{<t-1>} c<t1>,然后经过一系列的操作变成 c < t > c^{<t>} c<t>的过程,即在我们的时间步中,我们可以通过一系列的操作来确定我们哪些东西需要遗忘掉,哪些东西需要把它保持住,不要遗忘掉,遗忘门则是选择性的遗忘一些我们不需要的东西,而更新门则会重新生成一些新的记忆,在LSTM中都可以进行自主的选择。接下来,我们将结合一个具体的例子,来通俗的理解一下LSTM的结构。

我们引入的这个例子场景是大学期末考试的场景,比如我们在每个时间点去考一门科目,如下,在A的时间点我们去考高等数学,在中间的时间点我们去考线性代数
在这里插入图片描述
如下图所示,假设现在我们现在需要去考线性代数,此时的 x t x_t xt则是复习我们的线性代数,而中间的遗忘门、更新门则是我们复习过程中选择性的遗忘的一些记忆(在这里我们是理想状态,当然真实情况下我们不可能刻意的去遗忘和更新我们的记忆,在这里我们只是将通过这个例子来说明LSTM,以便于理解),最后的 h t h_t ht则是我们的考试分数,复习的过程中,通过遗忘和更新我们会生成新的记忆,这个记忆可以表示为 c t c_t ct,而在下场考试,这个 c t c_t ct也会输入至下一个时间步。
在这里插入图片描述
输入端的 c t − 1 c_{t-1} ct1是我们上一个时间步考完高等数学后残留的记忆, h t − 1 h_{t-1} ht1则是我们考完高数后的状态,然后我们有一个总体的目标,这个目标就是要求我们每一门科目所考完的得分都能够达到我们希望的分值,在结构中用 h t h_t ht表示,整体结构是有监督学习,我们需要通过用 h t h_t ht来去监督我们结构中每一个参数的迭代更新,这便是我们这个例子的场景,接下来我们将会根据这个例子,去了解LSTM结构里的每一个部分是做了些什么事情。

如果我们要进行线性代数考试,我们需要先复习线性代数,即输入 x t x_t xt,其次就是我们需要尽可能的把跟线性代数没有关系的那一部分记忆遗忘掉,而遗忘门 f t f_t ft的作用就是去遗忘掉我们过去的累计下来的一些记忆,具体通过 f t ∗ c t − 1 f_{t}*c_{t-1} ftct1来进行遗忘,在前面我们已经了解到 f t = σ ( W f [ c < t − 1 > , x < t > ] + b f ) f_{t}=\sigma(W_f[c^{<t-1>},x^{<t>}]+b_f) ft=σ(Wf[c<t1>,x<t>]+bf) ,而sigmod激活函数的取值范围在0~1之间,如果当 f t = 0 f_t=0 ft=0时,则代表将上一步的记忆全部遗忘掉,当 0 < f t < 1 0<f_t<1 0<ft<1时,则代表对于上一步的记忆,此时就遗忘了一部分,具体遗忘多少这个得根据 f t f_t ft 的值而定, f t f_t ft [ 1 , 0 , 1 , 0 , 0 , . . . ] [1,0,1,0,0,...] [1,0,1,0,0,...]这样的向量,与 c t − 1 c_{t-1} ct1相乘后,会对上一个时间步记忆的内容进行调整。
在这里插入图片描述
通过遗忘门后,接着便是更新门,而更新门相当于我们生成的一个新的记忆,但是这个新的记忆并不是全都有用,需要有一个门去有选择性的去提取,就比如我们我们通过 x t x_t xt输入的数据,这些数据中有一些我们并不需要,所以我们就需要通过更新门去把不需要的给过滤掉。通俗的来说就是,当我们在复习线性代数(输入 x t x_t xt h t − 1 h_{t-1} ht1)的过程中,我们可能会学习到与考点无关的知识点,而更新门的作用就是让我们记住跟考点内容相关的知识点,遗忘掉与考点无关的知识点
在这里插入图片描述
通过遗忘门和更新门生成我们这个时间步新的记忆 c t c_t ct。输出门的权重决定了记忆细胞状态中哪些信息将会被传递到下一层或下一个时间步。当输出门的权重接近于1时,大部分记忆细胞状态中的信息将通过输出。而当输出门的权重接近于0时,LSTM单元会选择不输出绝大部分的记忆细胞状态,从而有选择地保留更重要的信息。输出门能够抑制来自记忆细胞状态的无关或噪音信息,只保留对当前时刻有用的信息。这样就能够提高模型的鲁棒性和泛化能力,使得模型能够更好地适应不同的输入情况。通过输出门的加权运算,LSTM单元可以动态地决定将多少记忆细胞状态传递到下一层或下一个时间步。这对于学习长期依赖关系非常重要,输出门可以控制过去信息与隐藏状态的整合程度,从而影响到隐藏状态的更新和传递。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@默然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值