【大模型LLM面試合集】大語言模型架構_Transformer架構細節

Transformer架構細節

在這里插入圖片描述

在這里插入圖片描述

1.Transformer各個模塊的作用

(1)Encoder模塊

  • 經典的Transformer架構中的Encoder模塊包含6個Encoder Block.
  • 每個Encoder Block包含兩個?模塊, 分別是多頭?注意?層, 和前饋全連接層.
    • 多頭?注意?層采?的是?種Scaled Dot-Product Attention的計算?式, 實驗結果表 明, Multi-head可以在更細致的層?上提取不同head的特征, ?單?head提取特征的 效果更佳.
    • 前饋全連接層是由兩個全連接層組成, 線性變換中間增添?個Relu激活函數, 具體的 維度采?4倍關系, 即多頭?注意?的d_model=512, 則層內的變換維度d_ff=2048.

(2)Decoder模塊

  • 經典的Transformer架構中的Decoder模塊包含6個Decoder Block.
  • 每個Decoder Block包含3個?模塊, 分別是多頭?注意?層, Encoder-Decoder Attention 層, 和前饋全連接層.
    • 多頭?注意?層采?和Encoder模塊?樣的Scaled Dot-Product Attention的計算? 式, 最?的 區別在于需要添加look-ahead-mask, 即遮掩"未來的信息".
    • Encoder-Decoder Attention層和上?層多頭?注意?層最主要的區別在于Q != K = V, 矩陣Q來源于上?層Decoder Block的輸出, 同時K, V來源于Encoder端的輸出.
    • 前饋全連接層和Encoder中完全?樣.

(3)Add & Norm模塊

  • Add & Norm模塊接在每?個Encoder Block和Decoder Block中的每?個?層的后?.
  • 對于每?個Encoder Block, ??的兩個?層后?都有Add & Norm.
  • 對于每?個Decoder Block, ??的三個?層后?都有Add & Norm.
  • Add表示殘差連接, 作?是為了將信息?損耗的傳遞的更深, 來增強模型的擬合能?.
  • Norm表示LayerNorm, 層級別的數值標準化操作, 作?是防?參數過?過?導致的學習過程異常 , 模型收斂特別慢的問題.

(4)位置編碼器Positional Encoding

  • Transformer中采?三?函數來計算位置編碼.
  • 因為三?函數是周期性函數, 不受序列?度的限制, ?且這種計算?式可以對序列中不同位置的編碼的重要程度同等看待

2.Decoder端訓練和預測的輸入

  1. 在Transformer結構中的Decoder模塊的輸?, 區分于不同的Block, 最底層的Block輸?有其特殊的地?。第?層到第六層的輸??致, 都是上?層的輸出和Encoder的輸出。
  2. 最底層的Block在訓練階段, 每?個time step的輸?是上?個time step的輸?加上真實標 簽序列向后移?位. 具體來看, 就是每?個time step的輸?序列會越來越?, 不斷的將之前的 輸?融合進來.
    假設現在的真實標簽序列等于"How are you?", 
    當time step=1時, 輸?張量為?個特殊的token, ?如"SOS"; 
    當time step=2時, 輸?張量為"SOS How"; 
    當time step=3時, 輸?張量為"SOS How are";
    以此類推...
    
  3. 最底層的Block在訓練階段, 真實的代碼實現中, 采?的是MASK機制來模擬輸?序列不斷添 加的過程.
  4. 最底層的Block在預測階段, 每?個time step的輸?是從time step=0開始, ?直到上?個 time step的預測值的累積拼接張量. 具體來看, 也是隨著每?個time step的輸?序列會越來越長. 相?于訓練階段最?的不同是這?不斷拼接進來的token是每?個time step的預測值, ?不是訓練階段每?個time step取得的groud truth值
    當time step=1時, 輸?的input_tensor="SOS", 預測出來的輸出值是output_tensor="What";
    當time step=2時, 輸?的input_tensor="SOS What", 預測出來的輸出值是output_tensor="is";
    當time step=3時, 輸?的input_tensor="SOS What is", 預測出來的輸出值是output_tensor="the";
    當time step=4時, 輸?的input_tensor="SOS What is the", 預測出來的輸出值是output_tensor="matter";
    當time step=5時, 輸?的input_tensor="SOS What is the matter", 預測出來的輸出值是output_tensor="?";
    當time step=6時, 輸?的input_tensor="SOS What is the matter ?", 預測出來的輸出值是output_tensor="EOS", 代表句?的結束符, 說明解碼結束, 預測結束.

3.Self-attention

