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能夠有效地處理和學習影像資料的特徵。