四川省城乡住房与建设厅网站,付费软件免费拿,网站建设套模板,tcn短链接在线生成学习内容
本文以NLP为基础来介绍自注意力机制#xff0c;而没有用图像为基础#xff0c;但是其实两者都是相同的。 在图像中我们可以将图像切块#xff08;块的划分是自定义的#xff09;#xff0c;然后计算块与块之间的关系#xff1b;
这里介绍了self-attention 的由…学习内容
本文以NLP为基础来介绍自注意力机制而没有用图像为基础但是其实两者都是相同的。 在图像中我们可以将图像切块块的划分是自定义的然后计算块与块之间的关系
这里介绍了self-attention 的由来的应用
这里有几个问题需要说明
常问的 为什么是用dot-product来获取关系 我的理解是如果两个特征高度相关那么这两个特征之间的相似元素必然很多那么点积之后的值就会很大也就是关系型很强 而且使用dot-product来计算关系是一个常用的方法。
1. 预备知识
1.1 Sophisticated Input复杂输入必须是 Vector set
在之前的一节中我们的输入是一个向量然后经过回归或者是分类来得到一个标量或者类别 但是如果我们的输入长不只是有一个而且多个呢 而且是可以改变的呢
一个句子 this is a cat
我们把每个单词作为一个向量那么整个句子就是多个可变向量 但是一个向量单词怎么表示呢
第一种我们可以以字母为单位采用one-hot来表示一个单词 但是问题又来了你这样表示的话两个单词之间的关系你是不知道的没有语义的资讯都是孤零零的
第二种是Word Embedding 通过这里我们就可以看到所有的单词可能一种类别的都在一起 这里的Word Embedding会给每个词一个向量。 具体Word Embedding是怎么表示的[Word Embedding](https://www.zhihu.com/question/32275069)
一段语音
这里就会把一段Sequence当作信号比如我们选取25ms的作为一个frame 同时我们如果想表达整个句子的话需要 往前和往后调整10ms 为什么设置25和10ms这是前人证明过的你只需要用就行了。 所以1s --》 100frames 一个图
比如Social network中每个人也就是每个节点就是一个向量而每个人之间的edge就是关系两个人可能是朋友关系或者是其它关系 而每个人也就是每个向量就是这个人的资讯比如它的性别、年龄和工作等等。 2. 比如一个分子也可以看做是一个graph 比如现在比较出名的drug discovery 一个分子就是一个模型一个原子就是一个向量。 1.2 输出以上面各个输入为基础
三种输出可能性
Each vector has a label 和上面的输入相对应 如果我们输入是一个句子的话我们以词性标注POS tagging作为例子那么我们输出的就是每个单词向量的标签 如果我们输入的是一个语音每段语音frame也会有一个标签 如果我们输入的是一个图每个向量结点人那么我们的输出就会是每个节点买不买某个商品
The whole sequence has a label 可能我们只想判断一句话的情感 也可能判断某一段语音是谁讲的 亦或者该分子的亲水性
Model decides the number of labels itselfseq2seq 比如语音翻译和语音辨识都是seq2seq也就是长度不一
2. self-attention
如果输入vector set的时候都可以使用self-attention
2.1 加入FC层
我们重点说第一种一对一的以Sequence Labeling为例如果你要给每个向量一个label 我们以单独的一句话中的每个单词为基础每个单词通过一个FC网络就可以实现了。 2.2 加入Window
但是这样就会有一个问题你只关心一个单词的词性如果两个单词一样的话一个表示动词一个表示名词那么这样没有交集的处理会导致FC层无法处理。 所以需要让FC层考虑更多的上下文资讯。 所以我们可以扩大视野简称window 但是window也是有很大的缺点的首先如果我们要考虑整个句子那么window会开的很大其次如果输入是多变的那么我们的window很明显也是变化的一个训练资料中我们要统计最长的句子多长之后再加以设定最后就是参数过多容易过拟合
2.3 加入Self-attention self-attention中一个标量的获得是由下面所有的一块决定的。 怎么产生b1b^{1}b1, 也就需要计算a1a^{1}a1和a2a^{2}a2、a3a^{3}a3的关系 也就是α1\alpha^{1}α1、α2\alpha^{2}α2等。
而这个关系是怎么样找到的呢 两种方法 dot-product和Additive 其中dot-product是将向量乘上一个矩阵W得到q之后q · k α\alphaα 右侧则是自己看吧 transformer中使用的就是dot-product。 所以加入了相关性后计算如下 当然也可以进行softmax归一化 softmax不唯一可以使用Relu、Norm等等。 最后我们得到经过attention score的向量组合 你需要清楚地知道下面三个q、k、v是什么 而我们需要的b1就是我们所求 同理我们就可以得到{a2、a3、a4a_{2}、a_{3} 、a_{4}a2、a3、a4} —》 {b2、b3、b4b_{2}、b_{3} 、b_{4}b2、b3、b4}
2.4 总结一下
2.4.1 得到q、k、v 当然Wq、Wk、WvW^{q}、W^{k}、W^{v}Wq、Wk、Wv都是矩阵
2.4.2 得到attention score α
下图中上方是推理第一向量得到的α的过程下面则是将多个向量表达方式线性代数化了 也就是K作为row q作为了column。 2.4.3 得到b
同样的道理 2.4.4 最后总结
输入I —》 输出O 中间Q是关系矩阵 A’是注意力矩阵。 特别注意的是 这里只有Wq、Wk、WvW^{q}、W^{k}、W^{v}Wq、Wk、Wv是需要学习的其它的都是已知的不需要训练 为什么呢 自己去往上翻一翻就知道了。
3. Multi-head self-attention
如果一件事有不同的形式有很多不同的定义需要多个head不同的q 每个head是一种相关性多个head就是多个相关性 这个head也是一个超参数 最后再 4. Position Encoding
可以看到自监督中是没有位置的定义的 比如动词不能作为句头动词一般充当谓语。所以需要加入位置信息。但是位置信息不是单纯的位置而是包含了位置的其它资讯包含了重要性我的理解是这样的。 所以eie^{i}ei长什么样子呢 最早的transformerattention is all your need 方法一 hand-crafted 这是人设的 但是sequence是改变的所以很费劲
方法二 sinusoidal或者cos 最早的
方法三 自己炼丹吧这是一个尚待研究的问题 比如左下角FloATER是自己创造的 5. Many Applications
Transformer 和 Bert 语音可以、图像也可以 具体怎么做自己看视频因为我是做NLP的直接省略 比如图像中的一个pixel多个Channel 或者是一行
6. Self-attention v.s CNN CNN是精简版的Self-attention 因为Self-attention需要的感受野是全部的。 而在CNN中感受野是确定的 self-attention是一个flexible的model 而且越是flexible的model越是需要更多的datadata不够更容易overfitting比如下面的图中 我们比较了六个模型的分别使用CNN 和 Transformer的随着数据集量的增大后准确率的结果。 可以看出数据集在少的时候CNN是好的但是随着数据集的增加self-attention逐渐的更好。 这是因为感受野的不同的 6. Self-attention v.s RNN
因为RNN可以被Self-attention取代就不讲RNN了。 初始是一个memory 是预定义的处理的是一个sequence 第一个RNN的block吃memory和第一个vector然后输出新的memory和经过一个FC层来做我们需要的预测 第二个RNN的block吃上一个吐出来的东西好第二个vector 两者之间有很大的不同 我们直观上可能感觉RNN只考虑前几个的关系而没有考虑全部其实RNN也可以是双循环的也可以认为是全部的关系 所以这不是主要的区别。 天涯若比邻 self-attention中即使很远离但是只需要计算就可以了 而RNN中第一个和最后一个还需要经历漫长的关系不能够忘掉。 不够并行处理 RNN是一个接着一个的而self-attention的每个向量都是同时计算出来的。
最下面的链接将的是 ALL Transformers are RNN
7.self-attention for graph
图的优点是有关联已经确定了不需要再次计算了 只需要计算强弱就行了不需要决定有还是没有 没有必要再学习了 其实GNN是另一种self-attention GNN水也是很深的
8. To learn more。。。
横轴是速度纵轴是准确率 self-attention 首先用在Transformer中但是它很慢所以才有了下面的各种变形 但是准确率和速度兼顾的方法还需要进一步的深究 !