输入不是一个单独的向量,输入的是sequence且长度会改变
例如语音文字识别,可以以下输入
还有语音输入,可以25ms一个frame,之后window向又10ms一次移动
还有graph(例如social network)
还有可以是一个分子
三种可能性:(视频只讲第一种情况)
每一个input对应一个label(Pos tagging、语音辨识、social network)
一整个sequence只要一个label(sentiment analysis、辨识语音是谁讲的、给出graph的label)
不知道要输出多少个label,机器要自己决定(亦叫seq2seq)
最开始想的是使用一个Fully-Connected的network对于每个输出逐个击破,但是例如语句识别,上下文的context是有一定的关系的,所以这种方法不可行(例如I saw a saw,saw有动词也有名词)
接着会像可不可以前后几个向量串起来放到Fully-Connected的network。但是这次输入有长有短,用一个很大的window盖住所有的输入不合适。
于是就引出了Self-attention(可以交替使用)
实际当中Self-attention的输入可能会是任意一层layer的输出
1.例如我们先对a1计算,先找到其他输入对于a1的相关性,用α表示(b是输出)
计算α可以用Dot-product、Additive等,本文用Dot-product
实际计算:
用文字表示:如计算a1时要算其query(Wq*a1)其余包括a1算key(Wk*ai)计算每一个attention score = q1*ki,之后过一个softmax(也可以用其他的function)得到α',最后每一个α'*vi(vi = Wv*ai)相加求出b1【vi哪个最大就会dominant你抽出的结果】
用矩阵表达:
这其中的未知数只有Wq、Wk、Wv(通过training-data找出)
即每个qi、ki、vi各自分成两个(或多个)qi1、qi2...
用到position encoding的技术将位置信息输入
计算position vector的ei可以使用多种方法(尚待研究)
如一个5*10*3(3是channel的数量)图像,以箭头所标注的地方看作一个向量,则整张图像就可以看作是一个5*10的vector set
CNN只考虑receptive filed范围内的信息,但是Sa(即Self-attention)考虑的是整个范围。于是可以说CNN是Sa的特例,简化版的Sa;Sa是复杂化的CNN。
(视频也讲了Sa和GNN的关系,我没有了解过GNN所以没有观看记录;与graph也没有继续了解)
首先transformer是Sequene-to-Sequence的model(这一次本视频讲的是不知道输出多少,由机器自己学习决定)【transformer模型是seq2seq结构的一种具体的模型,是完全基于Attention机制的seq2seq结构】
首先有一个Encoder和Decoder
给一排向量输出另外一排向量(transformer中的Encoder部分用的就是Self-attention)
Encoder的基本架构,就是红色框中,输入一堆向量然后经过一个block输出一堆向量,然后接着输入到下一个block中…最后输出h1, h2, h3, h4,在Transformer网络中每一个block里面是下图中右面这部分组成,对输入的向量进行self-attention操作,每个向量都考虑与其它向量的关联性之后然后输出,然后接入到FC(feed forward network前馈神经网络)中输出结果。
实际transformer中的Self-attention用到了residual connection,即通过一层Self-attention的输出要加上原有的input作为最后的output(残差)【FC中也用到了residual connection、norm】,之后进行layer normallization(norm对应的操作)【这个就是对向量中每个元素求mean[平均值], standard deviation[标准差] 】
以上就是下图红色区域的操作,总结一下,就是输入向量如果需要位置信息的话,加上位置Positional向量,然后经过Self-attention(Multi-Head Attention),做add&Norm操作,其中add就是(Residual操作,将输入向量加到self-attention结果输出上),然后将add结果做Layer Norm操作,接着放入到Feed Forward网络中输出结果继续做add&Norm操作。
以上讲的Encoder是transformer原文论讲的,目前有很多其他的
Decoder部分明天再完成
文中部分内容参考了李宏毅Transformer_蒋思的博客-CSDN博客_李宏毅transformer当中的内容,本文章只限于自我记录笔记学习,如果有什么问题大家可以指教。