文章目錄
- Embedding
- 1 概念
- 2 Q&A (1)
- 3 Positional Encoding
- 4 Q&A (2)
- ViT樣例及Embedding可視化理解
- 1 簡化ViT練習
- 2 CLS Token
- 3 Embedding可視化
- 4 多頭注意力可視化
- Embedding技術體系結構
- 參考來源
在研究中對特征的編碼和解碼的原理有一些疑惑,由于我之前研究的一直是計算機視覺問題,所以仍然是以主流的圖像+Transformer為例開展研究,進一步討論如何進行特征處理。
2020年提出了Vision Transformer(簡稱ViT),將圖像分割成多個小塊(Patch),每個Patch的大小可以指定,例如16×16,然后對每個Patch進行線性投影,通過一個線性層將其轉換為固定維度的向量——嵌入向量(Embedding)。 逆線性投影(線性解碼) 的目標是將特征向量恢復為原始圖像或其近似表示,用于圖像重建或特征解碼為圖像或文本表示。
Embedding
1 概念
Embedding模型是RAG(Retrieval-Augmented Generation)技術的核心。也是大模型應用落地必不可少的技術。
RAG (Retrieval-Augmented Generation)是一種結合了信息檢索和生成模型的技術,用于改善自然語言處理任務中的生成模型表現。
- 這項技術由兩部分組成:一個檢索系統和一個生成模型。
- 用戶給出一個查詢或問題 -> 檢索系統根據輸入查詢從文檔庫中檢索出最相關的幾個文檔片段,這些片段被選擇為包含與查詢最相關的信息 -> 檢索到的文檔片段與原始查詢一起被送入生成模型,生成模型結合這些信息生成一個響應或文本輸出。
Embedding模型是指將高維度的數據(例如文字、圖片、視頻)映射到低維度空間的過程。簡單來說,embedding向量就是一個N維的實值向量,它將輸入的數據表示成一個連續的數值空間中的點。大型語言模型可以生成上下文相關的 embedding 表示,可以更好地捕捉單詞的語義和上下文信息。
簡單來說,embedding就是用一個低維的向量表示一個物體,可以是一個詞,或是一個商品,或是一個電影等等。這個embedding向量的性質是能使距離相近的向量對應的物體有相近的含義,比如 Embedding(復仇者聯盟)和Embedding(鋼鐵俠)之間的距離就會很接近,但 Embedding(復仇者聯盟)和Embedding(亂世佳人)的距離就會遠一些。
2 Q&A (1)
-
Embedding的必要性?
-
處理高維或復雜狀態時,Embedding能有效降維和提取特征,能提升模型對任務和關系的理解,減少無效探索。
-
RGB形式是否可以看成Embedding后的結果?
-
原始數據RGB存在局限性(如對亮度敏感),高維且包含冗余。圖像需要Embedding的根本原因在于,RGB像素數據雖然完整記錄了圖像的物理信息,但缺乏對語義特征的結構化表達。
-
RGB圖像的局限性:
- 高維冗余性:一張1080p的RGB圖像包含超過600萬個像素點,每個像素點僅記錄局部顏色信息,這種原始數據不僅計算成本高昂,還包含大量無關細節(如光照噪聲、重復紋理等)。
- 語義斷層:RGB像素無法直接反映圖像的語義結構。雖然RGB數據精確記錄了每個水果的色澤,但無法自動表達“水果”的概念,更無法理解蘋果與香蕉的類別關系。
- 跨模態匹配障礙:RGB像素空間與文本、音頻等其他模態的表示空間完全割裂,難以直接進行跨模態檢索或生成任務。
-
圖像Embedding的本質:
圖像Embedding是通過深度神經網絡對RGB像素的語義蒸餾,生成一個緊湊的數值向量。- 低維稠密性:典型的圖像Embedding維度在128-2048之間。
- 語義拓撲結構:Embedding空間中的向量距離反映語義相似性。例如某案例中停車場圖像的Embedding與“停車場”文本Embedding的余弦相似度達到0.998,而與“公園”文本的相似度僅為0.001。
- 多層級特征融合:通過卷積神經網絡(CNN)或視覺Transformer,Embedding會融合從邊緣、紋理到物理部件、場景的多尺度特征。
-
舉例說明如何解釋Embedding后的圖像?
-
輸入圖像與預處理:假設輸入為一張橘貓在草地上的RGB圖像,尺寸為224×224×3。將圖像切割為16×16×3的像素patch,patch的內容可能是橘貓耳朵的局部紋理、草葉邊緣等,將每個patch展平為16×16×3=768維向量。
-
Transformer處理與Embedding生成:
- 添加位置編碼(Positional Encoding):每個patch向量疊加可訓練的位置編碼,保留空間信息。左上角草地的patch編碼可能為[0.1, -0.3, 0.5, …],右下角貓爪的patch編碼可能為[0.8, 0.2, -0.1, …]。
- Transformer編碼:模型通過注意力計算不同patch間的關聯。橘貓頭部patch與身體patch的注意力權重較高(語義關聯),草葉patch之間因重復紋理產生中等權重(局部相似性)。
- 全局匯聚與輸出:最終通過分類標識符匯聚全局特征,輸出1024維圖像Embedding。
embedding = [
0.23, # 維度1:可能與"毛絨質感"正相關
-1.56, # 維度2:抑制"金屬反光"特征
3.12, # 維度3:激活"橘色毛發"屬性
0.98, # 維度4:綠色背景強度
... # 后續維度編碼更抽象語義(如"生物體""自然場景"等)
]
(我理解為輸出的每一個維度都表示它的一個特征,所以維度不一定是越高越好,有些東西特征不夠沒辦法表示)
-
Embedding如何捕捉語義信息?
-
Embedding通過神經網絡將離散符號(如文字、圖像)映射到低維連續向量空間,使得語義相似的實體在空間中距離相近。相似語義的實體在上下文環境中具有共現規律,例如“貓”和“狗”常出現在相似語境中,模型通過統計共現頻率或預測上下文捕捉這種關聯性。訓練過程中,模型通過損失函數調整向量位置,使語義相關項在空間中聚集。
-
實現路徑
- 卷積神經網絡:通過卷積核滑動掃描圖像,激活特定紋理模式,例如淺層網絡捕捉邊緣、顏色塊,深層網絡識別物體部件。全連接層將局部特征整合為圖像整體表示。
- ViT:分塊線性嵌入,添加可學習的位置編碼后,通過多頭自注意力計算塊間關系。例如貓頭部位的patch會與軀干patch產生高注意力權重,形成生物體結構理解。
-
監督信號設計:
- 分類任務通過標簽監督驅動語義分離。
- 自監督任務通過掩碼預測(BERT)、圖像補全(MAE)挖掘內在結構。
-
為什么不同的卷積核和層能自動學習不同的特征而無需人為干預?
-
局部感知:不同的卷積核的初始權重不同,導致對輸入圖像的不同區域產生差異化響應。例如,某些核可能對垂直邊緣敏感,另一些對水平邊緣敏感。同一卷積核在不同位置使用相同權重,迫使該核專注于檢測特定模式。
-
權值共享:通過反向傳播,梯度更新促使不同核分別優化為邊緣檢測器(如Sobel算子)、顏色斑點檢測器等低級特征提取器。深層網絡通過組合低級特征學習復雜模式。冗余核(重復檢測統一特征的核)可能在正則化(如L2權重衰減)下被淘汰,可以減少過擬合風險。
-
層次化網絡結構:
網絡層級 | 特征類型 | 分工機制 | 示例(以動物識別為例) |
---|---|---|---|
淺層 | 邊緣、紋理、顏色 | 小尺寸卷積核(如3×3)捕捉局部細節,多個核并行提取不同方向或類別的邊緣。 | 毛發紋理、眼睛輪廓等 |
中層 | 局部結構、部件 | 大感受野卷積核(如5×5)整合多個低級特征,形成部件級表示。 | 耳朵形狀、鼻子局部特征 |
深層 | 語義對象、全局關系 | 全連接層或全局池化聚合空間信息,結合非線性激活表達高階語義。 | 動物類別、姿態 |
- 關鍵組件協同作用:
組件 | 功能 | 對特征分工的影響 |
---|---|---|
激活函數 | 引入非線性,允許網絡學習復雜函數 | 增強特征響應差異性,促進核間分工。 |
池化層 | 降維并保留顯著特征 | 提升平移不變性,使高層核關注語義而非位置。 |
BatchNorm | 標準化特征分布,加速訓練收斂 | 穩定不同核的學習速度,避免部分核“死亡”。 |
-
如何理解池化層在特征提取中的作用?
-
平移不變性指的是當輸入圖像中的物體發生微小位移時,池化后的輸出特征不會發生顯著變化。例如數字“1”在圖像中稍微平移后,經過池化層得到的特征矩陣仍然相同,這說明池化確實有助于保持特征的一致性,即使位置變化了。池化操作通過下采樣減少了特征圖的空間尺寸,使得后續的高層網絡在處理時,感受野更大,能夠捕捉更全局的信息。例如,最大池化選擇局部區域的最大值,這樣無論特征在區域內的具體位置如何,只要最大值存在,就會被保留。這樣,高層核不再需要精確追蹤每個特征的位置,而是關注這些特征的存在與否及其組合,從而更專注于語義信息。另外,池化層對微小位置變化具有魯棒性,即使輸入數據有輕微偏差,池化結果仍可能保持一致。這是因為池化窗口內的最大值或平均值并不依賴特征的具體位置,只要該特征存在于窗口內,就會被捕捉到。
-
Patch Embedding和Encoder有何區別?
-
Embedding的作用是將圖像塊轉換為向量表示,并加入位置信息。這一步是線性的,沒有復雜的交互。Embedding模塊完成從像素空間到語義向量的初步映射,并為模型提供基礎的??局部特征表示??和??空間位置信息??。
-
Encoder的作用是通過自注意力機制,讓這些向量之間進行全局交互,提取更高層次的語義信息。通過??多頭自注意力(MHSA)??計算圖塊間的關聯權重,建立全局依賴關系。例如,貓耳朵圖塊可能與軀干圖塊形成高注意力權重,從而捕捉生物體結構信息。
3 Positional Encoding
位置編碼(Positional Encoding)其核心目的是將位置信息注入無位置感知的自注意力機制中,使模型能夠區分不同位置的元素。
Transformer的自注意力機制本質上是無序的,無法區分序列中元素的順序。例如,輸入序列“[貓, 在, 屋頂]”和“[屋頂, 在, 貓]”可能被模型視為等價。位置編碼通過顯式標記每個元素的位置,解決這一問題。在ViT中,圖像被分割為圖塊(patch)序列,位置編碼需保留原始圖像的空間布局信息(如相鄰圖塊的上下左右關系)。
位置編碼主要分為絕對和相對兩種類型。絕對位置編碼包括可學習的和預定義的(如正弦函數),而相對位置編碼則考慮元素之間的相對距離。
-
可學習的絕對編碼(Learnable Position Embedding):ViT和BERT的默認方式,將位置編碼作為可訓練參數。例如,ViT中每個圖塊的位置編碼通過隨機初始化并在訓練中優化。
-
正弦/余弦編碼(Sinusoidal Encoding):對于序列中的每個位置 p o s pos pos、隱藏層維度 d m o d e l d_model dm?odel、隱藏層中的每個維度索引 i i i、位置編碼向量的第 i i i個元素 P E ( p o s , 2 i ) PE_{(pos,2i)} PE(pos,2i)?和 P E ( p o s , 2 i + 1 ) PE_{(pos,2i+1)} PE(pos,2i+1)?分別通過正弦和余弦函數計算:
P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i d m o d e l ) PE_{(pos,2i)}=sin(\frac{pos}{10000^\frac{2i}{d_{model}}}) PE(pos,2i)?=sin(10000dmodel?2i?pos?)
P E ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i d m o d e l ) PE_{(pos,2i+1)}=cos(\frac{pos}{10000^\frac{2i}{d_{model}}}) PE(pos,2i+1)?=cos(10000dmodel?2i?pos?)
使用 2 i 2i 2i和 2 i + 1 2i+1 2i+1來區分偶數和奇數的維度, i i i應該是維度索引的一半。10000是一個常數,用來控制不同維度之間的頻率差異,使得不同維度的正余弦函數具有不同的周期。
- 隨位置的變化:對固定的維度 i i i來說,位置 p o s pos pos的變化將影響 P E PE PE的值。正弦和余弦函數將隨著位置呈現出周期性變化,這意味著模型能夠區分輸入序列中token的不同位置。
- 隨維度的變化:對固定位置 p o s pos pos,隨著維度 i i i的增加,正弦和余弦函數的頻率會降低,周期會變長。因此,較低維度具有短的周期,即在較小的位置范圍內完成一個周期,換句話說其變化迅速,對小的位移敏感,也就是即使是相鄰位置,位置編碼的差異也會很大,這有助于模型識別相鄰位置間的細微差異。相反,較高維度具有較長的周期,在較大的位置范圍內才完成一個周期。變化緩慢,對小的位移不敏感,這能幫助模型感知全局位置關系,捕獲長距離依賴。這種多尺度的編碼使得Transformer模型能夠同時捕捉全局和局部的位置信息。
- 遠程衰減:對于兩個相同的詞向量,如果它們之間的距離越近,則他們的內積分數越高反之則越低。(詞向量的內積分數就是兩個詞每個維度PE乘積之和) 我們隨機初始化兩個向量 x x x和 y y y,將 x x x固定在位置0上, y y y的位置從0開始逐步變大,依次計算內積。我們發現隨著 x x x和 y y y的相對距離的增加,它們之間的內積分數震蕩衰減。
- 外推能力:指模型在處理比訓練時更長的序列時仍能保持一定的性能。正余弦函數的周期性使得位置編碼在超出訓練長度時仍能生成合理的編碼值。內積的震蕩衰減特性減少了遠距離噪聲干擾,使模型更關注局部上下文,同時保留對長距離依賴的微弱信號。這種平衡增強了模型對未見過序列長度的適應性。
- 圖像相對位置編碼(iRPE):編碼元素間的相對距離,而非絕對位置。使用分段函數(Piecewise Function)映射相對距離到有限索引,減少計算量;避免遠距離位置信息丟失,例如,通過指數或對數函數對不同距離的像素分配差異化的注意力權重,增強長程依賴的捕捉能力。通過交叉法(Cross)和乘積法(Product)編碼水平和垂直方向,提升對物體結構的理解。
- 無向方法:
- 歐氏距離法:計算像素間的歐氏距離并映射到編碼空間。
- 量化法:對歐氏距離四舍五入后離散化,減少近鄰位置映射沖突。
- 有向方法:
- 交叉法(Cross Method):分別計算水平(x軸)和垂直(y軸)方向的相對位置編碼,再進行加性融合。
- 乘積法(Product Method):直接對二維坐標進行聯合編碼,生成更細粒度的位置特征。
- 無向方法:
4 Q&A (2)
- Embedding和PE直接相加不會導致沖突嗎?
(Q&A里所有PE問題的解答如果看不明白需要先看下一節關于Positional Encoding的介紹) - 在之前Transformer的學習中我已經了解到輸入Attention的是位置編碼和嵌入向量直接相加,它們的維度相同,所以可以逐元素相加,相加后的向量既包含語義信息又包含位置信息。詞嵌入表示語義信息,位置編碼表示順序信息,二者屬于正交特征空間。相加操作相當于將兩種信息線性疊加,是信息融合而非混淆。
(關于正交向量詳見【機器學習】強化學習(3)——深度強化學習的數學知識 )
兩個向量相加后形成的新向量在正交特征空間中依然保持明確的幾何和物理意義。例如,在物理中的力或速度的合成,正交分量的相加不會導致信息混亂,而是通過線性組合保留各自方向的獨立貢獻。
- 是否會出現不同向量相加結果相同的情況?比如,兩個不同的詞嵌入加上不同的位置編碼,結果卻一樣。高維空間中的概率問題,當嵌入維度過高時,這種碰撞的概率極低。
- 是否會出現位置編碼的周期性導致相同編碼碼的問題?正弦和余弦函數的設計通過不同頻率的組合,確保每個位置有唯一的編碼。雖然周期函數會有重復,但不同維度的頻率是幾何級數分布的,最小公倍數非常大,所以實際應用中幾乎不會出現重復。
以單詞“wolf”為例,假設通過Embedding生成了3維向量Embedding(wolf) = [0.5, -1.2, 0.8]
,這一向量由模型訓練生成,捕捉了“wolf”的語義特征(如動物、野外、肉食等)。假設“wolf”在句子中的位置是第5位(從0開始計),使用Transformer的??正弦/余弦位置編碼公式??生成3維PE值:
PE(pos=5, d_model=3) = [sin(5 / 10000^(0/3)) = sin(5) ≈ 0.4,cos(5 / 10000^(0/3)) = cos(5) ≈ 0.9,sin(5 / 10000^(2/3)) = sin(5/21.54) ≈ 0.2
]
簡化后為:PE(5) = [0.4, 0.9, 0.2]
。將詞嵌入與位置編碼??逐元素相加??,Embedding(wolf) + PE(5) = [0.5 + 0.4, -1.2 + 0.9, 0.8 + 0.2] = [0.9, -0.3, 1.0]
,兩個向量內積為0。
-
生成編碼的時候如何保證兩者正交?
-
正弦和余弦交替排列,使相鄰維度的位置編碼變化顯著(如紅白交替的豎條可視化),增強正交性。
從可視圖中也可以看出,當從左向右看時,會有交替出現的紅白豎條,這便是正弦函數和余弦函數交替出現的結果,能幫助模型更加清晰地分辨相鄰兩個維度。如果只采用正弦函數,那么相鄰維度之間的界限就被模糊了。 -
Embedding+PE如何分離?
詞嵌入與位置編碼相加得到新的向量后,模型在學習特征和位置的時候需要再把它們還原到兩個正交空間中嗎?如果不還原,如何拆分特征編碼和位置編碼?如果還原,怎么確定是哪兩個正交空間?所有詞的兩個正交空間最后都會一樣嗎?那會不會導致誤差? -
詞嵌入和位置編碼相加后,輸入到模型中,通過自注意力機制進行處理。模型在訓練過程中通過線性變換 W Q / W K / W V W_Q/W_K/W_V WQ?/WK?/WV?自動學習將相加后的向量分解到不同的特征空間,而不需要顯式還原。例如,自注意力機制中的 Q Q Q、 K K K、 V V V矩陣的投影可能隱式地將混合后的向量分解到不同的子空間,捕捉語義和位置信息。
ViT樣例及Embedding可視化理解
1 簡化ViT練習
詳見【深度學習】計算機視覺(14)——Transformer
2 CLS Token
練習中注意到有一個CLS Token,即Class Token。我們將原始圖像切分成共8個小圖像塊,最終的輸入序列長度卻是9,這里增加的一個向量就是cls_token。
在 Vision Transformer(ViT)中,CLS Token 用于提取全局圖像的特征表示,替代了 CNN 中常用的全局池化操作。
將8個向量輸入Transformer結構中進行編碼,我們最終會得到8個編碼向量,可對于圖像分類任務而言,我們應該選擇哪個輸出向量進行后續分類呢?這8個向量都只能代表對應的patch,但是如果嵌入向量Class Token(向量0)與8個向量一起輸入到 Transformer結構中,輸出9個編碼向量,然后用這個Class Token進行分類預測即可。
這樣做有以下好處:
- 該token隨機初始化,并隨著網絡的訓練不斷更新,它能夠編碼整個數據集的統計特性;
- 該token對所有其他token上的信息做匯聚(全局特征聚合),并且由于它本身不基于圖像內容,因此可以避免對sequence中某個特定token的偏向性;
- 對該token使用固定的位置編碼能夠避免輸出受到位置編碼的干擾。ViT中作者將class embedding視為sequence的頭部而非尾部,即位置為0。
3 Embedding可視化
4 多頭注意力可視化
Embedding技術體系結構
Word2Vec等
[歡迎指正]
參考來源
@AIGC
大模型入門:Embedding模型概念、源碼分析和使用示例
什么是embedding?詳解
正弦-余弦位置編碼
Transformer中的位置編碼
vit 中的 cls_token 與 position_embed 理解