備案時暫時關閉網站交換鏈接營銷的典型案例
文章目錄
- 傳統(tǒng)的神經網絡框架存在的問題
- 一. Transformer架構綜述
- 1.1 transformer的輸入
- 1.1.1 詞向量
- 1.1.2 位置編碼(Positional Encoding)
- 1.1.3 編碼器與解碼器結構
- 1.1.4 多頭自注意力機制
- 二.Transformer分步詳解
- 2.1 傳統(tǒng)詞向量存在的問題
- 2.2 詳解編解碼器中自注意力機制
- 2.2.1 縮放點積注意力機制
- 計算步驟
- 矩陣形式
- 2.2.2 softmax函數
- 2.2.3 多頭機制
- 三.FNN與MoE策略
- 四.論文參考
- 4.1 邁向終極專家專業(yè)化-Mixture-of-Expert 語言模型
- 4.2 模型越獄-拒絕由LLMs單一方向調解
- 4.3 LLM MOE策略的演化
文章學習b站
Transformer模型詳解,Attention is all you need
【Transformer速通指南】三天掌握自注意力機制!
- Transformer 是模型架構,是 LLM 和 MoE 的基礎。其核心是自注意力機制(Self-Attention),摒棄了傳統(tǒng) RNN 和 CNN 的序列處理方式。作用實現不同維度領域的數據歸一化。
- LLM 是基于 Transformer 的大規(guī)模應用模型。
- MoE 是一種優(yōu)化架構的策略,用于擴展模型規(guī)模。
傳統(tǒng)的神經網絡框架存在的問題
傳統(tǒng)神經網絡框架存在一些局限性,具體如下:
-
循環(huán)神經網絡(RNN):RNN在處理序列數據時,需要按照時間順序逐步迭代計算每個時間步的結果。這種串行處理方式限制了模型的并行化能力,導致訓練和推理過程相對緩慢。此外,RNN在捕捉長距離依賴關系時面臨挑戰(zhàn),如梯度消失或爆炸問題,這進一步限制了其性能。
-
卷積神經網絡(CNN):雖然CNN在處理具有局部結構的數據(如圖像)方面表現出色,但在處理序列數據時存在一定的局限性。CNN通過滑動窗口機制捕捉局部特征,但難以直接建模長距離依賴關系,因為它們本質上是基于局部感受野的設計,缺乏全局視角。盡管可以通過堆疊多層卷積層來部分緩解這一問題,但這通常伴隨著計算成本的增加和參數數量的增長。
-
Transformer模型:與上述兩種架構不同,Transformer通過引入自注意力機制徹底改變了序列數據的處理方式。自注意力機制允許模型直接訪問輸入序列中的所有位置,并為每個位置分配不同的權重,即所謂的“關注度”。這種方式使得Transformer能夠高效地捕捉長距離依賴關系,同時支持高度的并行化計算,從而顯著提高了訓練效率。在Transformer中,每個詞都通過Q(查詢)、K(鍵)和V(值)向量來計算與其他詞的相關性,進而確定在整個上下文中該詞的重要性。
綜上所述,每種傳統(tǒng)的神經網絡架構都有其特定的應用場景和局限性。RNN擅長處理序列數據但受限于其串行特性;CNN在圖像處理領域表現優(yōu)異但對長距離依賴關系的支持有限;而Transformer則通過創(chuàng)新的自注意力機制解決了這些問題,提供了更強大的序列建模能力和更高的計算效率。這些特點使Transformer成為現代自然語言處理和其他涉及序列數據領域的首選架構之一。
一. Transformer架構綜述
圖1-1 transformer整體流程圖
圖1-2 transformer模型子結構示意圖
整體分為下方輸入單元、左側編碼器、右側解碼器、上側推演結果,其中圖1-1描述了transformer大致組件。圖1-2描述了每個組件中重要的核心處理方法。
- Transformer的輸入和輸出是什么?
輸入: Inputs,Outputs(shifted right)
輸出:Output Probabilities
下列以模型處理英譯漢為例解釋transformer模型的整體運作過程。
1.1 transformer的輸入
例如Are you OK ?
待翻譯句子和標注數據 你好嗎?
進入模型,經模型處理后輸出 你干什么?
,如圖1-3所示。
圖1-3 數據輸入輸出示意圖
1.1.1 詞向量
在 Are you OK ?
和 你好嗎?
進入模型時,具體會被模型的第一個組件詞向量
處理,如圖1-4所示。
圖1-4 詞向量層示意圖
假設每個單詞用4維向量表示,則["Are","you","OK","?"]
四個詞的句子可以用4 * 4的詞向量矩陣表示,每一行是一個詞的詞向量,如圖1-5所示。
圖1-5 待譯數據詞向量
同理,標注詞["你","好嗎","?"]
也會被處理成 3* 4的詞向量矩陣,如圖1-6所示。
圖1-6 標注數據詞向量
1.1.2 位置編碼(Positional Encoding)
得到Input Embedding和Output Embedding的詞向量后,transformer會對其進行位置編碼。目的是把位置信息附加到原始的信息上。如圖1-7所示。
圖1-7 從詞嵌入到位置編碼示意圖
在沒有位置編碼時
圖1-8 詞向量示意圖
即模型可能當成You are OK ?
,OK ? you are
等進行處理。那么這樣子就可能違背本意,如圖1-8所示。
對于初學者而言,下面的討論可能會顯得晦澀難懂,不清楚其目的和實施的理由。這并不意外,因為這部分內容旨在提供一個整體框架或概覽,而不會深入探討每一個細節(jié)?,F階段,您無需過分擔憂具體的實現步驟或背后的原理。當前的重點在于理解這種方法的大致輪廓以及它試圖達成的目標。具體的操作細節(jié)、技術術語以及每一步驟背后的原因將會在后續(xù)章節(jié)中詳細展開。
為了幫助您更好地跟隨學習進度,這里將給出一個高層次的概念性描述。首先,我們采取一種系統(tǒng)化的方法來解決問題,這種方法依賴于一系列預先設定的步驟和規(guī)則。這些步驟被設計成能夠引導用戶從問題的起始點順利到達解決方案。雖然此時您可能對其中的具體操作流程感到困惑,但隨著逐步深入的學習,每一個環(huán)節(jié)都將得到清晰的解釋和實例說明。
位置編碼會用正弦函數和余弦函數的計算實現
位置編碼的正余弦公式
其中:
-
pos
表示詞在序列中的位置。 -
i
表示編碼向量中的維度索引。 -
d_model
表示模型嵌入維度大小。 -
對于偶數維度(即
i
是偶數),使用正弦函數:P E pos , 2 i = sin ? ( p o s 1000 0 2 i / d model ) PE_{\text{pos}, 2i} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PEpos,2i?=sin(100002i/dmodel?pos?)
-
對于奇數維度(即
i
是奇數),使用余弦函數:P E pos , 2 i + 1 = cos ? ( p o s 1000 0 2 i / d model ) PE_{\text{pos}, 2i+1} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PEpos,2i+1?=cos(100002i/dmodel?pos?)
其中,pos
表示詞語在序列中的位置,i
表示該詞語向量中的第 i
維度。d_model
表示總維度數
例如["Are","you","OK","?"]
中, "you"的索引下標為1,且前文假設詞向量有4個維度(現設4個維度分別為維度0,維度1,維度2,維度3)。因此"you"的位置編碼為PE(1,0),PE(1,1),PE(1,2),PE(1,3),如圖1-9所示。
圖1-9 位置編碼示意圖
再次說明,如上你可能看不懂為什么要這么做,后續(xù)在章節(jié)2中介紹自注意力機制,你會有所理解
1.1.3 編碼器與解碼器結構
圖1-10 輸入序列經過位置編碼進入編解碼器圖
經過位置編碼后,英文的待譯數據和中文的標注數據分別輸入到編碼器和解碼器中,會經過三個計算過程。如圖1-11
圖1-11 編解碼器整體處理流程圖
-
① 編碼器會基于
自注意力機制(Multi-Head Attention)
,前饋神經網絡(Feed Forward)
對"英文的待譯數據"進行編碼,如圖1-12所示
圖1-12 編碼器處理流程圖 -
② 解碼器會基于 帶有掩碼的(Masked)自注意力機制(Multi-Head Attention)對"中文的標注數據"進行編碼,如圖1-13
圖1-13 解碼器處理流程圖 -
③ 編碼器-解碼器注意力層: 對兩組數據一起解碼,得到解碼器最終輸出。如圖1-14 所示。
圖1-14 從編碼器-解碼器注意力層到解碼器最終輸出圖
總體來說編解碼器通過自注意力機制,和前饋神經網絡將輸入數據中的全局信息附加到解碼結果并最終輸出。如圖1-15所示。
1.1.4 多頭自注意力機制
圖1-16 多頭自注意力機制整體示意圖
其中自注意力機制(Muti Head Self Attention)會分別使用多個自注意力機制對Q,K,V 三個線性層(Linear)對輸入數據進行線性變換并使用縮放點積注意力機制(Scaled Dot Product Attention)將特征變換后的Q,K,V進行結合,最后使用fc線形層整合多頭結果。 如圖1-17所示。
圖1-17 自注意力機制計算流程圖
圖1-18 自注意力機制源碼實現圖
在章節(jié)2,我們會詳細介紹Q,K,V參數的作用,為什么是這樣搞。
以編碼器中的自注意力機制層,說明自注意力機制是如何工作的。首先輸入的數據是經過位置編碼后的["Are","you","ok","?"]
,其黃色表示["Are","you","ok","?"]
的詞向量矩陣,分別于Q,K,V進行線性變換得到,三組結果qx,kx,vx。如圖1-19所示。
圖1-19 舉例說明自注意力機制計算流程圖
接著將三組結果交給縮放點積注意力機制
整合成最終結果。
關于自注意力機制和縮放點積注意力機制將在第二章詳細介紹。
二.Transformer分步詳解
在之前的概述中,您可能對編碼器與解碼器之間的映射關系感到困惑,不明白為何需要通過Q(查詢)、K(鍵)和V(值)來進行信息處理和統(tǒng)一歸一化為啥是softmax函數處理,以及為何位置編碼采用了正余弦函數的形式,。接下來,我們將詳細探討這些問題,以期為您提供清晰的理解。
首先,讓我們明確編碼器和解碼器在序列到序列(Seq2Seq)任務中的角色。編碼器的任務是將輸入序列轉換為一個固定長度的內部表示形式,通常稱為上下文向量或特征向量。這個內部表示捕捉了輸入序列的關鍵信息,并將其壓縮成一個抽象表達。而解碼器則接收這個內部表示,并逐步生成輸出序列,每一步都可能依賴于前一步的輸出以及從編碼器傳遞過來的上下文信息。這種結構使得模型能夠處理不同長度的輸入和輸出序列,適用于如機器翻譯、文本摘要等任務。
接下來,討論Q、K、V的概念及其在自注意力機制中的應用。在Transformer架構中,為了有效處理輸入序列中不同位置之間的關系,每個輸入都需要經過線性變換,從而生成Q、K、V三個不同的向量。這些向量分別代表查詢、鍵和值,它們的作用在于計算序列中元素間的相似度并確定權重,以便實現對不同位置信息的有效區(qū)分。
最后,我們來解釋為什么位置編碼采用正余弦函數。由于Transformer模型缺乏像循環(huán)神經網絡(RNNs)那樣的遞歸結構或卷積神經網絡(CNNs)那樣的卷積結構,它無法直接識別序列中元素的位置信息。因此,位置編碼被引入,其目的是賦予模型關于序列中各元素相對位置的知識。位置編碼通常由正弦和余弦函數生成,確保每個位置都有獨特的表示。選擇正余弦函數的原因在于,這種方法可以保證對于任何給定的位置偏移,都可以通過固定的數學運算獲得對應的編碼,這有助于模型學習到位置間的相對距離關系。此外,正余弦函數的周期性特性允許模型處理任意長度的序列,而不會因為位置過遠而導致位置信息丟失或混淆。
綜上所述,通過對編碼器和解碼器的工作原理、QKV在自注意力機制中的作用以及位置編碼為何采用正余弦函數的深入解析,希望能幫助您更準確地理解這些概念背后的邏輯和技術細節(jié)。
2.1 傳統(tǒng)詞向量存在的問題
預訓練好的詞向量一旦生成就保持不變,這意味著它們無法根據不同的語境靈活調整。例如:
- “它無法通過這條河,因為它太累了?!?在這句話中,“它”指的是某個行動者,比如一個人或動物,表明是由于疲勞導致無法過河。
- “它無法通過這條河,因為它太窄了?!?而在這句話里,“它”指的是河流本身,表示由于河道狹窄而不能通過。
如果詞向量固定不變,那么在處理這兩個句子時就會遇到問題,因為“它”這個詞在兩個句子中的含義完全不同。第一個句子中的“它”指的是執(zhí)行動作的主體,而在第二個句子中則是指物體(河流)的一個屬性(寬度)。這種情況下,固定的詞向量無法準確捕捉到“它”在不同語境下的具體含義。
因此,雖然預訓練詞向量能夠提供一個良好的起點,為詞匯賦予基于大規(guī)模文本數據學習得到的通用意義,但它們并不足以應對所有情況。為了更好地理解和區(qū)分詞語在不同上下文中的意義,我們需要采用更先進的模型,如ELMo、BERT等,這些模型可以根據詞語所在的特定環(huán)境動態(tài)調整詞向量,從而更加精準地反映詞語的實際用法和意義
。這樣,即使是像“它”這樣的代詞,在不同的句子中也能被正確理解。
2.2 詳解編解碼器中自注意力機制
主要目標是使計算機能夠在處理文本時,從上下文語句中識別并關注最關鍵的信息。Transformer模型通過其自注意力機制實現了這一目標,該機制允許模型根據輸入序列的上下文動態(tài)地為每個詞分配相應的權重。這意味著在解析一個句子或段落時,Transformer能夠自動判斷哪些詞語對于理解整體意義最為重要,并給予這些詞語在上下文詞語中的關注度。如圖2-1所示。
圖2-1 transformer的自注意力詞熱度權重圖
具體來說,在Transformer架構中,每個詞首先被轉化為三個向量:查詢(Query)、鍵(Key)和值(Value)。通過計算查詢向量與所有鍵向量之間的相似度得分,模型可以確定當前詞與其他詞的相關性,從而形成一個注意力分布。這個分布隨后用于加權求和所有值向量,生成一個反映整個上下文中關鍵信息的新表示形式。這樣,Transformer不僅能夠捕捉到詞匯間的直接聯系,還能夠理解更為復雜的依賴關系,確保了對文本深層次含義的準確把握。因此,借助于這種機制,Transformer可以在各種自然語言處理任務中更有效地利用信息,提高理解和生成文本的能力。
2.2.1 縮放點積注意力機制
Q用于“查找”,即尋找與當前位置相關的信息;K存儲序列中每個位置的信息,供Q進行查詢時使用(每個詞的Q會跟整個序列中每一個K計算得分,然后基于得分再分配特征,如圖2-2);V包含了實際的信息內容,根據Q和K的相似度(即注意力權重)進行加權求和。通過這種方式,模型能夠動態(tài)地聚焦于輸入序列中最相關的部分,從而更好地捕捉序列數據中的復雜依賴關系。
圖2-2 與Q,K,V線性變換的關系圖
假設我們有一個輸入序列,其對應的查詢向量為 Q Q Q,鍵向量為 K K K,值向量為 V V V。這些向量通常由線性變換從原始輸入嵌入得到。
計算步驟
-
計算點積:對于每個查詢 q i ∈ Q q_i \in Q qi?∈Q,計算它與所有鍵 k j ∈ K k_j \in K kj?∈K的點積。獲取當前詞與每個詞的相關程度。
score ( q i , k j ) = q i T k j \text{score}(q_i, k_j) = q_i^T k_j score(qi?,kj?)=qiT?kj?
-
縮放分數:由于點積的結果大小與向量維度 d k d_k dk?有關,為了防止梯度消失或爆炸,我們需要將得分除以 d k \sqrt{d_k} dk??進行縮放。
scaled?score ( q i , k j ) = q i T k j d k \text{scaled score}(q_i, k_j) = \frac{q_i^T k_j}{\sqrt{d_k}} scaled?score(qi?,kj?)=dk??qiT?kj??
-
應用softmax函數:對每個查詢 q i q_i qi?對應的鍵分數應用softmax函數,以獲得最終的注意力權重 α i j \alpha_{ij} αij?。
α i j = softmax j ( q i T k j d k ) = exp ? ( q i T k j d k ) ∑ k exp ? ( q i T k d k ) \alpha_{ij} = \text{softmax}_j\left(\frac{q_i^T k_j}{\sqrt{d_k}}\right) = \frac{\exp\left(\frac{q_i^T k_j}{\sqrt{d_k}}\right)}{\sum_{k}\exp\left(\frac{q_i^T k}{\sqrt{d_k}}\right)} αij?=softmaxj?(dk??qiT?kj??)=∑k?exp(dk??qiT?k?)exp(dk??qiT?kj??)?
-
加權求和:最后,利用注意力權重對值向量 V V V進行加權求和,得到上下文向量 c i c_i ci?。
c i = ∑ j α i j v j c_i = \sum_{j} \alpha_{ij} v_j ci?=j∑?αij?vj?
矩陣形式
在實踐中,我們通常會同時處理多個查詢,因此上述操作可以表示為矩陣運算的形式:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk??QKT?)V
其中, Q ∈ R n × d k Q \in \mathbb{R}^{n \times d_k} Q∈Rn×dk?, K ∈ R m × d k K \in \mathbb{R}^{m \times d_k} K∈Rm×dk?, V ∈ R m × d v V \in \mathbb{R}^{m \times d_v} V∈Rm×dv?分別是查詢、鍵和值的矩陣, n n n是查詢的數量, m m m是鍵/值的數量, d k d_k dk?和 d v d_v dv?分別是鍵和值的維度。
2.2.2 softmax函數
Softmax函數是一種歸一化指數函數,它能夠將一個K維向量z“壓縮”到另一個K維實向量σ(z),使得每一個元素的范圍都在(0,1)之間,并且所有元素的和為1。這樣,輸出就可以被解釋為概率分布 1,即百分率占比,可以得出當前詞與其余詞的關系熱度占比。
對于輸入向量 Z = [ z 1 , z 2 , z 3 . . . . . z k ] Z = [z_1,z_2,z_3.....z_k] Z=[z1?,z2?,z3?.....zk?],Softmax函數定義如下
σ ( z ) i = e z i ∑ j = 1 K e z j \sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} σ(z)i?=∑j=1K?ezj?ezi??
數值穩(wěn)定性的改進
為了避免數值溢出問題(例如上溢或下溢),通常會對輸入進行平移操作,即從每個 z i z_i zi?中減去最大值 max ? ( z ) \max(z) max(z):
σ ( z ) i = e z i ? max ? ( z ) ∑ j = 1 K e z j ? max ? ( z ) \sigma(\mathbf{z})_i = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_{j=1}^{K} e^{z_j - \max(\mathbf{z})}} σ(z)i?=∑j=1K?ezj??max(z)ezi??max(z)?
示例代碼塊
import numpy as npdef softmax(x):"""Compute softmax values for each sets of scores in x."""e_x = np.exp(x - np.max(x)) # 防止溢出return e_x / e_x.sum()# 測試數據
x = np.array([-3, 2, -1, 0])
print(softmax(x))
2.2.3 多頭機制
在Transformer架構中,為了模擬CNN能夠從不同角度提取多種特征的能力,采用了“多頭注意力機制”(Multi-Head Attention)。這一機制通過不同的注意力頭(Attention Head)并行地執(zhí)行多個獨立的自注意力過程。每個頭都使用各自的學習參數來處理輸入數據的不同子空間,從而允許模型捕捉到輸入序列內的各種復雜依賴關系 。通常情況下,設置8個這樣的頭已經足夠有效。
在完成多頭注意力計算后,每個頭會輸出一個特征表示。這些獨立的特征表示隨后會被拼接在一起,形成一個綜合的特征表示。接下來,為了整合這些信息并減少維度,通常會在拼接后的特征上應用一個全連接層(Fully Connected Layer),這一步驟有時也被稱為降維處理。這樣做的目的是將多頭注意力機制得到的高維特征映射回模型需要的較低維度,以便后續(xù)處理或預測任務的執(zhí)行。
三.FNN與MoE策略
MoE模型中的每個專家(Expert)通常采用前饋神經網絡結構( FeadFoward Network 如全連接網絡或卷積網絡)。例如,在Transformer模型中,MoE層替換了傳統(tǒng)的前饋子層,每個專家獨立處理輸入數據的子集,通過并行計算提升模型容量。門控網絡(Gating Network)負責動態(tài)分配輸入到不同專家,其本身也是一個前饋網絡,通常包含Softmax或Gating Tree結構,用于生成專家選擇的概率分布。
混合專家模型(Mixture of Experts,MoE)是一種先進的機器學習策略,它通過將多個專門訓練的子模型(稱為“專家”)結合起來,并使用一個或多個門控網絡來控制這些專家輸出的權重。這種方法旨在提高模型性能和效率,特別是在處理復雜數據模式時的大模型訓練。
在MoE架構中,有三個關鍵組件:專家、門控網絡和稀疏激活。每個專家都是針對特定任務或數據特征而訓練的子模型。例如,在圖像分類任務中,一個專家可能專門識別紋理,而另一個專家可能識別邊緣或形狀。這種分工有助于整個模型更高效地處理問題,因為每個專家只處理它最適合的數據類型。
圖3-1 Figure 2 | DeepSeekMoE的示意圖
由于論發(fā)表已經非常詳盡,因此不再贅述。以下將會給出論文地址
四.論文參考
4.1 邁向終極專家專業(yè)化-Mixture-of-Expert 語言模型
DeepSeekMoE: Towards Ultimate Expert Specialization in
Mixture-of-Experts Language Models
4.2 模型越獄-拒絕由LLMs單一方向調解
Refusal in LLMs is mediated by a single direction
4.3 LLM MOE策略的演化
LLM MOE的進化之路,從普通簡化 MOE,到 sparse moe,再到 deepseek 使用的 share_expert sparse moe