日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

李宏毅机器学习(二)自注意力机制

發(fā)布時(shí)間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 李宏毅机器学习(二)自注意力机制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(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ō)明:

  • 常問(wèn)的: 為什么是用dot-product來(lái)獲取關(guān)系
    我的理解是,如果兩個(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è)單詞;
    但是問(wèn)題又來(lái)了,你這樣表示的話(huà),兩個(gè)單詞之間的關(guān)系你是不知道的,沒(méi)有語(yǔ)義的資訊,都是孤零零的!
    • 第二種是:Word Embedding
    通過(guò)這里我們就可以看到,所有的單詞可能一種類(lèi)別的都在一起 ,這里的Word Embedding會(huì)給每個(gè)詞一個(gè)向量。 具體Word Embedding是怎么表示的,[Word Embedding](https://www.zhihu.com/question/32275069)

    一段語(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è)圖

  • 比如Social network中,每個(gè)人也就是每個(gè)節(jié)點(diǎn)就是一個(gè)向量,而每個(gè)人之間的edge就是關(guān)系,兩個(gè)人可能是朋友關(guān)系或者是其它關(guān)系; 而每個(gè)人也就是每個(gè)向量就是這個(gè)人的資訊,比如它的性別、年齡和工作等等。
  • 2. 比如一個(gè)分子也可以看做是一個(gè)graph 比如現(xiàn)在比較出名的drug discovery; 一個(gè)分子就是一個(gè)模型,一個(gè)原子就是一個(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!

    但是window也是有很大的缺點(diǎn)的,首先,如果我們要考慮整個(gè)句子,那么window會(huì)開(kāi)的很大;其次,如果輸入是多變的,那么我們的window很明顯也是變化的,一個(gè)訓(xùn)練資料中我們要統(tǒng)計(jì)最長(zhǎng)的句子多長(zhǎng),之后再加以設(shè)定;最后就是參數(shù)過(guò)多,容易過(guò)擬合;

    2.3 加入Self-attention

    self-attention中一個(gè)標(biāo)量的獲得是由下面所有的一塊決定的。

    怎么產(chǎn)生b1b^{1}b1, 也就需要計(jì)算a1a^{1}a1a2a^{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}WqWk、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}WqWk、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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。