## 介紹 self-attention ### 複雜多變的輸入 1. 輸入是一個向量 2. 輸入是一組向量且各向量長度不相同 a. 句子 ex: This is a cat. b. 語音(在語音處理領域,一個向量稱作 frame) c. 圖片(每個節點都是不同的向量) ### 複雜多變的輸出 1. 一組輸入向量各有一個輸出向量 ex: 詞性標註 POS tagging 2. 一組輸入向量只有一個輸出向量 ex: 正負面分析、講者辨識 3. 一組輸入向量由機器決定有幾個輸出向量,又稱為 seq2seq ex: 文字翻譯、語音辨識 一個完整的英文句子是由許多單字組合而成,如果說句子裡出現相同的單字但表達的意思不同,機器如何辨別得出來呢?答案是可以的,藉由判斷前後文,就能夠推敲出該單字的意思,但若是句子非常長,需要考慮多少的前後文才能夠推敲出該單字呢?考慮前後五個字?考慮一整個句子?這兩個都有風險存在,利用 FC(Fully Connected) 考慮前後五個字可能沒辦法完整地理解這個單字的意思,考慮一整個句子可能會有參數量過多的問題,而 self-attention 正能解決這個問題。 從下圖可以看到,輸入向量或者是隱藏層的輸出向量作為輸入向量為 a¹, a², a³, a⁴,經過一連串運算後,同時平行產生輸出向量為 b¹, b², b³, b⁴,接下來的內容也會介紹如何將 a¹, a², a³, a⁴ 變成 b¹, b², b³, b⁴ 的過程。 :::info 以下的內容以「一組輸入向量各有一個輸出向量」為主,讓我們一起解密 self-attention 的世界。 ::: ![image](https://hackmd.io/_uploads/SJtwqabS0.png) ### 解密 self-attention(數學警報!需熟悉線性代數!) 輸入向量為 a¹, a², a³, a⁴,分別乘上對應的矩陣產生 q(query)、k(key)、v 三個向量,很重要的是先了解 q 是由 a¹, a², a³, a⁴ 所提供的,再將 q 跟 k 作內積得到 α,上面都有編號,請仔細對照,再經過 softmax 得到 α',最後將 α' 乘上 v 值,全部作加總即可得到 b。 備註:第二張圖片直接產生 α' 是為了節省版面,但其實也是有經過 softmax 的步驟喔! :::info self-attention 的最大好處是 b¹, b², b³, b⁴ 可以同時產生,也就是經過平行運算後一次生成。 ::: ![image](https://hackmd.io/_uploads/BycfmTbSR.png) ![image](https://hackmd.io/_uploads/SyL5cTZS0.png =49%x) ![image](https://hackmd.io/_uploads/S17T56WS0.png =49%x) ![image](https://hackmd.io/_uploads/BJYzoaWBA.png) ## 介紹 Multi-head self-attention 什麼是 multi-head self attention 呢?可以發現最主要差異在於 aⁱ 乘上對應的矩陣後得到 qⁱ, kⁱ, vⁱ,接著再拆分成兩個 qⁱ'¹, qⁱ'² 其餘也是如此,這個稱為 2 head。 而計算方式,qⁱ'¹ 與 kⁱ'¹ 相乘得到 αⁱ'¹,只需要關注到上標後方的數字,相同數字才作加、乘的動作,其餘計算過程與上述相同。 ![image](https://hackmd.io/_uploads/rkUwkAZr0.png) ## self-attention 中沒有位置資訊 由於 self-attention 一次看所有的輸入,沒有所謂的前後位置或是先後順序的概念,可以想像成天涯若比鄰,即使在視覺上看到兩個向量之間的距離相當遙遠,但對於 self-attention 來說沒有任何的影響。 但有時位置資訊是相當重要的!例如,一個完整的句子很少將動詞擺在句首(除非是 V-ing),如此詞與詞之間的位置資訊就顯得不可忽略,一般若要加上位置資訊,會直接將位置向量(e¹)加上詞向量(a¹),而該位置向量目前較多仍是人工設定,仍有待更多的研究探討。 ![image](https://hackmd.io/_uploads/r1E1HcfrA.png =30%x) ## self-attention 之應用 1. 自然語言處理 ex: Transformer、Bert 2. 語音處理 ex: Truncated self-attention 3. 圖像辨識 :::info a. Self-attention vs. CNN 還記得前面有一篇文章有介紹到 Convolutional Neural Network, CNN,對於 CNN 來說,Self-attention 是更加複雜的架構,因為 CNN 有所謂的 Receptive field 關注在一個區域較小的 pattern 上,而 self-attention 則是一次看了所有的輸入向量,因此在有龐大的訓練資料時,Self-attention 的表現會較 CNN 來的好。 b. Self-attention v.s. RNN RNN 全名為 Recurrent Neural Network,目前 self-attention 已逐漸取代 RNN,兩者最主要差異在於輸出向量的效率,Self-attention 可藉由平行運算一次產生輸出向量,而 RNN 則需要等待上一個輸出再丟至模型中繼續生成下一個輸出,可見 self-attention 效率要來的更好。 ![image](https://hackmd.io/_uploads/HktLF5fr0.png) ::: ## 總結,self-attention 在文章中,從介紹輸入與輸出向量開始,並以「一組輸入向量各有一個輸出向量」為出發點,探討 self-attention 的運作機制,並且也初步了解 multi-head self-attention,最後說明該神經網路架構之應用相當廣泛。 --- :::info 以上就是這篇文章「自注意力機制(Self-attention)」的所有內容,第一次看的人會花比較多時間消化吸收,這是很正常的事情,若有任何問題,歡迎在下方與我聯繫、討論,接下來也會繼續分享相關文章,敬請期待。