李宏毅自然語(yǔ)言處理——Self Attention

引言

這是李宏毅老師講的機(jī)器學(xué)習(xí)視頻中與自然語(yǔ)言處理有關(guān)的随闺,本文主要關(guān)注Self-attention砂心。

處理序列的模型

我們已經(jīng)知道如何處理輸入是一個(gè)向量的問(wèn)題驾荣。假設(shè)我們遇到了更加復(fù)雜的問(wèn)題夺欲。比如谓罗,輸入是一系列向量媒至。

image-20210719202951901

并且輸入的這一系列向量的長(zhǎng)度不是固定的顶别。

比如,在文字處理的場(chǎng)景中拒啰。輸入是一個(gè)句子驯绎,將每個(gè)句子的詞匯描述成一個(gè)向量,這樣模型的輸入就是一排向量谋旦。

image-20210719203227324

如何把詞匯表示成向量呢剩失,我們知道有one-hot編碼屈尼。

image-20210719203306995

但是這種表示方法不能表示語(yǔ)義信息,并且維度還非常大拴孤。另一種表示方法是詞嵌入向量脾歧。

image-20210719203402220

還有圖結(jié)構(gòu)也可以是一系列向量。

image-20210719203607219

那這些模型的輸出是什么乞巧?

有三種類型:

每個(gè)輸入的向量都有一個(gè)標(biāo)簽涨椒,比如詞性標(biāo)注任務(wù)。

image-20210719204104294

第二種類型是整個(gè)序列的輸出就是一標(biāo)簽绽媒。

比如情感分類任務(wù)蚕冬、或者是輸入一段語(yǔ)言,識(shí)別說(shuō)話者是誰(shuí)等是辕。

image-20210719204430046

最后一種類型就是囤热,我們也不知道有多少個(gè)輸出,由機(jī)器自己決定要輸出多少获三。比如機(jī)器翻譯任務(wù)旁蔼。

我們今天關(guān)注第一種類型。這種任務(wù)又叫序列標(biāo)注(Sequence Labeling)疙教。

image-20210719204934142

我們不能直接用全連接網(wǎng)絡(luò)(FC)來(lái)做棺聊,因?yàn)槿B接網(wǎng)絡(luò)同樣的輸入會(huì)得到同樣的輸出。而我們上面的例子中“I saw a saw”贞谓,第一個(gè)“saw”是動(dòng)詞限佩,第二個(gè)“saw”是名詞。

如果能考慮到上下文就好了裸弦。這是有可能的祟同,可以設(shè)定一個(gè)窗口大小,把窗口大小內(nèi)的輸入都串起來(lái)理疙,一起丟到FC中晕城。但是窗口大小始終是有限的,如何考慮整個(gè)句子呢窖贤,難道設(shè)定一個(gè)巨大的窗口包含整個(gè)語(yǔ)句砖顷?

有沒(méi)有更好的考慮整個(gè)序列的模型呢?有赃梧,那便是Self-atention!

Self-attention

image-20210719205847998

Self-attention可以接收一整個(gè)序列的輸入择吊,序列中有多少個(gè)輸入,它就可以得到多少個(gè)輸出槽奕。

比如上面輸入4個(gè)向量到Self-attention中,我們就得到了4個(gè)輸出向量房轿。這4個(gè)輸出向量特別之處在于粤攒,它們都是考慮了整個(gè)序列得到的結(jié)果所森。

在把這些特別的向量丟給FC之后,再來(lái)決定要輸出什么樣的東西夯接。

image-20210719205959731

Self-attention的輸出還可以疊加焕济。比如,我們得到考慮整個(gè)序列的向量后盔几,喂給FC晴弃,得到FC的輸出后,再過(guò)一次Self-attention逊拍,重新考慮FC的所有輸出上鞠,再丟給另一個(gè)FC之后,得到最終的輸出芯丧,如下圖:

image-20210719210420886

所以可以把FC和Self-attention交替使用芍阎,用Self-attention處理整個(gè)序列的信息,F(xiàn)C專注于處理某個(gè)位置的信息缨恒。

