李宏毅机器学习(二)自注意力机制
學(xué)習(xí)內(nèi)容
本文以NLP為基礎(chǔ)來(lái)介紹自注意力機(jī)制,而沒(méi)有用圖像為基礎(chǔ),但是其實(shí)兩者都是相同的。
在圖像中我們可以將圖像切塊(塊的劃分是自定義的),然后計(jì)算塊與塊之間的關(guān)系;
這里介紹了self-attention 的由來(lái)的應(yīng)用
這里有幾個(gè)問(wèn)題需要說(shuō)明:
我的理解是,如果兩個(gè)特征高度相關(guān),那么這兩個(gè)特征之間的相似元素必然很多,那么點(diǎn)積之后的值就會(huì)很大,也就是關(guān)系型很強(qiáng); 而且使用dot-product來(lái)計(jì)算關(guān)系是一個(gè)常用的方法。
1. 預(yù)備知識(shí)
1.1 Sophisticated Input(復(fù)雜輸入)必須是 Vector set
在之前的一節(jié)中,我們的輸入是一個(gè)向量,然后經(jīng)過(guò)回歸或者是分類(lèi)來(lái)得到一個(gè)標(biāo)量或者類(lèi)別;
但是如果我們的輸入長(zhǎng)不只是有一個(gè),而且多個(gè)呢? 而且是可以改變的呢?
一個(gè)句子: this is a cat
我們把每個(gè)單詞作為一個(gè)向量;那么整個(gè)句子就是多個(gè)可變向量;
但是一個(gè)向量(單詞)怎么表示呢?
- 第一種:我們可以以字母為單位,采用one-hot來(lái)表示一個(gè)單詞;
- 第二種是:Word Embedding
一段語(yǔ)音!
這里就會(huì)把一段Sequence當(dāng)作信號(hào);比如我們選取25ms的作為一個(gè)frame;
同時(shí)我們?nèi)绻氡磉_(dá)整個(gè)句子的話(huà),需要 往前和往后調(diào)整10ms;
為什么設(shè)置25和10ms,這是前人證明過(guò)的,你只需要用就行了。
所以1s --》 100frames
一個(gè)圖
1.2 輸出(以上面各個(gè)輸入為基礎(chǔ))
三種輸出可能性;
Each vector has a label
和上面的輸入相對(duì)應(yīng): 如果我們輸入是一個(gè)句子的話(huà),我們以詞性標(biāo)注(POS tagging)作為例子,那么我們輸出的就是每個(gè)單詞(向量)的標(biāo)簽; 如果我們輸入的是一個(gè)語(yǔ)音,每段語(yǔ)音(frame)也會(huì)有一個(gè)標(biāo)簽; 如果我們輸入的是一個(gè)圖,每個(gè)向量(結(jié)點(diǎn)=人),那么我們的輸出就會(huì)是每個(gè)節(jié)點(diǎn)買(mǎi)不買(mǎi)某個(gè)商品;The whole sequence has a label
可能我們只想判斷一句話(huà)的情感; 也可能判斷某一段語(yǔ)音是誰(shuí)講的; 亦或者該分子的親水性;Model decides the number of labels itself(seq2seq)
比如語(yǔ)音翻譯和語(yǔ)音辨識(shí)都是seq2seq,也就是長(zhǎng)度不一;2. self-attention
如果輸入vector set的時(shí)候都可以使用self-attention
2.1 加入FC層
我們重點(diǎn)說(shuō)第一種,一對(duì)一的,以Sequence Labeling為例,如果你要給每個(gè)向量一個(gè)label; 我們以單獨(dú)的一句話(huà)中的每個(gè)單詞為基礎(chǔ),每個(gè)單詞通過(guò)一個(gè)FC網(wǎng)絡(luò)就可以實(shí)現(xiàn)了。
2.2 加入Window
但是這樣就會(huì)有一個(gè)問(wèn)題,你只關(guān)心一個(gè)單詞的詞性,如果兩個(gè)單詞一樣的話(huà),一個(gè)表示動(dòng)詞,一個(gè)表示名詞,那么這樣沒(méi)有交集的處理會(huì)導(dǎo)致FC層無(wú)法處理。 所以需要讓FC層考慮更多的上下文資訊。
所以我們可以擴(kuò)大視野,簡(jiǎn)稱(chēng)window!
2.3 加入Self-attention
self-attention中一個(gè)標(biāo)量的獲得是由下面所有的一塊決定的。
怎么產(chǎn)生b1b^{1}b1, 也就需要計(jì)算a1a^{1}a1和a2a^{2}a2、a3a^{3}a3的關(guān)系; 也就是α1\alpha^{1}α1、α2\alpha^{2}α2等。
而這個(gè)關(guān)系是怎么樣找到的呢? 兩種方法: dot-product和Additive
其中dot-product是將向量乘上一個(gè)矩陣W得到q,之后q · k = α\alphaα
右側(cè)則是自己看吧!! transformer中使用的就是dot-product。
所以加入了相關(guān)性后計(jì)算如下:
當(dāng)然也可以進(jìn)行softmax歸一化! softmax不唯一,可以使用Relu、Norm等等。
最后我們得到經(jīng)過(guò)attention score的向量組合! 你需要清楚地知道下面三個(gè)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 總結(jié)一下:
2.4.1 得到q、k、v
當(dāng)然Wq、Wk、WvW^{q}、W^{k}、W^{v}Wq、Wk、Wv都是矩陣!
2.4.2 得到attention score : α
下圖中上方是推理第一向量得到的α的過(guò)程,下面則是將多個(gè)向量表達(dá)方式線(xiàn)性代數(shù)化了!
也就是K作為row, q作為了column。
2.4.3 得到b
同樣的道理
2.4.4 最后總結(jié)
輸入I —》 輸出O;
中間Q是關(guān)系矩陣, A’是注意力矩陣。
特別注意的是: 這里只有Wq、Wk、WvW^{q}、W^{k}、W^{v}Wq、Wk、Wv是需要學(xué)習(xí)的,其它的都是已知的,不需要訓(xùn)練; 為什么呢? 自己去往上翻一翻就知道了。
3. Multi-head self-attention
如果一件事有不同的形式,有很多不同的定義,需要多個(gè)head!不同的q 每個(gè)head是一種相關(guān)性,多個(gè)head就是多個(gè)相關(guān)性;
這個(gè)head也是一個(gè)超參數(shù)!!!
4. Position Encoding
可以看到自監(jiān)督中是沒(méi)有位置的定義的!
比如動(dòng)詞不能作為句頭,動(dòng)詞一般充當(dāng)謂語(yǔ)。所以需要加入位置信息。但是位置信息不是單純的位置,而是包含了位置的其它資訊,包含了重要性(我的理解是這樣的)。
所以eie^{i}ei長(zhǎng)什么樣子呢? 最早的transformer(attention is all your need)
方法一: hand-crafted
這是人設(shè)的! 但是sequence是改變的,所以很費(fèi)勁
方法二: sinusoidal或者cos
最早的
方法三: 自己煉丹吧!!這是一個(gè)尚待研究的問(wèn)題
比如左下角FloATER是自己創(chuàng)造的
5. Many Applications
Transformer 和 Bert
語(yǔ)音可以、圖像也可以; 具體怎么做,自己看視頻,因?yàn)槲沂亲鯪LP的,直接省略!
比如圖像中的一個(gè)pixel多個(gè)Channel; 或者是一行;
6. Self-attention v.s CNN
CNN是精簡(jiǎn)版的Self-attention! 因?yàn)镾elf-attention需要的感受野是全部的。 而在CNN中,感受野是確定的!
self-attention是一個(gè)flexible的model, 而且越是flexible的model越是需要更多的data,data不夠,更容易o(hù)verfitting;比如下面的圖中, 我們比較了六個(gè)模型的分別使用CNN 和 Transformer的隨著數(shù)據(jù)集量的增大后準(zhǔn)確率的結(jié)果。 可以看出,數(shù)據(jù)集在少的時(shí)候,CNN是好的,但是隨著數(shù)據(jù)集的增加,self-attention逐漸的更好。 這是因?yàn)楦惺芤暗牟煌?#xff01;
6. Self-attention v.s RNN
因?yàn)镽NN可以被Self-attention取代,就不講RNN了。
初始是一個(gè)memory 是預(yù)定義的!,處理的是一個(gè)sequence!
第一個(gè)RNN的block吃memory和第一個(gè)vector,然后輸出新的memory和經(jīng)過(guò)一個(gè)FC層來(lái)做我們需要的預(yù)測(cè);
第二個(gè)RNN的block吃上一個(gè)吐出來(lái)的東西好第二個(gè)vector!
兩者之間有很大的不同:
我們直觀(guān)上可能感覺(jué),RNN只考慮前幾個(gè)的關(guān)系,而沒(méi)有考慮全部;其實(shí)RNN也可以是雙循環(huán)的,也可以認(rèn)為是全部的關(guān)系; 所以這不是主要的區(qū)別。
-
天涯若比鄰, self-attention中即使很遠(yuǎn)離,但是只需要計(jì)算就可以了; 而RNN中第一個(gè)和最后一個(gè)還需要經(jīng)歷漫長(zhǎng)的關(guān)系,不能夠忘掉。
-
不夠并行處理 ; RNN是一個(gè)接著一個(gè)的;而self-attention的每個(gè)向量都是同時(shí)計(jì)算出來(lái)的。
最下面的鏈接將的是 ALL Transformers are RNN;
7.self-attention for graph
圖的優(yōu)點(diǎn)是有關(guān)聯(lián)已經(jīng)確定了,不需要再次計(jì)算了; 只需要計(jì)算強(qiáng)弱就行了!不需要決定有還是沒(méi)有!
沒(méi)有必要再學(xué)習(xí)了!
其實(shí)GNN是另一種self-attention
GNN水也是很深的!!
8. To learn more。。。
橫軸是速度,縱軸是準(zhǔn)確率!
self-attention 首先用在Transformer中,但是它很慢,所以才有了下面的各種變形!!
但是準(zhǔn)確率和速度兼顧的方法還需要進(jìn)一步的深究!
總結(jié)
以上是生活随笔為你收集整理的李宏毅机器学习(二)自注意力机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 百度AI技术盛宴来了!大咖齐聚解读CV/
- 下一篇: PAT乙类1009 说反话 (20 分)