跳轉到

7.3 Transformer Encoder

範例程式:Open In Colab

Transformer encoder 會把 self-attention、feed-forward network、residual connection 與 layer normalization 組合起來。本篇使用小型合成序列分類資料,示範如何用 Keras layer 建立一個可訓練的 Transformer encoder。

1. 學習目標

本篇聚焦如何把 self-attention 組成真正的分類模型。前兩篇先看 attention 計算,本篇則把它放進完整模型,處理固定長度序列分類任務。

2. Transformer Encoder 結構

基本 encoder block 包含:

  1. Multi-head self-attention。
  2. Add & LayerNorm。
  3. Feed-forward network。
  4. Add & LayerNorm。

輸入序列還需要 position embedding,否則 attention 本身不知道 token 或時間點的順序。

3. 實作流程

Notebook 會產生三類數值序列資料,加入可訓練的 position embedding,建立 Transformer encoder block,最後用 GlobalAveragePooling 與 Dense softmax 做分類。

4. 如何套用自己的資料?

只要資料能整理成 (samples, sequence_length, features),就可以嘗試 Transformer encoder。文字任務通常先經過 token embedding;時間序列任務則可先用 Dense layer 把數值特徵投影到 embedding 維度。序列長度越長,attention 計算成本越高。

5. 小結

Transformer encoder 是許多現代模型的基礎積木。先在小型序列分類任務上理解 encoder block,後續才容易延伸到 NLP、時間序列與影像 patch 任務。