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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

學習內容

本文以NLP為基礎來介紹自注意力機制,而沒有用圖像為基礎,但是其實兩者都是相同的。
在圖像中我們可以將圖像切塊(塊的劃分是自定義的),然后計算塊與塊之間的關系;

這里介紹了self-attention 的由來的應用

這里有幾個問題需要說明:

  • 常問的: 為什么是用dot-product來獲取關系
    我的理解是,如果兩個特征高度相關,那么這兩個特征之間的相似元素必然很多,那么點積之后的值就會很大,也就是關系型很強; 而且使用dot-product來計算關系是一個常用的方法。
  • 1. 預備知識

    1.1 Sophisticated Input(復雜輸入)必須是 Vector set

    在之前的一節中,我們的輸入是一個向量,然后經過回歸或者是分類來得到一個標量或者類別;
    但是如果我們的輸入長不只是有一個,而且多個呢? 而且是可以改變的呢?

    一個句子: this is a cat

    我們把每個單詞作為一個向量;那么整個句子就是多個可變向量;
    但是一個向量(單詞)怎么表示呢?

    • 第一種:我們可以以字母為單位,采用one-hot來表示一個單詞;
    但是問題又來了,你這樣表示的話,兩個單詞之間的關系你是不知道的,沒有語義的資訊,都是孤零零的!
    • 第二種是:Word Embedding
    通過這里我們就可以看到,所有的單詞可能一種類別的都在一起 ,這里的Word Embedding會給每個詞一個向量。 具體Word Embedding是怎么表示的,[Word Embedding](https://www.zhihu.com/question/32275069)

    一段語音!

    這里就會把一段Sequence當作信號;比如我們選取25ms的作為一個frame;
    同時我們如果想表達整個句子的話,需要 往前和往后調整10ms;
    為什么設置25和10ms,這是前人證明過的,你只需要用就行了。
    所以1s --》 100frames

    一個圖

  • 比如Social network中,每個人也就是每個節點就是一個向量,而每個人之間的edge就是關系,兩個人可能是朋友關系或者是其它關系; 而每個人也就是每個向量就是這個人的資訊,比如它的性別、年齡和工作等等。
  • 2. 比如一個分子也可以看做是一個graph 比如現在比較出名的drug discovery; 一個分子就是一個模型,一個原子就是一個向量。

    1.2 輸出(以上面各個輸入為基礎)

    三種輸出可能性;

    Each vector has a label

    和上面的輸入相對應: 如果我們輸入是一個句子的話,我們以詞性標注(POS tagging)作為例子,那么我們輸出的就是每個單詞(向量)的標簽; 如果我們輸入的是一個語音,每段語音(frame)也會有一個標簽; 如果我們輸入的是一個圖,每個向量(結點=人),那么我們的輸出就會是每個節點買不買某個商品;

    The whole sequence has a label

    可能我們只想判斷一句話的情感; 也可能判斷某一段語音是誰講的; 亦或者該分子的親水性;

    Model decides the number of labels itself(seq2seq)

    比如語音翻譯和語音辨識都是seq2seq,也就是長度不一;

    2. self-attention

    如果輸入vector set的時候都可以使用self-attention

    2.1 加入FC層

    我們重點說第一種,一對一的,以Sequence Labeling為例,如果你要給每個向量一個label; 我們以單獨的一句話中的每個單詞為基礎,每個單詞通過一個FC網絡就可以實現了。

    2.2 加入Window

    但是這樣就會有一個問題,你只關心一個單詞的詞性,如果兩個單詞一樣的話,一個表示動詞,一個表示名詞,那么這樣沒有交集的處理會導致FC層無法處理。 所以需要讓FC層考慮更多的上下文資訊。
    所以我們可以擴大視野,簡稱window!

    但是window也是有很大的缺點的,首先,如果我們要考慮整個句子,那么window會開的很大;其次,如果輸入是多變的,那么我們的window很明顯也是變化的,一個訓練資料中我們要統計最長的句子多長,之后再加以設定;最后就是參數過多,容易過擬合;

    2.3 加入Self-attention

    self-attention中一個標量的獲得是由下面所有的一塊決定的。

    怎么產生b1b^{1}b1, 也就需要計算a1a^{1}a1a2a^{2}a2a3a^{3}a3的關系; 也就是α1\alpha^{1}α1α2\alpha^{2}α2等。

    而這個關系是怎么樣找到的呢? 兩種方法: dot-product和Additive

    其中dot-product是將向量乘上一個矩陣W得到q,之后q · k = α\alphaα
    右側則是自己看吧!! transformer中使用的就是dot-product。
    所以加入了相關性后計算如下:

    當然也可以進行softmax歸一化! softmax不唯一,可以使用Relu、Norm等等。

    最后我們得到經過attention score的向量組合! 你需要清楚地知道下面三個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 總結一下:

    2.4.1 得到q、k、v

    當然Wq、Wk、WvW^{q}、W^{k}、W^{v}WqWkWv都是矩陣!

    2.4.2 得到attention score : α

    下圖中上方是推理第一向量得到的α的過程,下面則是將多個向量表達方式線性代數化了!
    也就是K作為row, q作為了column。

    2.4.3 得到b

    同樣的道理

    2.4.4 最后總結

    輸入I —》 輸出O;
    中間Q是關系矩陣, A’是注意力矩陣。

    特別注意的是: 這里只有Wq、Wk、WvW^{q}、W^{k}、W^{v}WqWkWv是需要學習的,其它的都是已知的,不需要訓練; 為什么呢? 自己去往上翻一翻就知道了。

    3. Multi-head self-attention

    如果一件事有不同的形式,有很多不同的定義,需要多個head!不同的q 每個head是一種相關性,多個head就是多個相關性;
    這個head也是一個超參數!!!

    最后再

    4. Position Encoding

    可以看到自監督中是沒有位置的定義的!
    比如動詞不能作為句頭,動詞一般充當謂語。所以需要加入位置信息。但是位置信息不是單純的位置,而是包含了位置的其它資訊,包含了重要性(我的理解是這樣的)。

    所以eie^{i}ei長什么樣子呢? 最早的transformer(attention is all your need)
    方法一: hand-crafted

    這是人設的! 但是sequence是改變的,所以很費勁

    方法二: sinusoidal或者cos
    最早的

    方法三: 自己煉丹吧!!這是一個尚待研究的問題
    比如左下角FloATER是自己創造的

    5. Many Applications

    Transformer 和 Bert
    語音可以、圖像也可以; 具體怎么做,自己看視頻,因為我是做NLP的,直接省略!
    比如圖像中的一個pixel多個Channel; 或者是一行;

    6. Self-attention v.s CNN

    CNN是精簡版的Self-attention! 因為Self-attention需要的感受野是全部的。 而在CNN中,感受野是確定的!

    self-attention是一個flexible的model, 而且越是flexible的model越是需要更多的data,data不夠,更容易overfitting;比如下面的圖中, 我們比較了六個模型的分別使用CNN 和 Transformer的隨著數據集量的增大后準確率的結果。 可以看出,數據集在少的時候,CNN是好的,但是隨著數據集的增加,self-attention逐漸的更好。 這是因為感受野的不同的!

    6. Self-attention v.s RNN

    因為RNN可以被Self-attention取代,就不講RNN了。
    初始是一個memory 是預定義的!,處理的是一個sequence!
    第一個RNN的block吃memory和第一個vector,然后輸出新的memory和經過一個FC層來做我們需要的預測;
    第二個RNN的block吃上一個吐出來的東西好第二個vector!

    兩者之間有很大的不同:
    我們直觀上可能感覺,RNN只考慮前幾個的關系,而沒有考慮全部;其實RNN也可以是雙循環的,也可以認為是全部的關系; 所以這不是主要的區別。

    • 天涯若比鄰, self-attention中即使很遠離,但是只需要計算就可以了; 而RNN中第一個和最后一個還需要經歷漫長的關系,不能夠忘掉。

    • 不夠并行處理 ; RNN是一個接著一個的;而self-attention的每個向量都是同時計算出來的。

    最下面的鏈接將的是 ALL Transformers are RNN;

    7.self-attention for graph

    圖的優點是有關聯已經確定了,不需要再次計算了; 只需要計算強弱就行了!不需要決定有還是沒有!
    沒有必要再學習了!
    其實GNN是另一種self-attention

    GNN水也是很深的!!

    8. To learn more。。。

    橫軸是速度,縱軸是準確率!
    self-attention 首先用在Transformer中,但是它很慢,所以才有了下面的各種變形!!
    但是準確率和速度兼顧的方法還需要進一步的深究!

    !

    總結

    以上是生活随笔為你收集整理的李宏毅机器学习(二)自注意力机制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。