本文主要介绍了Self-Attention产生的背景以及解析了具体的网络模型
很多时候,我们需要输入的数据非常的复杂,难以用统一、固定长度的向量来表示。比如NLP中长短不一的句子。此外,我们需要输出的数据有时候也会复杂,比如一组向量中每一个向量有一个输出(词性标注),或者一组向量有一个输出,或者输出的数量让机器自己决定(即seq2seq任务,比如中英文翻译)
在第一种情况的时候,我们可以使用Fully-connected,然后每一个向量会有一个输出,但是单独使用一个向量为基础其蕴含的信息太少了,于是可以加上一个Windows想法,一个向量的前后5个也作为输入。但是这样也有一个缺点,就是我们的句子长度是不一样的,难以用一个统一的windows来。而Self-Attention网络可以用在任何长度的句子上,非常的灵活
Self-Attention第一步:计算每两个输入向量之间的Relevant,记为α
常见的计算方法有Dot-product和Additive
即将各向量分别乘以一个矩阵,得到两个新的向量。两个向量相乘就是Dot-Product方法,若直接相连接然后使用tanh函数就是Additive方法
注意自己也要和自己计算相关性,这样的做法可以提高模型的性能。这里的归一化可以使用Soft-max也可以使用ReLu
Self-Attention第二步:新增一个向量v,与α相乘,将所有的数值进行累加
再乘以一个Wv矩阵得到v向量,然后让每一个v向量乘以它的α,将这些向量所有累加起来成为一个新的向量
Self-Attention第三步:与Fully-Connection结合起来使用
但是这样有一个缺点就是,没有考虑到每个单词在句子中的位置信息。
如果想要考虑的话,很简单,你为每一个位置设计一个位置权重向量ei,每个ei加到ai上面去
参考资料
《机器学习》周志华
《深度学习与机器学习》吴恩达
《神经网络与与深度学习》邱锡鹏
《深度学习与机器学习》李宏毅