Transformer中?直強調的self-attention是什么? 為什么能 發揮如此?的作?? 計算的時候如果不使?三元組(Q, K, V), ? 僅僅使?(Q, V)或者(K, V)或者(V)?不??

(1)self-attention的機制和原理

self-attention是?種通過?身和?身進?關聯的attention機制, 從?得到更好的 representation來表達?身.

self-attention是attention機制的?種特殊情況: 在self-attention中, Q=K=V, 序列中的每個單詞(token)都和該序列中的其他所有單詞 (token)進?attention規則的計算.

attention機制計算的特點在于, 可以直接跨越?句話中不同距離的token, 可以遠距離的學習到序列的知識依賴和語序結構.

在這里插入圖片描述

  • 從上圖中可以看到, self-attention可以遠距離的捕捉到語義層?的特征(it的指代對象是 animal).
  • 應?傳統的RNN, LSTM, 在獲取?距離語義特征和結構特征的時候, 需要按照序列順序依次 計算, 距離越遠的聯系信息的損耗越?, 有效提取和捕獲的可能性越?.
  • 但是應?self-attention時, 計算過程中會直接將句?中任意兩個token的聯系通過?個計算 步驟直接聯系起來,

(2)關于self-attention為什么要使?(Q, K, V)三元組?不是其他形式

?先?條就是從分析的?度看, 查詢Query是?條獨?的序列信息, 通過關鍵詞Key的提示作?, 得到最終語義的真實值Value表達, 數學意義更充分, 完備.

這?不使用(K, V)或者(V)沒有什么必須的理由, 也沒有相關的論?來嚴格闡述?較試驗的結果差異, 所以可以作為開放性問題未來去探索, 只要明確在經典self-attention實現中?的是三元組就好

4.Self-attention歸一化和放縮

(1)self-attention中的歸?化概述

訓練上的意義:隨著詞嵌?維度d_k的增?, q * k 點積后的結果也會增?, 在訓練時會將 softmax函數推入梯度?常?的區域, 可能出現梯度消失的現象, 造成模型收斂困難.

數學上的意義: 假設q和k的統計變量是滿?標準正態分布的獨?隨機變量, 意味著q和k滿?均 值為0, ?差為1。** 那么q和k的點積結果就是均值為0, ?差為** d k d_k dk?, 為了抵消這種?差被放? d k d_k dk?** 倍的影響, 在計算中主動將點積縮放**? 1 ( d k ) \frac{1}{\sqrt(d_k)} ( ?dk?)1?, 這樣點積后的結果依然滿?均值為0, ?差為 1。

(2)softmax的梯度變化

這?我們分3個步驟來解釋softmax的梯度問題:

第?步: softmax函數的輸?分布是如何影響輸出的

對于?個輸?向量x, softmax函數將其做了?個歸?化的映射, ?先通過?然底數e將輸?元素之間的差距先"拉?", 然后再歸?化為?個新的分布。 在這個過程中假設某個輸?x 中最?的元素下標是k, 如果輸?的數量級變?(就是x中的每個分量絕對值都很?), 那么在數學上會造成y_k的值?常接近1。

具體??個例?來演示, 假設輸?的向量 x = [ a , a , 2 a ] x = [a, a, 2a] x=[a,a,2a], 那么隨便給?個不同數量級的值來看看對y3產?的影響

a = 1時,   y3 = 0.5761168847658291
a = 10時,  y3 = 0.9999092083843412
a = 100時, y3 = 1.0

采??段實例代碼將a在不同取值下, 對應的y3全部畫出來, 以曲線的形式展示:

from math import exp
from matplotlib import pyplot as plt
import numpy as np
f = lambda x: exp(x * 2) / (exp(x) + exp(x) + exp(x * 2))
x = np.linspace(0, 100, 100)
y_3 = [f(x_i) for x_i in x]
plt.plot(x, y_3)
plt.show()

在這里插入圖片描述

從上圖可以很清楚的看到輸?元素的數量級對softmax最終的分布影響?常之?。

結論在輸?元素的數量級較?時, softmax函數?乎將全部的概率分布都分配給了最?值分量所對應的標簽

第?步: softmax函數在反向傳播的過程中是如何梯度求導的

首先,定義神經網絡的輸入和輸出

設 X = [ x 1 , x 2 , . . . , x n ] , Y = s o f t m a x ( X ) = [ y 1 , y 2 , . . . , y 3 ] 則? y i = e x i ∑ j = 1 n e x j , 顯然? ∑ j = 1 n e x j = 1 設X=[x_1,x_2,..., x_n], Y=softmax(X)=[y_1, y_2,..., y_3] \\ 則~y_i=\frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}},~顯然~ \sum_{j=1}^{n} e^{x_j}=1 X=[x1?,x2?,...,xn?],Y=softmax(X)=[y1?,y2?,...,y3?]?yi?=j=1n?exj?exi??,?顯然?j=1n?exj?=1

