self attention(自注意机制)
- 输入:以往神经网络的输入都是一个向量;如果现在输入的是一排向量,并且数量不唯一,应该如何处理:
例一:一句英文
One-hot Encoding:开一个长度为世界上全部词汇数的向量表示一个词汇(缺点:词汇间没关系)
Word Embedding:给每个词汇一个坐标向量,这种方式有关系的词汇坐标距离接近
例二:声音讯号;一般会把一段声音讯号划分为一个向量(frame)(长度为25毫秒),并且每段向后移动10毫秒
例三:图;每个结点都是一个向量
- 输出:每一个输入的向量对应一个输出;
- 输出:整个序列(sequence)只输出一个标签(label),(筛选留言是正面还是反面)
- 输出:输出的标签(label)的个数不定,由机器自定
Sequence Labeling(序列标签)
- Self attention:传入整个序列(Sequence)的数据,传入几个向量就输出几个向量,输出的向量都是考虑序列全部输入向量而得出的结果;
并且Self attention可以叠加多次。所以Self attention可以和FC(Fully connected network)交替使用;Self attention处理整体信息,FC专注处理某个位置的信息。
Self attention内部:
产生b1的过程:
1.根据a1找出整个序列中与a1相关的其他向量的联系程度,记a1与其他几个的联系程度为α;(得到α可以用Dot product或Additive等)
2.得到联系程度α后,再做一个Softmax或Relu等得到 α'(规范化norm),可以通过 α'抽取出序列中重要想信息
矩阵过程:
- 得到关系程度分数 α':
- 得出输出结果:
总结:
根据
得出,需要训练得到的参数只有Wq、Wk、Wv
扩展:
- Multi head Self attention(多头自我注意),相互之间有多种相关关系
例如head=2:
最终结果:
求法二:
法二的计算量比法一的计算量较少
Self attenton和CNN
- Self attenton是考虑序列中全部的向量得出某向量的输出向量
- CNN(卷积神经网络Convolutional neural network)则是只考虑该向量及其周围的几个向量
Recurrent Neural Network(循环神经网络)
例:当分析一句话中各词汇是什么词性,往往需要结合前一个词汇一起分析,并且一句话中相同的词汇可能得出不同的结果;这时就需要RNN(循环神经网络)
- RNN(循环神经网络):是有记忆力的,上图中同样是Taipei,要得出不同的结果就需要结合之前的一个词汇
- 刚开始给memory赋初始值,之后会把前一个词汇的输出存入memory,达到有记忆力的效果
并且可以叠多层:
RNN由分为Elman和Jordan
Bidirectional RNN(双向RNN)
RNN:LSTN…
- 训练:计算L对w的偏微分;用Gradient Descent(梯度下降法)优化参数
Graph Neural Networks(图神经网络)
。。。