vit的線性對映過程

海_纳百川發表於2024-08-09

Vision Transformer (ViT): 線性對映

1. 展平影像塊

假設輸入的影像塊大小為 \( P \times P \) 畫素,並且影像有 \( C \) 個通道(對於RGB影像,通常 \( C = 3 \))。

每個影像塊被展平成一個向量,向量的維度為 \( P \times P \times C \)。

例如,對於一個16x16畫素的RGB影像塊,展平後的向量長度為 \( 16 \times 16 \times 3 = 768 \)。

2. 線性對映的目的

線性對映的目標是將這個展平後的向量對映到一個新的空間,該空間的維度通常與Transformer模型的隱藏層維度一致,記作 \( D \)。

常見的 \( D \) 的選擇有768或1024等。

3. 線性對映的實現方式

線性對映可以理解為一個簡單的全連線層。

對於每個展平後的影像塊向量 \( \mathbf{x} \)(長度為 \( P \times P \times C \)),線性對映透過矩陣乘法來完成:

\( \mathbf{z} = \mathbf{x} \cdot \mathbf{W} + \mathbf{b} \)

  • \( \mathbf{x} \) 是輸入的展平向量,維度為 \( P \times P \times C \)。
  • \( \mathbf{W} \) 是線性對映的權重矩陣,維度為 \( (P \times P \times C) \times D \)。
  • \( \mathbf{b} \) 是偏置向量,維度為 \( D \)。
  • \( \mathbf{z} \) 是輸出的嵌入向量,維度為 \( D \)。

4. 高效實現

由於每個影像塊的向量是獨立處理的,因此可以使用矩陣運算批次處理所有影像塊,利用平行計算加速訓練和推理過程。

在實際實現中,這個線性對映通常透過深度學習框架中的全連線層(如PyTorch中的 nn.Linear 或 TensorFlow中的 Dense)來實現。

5. 結果

每個影像塊被轉換為一個維度為 \( D \) 的嵌入向量,這些嵌入向量與位置編碼相加後,作為Transformer的輸入。

6. 簡化公式

這裡是簡化後的公式:

  • 輸入展平向量:\( \mathbf{x} \) (長度 \( P \times P \times C \))
  • 輸出嵌入向量:\( \mathbf{z} \) (長度 \( D \))
  • 權重矩陣:\( \mathbf{W} \) (維度 \( (P \times P \times C) \times D \))
  • 線性對映公式:\( \mathbf{z} = \mathbf{x} \cdot \mathbf{W} + \mathbf{b} \)

透過這個線性對映,ViT能夠將原始影像塊轉換為具有更高表達能力的向量表示,使得Transformer能夠有效地處理和學習影像資料的特徵。

相關文章