前言
- 讲解思路:rnn-->encoder-decoder-->attention-->seft-attention
RNN循环神经网络
-
首先看图👆🏻,此图为全连接神经网络。可以看出,全连接神经网络由于每一层中每一个输入都是一个单独的个体,所以缺点就是不能更好的处理序列信息。
-
序列信息:一段连续的信息,前后信息之间是有关系的,必须将不同时刻的信息放在一起理解。
-
举例:一句话虽然可以拆分成多个不同的词语,但是必须将这些词语连在一起才能得到一句话的意思。
RNN就由此诞生,用于解决序列信息的任务,在RNN任务中,一句话中的每个词并不是单独存在的,而是根据上下文信息,前后词有关。
encoder-decoder
-
以上图为例,输入<x1,x2,x3>,通过RNN生成隐藏层的状态值<h1,h2,h3>,如何确定Encoder Vector呢?最简单的办法直接用最后时刻输出的ht作为Encoder Vector的状态值,这里也就是可以用h4直接作为语义编码C的值,也可以将所有时刻的隐藏层的值进行汇总,然后生成Encoder Vector的值,这里就是C=q(h1,h2,h3),q是非线性激活函数。 得到了Encoder Vector之后,接下来就是要在Decoder中对Encoder Vector进行解码了。
-
Decoder:解码器,根据输入的Encoder Vector,然后将其解码成序列数据,解码方式也可以采用RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU。Decoder和Encoder的编码解码方式可以任意组合,并不是说我Encoder使用了RNN,Decoder就一定也需要使用RNN才能解码,Decoder可以使用LSTM,BiRNN这些。
Attention
attention的概念:对于一个物体,不同的人观察到的可能是不同的地方,这就是人的注意力机制。attention就是模仿人的注意力机制诞生的。
attention的诞生:对于像encoder-decoder这种RNN的模型不能进行并行计算,速度慢。
- attention的优点:速度快,不再依赖于RNN,解决了RNN不能并行计算的问题。在Decoder阶段可以并行计算。
- attention的缺点:Encoder不够完美,还是要依靠RNN。
self-attention
由于attention不够完美的原因,又诞生了self-attention。此两者的计算方式是相同的。
不同的地方在于:attention是发生在encoder-decoder之间的计算,而self-attention是发生在encoder或者decoder内部的计算。
这样就解决了原先的缺点。
两者只是计算对象发生了变化而已。