Transformer自学笔记(李宏毅课:Self-attention+Transformer)

Self-attention

Input是什么?

输入不是一个单独的向量,输入的是sequence且长度会改变

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第1张图片

例如语音文字识别,可以以下输入

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第2张图片

还有语音输入,可以25ms一个frame,之后window向又10ms一次移动

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第3张图片

还有graph(例如social network)

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第4张图片

还有可以是一个分子

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第5张图片 Output是什么?

三种可能性:(视频只讲第一种情况)

每一个input对应一个label(Pos tagging、语音辨识、social network)

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第6张图片

 一整个sequence只要一个label(sentiment analysis、辨识语音是谁讲的、给出graph的label)

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第7张图片

不知道要输出多少个label,机器要自己决定(亦叫seq2seq)

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第8张图片  

怎么解决sequence label(即上述第一种输出)的问题?

最开始想的是使用一个Fully-Connected的network对于每个输出逐个击破,但是例如语句识别,上下文的context是有一定的关系的,所以这种方法不可行(例如I saw a saw,saw有动词也有名词)

接着会像可不可以前后几个向量串起来放到Fully-Connected的network。但是这次输入有长有短,用一个很大的window盖住所有的输入不合适。

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第9张图片

 于是就引出了Self-attention(可以交替使用)

实际当中Self-attention的输入可能会是任意一层layer的输出 

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第10张图片Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第11张图片

Self-attention的计算

1.例如我们先对a1计算,先找到其他输入对于a1的相关性,用α表示(b是输出)

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第12张图片

计算α可以用Dot-product、Additive等,本文用Dot-product

 Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第13张图片

实际计算:

用文字表示:如计算a1时要算其query(Wq*a1)其余包括a1算key(Wk*ai)计算每一个attention score = q1*ki,之后过一个softmax(也可以用其他的function)得到α',最后每一个α'*vi(vi = Wv*ai)相加求出b1【vi哪个最大就会dominant你抽出的结果】

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第14张图片

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第15张图片

用矩阵表达:

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第16张图片

这其中的未知数只有Wq、Wk、Wv(通过training-data找出)

Self-attention进阶版本->Multi-head  Self-attention

即每个qi、ki、vi各自分成两个(或多个)qi1、qi2...

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第17张图片

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第18张图片

位置信息怎么处理?

用到position encoding的技术将位置信息输入

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第19张图片

计算position vector的ei可以使用多种方法(尚待研究)

Self-attention用在影像上(我关注的点)

如一个5*10*3(3是channel的数量)图像,以箭头所标注的地方看作一个向量,则整张图像就可以看作是一个5*10的vector set

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第20张图片

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第21张图片

Self-attention和CNN区别

CNN只考虑receptive filed范围内的信息,但是Sa(即Self-attention)考虑的是整个范围。于是可以说CNN是Sa的特例,简化版的Sa;Sa是复杂化的CNN。

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第22张图片

(视频也讲了Sa和GNN的关系,我没有了解过GNN所以没有观看记录;与graph也没有继续了解) 

Transformer

首先transformer是Sequene-to-Sequence的model(这一次本视频讲的是不知道输出多少,由机器自己学习决定)【transformer模型是seq2seq结构的一种具体的模型,是完全基于Attention机制的seq2seq结构】

Seq2Seq架构

首先有一个Encoder和Decoder

Transformer自学笔记(李宏毅课:Self-attention+Transformer)_第23张图片

Encoder部分

给一排向量输出另外一排向量(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当中的内容,本文章只限于自我记录笔记学习,如果有什么问题大家可以指教。

 

 

 

 

 

 

 

你可能感兴趣的:(深度学习,机器学习)