第十二周学习周报

摘要

本周主要学习的内容是RNN,RNN主要用于处理序列数据,其核心特点是网络中的每个节点不仅接收当前输入,还接收前一个时间步的输出作为输入。在RNN的学习基础上进一步学习了LSTM,它被设计用来解决标准RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。此外,还将Self-attention和CNN、RNN进行了对比学习。

Abstract

The main content of this week’s study is RNN, which is mainly used to process sequential data. Its core feature is that each node in the network not only receives the current input, but also receives the output of the previous time step as input. On the basis of RNN learning, LSTM was further studied, which is designed to solve the gradient vanishing and exploding problems encountered by standard RNN when processing long sequence data. In addition, Self-attention was compared with CNN and RNN for learning.

1 Recurrent Neural Network

1.1 Example Application

Slot Filling
现如今,很流行做智慧客服,例如智慧订票系统。这时候就需要使用到Slot Filling这个技术。假设现在有人对订票系统说我想要9月2号去台北。Slot Filling要做的事情就是将客户说的词语进行一个分类,比如:分类中有目的地和到达时间两类,你的系统要知道客户说的词语属于哪个类,例如台北属于目的地这类中,9月2号属于到达时间这一类中,而其他词汇就不属于任何一类中。
在这里插入图片描述
这一过程要如何完成呢?我们可以通过Feedforward network来进行处理,将每一个词看成一个向量进行输入。用向量表示词的方法有很多,例如1-of-N encoding。经处理后得出的输出为每一个词汇属于每一类的几率为多少。例如输入时taipei,输出的则是taipei属于目的地以及到达时间的几率分别是多少。
在这里插入图片描述
但光是这样是不能够解决问题的,当客户说在9月2号离开台北时,这个网络就无法给出正确的处理,这时候我们就希望系统时有记忆力的,它可以根据一句话的上下文产生不同的output。这就需要使用到RNN,在该网络中,hidden layer的有输出时都会进行存储,当下次输入时就不仅仅只会考x1和x2 ,也会考虑存储在memory中的值。a1和a2也会影响neural的输出。
在这里插入图片描述
将其应用到售票系统中也是一样的道理,当input为leave taipei和arrive taipei时,虽然输出的词中都有taipei,但其前一个词leave 和arrive不同。在两次输入taipei前,leave 和arrive已经存储在memory中了,在RNN中输出除了受input的影响外,同时还受存储在memory的数据影响,所以尽管两次输入的都是taipei,但是输出的值也会不同。
在这里插入图片描述
以上为RNN的基本结构,当然RNN也是可以加深的,可以有很多层的hidden layer,每个hidden layer的值都会进行存储,每次的输出都会受到前一次输入的影响。
在这里插入图片描述

1.2 Elman Network & Jordan Network

RNN有不同的变形,上述讲的是Elman Network ,在这个network中我们每一次存储的是hidden layer的值。还有另外一种叫做Jordan Network,它存储的是整个network的output。Jordan Network可以得到比较好的performance,因为在Elman Network中存储的都是没有target的,所以你没有办法控制memory中存储的是什么样的信息,但是在Jordan Network中存储的信息是有target的,所以我们可以比较清楚我们放在memory里的是什么信息。
在这里插入图片描述

1.3 Bidirectional RNN

RNN也可以是双向的,刚才学习中的输入是从句子到句尾,但其的读取方式是可以反过来的。我们可以同时训练一个正向的循环神经网络,又可以训练一个逆向的循环神经网络,然后把这两个循环神经网络的隐藏层拿出来,都接给一个输出层得到最后的 yt
Bidirectional RNN的优点是neural产生输出时考虑范围更加全面,它是经过正向序列和反向序列的综合考量后得出的输出,得到的结果也会更加准确。
在这里插入图片描述

2 Long Short-term Memory (LSTM)

上述所讲述的内容只是RNN最简单的版本,上述描述的memory是可以随意存取的,但是现在比较常用的是Long Short-term Memory。
在这里插入图片描述
LSTM有3个gate:
(1)Input Gate:控制data输入储存单元,外界neural的输出想要写入存储单元时要经过它。
(2)Output Gate:控制data从存储单元中输出,外界neural想要从存储单元中读出值需要经过它。
(3)Forget Gate:决定什么时候要把存储单元中的data清除。
这三个Gate的开关都是神经网络自己学习的,它可以自己学习什么时候开门,什么时候关门。综上,整个LSTM有4个输入,1个输出。
在这里插入图片描述

将上述模型进一步细化,如上图所示。假定
我们要存入单元的输入为z,
控制input Gate的信号为zi,
控制Output Gate的信号为zo
控制Forget Gate的信号为zf

