【DeepLearning 8】Self-Attention自注意力神经网络-LMLPHP

一、Introduction 

        很多时候,我们需要输入的数据非常的复杂,难以用统一、固定长度的向量来表示。比如NLP中长短不一的句子。此外,我们需要输出的数据有时候也会复杂,比如一组向量中每一个向量有一个输出(词性标注),或者一组向量有一个输出,或者输出的数量让机器自己决定(即seq2seq任务,比如中英文翻译)

        在第一种情况的时候,我们可以使用Fully-connected,然后每一个向量会有一个输出,但是单独使用一个向量为基础其蕴含的信息太少了,于是可以加上一个Windows想法,一个向量的前后5个也作为输入。但是这样也有一个缺点,就是我们的句子长度是不一样的,难以用一个统一的windows来。而Self-Attention网络可以用在任何长度的句子上,非常的灵活

二、Model

2.1 Revelant  

Self-Attention第一步:计算每两个输入向量之间的Relevant,记为α

        常见的计算方法有Dot-productAdditive

        即将各向量分别乘以一个矩阵,得到两个新的向量。两个向量相乘就是Dot-Product方法,若直接相连接然后使用tanh函数就是Additive方法

【DeepLearning 8】Self-Attention自注意力神经网络-LMLPHP

 注意自己也要和自己计算相关性,这样的做法可以提高模型的性能。这里的归一化可以使用Soft-max也可以使用ReLu【DeepLearning 8】Self-Attention自注意力神经网络-LMLPHP

2.2 Sum up

Self-Attention第二步:新增一个向量v,与α相乘,将所有的数值进行累加         

        再乘以一个Wv矩阵得到v向量,然后让每一个v向量乘以它的α,将这些向量所有累加起来成为一个新的向量

【DeepLearning 8】Self-Attention自注意力神经网络-LMLPHP

 【DeepLearning 8】Self-Attention自注意力神经网络-LMLPHP

2.3 Fully-Connection

Self-Attention第三步:与Fully-Connection结合起来使用

【DeepLearning 8】Self-Attention自注意力神经网络-LMLPHP

但是这样有一个缺点就是,没有考虑到每个单词在句子中的位置信息。

如果想要考虑的话,很简单,你为每一个位置设计一个位置权重向量ei,每个ei加到ai上面去

【DeepLearning 8】Self-Attention自注意力神经网络-LMLPHP

参考资料

《机器学习》周志华

《深度学习与机器学习》吴恩达

《神经网络与与深度学习》邱锡鹏

《深度学习与机器学习》李宏毅

11-27 08:05