LLM注意力Attention,Q、K、V矩陣通俗理解
QKV的重要性
要理解大語言模型效果的底層實現(xiàn)原理,很大一部分就是理解Transformers Block里面的QKV矩陣。現(xiàn)在前沿的大模型研究工作很大一部分都是圍繞著QKV矩陣去做的,比如注意力、量化、低秩壓縮等等。
其本質原因是因為QKV權重占比著大語言模型50%以上的權重比例,在推理過程中,QKV存儲量還會隨著上下文長度的增長而線性增長,計算量也平方增加。
可以說,現(xiàn)在大模型對外銷售OpenAPI的價格戰(zhàn),很大一部分就是對QKV極致優(yōu)化的技術戰(zhàn);圍繞QKV,各大模型廠商使出渾身解數(shù),在保證效果不變壞的前提下,主要的研究工作就是對性能和存儲的極致壓縮。
在本文,我們將從純概念的角度,增進對QKV的理解。
QKV在哪里
還是這張圖,QKV矩陣是Transformers Block MHA的重要組成部分,當一個文本Token過來的時候,文本Token的Normalization矩陣會分別和Q、K、V的權重矩陣進行矩陣乘法操作,得到三個不同的矩陣,以進入后面的計算過程。
圖片
以7B模型為例,計算數(shù)據(jù)的Shape如下:
Token Normalization Shape:[1, 4096]
Q、K、V Shape:[4096, 4096]
如果考慮一次推理的BatchSize和SeqLen(上下文長度),那就是這個Shape:
Token Normalization:[BatchSize, SeqLen, 4096]
Q、K、V Shape:[BatchSize, SeqLen, 4096, 4096]
其中,4096就是7B模型對應的Hidden Size。
從Shape就可以看出,Q、K、V的計算量和存儲量會隨著SeqLen的增長而增長。
QKV的作用
從計算角度理解QKV始終不容易理解它的算法效果,所以本部分從概念的角度理解QKV的作用。
在大型語言模型(LLM)中,特別是在基于Transformer架構的模型中,Q(Query)、K(Key)和V(Value)是自注意力(Self-Attention)機制中的核心組成部分。它們在推理過程中的作用如下:
Query (Q):
角色:Query向量代表當前正在處理的token或位置,它表示模型需要“查詢”的信息。
作用:在自注意力機制中,Query用于與所有的Key進行比較,以確定每個Key與當前token的相關性。這個比較的結果決定了Value的加權和,從而生成當前token的輸出。
變化性:在自回歸推理過程中,每個新生成的token都會有一個新的Query向量,它只依賴于當前token的信息。
Key (K):
角色:Key向量代表序列中每個token的唯一標識,用于與Query進行比較。
作用:Key向量用于計算與Query的相似度或匹配程度,這個相似度得分決定了相應Value在最終輸出中的權重。
穩(wěn)定性:在自回歸推理中,對于已經生成的token,其Key向量在后續(xù)的推理過程中會被重復使用,因為它們代表的是已經確定的token信息。
Value (V):
角色:Value向量包含序列中每個token的實際內容或特征,它對生成當前token的輸出有貢獻。
作用:Value向量根據(jù)與Query的相似度得分(由Key確定)被加權求和,生成當前token的輸出。
穩(wěn)定性:與Key類似,對于已經生成的token,其Value向量在后續(xù)的推理過程中也會被重復使用。
在自回歸推理過程中,模型一次生成一個token,并且每個新token都會基于之前所有token的信息。因此,對于每個新生成的token:
Q:需要重新計算,因為它依賴于當前token的信息。
K 和 V:可以被緩存(即KV Cache),因為它們代表之前已經生成的token的信息,這些信息在生成后續(xù)token時不需要重新計算。
總結來說,Q、K、V在推理過程中共同工作,通過自注意力機制允許模型在生成每個新token時動態(tài)地聚焦于序列中相關的信息。
Q代表了當前token的查詢需求,而K和V則提供了序列中每個token的標識和內容,使得模型能夠根據(jù)當前token的需求加權組合之前的信息,生成連貫和相關的輸出。
為什么需要QKV,不能直接從Q得到輸出呢?
在Transformer模型中,區(qū)分Q(Query)、K(Key)和V(Value)的原因主要有以下幾點:
角色分離:
Q、K、V的設計允許模型在處理序列數(shù)據(jù)時,更有效地捕捉不同位置之間的關系。Q代表當前位置希望獲得的信息,K代表序列中各位置能提供的信息,而V則代表當查詢和鍵匹配時,應該從各位置獲取的實際內容。
通過這種方式,模型可以靈活地捕捉不同位置之間的依賴關系。
增強模型能力:
使用獨立的Q、K、V允許模型學習到更復雜的關系。每個位置不僅可以決定與其他位置的關聯(lián)程度(通過Q和K),還可以決定從每個位置獲取什么樣的信息(通過V)。
靈活性和表達能力:
獨立的Q、K、V矩陣增加了模型的靈活性和表達能力。模型可以學習到如何根據(jù)上下文將重點放在不同的信息上。
并行處理:
Transformer模型的設計允許在處理序列時進行高效的并行計算。Q、K、V的獨立使得模型可以同時計算整個序列中所有位置的注意力分數(shù),這大大提高了計算效率。
信息檢索類比:
可以把Q、K、V機制類比為一個信息檢索過程。
Q類似我們提出的搜索問題,目的是從大量信息中尋找相關答案;K類似信息庫中的索引,它們決定哪些信息與查詢相關;V類似實際的內容,是查詢找到相關信息后的返回結果。
Q用來提出問題,K用來匹配相關性,V則是我們最終希望獲取的信息。
綜上所述,QKV的區(qū)分使得Transformer模型能夠更加靈活和有效地處理序列數(shù)據(jù),捕捉復雜的依賴關系,并適應不同的任務需求。
直接從Q得到V會限制模型的表達能力和靈活性,因為它忽略了通過K來確定相關性的重要性,并且減少了模型處理信息的靈活性。
在LLM推理時,為什么KV可以Cache?
在LLM(Large Language Model,大型語言模型)推理過程中,KV(Key-Value)Cache可以被緩存的原因主要基于以下幾個方面:
減少重復計算:
在自注意力機制中,如果沒有KV Cache,每次生成新token時,模型需要重新計算整個歷史序列的Key和Value向量,并參與注意力計算,這導致了大量的重復計算。通過緩存歷史序列的K和V,可以避免這種重復計算,顯著降低推理的計算復雜度。
提升推理速度:
KV Cache通過緩存Key和Value向量,使得模型在生成新token時只需計算當前token的Query向量,并與緩存的Key和Value進行注意力計算,這樣可以加快推理速度。
降低計算復雜度:
自注意力機制的計算復雜度為O(n^2?d),其中n是序列長度,d是向量維度。使用KV Cache后,計算復雜度可以降低到O(n?d),顯著減少了計算量。
跨請求復用:
在某些場景下,多次請求的Prompt可能會共享同一個前綴(Prefix),這些情況下,很多請求的前綴的KV Cache計算結果是相同的,可以被緩存起來,給下一個請求復用。
綜上所述,KV Cache在LLM推理中通過緩存Key和Value向量,有效減少了重復計算,降低了計算復雜度,提升了推理速度,并且優(yōu)化了顯存資源的使用,從而提高了模型的推理效率和吞吐量。
那為什么Q不可以Cache?
因為Q不需要Cache…
在LLM(Large Language Model,大型語言模型)推理過程中,不緩存Q(Query)的原因主要有以下幾點:
依賴性差異:
在自回歸Transformer模型中,每個新生成的token的輸出(即Q)只依賴于當前token的Q以及之前所有token的K和V。
因此,對于計算下一個token的輸出,不需要重復使用之前的Q,而K和V則需要被重復使用。
計算效率:
由于每次推理只會用到當前的Q,而這個Q在下次推理時不會被再次使用,因此緩存Q不會帶來效率上的提升。
相反,K和V在每次推理中都需要被使用,緩存KV可以避免重復計算,從而加速推理過程。
自回歸特性:
在自回歸模型中,每個Token的生成僅依賴于它之前的所有Token,這意味著每個新Token的生成只需要當前的Q和之前所有Token的KV。由于每個Q都是基于前面序列來生成的,緩存Q對于計算Attention沒有意義。
綜上所述,由于Q在自回歸Transformer模型中的使用特性和計算過程中的不對稱性,緩存Q不會帶來推理效率的提升,因此LLM推理過程中通常不緩存Q。
為什么區(qū)分MHA和MLP?
在Transformer模型中,Multi-Head Attention (MHA) 和 Multi-Layer Perceptron (MLP) 是兩個核心組件,它們各自承擔著不同的功能,共同協(xié)作以提升模型的性能。
MHA 的作用:
捕捉上下文信息:MHA通過多個頭的方式,可以同時關注輸入序列的不同部分,從而增強模型對上下文信息的捕捉能力。
提高模型的表達能力:MHA允許模型在不同的表示子空間中學習信息,這有助于模型學習到更豐富的特征表示。
**處理長序列數(shù)據(jù):**雖然MHA的計算量較大,特別是對于長序列,但它通過并行計算和優(yōu)化策略(如稀疏注意力)來提高效率1。
MLP 的作用:
非線性映射:MLP通過多層感知機對MHA的輸出進行非線性變換,這有助于模型學習到更復雜的特征表示。
提升模型的表達能力:MLP的引入使得模型能夠捕捉到輸入數(shù)據(jù)中的非線性關系,從而提高模型的表達能力。
整合特征:MLP將MHA提取的特征進行整合和進一步處理,為模型的輸出提供必要的特征表示。
MHA和MLP的協(xié)同作用:
特征提取與整合:MHA負責提取輸入序列的上下文特征,而MLP則負責對這些特征進行進一步的整合和轉換,兩者共同工作以提高模型的性能2。
通過區(qū)分MHA和MLP兩個部分,Transformer模型能夠更有效地捕捉輸入序列的上下文信息,并學習到更豐富的特征表示,從而在自然語言處理任務中取得優(yōu)異的性能。