Attention is all you need.

Self-attention的原理

那Self-attention是怎么運(yùn)作的呢谴咸?

image-20210719210910693

它的輸入就是向量序列,這些向量可能是整個(gè)網(wǎng)絡(luò)的輸入骗露,也可能是某個(gè)隱藏層的輸出岭佳。

再?gòu)?qiáng)調(diào)一次,每個(gè)Self-attention的輸出萧锉,都是考慮了所有的輸入向量才生成出來(lái)的珊随。

下面我們來(lái)看一下是如何生成這些向量的。

image-20210719211107497

我們重點(diǎn)來(lái)看一下是如何產(chǎn)生b^1這個(gè)向量的驹暑,其他的b^2 \cdots b^4同理玫恳。

① 我們想要根據(jù)a^1找出序列中其他與a^1有關(guān)的向量。每個(gè)向量與a^1關(guān)聯(lián)程度用一個(gè)數(shù)值\alpha來(lái)表示优俘。第一步要考慮的問(wèn)題就是京办,Self-attention模型如何決定兩個(gè)向量的關(guān)聯(lián)性呢。

那么就需要一個(gè)計(jì)算關(guān)聯(lián)性(注意力)的模組帆焕。

image-20210719211610744

它拿兩個(gè)向量作為輸入惭婿,直接輸出它們的相關(guān)性\alpha數(shù)值。如何計(jì)算這個(gè)數(shù)值叶雹,就有各種各樣的做法财饥。

常用的做法有使用點(diǎn)乘(Dot product)的方式。

image-20210719211751184

點(diǎn)乘的方式做法如下:

  1. 把輸入的向量分別乘上兩個(gè)不同的權(quán)重矩陣折晦,分別得到兩個(gè)向量钥星,記為qk
  2. 然后讓q \cdot k就可以得到一個(gè)標(biāo)量满着,這個(gè)標(biāo)量就作為\alpha數(shù)值谦炒。

還有一種叫作Additive的方式:

image-20210719212058296

也是乘上兩個(gè)權(quán)重矩陣贯莺,得到q,k之后,再拼接起來(lái)宁改,然后輸入到一個(gè)激活函數(shù)中缕探,激活函數(shù)輸出的結(jié)果通過(guò)矩陣進(jìn)行線性變換得到\alpha

我們下面的討論基于點(diǎn)乘的方式还蹲。

② 計(jì)算a^1和其他向量的關(guān)聯(lián)性爹耗。

image-20210719213328027

怎么做呢? 先用a^1乘上矩陣W^q得到q^1谜喊,這個(gè)q^1被稱為為query潭兽。

image-20210719213522131

然后a^2,a^3,a^4乘上W^k分別得到k^2,k^3,k^4,這些k^2,k^3,k^4被稱為key锅论。

image-20210719213737880

接下來(lái)用q^1k^2做點(diǎn)積得到\alpha_{1,2}值讼溺,表示a^1a^2之間的關(guān)聯(lián)性,\alpha_{1,2}這種記法說(shuō)明query是a^1提供的最易,key是a^2提供的怒坯。這個(gè)\alpha值還被稱為attention score。計(jì)算出a^1a^2的關(guān)聯(lián)性后藻懒,還要跟a^3,a^4計(jì)算一下剔猿。

image-20210719214151441

計(jì)算k^3,k^4的時(shí)候也是乘以W^k矩陣得到的,然后再與q^1做點(diǎn)積得到\alpha_{1,3},\alpha_{1,4}嬉荆。

image-20210719214503507

實(shí)際上归敬,我們還要利用同樣的公式計(jì)算a^1自己與自己的關(guān)聯(lián)性\alpha_{1,1}

③ 計(jì)算Softmax

image-20210719214621651

我們還要對(duì)這些attention score做一個(gè)Softmax鄙早,得到\alpha_{1,i}^\prime, \quad (i=1,2,3,4)汪茧,相當(dāng)于與a^1與各個(gè)向量的相關(guān)性系數(shù),我們就可以知道哪些向量與a^1相關(guān)性比較大限番。