反向傳播就是輸出端的損失函數對輸?端求偏導的過程, 這?要分兩種情況,

**(1)當 ** i = j i=j i=j時:

? y i ? x j = ? y i ? x i = ? ? x i ( e x i ∑ k e x k ) = ( e x i ) ′ ( ∑ k e x k ) ? e x i ( ∑ k e x k ) ′ ( ∑ k e x k ) 2 = e x i ? ( ∑ k e x k ) ? e x i ? e x i ( ∑ k e x k ) 2 = e x i ? ( ∑ k e x k ) ( ∑ k e x k ) 2 ? e x i ? e x i ( ∑ k e x k ) 2 = e x i ∑ k e x k ? e x i ∑ k e x k ? e x i ∑ k e x k = y i ? y i ? y i = y i ( 1 ? y i ) \begin{aligned} \frac{\partial y_{i}}{\partial x_{j}}& =\frac{\partial y_i}{\partial x_i} \\ &=\frac{\partial}{\partial x_i}(\frac{e^{x_i}}{\sum_k e^{x_k}}) \\ &=\frac{(e^{x_i})'(\sum_k e^{x_k})-e^{x_i}(\sum_k e^{x_k})'}{(\sum_k e^{x_k})^2} \\ &=\frac{e^{x_i}\cdot(\sum_ke^{x_k})-e^{x_i}\cdot e^{x_i}}{(\sum_ke^{x_k})^2} \\ &=\frac{e^{x_i}\cdot(\sum_k e^{x_k})}{(\sum_k e^{x_k})^2}-\frac{e^{x_i}\cdot e^{x_i}}{(\sum_k e^{x_k})^2} \\ &=\frac{e^{x_i}}{\sum_k e^{x_k}}-\frac{e^{x_i}}{\sum_k e^{x_k}}\cdot\frac{e^{x_i}}{\sum_k e^{x_k}} \\ &=y_i-y_i\cdot y_i \\ &=y_i(1-y_i) \end{aligned} ?xj??yi???=?xi??yi??=?xi???(k?exk?exi??)=(k?exk?)2(exi?)(k?exk?)?exi?(k?exk?)?=(k?exk?)2exi??(k?exk?)?exi??exi??=(k?exk?)2exi??(k?exk?)??(k?exk?)2exi??exi??=k?exk?exi???k?exk?exi???k?exk?exi??=yi??yi??yi?=yi?(1?yi?)?

(2)當$ i ≠ j$時:

? y i ? x j = ? ? x j ( e x i ∑ k e x k ) = ( e x i ) ′ ( ∑ k e x k ) ? e x i ( ∑ k e x k ) ′ ( ∑ k e x k ) 2 = 0 ? ( ∑ k e x k ) ? e x i ? e x j ( ∑ k e x k ) 2 = ? e x i ? e x j ( ∑ k e x k ) 2 = ? e x i ∑ k e x k ? e x i ∑ k e x k = ? y i ? y i \begin{aligned} \frac{\partial y_{i}}{\partial x_{j}} & =\frac{\partial}{\partial x_{j}}\left(\frac{e^{x_{i}}}{\sum_{k} e^{x_{k}}}\right) \\ & =\frac{\left(e^{x_{i}}\right)^{\prime}\left(\sum_{k} e^{x_{k}}\right)-e^{x_{i}}\left(\sum_{k} e^{x_{k}}\right)^{\prime}}{\left(\sum_{k} e^{x_{k}}\right)^{2}} \\ & =\frac{0 \cdot\left(\sum_{k} e^{x_{k}}\right)-e^{x_{i}} \cdot e^{x_{j}}}{\left(\sum_{k} e^{x_{k}}\right)^{2}} \\ & =-\frac{e^{x_{i}} \cdot e^{x_{j}}}{\left(\sum_{k} e^{x_{k}}\right)^{2}} \\ & =-\frac{e^{x_{i}}}{\sum_{k} e^{x_{k}}} \cdot \frac{e^{x_{i}}}{\sum_{k} e^{x_{k}}} \\ & =-y_{i} \cdot y_{i} \end{aligned} ?xj??yi???=?xj???(k?exk?exi??)=(k?exk?)2(exi?)(k?exk?)?exi?(k?exk?)?=(k?exk?)20?(k?exk?)?exi??exj??=?(k?exk?)2exi??exj??=?k?exk?exi???k?exk?exi??=?yi??yi??

