第一章:人工智能之不同數據類型及其特點梳理
第二章:自然語言處理(NLP):文本向量化從文字到數字的原理
第三章:循環神經網絡RNN:理解 RNN的工作機制與應用場景(附代碼)
第四章:循環神經網絡RNN、LSTM以及GRU 對比(附代碼)
第五章:理解Seq2Seq的工作機制與應用場景中英互譯(附代碼)
第六章:深度學習架構Seq2Seq-添加并理解注意力機制(一)
第七章:深度學習架構Seq2Seq-添加并理解注意力機制(二)
第八章:深度學習模型Transformer初步認識整體架構
第九章:深度學習模型Transformer核心組件—自注意力機制
假設我們有一個想要翻譯的輸入句子:“這只動物沒有穿過街道,因為它太累了。”
這句話中的“它”指的是什么?是指“街道”還是“動物”呢?對于人類來說,這是一個簡單的問題,但對于算法而言則不然。
當模型處理到單詞“它”時,自注意力機制允許模型將“它”與“動物”關聯起來。
當模型處理每個單詞(即輸入序列中的每個位置)時,自注意力機制允許模型查看輸入序列中的其他位置,以尋找有助于為該單詞生成更好編碼的線索。
如果你對RNN(循環神經網絡)有所了解,可以想想維持隱藏狀態是如何讓RNN將其對之前處理過的詞或向量的表示與當前正在處理的詞結合起來的。自注意力就是Transformer用來將其他相關詞的理解融入到當前正在處理的詞中的方法。
一、自注意力機制工作原理
自注意力機制(Self-Attention),也稱為內部注意力機制(Intra-Attention),是Transformer模型的核心組成部分。它允許模型在處理序列數據時,能夠考慮到序列中不同位置之間的關系,從而有效地捕捉長距離依賴。
-
輸入表示:假設我們有一個輸入序列 X = ( x 1 , x 2 , . . . , x n ) X = (x_1, x_2, ..., x_n) X=(x1?,x2?,...,xn?),其中每個 x i x_i xi?都是一個向量(例如詞嵌入)。
-
線性變換:對輸入序列中的每個元素應用三個不同的線性變換(通過學習得到的權重矩陣),生成查詢(Query)、鍵(Key)和值(Value)向量:
- 查詢向量 Q = X W Q Q = XW_Q Q=XWQ?
- 鍵向量 K = X W K K = XW_K K=XWK?
- 值向量 V = X W V V = XW_V V=XWV?
其中, W Q , W K , W V W_Q, W_K, W_V WQ?,WK?,WV? 是模型需要學習的參數矩陣。
-
計算注意力分數:對于序列中的每個位置 i i i,使用 Q K ? QK^\top QK?
點積來計算當前位置與其他所有位置之間的相似度(即注意力分數Score)。
這可以通過以下公式完成:
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
這里, d k d_k dk? 是鍵向量的維度,分母中的 d k \sqrt{d_k} dk?? 用于縮放,避免點積結果過大導致softmax函數飽和。
-
加權求和:根據計算出的注意力分數,為每個位置的值向量分配權重,并進行加權求和,得到輸出序列 Z Z Z。
二、自注意力推導示例
假設輸入序列為兩個詞,維度 d k = 3 d_k=3 dk?=3:
X = [ 1 0 1 0 1 1 ] , W Q = [ 1 0 0 1 1 0 ] , W K = [ 0 1 1 0 0 1 ] , W V = [ 1 1 0 1 1 0 ] X = \begin{bmatrix} 1 & 0 & 1 \\ 0 & 1 & 1 \\ \end{bmatrix}, \quad W^Q = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 1 & 0 \\ \end{bmatrix}, \quad W^K = \begin{bmatrix} 0 & 1 \\ 1 & 0 \\ 0 & 1 \\ \end{bmatrix}, \quad W^V = \begin{bmatrix} 1 & 1 \\ 0 & 1 \\ 1 & 0 \\ \end{bmatrix} X=[10?01?11?],WQ= ?101?010? ?,WK= ?010?101? ?,WV= ?101?110? ?
-
計算 Q、K、V:
Q = X W Q = [ 2 0 1 1 ] , K = X W K = [ 1 2 1 1 ] , V = X W V = [ 2 1 1 1 ] Q = XW^Q = \begin{bmatrix} 2 & 0 \\ 1 & 1 \end{bmatrix}, \quad K = XW^K = \begin{bmatrix} 1 & 2 \\ 1 & 1 \end{bmatrix}, \quad V = XW^V = \begin{bmatrix} 2 & 1 \\ 1 & 1 \end{bmatrix} Q=XWQ=[21?01?],K=XWK=[11?21?],V=XWV=[21?11?] -
計算注意力分數:
Q K ? 3 = 1 3 [ 4 2 2 2 ] \frac{QK^\top}{\sqrt{3}} = \frac{1}{\sqrt{3}} \begin{bmatrix} 4 & 2 \\ 2 & 2 \end{bmatrix} 3?QK??=3?1?[42?22?] -
Softmax 歸一化:
Softmax ( [ 4 / 3 2 / 3 2 / 3 2 / 3 ] ) ≈ [ 0.88 0.12 0.5 0.5 ] \text{Softmax}\left(\begin{bmatrix} 4/\sqrt{3} & 2/\sqrt{3} \\ 2/\sqrt{3} & 2/\sqrt{3} \end{bmatrix}\right) \approx \begin{bmatrix} 0.88 & 0.12 \\ 0.5 & 0.5 \end{bmatrix} Softmax([4/3?2/3??2/3?2/3??])≈[0.880.5?0.120.5?] -
加權求和:
Attention ( Q , K , V ) = [ 0.88 0.12 0.5 0.5 ] @ [ 2 1 1 1 ] = [ 0.88 × 2 + 0.12 × 1 0.88 × 1 + 0.12 × 1 0.5 × 2 + 0.5 × 1 0.5 × 1 + 0.5 × 1 ] = [ 1.88 1.0 1.5 1.0 ] \text{Attention}(Q, K, V) =\begin{bmatrix} 0.88 & 0.12 \\ 0.5 & 0.5 \end{bmatrix} @ \begin{bmatrix} 2 & 1 \\ 1 & 1 \end{bmatrix}= \begin{bmatrix} 0.88 \times 2 + 0.12 \times 1 & 0.88 \times 1 + 0.12 \times 1 \\ 0.5 \times 2 + 0.5 \times 1 & 0.5 \times 1 + 0.5 \times 1 \end{bmatrix} = \begin{bmatrix} 1.88 & 1.0 \\ 1.5 & 1.0 \end{bmatrix} Attention(Q,K,V)=[0.880.5?0.120.5?]@[21?11?]=[0.88×2+0.12×10.5×2+0.5×1?0.88×1+0.12×10.5×1+0.5×1?]=[1.881.5?1.01.0?]
W Q W^Q WQ 和 W K W^K WK和 W V W^V WV,這三個 W W W 怎么得來的,有什么作用,為什么要和 X 分別相乘
三、如何得到 W Q W^Q WQ 、 W K W^K WK 和 W V W^V WV
-
初始化與學習:這些權重矩陣通常是在訓練開始時隨機初始化的,并通過反向傳播算法在訓練過程中不斷調整以最小化損失函數。換句話說,它們是通過訓練過程自動學習得到的,目的是為了優化模型在特定任務上的性能。
-
作用:
- W Q W^Q WQ (Query Weight Matrix):用于將輸入向量 X X X轉換為查詢向量 Q Q Q。查詢向量代表了對于某個位置的信息“查詢”或需求。
- W K W^K WK (Key Weight Matrix):用于將輸入向量 X X X轉換為鍵向量 K K K。鍵向量是用來與查詢向量進行比較,以確定哪些部分的信息是相關的。
- W V W^V WV (Value Weight Matrix):用于將輸入向量 X X X轉換為值向量 V V V。值向量包含了實際的內容信息,這些信息將根據注意力分數被加權組合。
四、 W Q W^Q WQ 、 W K W^K WK 和 W V W^V WV為什么要與 X X X 分別相乘
-
不同視角的理解:通過使用不同的權重矩陣將相同的輸入向量 X X X映射到不同的空間,模型可以從多個角度理解輸入數據。例如,一個單詞在一個句子中可能扮演多種角色(如主語、賓語等),通過不同的變換可以捕捉到這些多樣的信息。
-
增強表達能力:這種機制極大地增強了模型的表達能力。因為即使面對相同的輸入,通過不同的權重矩陣可以產生多樣化的輸出,從而使得模型能夠更靈活地捕捉序列中的復雜模式和依賴關系。
-
實現自我關注機制:在自注意力機制中, Q Q Q和 K K K之間的交互(即點積操作)用于衡量輸入序列中各元素間的相關性或相似度。然后,基于這些相似度得分對 V V V進行加權求和,以生成每個位置的新表示。這樣做的好處是可以讓模型在構建每個位置的表示時考慮到整個序列的信息,而不是僅僅局限于局部鄰域內的信息。
總之, W Q W^Q WQ、 W K W^K WK和 W V W^V WV的存在是為了將輸入向量映射到不同的表示空間,從而使得模型能夠在計算自注意力時從多個維度理解輸入數據。這一過程不僅提高了模型處理序列數據的能力,還使其能夠有效地捕捉長距離依賴關系。
五、Q為什么要和 K 的轉置 K T K^T KT求點積
(Q)與 K T K^T KT(即鍵(K)的轉置)點積這一操作是為了計算注意力分數,也就是衡量輸入序列中各個元素之間的相似度或關聯程度。
-
計算相似度:在自注意力機制中,我們需要一種方法來量化序列中每個位置與其他所有位置之間的相關性或相似度。通過將查詢向量 Q Q Q 與鍵向量 K K K 的轉置 K T K^T KT 求點積,我們可以得到一個矩陣,其中每個元素代表了一個位置的查詢向量與另一個位置的鍵向量之間的點積。這個點積可以看作是一種相似度得分,表示兩個向量方向上的接近程度。
-
維度匹配:假設我們有一個輸入序列長度為 n n n,每個位置對應的向量維度為 d k d_k dk? 。那么, Q Q Q 和 K K K 都是形狀為 [ n , d k ] [n, d_k] [n,dk?] 的矩陣。為了使 Q Q Q 中的每個查詢向量能夠與 K K K 中的每個鍵向量進行比較,我們需要將 K K K 轉置成形狀為 [ d k , n ] [d_k, n] [dk?,n] 的矩陣。這樣,當執行 Q × K T Q \times K^T Q×KT 時,結果就是一個形狀為 [ n , n ] [n, n] [n,n] 的矩陣,其中每個元素 A i j A_{ij} Aij? 表示第 i i i 個位置的查詢向量與第 j j j 個位置的鍵向量之間的相似度得分。
-
生成注意力權重:一旦得到了相似度得分矩陣,接下來會通過softmax函數將其轉換為概率分布,這些概率就是所謂的“注意力權重”。它們決定了在計算最終輸出時,每個位置的值向量 V V V 應該被賦予多少權重。換句話說,它決定了哪些位置的信息對于當前位置最為重要。
-
加權求和得到輸出:最后,使用上述獲得的注意力權重對值向量 V V V 進行加權求和,從而產生新的表示形式,該表示綜合了整個序列的信息,并且更加側重于那些被認為更重要的位置。
綜上所述, Q Q Q 與 K T K^T KT 點積是自注意力機制中用于計算輸入序列中各個元素之間相似度的核心步驟。這一步驟允許模型動態地評估并整合來自序列內不同位置的信息,從而捕捉到復雜的模式和依賴關系。
六、 Q K ? QK^\top QK?為什么要除以 d k \sqrt{d_k} dk??
防止梯度過大或過小
-
梯度消失或爆炸問題:當輸入向量的維度較高時,點積的結果可能會非常大或者非常小。這會導致softmax函數的輸出變得極端(接近0或1),從而引發梯度消失或梯度爆炸的問題。這是因為softmax函數對輸入的尺度非常敏感,特別是在其輸入值較大或較小時。
-
歸一化效果:通過除以 d k \sqrt{d_k} dk??,可以有效地將點積的結果控制在一個合理的范圍內。這樣做有助于保持softmax函數輸入值的穩定性,使其不會因為輸入過大而飽和到極端值,也不會因為輸入過小而導致所有輸出幾乎相同的情況。
實踐中的影響
- 訓練穩定性:適當縮放可以提高訓練過程的穩定性,使得模型更容易收斂。
- 性能提升:通過這種方式,可以改善模型的表現,因為它有助于維持每一層輸入的尺度一致,避免了某些層的激活值過于膨脹或收縮。
示例數據
第一組:未縮放時 - 注意力權重趨向極端分布
假設我們有如下輸入序列,每個詞被表示為一個4維向量,并且這些向量之間的差異較大:
- x 1 = [ 1 , 2 , 3 , 4 ] x_1 = [1, 2, 3, 4] x1?=[1,2,3,4]
- x 2 = [ 5 , 6 , 7 , 8 ] x_2 = [5, 6, 7, 8] x2?=[5,6,7,8]
- x 3 = [ 9 , 10 , 11 , 12 ] x_3 = [9, 10, 11, 12] x3?=[9,10,11,12]
這些向量通過線性變換得到查詢 Q Q Q、鍵 K K K(這里為了簡化,直接使用原始向量作為 Q Q Q和 K K K)。
計算 Q K ? QK^\top QK?:
Q K ? = [ 1 2 3 4 5 6 7 8 9 10 11 12 ] [ 1 5 9 2 6 10 3 7 11 4 8 12 ] = [ 30 70 110 70 174 278 110 278 446 ] QK^\top = \begin{bmatrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \end{bmatrix} \begin{bmatrix} 1 & 5 & 9 \\ 2 & 6 & 10 \\ 3 & 7 & 11 \\ 4 & 8 & 12 \end{bmatrix} = \begin{bmatrix} 30 & 70 & 110 \\ 70 & 174 & 278 \\ 110 & 278 & 446 \end{bmatrix} QK?= ?159?2610?3711?4812? ? ?1234?5678?9101112? ?= ?3070110?70174278?110278446? ?
應用Softmax函數到每一行上,得到注意力權重矩陣:
softmax ( Q K ? ) ≈ [ 0.001 0.018 0.981 0.000 0.002 0.998 0.000 0.000 1.000 ] \text{softmax}(QK^\top) \approx \begin{bmatrix} 0.001 & 0.018 & 0.981 \\ 0.000 & 0.002 & 0.998 \\ 0.000 & 0.000 & 1.000 \end{bmatrix} softmax(QK?)≈ ?0.0010.0000.000?0.0180.0020.000?0.9810.9981.000? ?
可以看到,在這種情況下,未經縮放的點積結果導致了非常極端的注意力權重分布。特別是對于第三個位置,幾乎所有的注意力都集中在自身上,而忽略了其他位置的信息。
第二組:縮放后 - 權重分布更平緩
現在考慮相同的輸入序列,但在計算 Q K ? QK^\top QK?后除以 d k \sqrt{d_k} dk??,其中 d k = 4 d_k=4 dk?=4,因此縮放因子是 1 2 \frac{1}{2} 21?。
重新計算 Q K ? / d k QK^\top/\sqrt{d_k} QK?/dk??:
Q K ? d k = 1 2 × [ 30 70 110 70 174 278 110 278 446 ] = [ 15 35 55 35 87 139 55 139 223 ] \frac{QK^\top}{\sqrt{d_k}} = \frac{1}{2} \times \begin{bmatrix} 30 & 70 & 110 \\ 70 & 174 & 278 \\ 110 & 278 & 446 \end{bmatrix} = \begin{bmatrix} 15 & 35 & 55 \\ 35 & 87 & 139 \\ 55 & 139 & 223 \end{bmatrix} dk??QK??=21?× ?3070110?70174278?110278446? ?= ?153555?3587139?55139223? ?
接著應用Softmax函數到每一行上,得到調整后的注意力權重矩陣:
softmax ( Q K ? d k ) ≈ [ 0.011 0.269 0.720 0.002 0.092 0.906 0.000 0.024 0.976 ] \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right) \approx \begin{bmatrix} 0.011 & 0.269 & 0.720 \\ 0.002 & 0.092 & 0.906 \\ 0.000 & 0.024 & 0.976 \end{bmatrix} softmax(dk??QK??)≈ ?0.0110.0020.000?0.2690.0920.024?0.7200.9060.976? ?
對比與解釋
-
未縮放的情況:在第一組的例子中,由于點積結果非常大,導致Softmax輸出的概率分布極其不均衡,某些位置幾乎完全占據了注意力權重,這不利于模型學習序列中的復雜依賴關系。
-
縮放的情況:第二組的數據展示了當應用縮放因子后,Softmax函數產生的概率分布更加平滑。雖然第三個位置仍然獲得了較高的注意力權重,但相比于未縮放情況下的極端分布,這里的權重分布明顯更加合理和平緩,允許模型更好地捕捉不同位置之間的關系。
七、不縮放為什么會導致梯度消失?
-
Softmax函數的導數:
Softmax函數的導數依賴于其自身的輸出。具體來說,如果某個位置的Softmax輸出接近1,則該位置對應的梯度將會很小,因為Softmax函數在其輸出接近1的地方幾乎是平坦的。相反,對于那些輸出接近0的位置,其梯度也會非常小,因為這些位置對最終輸出的影響微乎其微。 -
梯度傳播:
在反向傳播過程中,梯度通過網絡層逐層傳遞。如果某一層的激活值(在這里是Softmax的輸出)導致梯度變得非常小,那么這一小部分梯度將被進一步傳播到前面的層,導致前層接收到的用于參數更新的信號極其微弱。這種情況稱為“梯度消失”。 -
極端分布的影響:
當注意力權重分布極為不均衡(例如,一個位置幾乎占據了所有注意力,而其他位置的注意力權重接近0),這會導致大部分路徑上的梯度變得極小。由于梯度是參數更新的關鍵依據,過小的梯度意味著模型難以有效調整其權重以適應訓練數據,從而可能導致訓練停滯或者學習速度顯著減慢。
上面的例子,未縮放的情況
softmax ( Q K ? ) ≈ [ 0.001 0.018 0.981 0.000 0.002 0.998 0.000 0.000 1.000 ] \text{softmax}(QK^\top) \approx \begin{bmatrix} 0.001 & 0.018 & 0.981 \\ 0.000 & 0.002 & 0.998 \\ 0.000 & 0.000 & 1.000 \end{bmatrix} softmax(QK?)≈ ?0.0010.0000.000?0.0180.0020.000?0.9810.9981.000? ?
在這種情況下,我們可以觀察到第三行的注意力權重幾乎完全集中在最后一個位置(即權重為1.000)。這意味著對于第三個位置,它幾乎不會考慮來自其他位置的信息,這不僅限制了模型捕捉長距離依賴的能力,而且由于Softmax輸出接近1,其梯度也將非常小。具體來說:
- 對于第三行,Softmax輸出為[0.000, 0.000, 1.000],這意味著在反向傳播過程中,對于第一和第二位置,由于它們的注意力權重接近0,所以從損失函數回傳到這兩個位置的梯度也非常小。
- 同樣地,對于那些獲得較高注意力權重的位置(如第三個位置),盡管它們會接收到來自后續層的一些梯度信息,但由于Softmax在其輸出接近1的區域幾乎是平坦的,因此這部分梯度也非常有限。
這種現象在整個網絡中傳播時,會導致前面的層接收到的梯度信號極其微弱,進而導致梯度消失問題,使得模型難以有效地更新其參數。
八、為什么是除以 d k \sqrt{d_k} dk??,不是其他其他變量或者數字
在Transformer模型中,將查詢(Q)和鍵(K)的點積結果除以 d k \sqrt{d_k} dk??的主要原因是為了控制點積的方差,防止因維度 d k d_k dk?增大導致Softmax函數輸入值過大而引發的梯度消失問題。
1. 數學推導:點積的方差分析
假設查詢向量 Q Q Q和鍵向量 K K K的每個元素是獨立同分布的隨機變量,均值為0,方差為1:
E [ Q i ] = E [ K j ] = 0 , Var ( Q i ) = Var ( K j ) = 1. \mathbb{E}[Q_i] = \mathbb{E}[K_j] = 0, \quad \text{Var}(Q_i) = \text{Var}(K_j) = 1. E[Qi?]=E[Kj?]=0,Var(Qi?)=Var(Kj?)=1.
則點積 Q ? K = ∑ i = 1 d k Q i K i Q \cdot K = \sum_{i=1}^{d_k} Q_i K_i Q?K=∑i=1dk??Qi?Ki?的方差為:
Var ( Q ? K ) = ∑ i = 1 d k Var ( Q i K i ) ( 獨立項方差相加 ) = d k ? E [ Q i 2 K i 2 ] ( 因? E [ Q i ] = E [ K i ] = 0 ) = d k ? Var ( Q i ) Var ( K i ) ( 獨立性 ) = d k ? 1 ? 1 = d k . \begin{aligned} \text{Var}(Q \cdot K) &= \sum_{i=1}^{d_k} \text{Var}(Q_i K_i) \quad (\text{獨立項方差相加}) \\ &= d_k \cdot \mathbb{E}[Q_i^2 K_i^2] \quad (\text{因}\ \mathbb{E}[Q_i] = \mathbb{E}[K_i] = 0) \\ &= d_k \cdot \text{Var}(Q_i) \text{Var}(K_i) \quad (\text{獨立性}) \\ &= d_k \cdot 1 \cdot 1 = d_k. \end{aligned} Var(Q?K)?=i=1∑dk??Var(Qi?Ki?)(獨立項方差相加)=dk??E[Qi2?Ki2?](因?E[Qi?]=E[Ki?]=0)=dk??Var(Qi?)Var(Ki?)(獨立性)=dk??1?1=dk?.?
結論:點積的方差與維度 d k d_k dk?成正比,即維度越大,點積值的波動范圍越大。
2. Softmax函數的敏感性
Softmax函數對輸入值的絕對大小非常敏感。當輸入值 z i z_i zi?的絕對值較大時,輸出會趨向于極端值(如0或1),導致梯度消失:
Softmax ( z i ) = e z i ∑ j e z j , ? Softmax ( z i ) ? z j = Softmax ( z i ) ( δ i j ? Softmax ( z j ) ) . \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}}, \quad \frac{\partial \text{Softmax}(z_i)}{\partial z_j} = \text{Softmax}(z_i)(\delta_{ij} - \text{Softmax}(z_j)). Softmax(zi?)=∑j?ezj?ezi??,?zj??Softmax(zi?)?=Softmax(zi?)(δij??Softmax(zj?)).
若某個 z i z_i zi?遠大于其他值, Softmax ( z i ) ≈ 1 \text{Softmax}(z_i) \approx 1 Softmax(zi?)≈1,梯度趨近于零,阻礙參數更新。
3. 縮放因子的選擇
為了穩定點積的方差,需將點積結果縮放,使其方差與 d k d_k dk?無關。由于點積的方差為 d k d_k dk?,標準差為 d k \sqrt{d_k} dk??,因此選擇除以 d k \sqrt{d_k} dk??:
Scaled?Dot-Product = Q K ? d k . \text{Scaled Dot-Product} = \frac{QK^\top}{\sqrt{d_k}}. Scaled?Dot-Product=dk??QK??.
效果:
- 方差歸一化:縮放后的方差為 d k ( d k ) 2 = 1 \frac{d_k}{(\sqrt{d_k})^2} = 1 (dk??)2dk??=1,與維度無關。
- 數值穩定:無論 d k d_k dk?多大,點積值被限制在合理范圍內,避免Softmax輸入過大。
- 梯度保留:Softmax輸出的分布更平緩,保留有效的梯度流動。
4. 為什么不是其他縮放方式?
-
除以 d k d_k dk?:
- 方差變為 d k d k 2 = 1 d k \frac{d_k}{d_k^2} = \frac{1}{d_k} dk2?dk??=dk?1?,隨維度增加急劇減小,導致數值過小。
- 引發梯度不穩定,尤其在高維度下。
-
使用常數(如2):
- 無法適應不同維度的模型,導致低維時縮放不足,高維時縮放過度。
-
其他函數(如 log ? d k \log d_k logdk?):
- 缺乏數學依據,增加復雜性且無實際收益。
選擇 d k \sqrt{d_k} dk??的優勢:
- 直接對應于點積的標準差,數學上自然。
- 保持方差恒為1,適應任意維度。
- 實現簡單,計算高效。
5. 實際訓練驗證
- 未縮放時:當 d k = 64 d_k=64 dk?=64,點積值可能達到數十或數百,Softmax輸出接近one-hot,梯度消失。
- 縮放后:點積值被限制在 [ ? 8 , + 8 ] [-8, +8] [?8,+8](假設原始值在 [ ? 64 , + 64 ] [-64, +64] [?64,+64]),Softmax輸出保留合理分布(如 [ 0.7 , 0.2 , 0.1 ] [0.7, 0.2, 0.1] [0.7,0.2,0.1]),梯度有效傳播。
操作 | 數學意義 | 實際影響 |
---|---|---|
計算 Q K ? QK^\top QK? | 衡量相似度 | 生成原始注意力分數 |
除以 d k \sqrt{d_k} dk?? | 標準差歸一化 | 穩定數值范圍,防止梯度消失 |
應用Softmax | 概率歸一化 | 生成注意力權重 |
關鍵結論:
除以 d k \sqrt{d_k} dk??是唯一能同時滿足以下條件的縮放方式:
- 方差穩定:控制點積方差為1,與維度無關。
- 計算高效:無需復雜運算,直接縮放。
- 訓練友好:確保Softmax輸入在合理范圍,保留梯度流動性。
九、總結
自注意力機制讓Transformer能夠靈活地處理序列數據中的每一個元素,并且可以同時考慮整個序列的信息,這對于理解句子結構、捕捉長距離依賴關系等非常有幫助。此外,由于其并行化特性,相較于RNN/LSTM等序列模型,Transformer在處理長序列時更加高效。