④ 計(jì)算最終的b^1

在計(jì)算b^1之前呢舱污,還有一個(gè)向量要計(jì)算。

image-20210719215329865

這個(gè)向量就是v向量弥虐,把a^1a^4都乘上W^v扩灯,得到v^1v^4。這個(gè)v可以看成是向量a所攜帶的信息編碼霜瘪。

然后與Softmax之后的\alpha^\prime做一個(gè)加權(quán)求和就得到了b^1

image-20210719215531474

假設(shè)a^2a^1關(guān)聯(lián)性較大珠插,那么得到的權(quán)重系數(shù)就很大,在計(jì)算b^1時(shí)颖对,就會(huì)有很大程度的信息來(lái)自于v^2,也就是來(lái)自于a^2捻撑。

下面得到b^2,b^3,b^4是一樣的,雖然這里先探討b^1的產(chǎn)生顾患,其實(shí)b^1,b^2,b^3,b^4是可以同時(shí)產(chǎn)生的琳拭。

image-20210719230137343

不過(guò)計(jì)算b^2時(shí),是以a^2計(jì)算的q^2作為query的描验。同理以a^3得到q^3就可以計(jì)算b^3

剛才我們說(shuō)是可以同時(shí)計(jì)算的坑鱼,是怎么回事呢膘流。其實(shí)計(jì)算q,k,v無(wú)非就是不同的向量與矩陣相乘得到的,如果把這些向量寫在一起鲁沥,寫成一個(gè)矩陣呼股,不就可以一次得到了嗎。

image-20210719230633080

a^1,a^2,a^3,a^4拼成一個(gè)矩陣I画恰,然后讓矩陣W^q乘以它得到矩陣Q彭谁,矩陣Q可以分解為q^1,q^2,q^3,q^4

剩下的K = W^k I,\quad V = W^v I也是同樣的道理允扇。

接下來(lái)缠局,計(jì)算attention score也可以寫成矩陣運(yùn)算。

image-20210719231301572

我們先看q^1考润,它計(jì)算\alpha_{1,1},\alpha_{1,2},\alpha_{1,3}狭园,\alpha_{1,4}可以寫成矩陣K與向量q^1的乘積。

image-20210719232058259

同理不難理解\alpha_{2,1},\alpha_{2,2},\alpha_{2,3}糊治,\alpha_{2,4}也可以寫成K\cdot q^2唱矛。

這樣把q^1,q^2,q^3,q^4拼成矩陣Q,然后通過(guò)K^T Q得到A井辜,A經(jīng)過(guò)Softmax之后就得到了A^\prime矩陣绎谦,A^\prime矩陣中每列之和為1A^\prime也被成為Attenion Matrix粥脚。

image-20210719232315344

接下來(lái)看b^1

image-20210719232902939

相當(dāng)于是把v^1,v^2,v^3,v^4組成的矩陣V乘以A^\prime的第一列窃肠,就得到了b^1

image-20210719233109938

那么用矩陣V乘以A^\prime就可以得到b^1,b^2,b^3,b^4得到的矩陣O阿逃。

image-20210719232818576

總結(jié)下來(lái)铭拧,這一連串的操作,其實(shí)就是矩陣的乘法而已恃锉。我們用一個(gè)圖來(lái)總結(jié)一下搀菩。

image-20210719233317789

I是Self-attention模型的輸入組成的矩陣,W^q,W^k,W^v是三個(gè)可以學(xué)習(xí)的權(quán)重矩陣破托;

用這三個(gè)矩陣乘I分別得到Q,K,V矩陣肪跋;

然后用K矩陣做個(gè)轉(zhuǎn)置乘上Q就得到了A,經(jīng)過(guò)Softmax得到A^\prime土砂;

V乘上A^\prime得到最終的輸出O州既。

其中需要學(xué)習(xí)的參數(shù)谜洽,就是W^q,W^k,W^v

Multi-head Self-attention

