1.简介
在最常见的深度学习应用中图像识别,语音识别
图像识别
我们通常是输入一张图片,一组向量,加入到模型,模型为我们输出一个类别class或者scalar
语音识别
我们通常是输入一段语音,一序列的向量,加入到模型,模型为我们输出一个类别class或者scalar
1.1 不同输入的向量表示方法
在日常的深度学习中,我们对模型有不同的输入,比如文本,图片,语音,图等等,我们需要对这样的输入转化为能被模型更好处理的向量。
对于图片来说,图片本质就是一个向量集组合而成的,因此不需要做处理
对于文本来说,我们需要对文本的单词,把单词映射到一组向量中,用不同的向量表示来代表一个单词。
我们将apple,bag,cat,dog用不同的向量形式表示:
self-attention就是一种新的向量计算公式,将输入层的输入的向量,通过不同的self-attention公式计算出,新的向量表示方式
1.2 为什么用self-attention
在我们输入的某一段文本时,譬如:this is a cat。
其中这个is,不只是单独一个向量独立的,它其实也是由上下文this和a cat共同去确定的。
在文本也好,语音,图片都是如此,而self-attention计算公式,就是考虑到上下文对当前向量的影响。有点类似于RNN中的LSTM但是效果比LSTM更好。
2.self-attention原理
这里借用一下b站up主“狗中赤兔”说的。
我们可以假设self-attention是一个渣男从备胎中选择一个适合的自己的对象,适合度越高的备胎,渣男投入的时间金钱就会越多(注意力为越多)
渣男根据自身条件Q与备胎的条件K,计算其相似度(二个矩阵的相似度,也就是矩阵相关性),最后我们用计算出的相似度给匹配到的备胎V进行加权,就知道,渣男该为那个备胎付出更多的时间金钱了。
2.1 self-attention计算流程
2.1.1 渣男自身条件q与备胎条件k计算相似度
2.1.2 渣男对每个备胎的相似度整合进行归一化处理。
2.1.3 渣男将不同备胎的相似度对匹配到的备胎进行加权处理
2.2 Multi-head Self-attention
在self-attention还有一种self-attention的变体叫Multi-head Self-attention(多头)。
步骤 1:
步骤 2:
步骤 3:
3.self- attention 与cnn,rnn
3.1 self-attention的应用
沿着self-attention出现了二种结构的变体
- Transformer
- BERT
3.1 self-attention vs cnn
在cnn中的卷积计算,其实也是一种注意力的计算,只不过是均匀的注意力乘积,也就是说cnn其实是self-attention的一种
self-attention 与cnn对比,数据集小的情况下,cnn精度更高,数据集更大的情况下,self-attention精度更高
3.1 self-attention vs rnn
RNN和self-attention的本质区别是,RNN必须把最左边的输入存入Memory里面然后一路带到最右边才能被最后的输出考虑,有这种序列的信息;而对于Self-attention的每一个Vector对于所有的输入都是一视同仁的,产生这种“天涯若比邻“的效果。
对于上下文来说rnn,认为上下文距离越近,影响越大,而self-attention对上下文不考虑距离,每一个词的影响都是一视同仁看待。