文章目录
摘要
本周跟着李宏毅老师学习了循环神经网络,从RNN的引入背景,分类原理等详细学习了几种RNN的分类,LSTM,RNN学习方式。学习了自注意力机制,学习了机制原理到公式理解以及举详细数据例子进行公式理解。学习了自注意力与CNN、RNN的对比.
Abstract
This week, I followed Mr. Li Hongyi to learn recurrent neural networks, and learned several RNN classifications, LSTM, and RNN learning methods in detail from the introduction background and classification principle of RNN. I learned self-attention mechanism, mechanism principle, formula understanding and detailed data examples for formula understanding. The comparison of self-attention with CNN and RNN was studied.
一、循环神经网络
以槽填充(slot filling)为例,两个用户使用订票系统订票,但是对于神经网络,同一个输入“上海”,输出是相同的,但是以下例子中,容易个输入“上海”,一个是目的地,一个是出发地。
在这种情况下,如果神经网络有记忆力的,它记得它看过“抵达”,在看到“上海”之前;或者它记得它已经看过“离开”,在看到“上海”之前。通过记忆力,它可以根据上下文产生不同的输出。如果让神经网络是有记忆力,其就可以解决输入不同的单词,输出不同的问题。
这种带有记忆功能的Neural Network称为Recurrent Neural Network(RNN)
1.1 RNN原理
在 RNN 里面,每一次隐藏层的神经元产生输出的时候,该输出会被存到记忆元(memory cell),下一次有输入时,这些神经元不仅会考虑输入 x1, x2,还会考虑存到记忆元里的值。除了 x1, x2,存在记忆元里的值 a1, a2 也会影响神经网络的输出。
记忆元可简称为单元(cell),记忆元的值也可称为隐状态(hidden state)
有了记忆元以后,输入同一个单词,希望输出不同的问题就有可能被解决。
如下图,同样是输入“上海”一词,左边的那个“上海”前面是离开,右边的那个“上海”前面是抵达,离开和抵达作为输入时的向量不同,隐藏层的输出不同,所以存在记忆元里面的值也不同,即使 x 2 x_2 x2的值相同,但考虑到记忆元中保存的值不同,所以隐藏层的输出会不同,所以最后的输出也就会不同。
1.2 其他类型的RNN
1.深层循环神经网络
输入一个x,通过一个隐藏层,再通过第二个隐藏层。。。可以通过很多个隐藏层才得到输出,每个隐藏层的输出都被存到记忆元里面。后面的输入x,在每一个隐藏层会把前一个时间点寸的值再读出来,以此类推最后得到输出。
2.ELman网络和Jordan网络
简单循环网络也称为 Elman 网络。即把隐藏层的输出值存起来,在下一个时间点读出来。
还有另外一种叫做 Jordan 网络,Jordan 网络存的是整个网络输出的值,它把输出值在下一个时间点读进来,把输出存到记忆元里。
- Elman 网络没有目标,很难控制说它能学到什么隐藏层信息(学到什么放到记忆元里)
- Jordan 网络是有目标,比较很清楚记忆元存储的东西。
3.双向循环神经网络(Bidirectional Recurrent Neural Network Bi-RNN)
同时训练一个正向的循环神经网络和训练一个逆向的循环神经网络,然后把这两个循环神经网络的隐藏层拿出来,都接给一个输出层得到最后的 y t y_t yt。双向循环神经网络的好处就是,他看的范围比较广
1.3 长短期记忆网络(Long Short-Term Memory network)LSTM
LSTM 有三个门(gate),当外界某个神经元的输出想要被写到记忆元里面的时候,必须通过一个输入门(input gate),输入门要被打开的时候,才能把值写到记忆元里面。如果把这个关起来的话,就没有办法把值写进去。至于输入门的开关是神经网络自己学的,其可以自己学什么时候要把输入门打开,什么时候要把输入门关起来。
输出的地方也有一个输出门(output gate),输出门会决定外界其他的神经元能否从这个记忆元里面把值读出来。把输出门关闭的时候是没有办法把值读出来,输出门打开的时候才可以把值读出来。跟输入门一样,输出门什么时候打开什么时候关闭,网络是自己学到的。
还有一个门称为遗忘门(forget gate),遗忘门决定什么时候记忆元要把过去记得的东西忘掉。这个遗忘门什么时候会把存在记忆元的值忘掉,什么时候会把存在记忆元里面的值继续保留下来,这也是网络自己学到的
整个 LSTM 可以看成有 4 个输入、1 个输出。在这 4 个输入中,一个是想要被存在记忆元的值,但不一定能存进去,还有操控输入门的信号、操控输出门的信号、操控遗忘门的信号,有着四个输入但它只会得到一个输出。对于LSTM,只要遗忘门不要决定要忘记,记忆元中的值会一直被保存起来。
四个输入都是经过激活函数(激活函数通常会选择sigmoid函数),因为其值介于0-1之间,这个0到1之间的值代表了这个门被打开的程度,(如果 f 的输出是 1,表示为被打开的状态,反之代表这个门是关起来的)
记忆元对应的计算公式
c ′ = g ( z ) f ( z i ) + c f ( z f ) c'=g(z)f(z_i)+cf(z_f) c′=g(z)f(zi)+cf(zf)
输入向量 x t x_t xt,这个向量首先会乘上一矩阵(线性变换)变成一个向量 z,向量 z 的维度就代表了操控每一个 LSTM 的输入, z z z这个维度正好就是 LSTM 记忆元的数量。如: z z z的第一维就输入到第一个单元
还会添加peephole连接,peephole 就是把存在记忆元里面的值也拉过来。操控 LSTM 四个门的时候,同时考虑 x t + 1 , h t , c t x_{t+1},h^t,c^t xt+1,ht,ct,把这三个向量并在一起乘上不同的变换得到四个不同的向量再去操控 LSTM。
RNN的训练比较困难,因为RNN每个时间步的输出都与前一时间步有关,在反向传播时,导致梯度在传播过程中被连续相乘,所以就会导致以下两个问题。举一个简单例子,如下图所示:
- 梯度爆炸
当遇到梯度爆炸时,通过裁剪(clipping)解决,即梯度大于某个阈值时,不让其再增加。如下图所示:
- 梯度消失
当遇到梯度消失时,通过LSTM解决。因为LSTM是把原来记忆元里面的值乘上一个值再把输入的值加起来放到单元里面。所以它的记忆和输入是相加的。在 LSTM 里面,一旦对记忆元造成影响,影响一直会被留着,除非遗忘门要把记忆元的值洗掉。不然记忆元一旦有改变,只会把新的东西加进来,不会把原来的值洗掉,所以它不会有梯度消失的问题。
1.4 应用
- 多对一序列:输入是一个序列,输出是一个向量
例如:RNN对一篇文章进行关键术语抽取,然后进行情感分析,如评价正负面等。 - 多对多序列:输入和输出都是序列,但输出序列比输入序列短。
例如:CTC穷举所有可能,进行语音识别。 - 序列到序列:输入跟输出都是序列 (但是两者的长度是不一样的
例如:机器翻译等。
二、自注意力机制
2.1 自注意力机制
自注意力机制(Self-Attention)允许模型在处理一个序列时,考虑到序列中每个元素与其他所有元素之间的关系。这种机制通过计算序列中每个元素与其他元素的关联度 α \alpha α,来捕捉序列内的复杂依赖关系。
自注意力机制的目的是考虑整个序列,但又不希望把整个序列的所有信息包在一个窗口里,所以就要找出每个元素对其影响较大的元素。
a
1
,
a
2
,
a
3
,
a
4
a^1,a^2,a^3,a^4
a1,a2,a3,a4作为一组序列里的元素,以
a
1
a^1
a1为例,从整个序列中寻找关系输出
b
1
b^1
b1
q i = W q a i q^i=W^qa^i qi=Wqai k i = W k a i k^i=W^ka^i ki=Wkai v i = W v a i v^i=W^va^i vi=Wvai α i , j = q i k i 通过 s o f t m a x 得到 α i , j ′ \alpha_{i,j}=q^ik^i通过softmax得到\alpha_{i,j}' αi,j=qiki通过softmax得到αi,j′ b 1 = ∑ i = 1 I α i , j ′ v i (加权和) b^1= \sum_{i=1}^{I}\alpha_{i,j}'v^i (加权和) b1=i=1∑Iαi,j′vi(加权和)
所以谁的注意力分数 α i , j ′ \alpha_{i,j}' αi,j′越大,谁的v就会主导b。
公式中 W q , W k , W v W^q,W^k,W^v Wq,Wk,Wv是未知的,需要通过训练学习的。
通过矩阵表达上述式子,如图所示:
2.2 其他
- 1.多头自注意力机制(multi-head self-attention)即不同的q负责不同种类的相关性.
-
2.做自注意力时,需要对每一个输入元素做位置编码,通常使用正弦函数产生。
-
3.当输入序列长度过大时,需要做截断自注意力,人为规定一个范围即可。
-
4.CNN是自注意力的一个特例,在数据量较小的时,CNN准确率优于自注意力。
总结
本周的学习对相关概念和公式进行了理解和记忆,下周将继续学习深度学习的神经网络模型,如:Transformer、生成式对抗网络等。如有错误,请各位大佬指出,谢谢!