從Attention 到 MultiHeadAttention
對Attention 的理解
Attention的本質類似於我們人類的注意力機制,寄希望於將有限的注意力集中於重點上,從而節省資源以獲得最為有效的信息。
那么對於神經網絡來說,什么是注意力呢?而又如何分辨什么是重點?簡單來說,Attention機制通過計算知識源中的各個部分與學習目標的相關性,來盡可能學習相關性最高的部分。
圖書館(source)有很多書(value),而為了方便查找,圖書館為每本書進行了編號(key),然后給出一個編號區間的表,來映射編號與語義的關系,假設編號15為計算機、編號610為數學、編號1115為護理學。當我們需要學習有關人工智能(**query**)的知識時,我們根據這張表去重點閱讀110號,而對11~15號只進行粗略的瀏覽。
這樣,我們就能在有限的時間中獲得盡可能多的關於人工智能的知識
Attention機制可以被描述為以下步驟:
-
將query與source中已知的key進行相似度計算,獲得每個key的權值
-
將權值進行歸一化,以得到直接可用的權重(\(d_k\)是\(QK^T\)方陣的維度)
假設 \(Q,K\) 里的元素的均值為0,方差為1,那么\(Q K^T\)中元素的均值為0,方差為d. 當d變得很大時,\(Q K^T\)中的元素的方差也會變得很大,如果\(QK^T\)中的元素方差很大,那么\(Softmax(QK^T)\)的分布會趨於陡峭(分布的方差大,分布集中在絕對值大的區域)。總結一下就是\(Softmax(QK^T)\)的分布會和d有關。因此 \(Softermax(QK^T)\) 中每一個元素除以\(\sqrt d_k\)后,方差又變為1。這使得\(Softmax(QK^T)\)的分布“陡峭”程度與d解耦,從而使得訓練過程中梯度值保持穩定。
-
將權重和value進行帶權求和,得到向量Attention value
對於一段知識源,一次Attention獲得了該知識源的一個表示空間,以Attention value的方式表示。
Self-Attention
然而我們再思考一個問題,對於一段文本,究竟什么是它的query、什么是它的key、什么又是它的value呢?
假設我們的source是這樣一段文本“Water is toxic”
當我們處理"Water"這個詞時,將"Water“作為當前搜索的query,與其他詞對應的key向量進行相似度計算。依次,我們用同樣的方法計算剩下的兩個單詞。
Self-Attention認為(Q, K, V)均來自於source的詞向量,即“Water is toxic”這一句話所生成的詞向量,因此三者應該在生成機制上是一致的。因此定義了三個相互獨立的權重矩陣(作為訓練時的需要學習的參數),用於與輸入的詞向量相乘獲得三個矩陣,分別作為Q、K、V。
詳細內容查看超詳細圖解Self-Attention - 知乎 (zhihu.com),非常詳細而且易懂。
Multi-Head Attention
Multi-Head Attention的一個基本思想在於,我們試圖通過多個Attention來建立對同一個知識源的多個不同的注意力關系判斷。這就好比讓多個人來同時思考一個問題,不同的人看待問題的方式不一樣,因此讓多個人一起能夠更好地找到這個問題相關的知識點。
從機制上,其相當於多個Self-Attention過程的融合。假設有n個Head:
- 每個Head對應三個權重矩陣用於從輸入向量中計算(Q, K, V)
- 每個Head根據自己的(Q, K, V)根據Attention過程計算得出Attention value向量。n個Head一共有n個Attention value。
- 將這n個Attention value向量連接起來,乘以一個權重矩陣,以使其轉變為與輸入向量大小相同的矩陣
參考: