National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 72 24°C PM2.5 13
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 03

注意力機制的直覺

用 numpy 算一次:每個字該看句子裡的哪些字
Interaction實作 25 minute(s)

Learning Objectives

  • 用 softmax 把一組分數換成加起來等於 1 的權重
  • 說明 query、key、value 在注意力計算中的角色
  • 用 numpy 手算一次 scaled dot-product attention
  • 說明手設向量和真實模型向量的差別,不過度解讀注意力權重

同一個字要參考不同的上下文

「他把書放在桌上」和「他在書店打工」,處理「書」這個位置時,該參考的旁邊的字不一樣。程式要把一句話變成數字計算,也會遇到這個問題:每個位置要從句子裡的其他位置取得多少資訊?

注意力機制(attention)是回答這個問題的一種計算方法:替每個位置算出一組權重,再依權重把其他位置的資訊加起來。2017 年的論文 Attention Is All You Need(Vaswani 等人)提出完全以注意力為主的 Transformer 架構,現在常見的大型語言模型多半是這條路線的延伸。

這一課用 numpy 親手算一次,所以你會看到它其實是內積、softmax 和加權平均的組合。

先說清楚這一課的限制:

  • 這一課不呼叫模型,向量是我們手設的示意值,四個維度還刻意取名叫「人、物品、動作、地點」,方便你追蹤。真實模型的向量是訓練時學出來的,維度很多,也沒有人替它們命名。
  • 這裡只算一層、一組權重。真實模型有很多層,還有其他元件;OpenAI 也沒有公開 gpt-5.6-luna 的內部細節,所以這一課不是在描述任何特定模型。
  • 算出權重不代表模型「理解」了句子。權重只是這一步計算的結果。

需要的 numpy 只有陣列、@(內積與矩陣乘法)與 np.exp。機器學習的基礎請看機器學習軌。

逐步看:softmax 把分數變成權重

分數可以是任何實數,但權重要是正數、加起來等於 1。請看哪一步做到這件事,以及分數差距改變時權重怎麼變。

Query、key、value

注意力的計算有三種向量,可以用查資料來比喻:

向量 比喻 用途
query(q) 你要找什麼 目前這個位置提出的查詢
key(k) 每筆資料的標籤 和 query 比對,算出相符的程度
value(v) 每筆資料的內容 依權重加起來,成為輸出

和字典查詢的差別是:字典只拿回一筆完全相符的內容,注意力則是每一筆都拿一些,相符程度越高拿得越多。

計算只有四步,寫成論文的公式是 Attention(Q, K, V) = softmax(QKᵀ / √d_k) V:

  1. 內積: query 和每個 key 做內積,方向越接近分數越高。
  2. 縮放: 除以 √d_k(d_k 是 key 的維度)。
  3. softmax: 把分數變成權重。
  4. 加權平均: 用權重把 value 加起來。

下面的句子是「小安把書放在桌上」,先手動切成六段,我們只看「放」這個位置。

逐步看:算一個位置的注意力

每個數字都很簡單,可以自己心算對照。「放」的 query 是手設的:主要在找物品,其次找地點。請看最後權重最高的是哪個字。

互動練習:調 query,看注意力權重

同一個句子、同一組手設向量。點字可以載入那個字的 query;滑桿可以自己調 query 與溫度。溫度不在論文的公式裡,是這個工具為了觀察分數差距的影響而加的,T=1 時就是論文的計算方式。

逐步看:一次算完整句

每個字都提出自己的 query(手設)。用矩陣可以一次算完,不需要迴圈。這種 query、key、value 都來自同一個句子的情況,叫做自注意力(self-attention)。

這個計算沒有用到字的順序

剛才的算式裡,每個字只靠向量互相比對,完全沒有用到它排在第幾個。把句子打亂,每個字的權重分配不會變,只是排列跟著換位置。所以論文另外把位置資訊加到輸入向量裡。

真實模型和這個範例還有幾個差別:

  • 向量是學出來的。query、key、value 由同一個位置的向量分別乘上三個學出來的矩陣得到,不是人設定的。
  • 論文同時算多組注意力再合併(multi-head),每組可以看不同的關係,並且一層一層疊起來。
  • 這裡的維度只有 4,還有名稱;真實模型的維度很多,單一維度通常也沒有這麼乾淨的意義。

逐步看:為什麼要除以 √d_k

這裡用隨機向量做個小實驗:維度變大時,內積的分布怎麼變?不除和除以 √d_k,softmax 的結果差多少?

縮放的原因

論文的作者推測:維度大時,內積的數值也會變大,把 softmax 推到梯度很小的區域,訓練就不容易進行,所以除以 √d_k 抵銷這個效果。上面的實驗看到的是前半段:不除時分數差距太大,權重幾乎集中在一個字上。

梯度與訓練在機器學習軌的神經網路課會學到,這一軌不會用到。

實作:寫出 attention 函數

完成兩個函數,不使用迴圈:

  • softmax(x):把一維陣列變成權重。
  • attention(q, K, V):照上面的四步計算,回傳 (權重, 輸出向量)。

這題不呼叫模型,資料是手設的,可以自由修改來觀察結果,但比對答案時要改回原本的數字。

你的輸出
預期輸出

小測驗:注意力的計算

1.

這段程式會印出什麼?

2.

這段程式會印出什麼?

3.

query、key、value 裡,哪一個是依權重加起來、成為輸出的內容?

4.

依照論文,為什麼要除以 √d_k?

5.

關於本課範例的權重,下面哪個說法最恰當?

第 1 次作答

重點整理

  • softmax 把任意分數變成加起來等於 1 的權重;差距放大時分布變集中,縮小時變平均。
  • 注意力的四步:query 和 key 做內積、除以 √d_k、softmax、對 value 加權平均。
  • 自注意力讓每個位置都混入其他位置的資訊;計算本身沒有順序,所以模型另外加入位置資訊。
  • 本課的向量是手設的示意值;真實模型的向量是學出來的,權重也不等於模型的理由或理解。

下一課: 模型最後要從所有 token 裡選出下一個。下一課看真實的候選機率,以及 temperature 與 top_p 怎麼影響選擇。

這一課完成了!
Next lesson:溫度與抽樣
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。