Multi-head Self-attention是Self-attention的一個(gè)升級(jí)版本吴叶,Multi-head指的是計(jì)算出多個(gè)Q,K,V矩陣阐虚。

為什么這樣有意義呢? Self-attention是用query去找相關(guān)性,但是相關(guān)性可能有很多個(gè)種類蚌卤,這時(shí)得到多個(gè)Q,K,V就分別代表不同種類实束。多出來(lái)的Q,K,V矩陣是怎么計(jì)算的呢。

image-20210719234040696
以2 head為例逊彭,我們還是用W^q a^i來(lái)得到q^i咸灿,然而,此時(shí)用這個(gè)q^i乘以一個(gè)不同的矩陣侮叮,得到q^{i,1},q^{i,2}避矢;

同理用k^i,v^i乘上不同的矩陣分別得到k^{i,1},k^{i,2}v^{i,1},v^{i,2}

然后計(jì)算\alphab的時(shí)候囊榜,把q^{i,1},k^{i,1},v^{i,1}這些第二個(gè)上標(biāo)為1的進(jìn)行計(jì)算审胸,最后得到b^{i,1};上標(biāo)為2的進(jìn)行計(jì)算锦聊,得到b^{i,2}

image-20210719234420672

接下來(lái)也可以拼接b^{i,1},b^{i,2}歹嘹,然后乘以一個(gè)矩陣W^o得到b^i

Positional Encoding

現(xiàn)在整個(gè)過(guò)程看下來(lái)孔庭,Self-attention少了一個(gè)重要的信息尺上,即位置信息。

我們上面在進(jìn)行矩陣運(yùn)算的時(shí)候圆到,對(duì)于不同的位置的輸入怎抛,都是同等對(duì)待的。沒(méi)有說(shuō)像RNN那樣后面的輸入考慮了前面輸入的信息芽淡。也沒(méi)有考慮輸入的距離遠(yuǎn)近马绝。

本小節(jié)介紹的Positional Encoding就是用于解決這個(gè)問(wèn)題的。具體就是為每個(gè)位置的輸入設(shè)置一個(gè)獨(dú)立的位置向量e^i挣菲。

image-20210720075343640

Attention is all you need中用的e^i是下圖中的每一列:

image-20210720075558287

即每一列代表一個(gè)位置向量e^i富稻,這些位置向量e^i是通過(guò)sin和cos函數(shù)形成一個(gè)公式生成的。當(dāng)然還有其他的生成方法白胀,甚至可以當(dāng)成一個(gè)可以學(xué)習(xí)的參數(shù)椭赋。

image-20210720080033193

Self-attention的應(yīng)用

比較出名的兩個(gè)就是TransformerBERT

image-20210720080536933

這兩個(gè)家伙常年活躍在自然語(yǔ)言處理領(lǐng)域或杠。

當(dāng)然還可以應(yīng)用在語(yǔ)音和圖像上哪怔。

image-20210720080618122
image-20210720080726887

對(duì)于圖像來(lái)說(shuō),把每個(gè)位置的輸入看成一個(gè)3維(rgb)的向量。

Self-attention vs CNN

image-20210720081024051

CNN在做卷積的時(shí)候认境,考慮的是感受野之內(nèi)的信息胚委,而Selt-attention考慮的是整個(gè)輸入的信息。

因此CNN可以看成是一個(gè)簡(jiǎn)化版的Self-attention叉信。

這樣好像是讓Self-attention自己去決定感受野的形狀是什么樣的亩冬。

image-20210720081309703

Self-attention只要設(shè)置合適的參數(shù),就可以做到CNN能做到的事情硼身。

image-20210720081516079

Self-attention在數(shù)據(jù)量大時(shí)表現(xiàn)更好鉴未,而CNN在小數(shù)據(jù)量時(shí)表現(xiàn)更好。這樣不難理解鸠姨,顯然Self-attention比CNN更復(fù)雜,需要的數(shù)據(jù)量顯然更多淹真。

Self-attention vs RNN