把z输入通过激活函数得到g(z),zi输入通过激活函数得到f(zi),这里用到的激活函数通常都为sigmoid函数,因为经过sigmoid函数所得值介于0和1之间,可以以此判断门是打开还是关闭的,把g(z)乘上f(zi)得到g(z)f(zi)。
zf通过激活函数得到f(zf),c’=g(z)f(zi)+cf(zf)。c’为重新存入单元的值,c’经sigmoid函数得到h(c‘)。最后由h(c‘)乘上f(zo)得到最终的输出a。输出门受f(zo) 所操控f(zo)等于 1 的话,就说明 h(c′) 能通过,f(zo) 等于 0 的话,说明记忆元里面存在的值没有办法通过输出门被读取出来。其他gate的处理与此类似。
Example
通过以下例子,对LSTM的运作原理进行解释。假定我们输入的都是三维的vector,当x2=1时,将x1加入memory中;当x2=-1时,清空memory;当x3=1时,将memory中的值输出。假定memory中存储的初始的数时0,为简化运算,令input和从memory输出时使用的model为linear model。
在这里插入图片描述
运算过程如下所示:
在这里插入图片描述
在我们传统的network中,我们会把input乘上不同的权重然后作为不同neural的输入,但如果是LSTM,我们可以相当于可以把简单的neural换成是LSTM,现在的input乘上不同的权重作为LSTM的各项输入,在原来传统的neural里,一个input就能产生一个output;但在LSTM中由4个input才能产生一个output,是普通neural需要的参数的4倍。
在这里插入图片描述
LSTM与RNN的关系:
假定有这么一组LSTM,其中的每一个Cell中都存储了值,每个cell中的值组成向量ct-1,假定input为xt,xt乘上一个矩阵得到z,z的一个维度就对应一个LSTM的输入,xt乘上另一个不同的矩阵得到矩阵zi,zi的一个维度就对应一个LSTM的input Gate的输入,zf和zo同理。所得的4个向量就会去操作每个LSTM的运作。
在这里插入图片描述
我们以其中一个memory cell为例进行讲解:
(1)首先z乘上zi经Input Gate 的function处理的值;
(2)zf经Forget Gate 的function处理的值乘上ct-1的值加上(1)中所得值得到ct
(3)将(2)中所得值经处理乘上z0经Output Gate 的function处理的值得到输出yt
后续处理以此类推。
在这里插入图片描述
但这并不是LSTM得最终形态,这只是一个simplified version。LSTM并不会单纯考虑Xt,它还会考虑hidden layer 的output以及memory cell经处理后更新的值,在这里被称为peeplohe。LSTM 通常不会只有一层,例如有五到六层。一般做 RNN 的时候,其实指的就用 LSTM。

3 Slef-Attention V.S. CNN

CNN可以看作是一个简化版的Self-attention,因为CNN只考虑感受野中的像素元素,而Self-attention则是基于全局考虑的。所以其实CNN就像是Self-attention的特例,只要Self-attention设置合适的参数,就可以达到和CNN一样的效果。
相比与CNN,Self-attention是一个更加灵活的model,在之前的学习中我们可以知道,越灵活的model往往更容易产生Overfiting,所以更多的data进行训练。
在这里插入图片描述
通过以上实验,用不同的data量来训练CNN以及Self-attention,横轴表示的是训练data的大小,蓝色折线表示Self-attention,灰色折线表示CNN。通过实验结果我们能发现,当实验数据较小时,CNN的效果好,但随着训练数据的数量增加,Self-attention的效果是可以优于CNN的。
这种现象也很容易解释,当训练资料较少时,Self-attention弹性大,更容易产生Overfitting;而CNN弹性较小,当训练资料少时效果也会更好。当训练资料增多到一定的量时,CNN就无法从中获得优势了。
ng)

4 Self-attention V.S. RNN

相同点: RNN和Self-attention一样,都是要处理输入是一个序列的状况。
Self-attention 输出是一个向量序列,该序列中的每一个向量都考虑了整个输入序列,再输入到全连接网络去做处理。RNN也会输出一组向量,这排向量也会给全连接网络做进一步的处理。

不同点:
(1)Self-attention的每一个向量都考虑了整个输入的序列,而RNN的每一个向量只考虑了左边已经输入的向量,它没有考虑右边的向量。就算使用Bi-RNN还是有一些差别的。
对于RNN,如果最右边黄色的向量要考虑最左边的输入,它就必须把最左边的输入存在记忆里面一路带到最右边,才能够在最后一个时间点被考虑。但Self-attention输出一个查询,输出一个键,只要它们匹配得起来就行了。Self-attention可以轻易地从整个序列上非常远的向量抽取信息。
(2)RNN在处理输入、输出均为一组序列的时候,是没有办法并行化的。
比如计算第二个输出的向量,不仅需要第二个输入的向量,还需要前一个时间点的输出向量。当输入是一组向量,输出是另一组向量的时候,RNN无法并行处理所有的输出,但Self-attention可以。Self-attention输入一组向量,输出的时候,每一个向量是同时并行产生的。
在这里插入图片描述
因此在运算速度上,Self-attention会比循环神经网络更有效率。目前,RNN的角色很大一部分都可以用Self-attention来取代了。很多的应用已经把RNN的架构逐渐改成Self-attention的架构了。

总结

经过本周的学习,我对RNN和LSTM有了一定的理解,明白了RNN以及LSTM的运作原理和基本概念。不同于传统的神经网络,LSTM由4个input和一个Output组成,它通过引入复杂的门控机制和内部状态来增强模型的记忆能力和对序列数据的理解。此外还将CNN和RNN与Self-attention做了一个初步的对比学习,明白了其的相同点与不同点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值