目录
摘要
本周主要学习自注意力机制,self-attention和CNN,RNN的区别和联系。self-attention是network的一种架构,下面我们详细的了解一下。
self-attention
模型的输入
无论是预测视频观看人数还是图像处理,输入都可以看作是一个向量,输出是一个数值或类别。然而,若输入是一系列向量(序列),同时长度会改变,例如把句子里的单词都描述为向量,那么模型的输入就是一个向量集合,并且每个向量的大小都不一样。将单词表示为向量的方法:One-hot Encoding(独热编码)。向量的长度就是世界上所有词汇的数目,用不同位的1(其余位置为0)表示一个词汇,例如:
- apple = [1, 0, 0, 0, 0, …]
- bag = [0, 1, 0, 0, 0, …]
- cat = [0, 0, 1, 0, 0, …]
但是它并不能区分出同类别的词汇,里面没有任何有意义的信息。
另一个方法是Word Embedding:给单词一个向量,这个向量有语义的信息,一个句子就是一排长度不一的向量。将Word Embedding画出来,就会发现同类的单词就会聚集,因此它能区分出类别。
模型的输出
模型的输出主要是分为三种类型,分别是一对一,多对一和由模型自定。
今天我们主要讨论的是序列标注 Sequence Labeling(输入和输出一样多的一种情况)
自注意力机制函数
由于需要建立输入向量序列的依赖关系,因此模型要考虑整个输入序列的信息,之后将输出向量输入到full-connected,做后续处理。其中FC和self-attention可以重复使用。
计算相关度的公式
第一种叫做Dot-product,这也是最常用的一种方法。输入的两个向量,通过和权重矩阵和相乘得到q和k,q和k进行内积(对应元素相乘并相加的方式)从而求相关性。
第二种叫做Addictive,输入的两个向量,通过和权重矩阵和相乘以后得到q和k,之后将q和k串联输入到函数tanh中,通过一个转化得到 相关性。
self-attention的计算过程(运算过程)
其实运算过程就是一些矩阵运算,值得注意的是只有 和 还有三个值是未知数,其他的都是已知的。那么在训练模型时,其中唯一要训练出的参数就是 W 。
位置编码(Positional Encoding)
我们可以发现对于每一个input是出现在sequence的最前面,还是最后面这样的位置信息,Self-Attention是无法获取到的。我们可以使用positional encoding的技术,将位置信息加入到Self-Attention中。如上图所示,我们可以为每个位置设定一个专属的positional vector,用表示,上标i代表位置。我们先将和相加,然后再进行后续的计算就可以了。向量既可以人工设置,也可以通过某些function或model来生成。
self-attention v.s. CNN
CNN:self-attention that can only attends in a receptive field.
CNN:只能在接受领域参加的自我关注。
CNN is simplified self-attention.
CNN是简化的自我关注。
Self-attention:CNN with learnable receptive field.
自我关注:具有可学习接受领域的CNN。
self-attention is the complex version of CNN.
自我关注是CNN的复杂版本。
如果用不同的数据量来训练CNN和self-attention,会出现不同的结果。大的模型self-attention如果用于少量数据,容易出现过拟合;而小的模型CNN,在少量数据集上不容易出现过拟合。
self-attention v.s. RNN
总结
本周主要学习的是自注意力机制模型,本文主要讲述了模型的输入和输出,模型的原理和运算过程。还用该模型和CNN、RNN进行了比较,得出了一些结论。下周学习的内容是Transformer。