本文將以通俗易懂的講解方式,帶你深入解析生成式AI Transformer架構下的“自注意力機制”背后的運行邏輯,注重向想了解AI算法的非專業人士也能深入的學習和理解人工智能背后的科學原理。 大牛=10%天分+40%耐心+50%的長期努力 這是帖子寫完成后加的一句,其實你能認真看完這帖子就說明你已經夠有耐心了。 寫在前面在之前的文章中,我們已經學習過了“什么是生成式AI?”,對生成式AI的的三種模型“Transformer、BERT和GPT”也有了初步相對客觀、真實的認識。具體內容從下面藍色鏈接進行跳轉學習: 第一次見有人把Transformer、BERT和GPT大模型講的這么通俗易懂! 我們知道,Transformer是一個通用的模型框架,它可以用于解決一系列“序列到序列”的問題。而后面所提出的BERT和GPT模型勻是基于Transformer架構來進行設計的。為什么后提出的算法模型都要基于Transformer來構建?,而不能是循環神經網絡(RNN)和是卷積神經網絡的(CNN)?”,這所有的一切都要從Transformer架構下的一個神奇模塊說起。它就是self-attention mechanism,翻譯成中文叫做自注意力機制。 背景知識:本著知識一定要系統的來學的原則,我想先帶著大家了解一下在自然語音處理領域中,在“序列到序列化問題”上AI算法是如何演進的,以及Transformer為什么會被提出?它又解決了哪些痛點? 早在Transformer模型被提出之前,人們處理序列化數據主要使用的是RNN和CNN等模型。但這兩種模型在序列化數據上的應用存在一定的局限性。 RNN的局限性:
CNN的局限性體:
Transformer相比CNN和RNN所具備的優勢:
這里需要客觀認識一點,再好的模型它也會有缺點,不能因為它具備很多優點,就忽視掉它本身的不足。 Transformer存在的缺陷:
這里大家如果對RNN和CNN不夠了解的話也沒關系,RNN、CNN與Transformer是AI發展下不同時代的產物,其擅長的領域各不相同。Transformer和RNN擅長處理序列數據,CNN擅長處理圖像等空間數據。但他們都可以被應用在自然語言處理中,同樣Transformer也已經不再局限于自然語言處理領域,在圖像領域,如圖像分類、目標檢測和圖像生成等也取得了不錯的成績,感興趣的同學可以學習一下 “Image Transformer”這篇論文,該論文是最先將 Transformer 應用于圖像領域的論文之一。 [論文鏈接1]: https://arxiv.org/abs/1802.05751 由于本文主要側重的是對“自注意力機制”的解讀,所以不會過多的深入介紹其他不相關的模型,若大家對這部分算法模型很感興趣,可以持續關注本賬號發布的內容,這些內容的深入解析后續會為大家一一奉上。 從宏觀角度介紹自注意力機制自注意力機制是在論文'Attention Is All You Need' 中提出的,論文題目翻譯過來就是“注意力機制是你所需要的一切”,該論文由Google Brain團隊于2017年發表在國際會議NIPS上。
![]() 圖源論文 Attention is all you need 論文首頁截圖 這篇論文對于自然語言處理領域來說具有劃時代的意義:
![]() 圖源論文 Transformer模型在翻譯任務效果更好,訓練成本更低 ![]() 圖源論文 Transformer 的架構圖 想要學習自注意力機制,我們先得了解Transformer的模型架構。如上圖所示,Transformer模型主要由① 位置編碼層、② 前饋網絡、③ 歸一化層等基礎組件構成。 位置編碼層:其被引入是因為Transformer不像RNN那樣處理的是序列中單個元素,它處理的是并行輸入的整個序列元素,是一種可學習的編碼方法,它將位置信息與輸入向量相結合,為每個輸入向量添加一個唯一的編碼向量,表示其在序列中的順序和位置信息。 前饋網絡:這個子層對自注意力子層的輸出進行非線性變換,并學習不同維度之間的關系。(注:非線性變換與線性變換相對,變換的函數關系不滿足加法和數乘的運算法則。也就是說,非線性變換對于輸入數據的變換不再是線性的,而可能是曲線形狀的。非線性變換非常重要,因為線性變換只能進行簡單的變換操作,而不能捕捉到輸入數據之間更為復雜的關系。通過引入非線性變換,以提高模型的表達能力。) 歸一化層:這個層采用層歸一化或者批歸一化的方式對每個子層的輸出進行歸一化處理,以提高模型的訓練穩定性和泛化性能。(注:歸一化處理是指將數據進行線性縮放,將數據映射到特定的區間內,通常是將數據轉化為0到1或-1到1之間的值。歸一化處理在數據預處理和模型訓練中經常被使用,它可以使不同量級的數據處于同一個量級上,消除不同數據之間的量綱影響,提高模型的訓練效率和準確性。歸一化處理的目的是使不同特征之間具有可比性,同時可以消除數據間的噪聲和異常值,使得模型更具有魯棒性。) Transformer架構是由位置編碼層、編碼器、解碼器、前饋網絡組成。其中編碼器又由多層子層組成,每個子層都包含多頭自注意力子層、前饋子層和歸一化子層三個組件。解碼器也由多層子層組成,每個子層包含多頭自注意力子層、前饋子層、編碼器-解碼器注意力子層和歸一化子層四個組件。 引入自注意力機制的原因是它可以讓編碼器在對特定元素進行編碼時使用輸入序列中其他元素的信息(可簡單理解為當需要翻譯一個詞時,不僅僅關注了當前的詞信息,還關注了其他詞的信息)。然后,Self-Attention 層的輸出會流入前饋網絡。 舉個例子:假如,我們要翻譯下面這個句子: “This mushroom is so beautiful, but it looks poisonous.” 請問這個句子中的 it 指的是什么?是指 mushroom還是 beautiful?對人來說,這無疑是一個簡單的問題,但是對于算法來說卻沒那么簡單。 ![]() 最后一層編碼器中it詞的編碼信息 可以看到,在對'it’進行編碼時,有一部分注意力集中在'The mushroom'上,并將它們的部分信息融入到'it'的編碼中,顏色越深的部分表示注意力得分越多。 從內部介紹自注意力機制![]() 點積縮放注意力機制 和 多頭注意力機制 如圖所示,自注意力機制包括“縮放點積注意力機制”,和“多頭注意力機制”,點積縮放注意力機制是一種常見的注意力機制,它通過對查詢向量和鍵向量進行點積運算,得到注意力得分,并通過縮放系數對注意力得分進行調整。它在計算效率和表現效果上都有比較好的表現。 多頭注意力機制則是通過將輸入同時進行多個線性變換,每個變換都有自己的Q、K、V矩陣,并分別計算自己的注意力得分,最后綜合所有變換的輸出得到最終的輸出。因此,多頭注意力機制可以學習到更加豐富和多樣化的特征表示,更好的模型表現能力。 這里有兩個形象的比喻: ① 我們可以將點積縮放注意力機制比作一名學生,他通過思考和計算得到了某個問題的答案。而多頭注意力機制則可以將這個問題交給多個學生來解決,每個學生都有自己獨特的思考方式和解決方案,最后將所有方案綜合起來,得到更加全面和準確的答案。 ② 想象一下,你去看一部懸疑破案題材的電影,點積縮放機制相當于只看了一次,而多頭注意力機制看了N次電影,如果您只看一次這部電影,你非常有可能錯過一些重要的細節導致無法理解整個故事的全貌。而經過多次反復觀看,你也許就能兼顧到不同的微小細節,就能順理成章地推理出案情的發展走勢。 看到這里,大家可能要說了,“你說的我都懂,可我現在就想知道Q(query)、K(key)和V(value)是干什么的?”,別著急,下面為大家解答疑惑。具體來說,給定輸入序列的查詢矩陣Q、鍵矩陣K和值矩陣V。這三個向量,是分別由輸入序列經過3次不同的線性變換得到。給定一個輸入序列X,假設其每個元素的向量表示為x_1, x_2, ..., x_n,則對于查詢序列Q、鍵序列K和值序列V,可以通過對同一輸入X的不同線性變換得到,而Transformer本質上是學習Q、K、V三個矩陣的線性變換矩陣: 著名的Attention-function(注意力函數) 就是通過Q、K、V進行下面的公式計算啦:
你可以把這個函數看作是一個權重分配函數,它能夠根據輸入的序列和當前處理的位置,計算出一個權重分布,用于表示不同位置的重要性。其中Q用于表示當前處理的位置,而V表示序列中的所有位置,這下應該明白了吧。 使用向量計算 Self-Attention下面通過一個例子,讓我們看一下如何使用向量計算 Self-Attention。計算 Self-Attention 的步驟如下: ![]() 圖源網絡 詞向量求得其對應的q,k,v向量
![]() 圖源網絡 Thinking詞相對Machines 注意力得分是96
![]() 圖源網絡 對位置詞的注意力分數進行處理
![]() 圖源網絡 當前位置詞的注意力計算結果 使用矩陣計算Self-Attention![]() 圖源網絡 對輸入向量矩陣X求Q、K、V矩陣 如圖所示,具體計算步驟如下:
![]() 圖源網絡 求自注意力得分 多頭注意力機制(Multi-head Attention)什么是多頭注意力機制? 多頭注意力機制通過 h 個不同的線性變換對 Q、K 和 V 進行映射;然后,將不同的 Attention 拼接起來;最后,再進行一次線性變換。 ![]() 多頭注意力機制 論文截圖
![]() 圖源網絡 多頭注意力計算各自的Q,K,V矩陣
![]() 圖源網絡 8個注意力頭計算得到8個Z矩陣
具體方法如下: ① 將n個矩陣拼接起來 得到; ②將拼接矩陣與權重矩陣與相乘; ![]() 圖源網絡 拼接各個注意力頭計算得到的矩陣并與權重矩陣相乘 以上就是多頭注意力計算的全過程了,感興趣的同學點開下面的圖看一下,數據是如何在多頭注意力機制被矩陣計算的。 ![]() 圖源網絡 多注意力頭計算Z矩陣的全過程 總結Transformer是一種非常成功的深度學習模型,被廣泛應用于自然語言處理和其他序列相關的任務。其關鍵在于使用了一種新的注意力機制,使得模型能夠學習到不同位置之間的關系。Transformer的注意力機制是一種自注意力機制,它能夠根據輸入序列中的每個元素自適應地計算權重,從而更好地捕捉輸入序列中的信息。具體來說,注意力機制的計算分為三個步驟:
關注我,每天一起學習,不一樣的知識! |
|
來自: taotao_2016 > 《AI》