self attention
self attention 自注意力機制,是一個重要的network也是transformer的一環。
那他是用來作什麼的呢?跟其他模型又有什麼不一樣?
在簡單的英文處理模型中,如果模型設定是每個單字用一個fc的話,可能會因為單字在不同的語法中有不同的意思,而每個單字是被分別讀取的所以產生辨識錯誤。
有一種解決方法是將一定鄰近一定長度的範圍包一來一起讀取這樣就可以解決前後文的問,但是當要讀的是整個句子時而句子又很長時,我們就會不知道要將這著範圍設多少,如果太小會沒有作用,而太大卻會浪費資源而且造成參數過多容易過擬和。
這又跟self-attention又有什麼關係呢?
self-attention可以解決這種輸入向量長度不定的問題,因為它可以透過找出字中的連性去解讀文字內容,所以他考慮的不再是只有一小快範圍而是整個句子。
self-attention有很多用法這只是其中一種。其他用法像是給sequence輸出不同長度的sequence或者是給關係圖給出sequence。
那是如何做到的呢?
我們的結果是縱觀全局下的結果。就如同你在閱讀一篇長文小說你不可能每篇都分開來看,那樣根本看不懂。現在要做的事就是閱讀全部然後找出它的重點和之間的關聯性。
首先,假如我們要找出b1要做到這件事要先找出在其他每一個vector跟a1的關聯。就像看小說的時候要先知道背景一樣。
那我要怎麼知道a1跟a2之間有什麼關聯呢?
當然是有公式可以帶。
透過這兩個公式我們可以找出兩個vector之間的關聯,通常使用dot-product,方法是分別乘上兩個矩陣wq qk然後做element-wise的相乘再相加。
q是query也就是在搜尋時的關鍵字而k是key而self-attention就是靠這兩的向量去求出注意力分數attention score。
最後通常會丟到soft-max裡面,不一定要soft-max其實只要是激活函數都可以。
接下來要透過我們的到的注意力分數去求出重要的資訊。
作法就是將a乘上wb得到新向量得到v然後再用v去乘上attention score然後全部加起來就得到了結 果b。
self attention其實不只可以用一層他還可以用多層去提取出重要的訊息如同transformer裡面的用法