經過對兩種情況分別的求導計算, 可以得出最終的結論如下:

綜上所述: ? y i ? x j = { y i ? y i ? y i , i=j 0 ? y i ? y i , i ≠ j 所以: ? Y ? X = d i a g ( Y ) ? Y T ? Y (當 Y 的 s h a p e 為 ( 1 , n ) 時) \begin{aligned} & 綜上所述:\frac{\partial y_i}{\partial x_j}=\begin{cases}y_i-y_i\cdot y_i,&\text{i=j}\\ \\ 0-y_i\cdot y_i,&\text{i}\neq\text{j}\end{cases} \\ & 所以:\frac{\partial Y}{\partial X}=diag(Y)-Y^T\cdot Y(當Y的shape為(1,n)時) \end{aligned} ?綜上所述:?xj??yi??=? ? ??yi??yi??yi?,0?yi??yi?,?i=ji=j?所以:?X?Y?=diag(Y)?YT?Y(當Yshape(1,n)時)?

第三步: softmax函數出現梯度消失現象的原因

根據第二步中softmax函數的求導結果, 可以將最終的結果以矩陣形式展開如下:

? g ( X ) ? X ≈ [ y ^ 1 0 ? 0 0 y ^ 2 ? 0 ? ? ? ? 0 0 ? y ^ d ] ? [ y ^ 1 2 y ^ 1 y ^ 2 ? y ^ 1 y ^ d y ^ 2 y ^ 1 y ^ 2 2 ? y ^ 2 y ^ d ? ? ? ? y ^ d y ^ 1 y ^ d y ^ 2 ? y ^ d 2 ] \frac{\partial g(X)}{\partial X} \approx\left[\begin{array}{cccc} \hat{y}_{1} & 0 & \cdots & 0 \\ 0 & \hat{y}_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \hat{y}_{d} \end{array}\right]-\left[\begin{array}{cccc} \hat{y}_{1}^{2} & \hat{y}_{1} \hat{y}_{2} & \cdots & \hat{y}_{1} \hat{y}_{d} \\ \hat{y}_{2} \hat{y}_{1} & \hat{y}_{2}^{2} & \cdots & \hat{y}_{2} \hat{y}_{d} \\ \vdots & \vdots & \ddots & \vdots \\ \hat{y}_{d} \hat{y}_{1} & \hat{y}_{d} \hat{y}_{2} & \cdots & \hat{y}_{d}^{2} \end{array}\right] ?X?g(X)? ?y^?1?0?0?0y^?2??0??????00?y^?d?? ?? ?y^?12?y^?2?y^?1??y^?d?y^?1??y^?1?y^?2?y^?22??y^?d?y^?2???????y^?1?y^?d?y^?2?y^?d??y^?d2?? ?

根據第一步中的討論結果, 當輸入x的分量值較大時, softmax函數會將大部分概率分配給最大的元素, 假設最大元素是x1, 那么softmax的輸出分布將產生一個接近one-hot的結果張量y_ = [1, 0, 0,…, 0], 此時結果矩陣變為:

? g ( X ) ? X ≈ [ 1 0 ? 0 0 0 ? 0 ? ? ? ? 0 0 ? 0 ] ? [ 1 0 ? 0 0 0 ? 0 ? ? ? ? 0 0 ? 0 ] = 0 \frac{\partial g(X)}{\partial X} \approx\left[\begin{array}{cccc}1 & 0 & \cdots & 0 \\ 0 & 0 & \cdots & 0 \\ & & & \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 0\end{array}\right]-\left[\begin{array}{cccc}1 & 0 & \cdots & 0 \\ 0 & 0 & \cdots & 0 \\ & & & \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 0\end{array}\right]=0 ?X?g(X)? ?10?0?00?0??????00?0? ?? ?10?0?00?0??????00?0? ?=0

結論:綜上可以得出,** 所有的梯度都消失為0(接近于0), 參數幾乎無法更新, 模型收斂困難**.

(3)維度與點積大小的關系

針對為什么維度會影響點積的大小, 原始論文中有這樣的一點解釋如下:

To illustrate why the dot products get large, assume that the components of q and k are independent random variables with mean 0 and variance 1. Then their doct product,q*k = (q1k1+q2k2+......+q(d_k)k(d_k)), has mean 0 and variance d_k.

分兩步對其進行一個推導, 首先就是假設向量q和k的各個分量是相互獨立的隨機變量, X = q i X = q_i X=qi?, Y = k i Y = k_i Y=ki?, X和Y各自有d_k個分量, 也就是向量的維度等于d_k, 有 E ( X ) = E ( Y ) = 0 E(X) = E(Y) = 0 E(X)=E(Y)=0, 以及 D ( X ) = D ( Y ) = 1 D(X) = D(Y) = 1 D(X)=D(Y)=1.

可以得到 E ( X Y ) = E ( X ) E ( Y ) = 0 ? 0 = 0 E(XY) = E(X)E(Y) = 0 * 0 = 0 E(XY)=E(X)E(Y)=0?0=0

同理, 對于 D ( X Y ) D(XY) D(XY)推導如下:

D ( X Y ) = E ( X 2 ? Y 2 ) ? [ E ( X Y ) ] 2 = E ( X 2 ) E ( Y 2 ) ? [ E ( X ) E ( Y ) ] 2 = E ( X 2 ? 0 2 ) E ( Y 2 ? 0 2 ) ? [ E ( X ) E ( Y ) ] 2 = E ( X 2 ? [ E ( X ) ] 2 ) E ( Y 2 ? [ E ( Y ) ] 2 ) ? [ E ( X ) E ( Y ) ] 2 = D ( X ) D ( Y ) ? [ E ( X ) E ( Y ) ] 2 = 1 × 1 ? ( 0 × 0 ) 2 = 1 \begin{aligned} D(XY)& =E(X^2\cdot Y^2)-[E(XY)]^2 \\ &=E(X^2)E(Y^2)-[E(X)E(Y)]^2 \\ &=E(X^2-0^2)E(Y^2-0^2)-[E(X)E(Y)]^2 \\ &=E(X^2-[E(X)]^2)E(Y^2-[E(Y)]^2)-[E(X)E(Y)]^2 \\ &=D(X)D(Y)-[E(X)E(Y)]^2 \\ &=1\times1-\left(0\times0\right)^2 \\ &=1 \end{aligned} D(XY)?=E(X2?Y2)?[E(XY)]2=E(X2)E(Y2)?[E(X)E(Y)]2=E(X2?02)E(Y2?02)?[E(X)E(Y)]2=E(X2?[E(X)]2)E(Y2?[E(Y)]2)?[E(X)E(Y)]2=D(X)D(Y)?[E(X)E(Y)]2=1×1?(0×0)2=1?

根據期望和方差的性質, 對于互相獨立的變量滿足下式:

E ( ∑ i Z i ) = ∑ i E ( Z i ) , D ( ∑ i Z i ) = ∑ i D ( Z i ) \begin{gathered} E(\sum_{i}Z_{i})=\sum_{i}E(Z_{i}), \\ D(\sum_{i}Z_{i})=\sum_{i}D(Z_{i}) \end{gathered} E(i?Zi?)=i?E(Zi?),D(i?Zi?)=i?D(Zi?)?

根據上面的公式, 可以很輕松的得出q*k的均值為 E ( q k ) = 0 E(qk) = 0 E(qk)=0, D ( q k ) = d k D(qk) = d_k D(qk)=dk?。所以方差越大, 對應的qk的點積就越大, 這樣softmax的輸出分布就會更偏向最大值所在的分量。一個技巧就是將點積除以 d k \sqrt{d_k} dk? ? 將方差在數學上重新"拉回1", 如下所示

D ( q ? k d k ) = d k ( d k ) 2 = 1 D(\frac{q\cdot k}{\sqrt{d_k}})=\frac{d_k}{(\sqrt{d_k})^2}=1 D(dk? ?q?k?)=(dk? ?)2dk??=1

最終的結論:通過數學上的技巧將方差控制在1, 也就有效的控制了點積結果的發散, 也就控制了對應的梯度消失的問題!

5.Multi-head Attention

(1)采?Multi-head Attention的原因

  1. 原始論?中提到進?Multi-head Attention的原因是將模型分為多個頭, 可以形成多個子空間間, 讓模型去關注不同方面的信息, 最后再將各個??的信息綜合起來得到更好的效果.
  2. 多個頭進?attention計算最后再綜合起來, 類似于CNN中采?多個卷積核的作?, 不同的卷 積核提取不同的特征, 關注不同的部分, 最后再進行融合.
  3. 直觀上講, 多頭注意力有助于神經網絡捕捉到更豐富的特征信息.
(2)Multi-head Attention的計算?式
  1. Multi-head Attention和單?head的Attention唯?的區別就在于,** 其對特征張量的最后?個維度進行了分割, ?般是對詞嵌入的embedding_dim=512進?切割成head=8, **這樣每?個head的嵌?維度就是512/8=64, 后續的Attention計算公式完全?致, 只不過是在64這個維度上進??系列的矩陣運算?已.
  2. 在head=8個頭上分別進?注意?規則的運算后, 簡單采用拼接concat的?式對結果張量進 ?融合就得到了Multi-head Attention的計算結果.

6.Transformer和RNN

(1)Transformer的并行計算

對于Transformer?傳統序列模型RNN/LSTM具備優勢的第??原因就是強?的并?計算能力.

對于RNN來說, 任意時刻t的輸?是時刻t的輸?x(t)和上?時刻的隱藏層輸出h(t-1), 經過運算后得到當前時刻隱藏層的輸出h(t), 這個h(t)也即將作為下?時刻t+1的輸?的?部分. 這個計算過程是RNN的本質特征, RNN的歷史信息是需要通過這個時間步?步?步向后傳遞的. 而這就意味著RNN序列后?的信息只能等到前?的計算結束后, 將歷史信息通過hidden state傳遞給后?才能開始計算, 形成鏈式的序列依賴關系, 無法實現并行.

對于Transformer結構來說, 在self-attention層, ?論序列的?度是多少, 都可以?次性計算所有單詞之間的注意?關系, 這個attention的計算是同步的, 可以實現并?.

(2)Transformer的特征抽取能力

對于Transformer?傳統序列模型RNN/LSTM具備優勢的第??原因就是強?的特征抽取能力 。

Transformer因為采?了Multi-head Attention結構和計算機制, 擁有?RNN/LSTM更強?的特征抽取能?, 這?并不僅僅由理論分析得來, 而是?量的試驗數據和對?結果, 清楚的展示了Transformer的特征抽取能?遠遠勝于RNN/LSTM.

注意: 不是越先進的模型就越無敵, 在很多具體的應?中RNN/LSTM依然?有?武之地, 要具體問題具體分析

7.Transformer代替seq2seq?

(1)seq2seq的兩大缺陷

  1. seq2seq架構的第??缺陷是將Encoder端的所有信息壓縮成?個固定?度的語義向量中, ?這個固定的向量來代表編碼器端的全部信息. 這樣既會造成信息的損耗, 也?法讓Decoder 端在解碼的時候去?注意?聚焦哪些是更重要的信息.
  2. seq2seq架構的第二大缺陷是無法并行, 本質上和RNN/LSTM無法并行的原因?樣.

(2)Transformer的改進

Transformer架構同時解決了seq2seq的兩?缺陷, 既可以并?計算, ?應?Multi-head Attention機制來解決Encoder固定編碼的問題, 讓Decoder在解碼的每?步可以通過注意?去 關注編碼器輸出中最重要的那些部分.

8.Transformer并行化

(1)Encoder并行化

在這里插入圖片描述

  1. 上圖最底層綠?的部分, 整個序列所有的token可以并?的進?Embedding操作, 這?層的處理是沒有依賴關系的.
  2. 上圖第?層???的部分, 也就是Transformer中最重要的self-attention部分, 這?對于任意?個單詞?如x1, 要計算x1對于其他所有token的注意?分布, 得到z1. 這個過程是具有依賴性的, 必須等到序列中所有的單詞完成Embedding才可以進?。因此這?步是不能并?處理的。 但是從另?個?度看, 我們真實計算注意?分布的時候, 采?的都是矩陣運算, 也就是可以?次性的計算出所有token的注意?張量, 從這個?度看也算是實現了并行, 只是矩陣運算的"并行"和詞嵌?的"并行"概念上不同?已.
  3. 上圖第三層藍?的部分, 也就是前饋全連接層, 對于不同的向量z之間也是沒有依賴關系的, 所以這?層是可以實現并行化處理的. 也就是所有的向量z輸?Feed Forward?絡的計算可以同步進?, 互不?擾

(2)Decoder的并行化

在這里插入圖片描述

  1. Decoder模塊在訓練階段采用了并行化處理。 其中Self-Attention和Encoder-Decoder Attention兩個子層的并行化也是在進行矩陣乘法, 和Encoder的理解是一致的. 在進行Embedding和Feed Forward的處理時, 因為各個token之間沒有依賴關系, 所以也是可以完全并行化處理的, 這里和Encoder的理解也是一致的.
  2. Decoder模塊在預測階段基本上不認為采用了并行化處理. 因為第一個time step的輸入只是一個"SOS", 后續每一個time step的輸入也只是依次添加之前所有的預測token.
  3. 注意: 最重要的區別是訓練階段目標文本如果有20個token, 在訓練過程中是一次性的輸入給Decoder端, 可以做到一些子層的并行化處理. 但是在預測階段, 如果預測的結果語句總共有20個token, 則需要重復處理20次循環的過程, 每次的輸入添加進去一個token, 每次的輸入序列比上一次多一個token, 所以不認為是并行處理.

(3)總結

Transformer架構中Encoder模塊的并行化機制

  • Encoder模塊在訓練階段和測試階段都可以實現完全相同的并行化.
  • Encoder模塊在Embedding層, Feed Forward層, Add & Norm層都是可以并行化的.
  • Encoder模塊在self-attention層, 因為各個token之間存在依賴關系, 無法獨立計算, 不是真正意義上的并行化.
  • Encoder模塊在self-attention層, 因為采用了矩陣運算的實現方式, 可以一次性的完成所有注意力張量的計算, 也是另一種"并行化"的體現.

Transformer架構中Decoder模塊的并行化機制

  • Decoder模塊在訓練階段可以實現并行化.
  • Decoder模塊在訓練階段的Embedding層, Feed Forward層, Add & Norm層都是可以并行化的.
  • Decoder模塊在self-attention層, 以及Encoder-Decoder Attention層, 因為各個token之間存在依賴關系, 無法獨立計算, 不是真正意義上的并行化.
  • Decoder模塊在self-attention層, 以及Encoder-Decoder Attention層, 因為采用了矩陣運算的實現方式, 可以一次性的完成所有注意力張量的計算, 也是另一種"并行化"的體現.
  • Decoder模塊在預測計算不能并行化處理.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894759.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【華為OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】

【華為OD-E卷 - 跳格子2 100分(python、java、c、js、c)】 題目 小明和朋友玩跳格子游戲,有 n 個連續格子組成的圓圈,每個格子有不同的分數,小朋友可以選擇以任意格子起跳,但是不能跳連續的格子&#xff…

訂單狀態監控實戰:基于 SQL 的狀態機分析與異常檢測

目錄 1. 背景與問題 2. 數據準備 2.1 表結構設計 3. 場景分析與實現 3.1 場景 1:檢測非法狀態轉換

說一下JVM管理的常見參數

Java虛擬機&#xff08;JVM&#xff09;有許多常見參數&#xff0c;用于控制其行為和性能。以下是一些常見的JVM參數及其說明&#xff1a; 1. 內存管理參數 -Xms<size> START 設置初始堆內存大小。例如&#xff0c;-Xms512m表示初始堆大小為512MB。 -Xmx<size>…

驗證工具:GVIM和VIM

一、定義與關系 gVim&#xff1a;gVim是Vim的圖形界面版本&#xff0c;提供了更多的圖形化功能&#xff0c;如菜單欄、工具欄和鼠標支持。它使得Vim的使用更加直觀和方便&#xff0c;尤其對于不習慣命令行界面的用戶來說。Vim&#xff1a;Vim是一個在命令行界面下運行的文本編…

4 HBase 的高級 shell 管理命令

4 HBase 的高級 shell 管理命令 1.status 例如&#xff1a;顯示服務器狀態 hbase(main):058:0> status node012.whoami 顯示 HBase 當前用戶&#xff0c;例如&#xff1a; hbase> whoami3.list 顯示當前所有的表 hbase> list4.count 統計指定表的記錄數&#xff0c…

Web - CSS3基礎語法與盒模型

概述 這篇文章是關于 Web 前端 CSS3 的基礎語法與盒模型的講解。包括 CSS3 層疊性及處理沖突規則、偽元素和新增偽類元素、屬性選擇器等。還介紹了文本與字體屬性&#xff0c;如段落和行相關屬性、字體文本屬性。最后闡述了盒子模型&#xff0c;如元素隱藏、行內與塊元素轉換、…

國防科大:雙目標優化防止LLM災難性遺忘

&#x1f4d6;標題&#xff1a;How to Complete Domain Tuning while Keeping General Ability in LLM: Adaptive Layer-wise and Element-wise Regularization &#x1f310;來源&#xff1a;arXiv, 2501.13669 &#x1f31f;摘要 &#x1f538;大型語言模型&#xff08;LLM…

Verilog基礎(一):基礎元素

verilog基礎 我先說,看了肯定會忘,但是重要的是這個過程,我們知道了概念,知道了以后在哪里查詢。語法都是術,通用的概念是術。所以如果你有相關的軟件編程經驗,那么其實開啟這個學習之旅,你會感受到熟悉,也會感受到別致。 入門 - 如何開始 歡迎來到二進制的世界,數字…

一次線程數超限導致的hive寫入hbase作業失敗分析

1.集群配置 操作系統:SuSe操作系統 集群節點:100臺相同配置的服務器 單臺:核心112Core,內存396G 2.問題現象 現象1:跑單個入庫任務報錯,批量提交任務后出現OOM異常 執行12個hivesql,將數據寫入hbase.hbase入庫有近一半的任務報錯。 每次報錯的任務不是同一個,hivesql…

優化fm.jiecao.jcvideoplayer_lib中視頻橫豎屏自動適配原視頻方案

fm.jiecao:jiecaovideoplayer:x.x.x 優化fm.jiecao.jcvideoplayer_lib中視頻橫豎屏自動適配原視頻方案&#xff1a; 僅優化關鍵代碼部分&#xff0c;源碼&#xff1a; public void startWindowFullscreen() {Log.i(TAG, "startWindowFullscreen " " [" …

多無人機--強化學習

這個是我對于我的大創項目的構思&#xff0c;隨著時間逐漸更新 項目概要 我們的項目平臺來自挑戰杯揭綁掛帥的無人機對抗項目&#xff0c;但是在由于時間原因&#xff0c;并未考慮強化學習&#xff0c;所以現在通過大創項目來彌補遺憾 我們項目分為三部分&#xff0c;分為虛…

工業相機常用詞語解釋

線陣相機和面陣相機&#xff1a; 線陣相機&#xff0c;是采用線陣圖像傳感器的相機。線陣圖像傳感器以CCD為主&#xff0c; 一行的數據可以到幾K甚至幾十K&#xff0c;但是高度只有幾個像素&#xff0c;行頻很高&#xff0c;可以到每秒幾萬行&#xff0c;適合做非常高精度、寬…

2501,編寫dll

DLL的優點 簡單的說,dll有以下幾個優點: 1)節省內存.同一個軟件模塊,若是源碼重用,則會在不同可執行程序中編譯,同時運行這些exe時,會在內存中重復加載這些模塊的二進制碼. 如果使用dll,則只在內存中加載一次,所有使用該dll的進程會共享此塊內存(當然,每個進程會復制一份的d…

Python----Python高級(并發編程:進程Process,多進程,進程間通信,進程同步,進程池)

一、進程Process 擁有自己獨立的堆和棧&#xff0c;既不共享堆&#xff0c;也不共享棧&#xff0c;進程由操作系統調度&#xff1b;進程切換需要的資源很最大&#xff0c;效率低。 對于操作系統來說&#xff0c;一個任務就是一個進程&#xff08;Process&#xff09;&#xff…

在Mapbox GL JS中“line-pattern”的使用詳解

在Mapbox GL JS中&#xff0c;line-pattern 是一種用于在地圖上繪制帶有圖案的線條的樣式屬性。通過 line-pattern&#xff0c;你可以使用自定義的圖像作為線條的圖案&#xff0c;而不是使用純色或漸變。 1. 基本概念 line-pattern: 該屬性允許你指定一個圖像作為線條的圖案。…

C++ Primer 算術運算符

歡迎閱讀我的 【CPrimer】專欄 專欄簡介&#xff1a;本專欄主要面向C初學者&#xff0c;解釋C的一些基本概念和基礎語言特性&#xff0c;涉及C標準庫的用法&#xff0c;面向對象特性&#xff0c;泛型特性高級用法。通過使用標準庫中定義的抽象設施&#xff0c;使你更加適應高級…

【大數據技術】本機PyCharm遠程連接虛擬機Python

本機PyCharm遠程連接虛擬機Python 注意:本文需要使用PyCharm專業版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso寫在前面 本文主要介紹如何使用本地PyCharm遠程連接虛擬機,運行Python腳本,提高編程效率。 注意: …

堆(Heap)的原理與C++實現

1. 什么是堆&#xff1f; 堆&#xff08;Heap&#xff09;是一種特殊的樹形數據結構&#xff0c;通常用于實現優先隊列。堆可以分為兩種類型&#xff1a; 最大堆&#xff08;Max Heap&#xff09;&#xff1a;每個節點的值都大于或等于其子節點的值。最小堆&#xff08;Min H…

移除元素-雙指針(下標)

題目 給你一個數組 nums 和一個值 val&#xff0c;你需要 原地 移除所有數值等于 val 的元素。元素的順序可能發生改變。然后返回 nums 中與 val 不同的元素的數量。 假設 nums 中不等于 val 的元素數量為 k&#xff0c;要通過此題&#xff0c;您需要執行以下操作&#xff1a…

log4j2日志配置文件

log4j2配置文件每個項目都會用到,記錄一個比較好用的配置文件,方便以后使用時調取,日志輸出級別為debug,也可以修改 <?xml version"1.0" encoding"UTF-8"?> <Configuration monitorInterval"180" packages""><prope…