Self-attention和RNN都可以處理序列數(shù)據(jù)讶迁,RNN得到結(jié)果時(shí)必須按照時(shí)間步的順序(正序或逆序)來(lái)生成,利用雙向RNN的設(shè)計(jì)可以考慮整個(gè)序列信息核蘸。

image-20210720082041592

而Self-attention每個(gè)輸出都也是考慮了整個(gè)序列信息巍糯。雖然雙向RNN也考慮了整個(gè)序列信息,但是如果將它倆進(jìn)行對(duì)比客扎,還是可以發(fā)現(xiàn)一些不同祟峦。

image-20210720082505122

比如考慮上面紅框框出來(lái)的(深藍(lán)色)輸入,RNN要考慮這個(gè)輸入徙鱼,必須保存到內(nèi)存中宅楞,然后一步一步傳遞到最后,得到紅框框出來(lái)的黃色輸出袱吆。所以是很難考慮到比較遠(yuǎn)的輸入厌衙。

而Self-attention就沒(méi)有這個(gè)問(wèn)題,只要它們的query和key比較相關(guān)绞绒,得到的相關(guān)性系數(shù)較大婶希,不管多遠(yuǎn),都能輕易地抽取出信息蓬衡。

還有一個(gè)重要的不同就是并行化喻杈,這影響到訓(xùn)練效率。RNN是不能并行化的狰晚,而Self-attention可以筒饰。這樣Self-attention完勝RNN。

想要了解更多Self-attention和RNN的關(guān)系家肯,可以參考這篇論文?Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention

Self-attentioni for Graph

image-20210720083157317

Self-attention還可以用在圖結(jié)構(gòu)上龄砰,圖中每個(gè)節(jié)點(diǎn)看成一個(gè)輸入,圖結(jié)構(gòu)中邊的概念,可以看成有關(guān)聯(lián)的向量换棚∈礁洌可以形成一個(gè)稀疏矩陣,其中白色空白區(qū)域代表無(wú)關(guān)聯(lián)性固蚤。

比如上圖節(jié)點(diǎn)1和5娘汞,6,8相連夕玩,所以我們只需要計(jì)算它們之間的attenion score你弦。

Self-attention的變體

Self-attention有很多種變體,Self-attention最早用在Transformer上面燎孟,后來(lái)就出來(lái)了各種“xxformer”禽作。

image-20210720083618866

Long Range Arena: A Benchmark for Efficient Transformers

Efficient Transformers: A Survey

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市揩页,隨后出現(xiàn)的幾起案子旷偿,更是在濱河造成了極大的恐慌,老刑警劉巖爆侣,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萍程,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兔仰,警方通過(guò)查閱死者的電腦和手機(jī)茫负,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乎赴,“玉大人忍法,你說(shuō)我怎么就攤上這事¢藕穑” “怎么了缔赠?”我有些...
    開(kāi)封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)友题。 經(jīng)常有香客問(wèn)我嗤堰,道長(zhǎng),這世上最難降的妖魔是什么度宦? 我笑而不...
    開(kāi)封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任踢匣,我火速辦了婚禮,結(jié)果婚禮上戈抄,老公的妹妹穿的比我還像新娘离唬。我一直安慰自己,他們只是感情好划鸽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布输莺。 她就那樣靜靜地躺著戚哎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嫂用。 梳的紋絲不亂的頭發(fā)上型凳,一...
    開(kāi)封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音嘱函,去河邊找鬼甘畅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛往弓,可吹牛的內(nèi)容都是我干的绳泉。 我是一名探鬼主播幸斥,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼苔巨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼店乐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起撇寞,我...
    開(kāi)封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤准给,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后重抖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祖灰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年钟沛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片局扶。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恨统,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出三妈,到底是詐尸還是另有隱情畜埋,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布畴蒲,位于F島的核電站悠鞍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏模燥。R本人自食惡果不足惜咖祭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔫骂。 院中可真熱鬧么翰,春花似錦、人聲如沸辽旋。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至码耐,卻和暖如春追迟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伐坏。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工怔匣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桦沉。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓每瞒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纯露。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剿骨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容