答案頁 · 12 道題

Python softmax 與溫度練習答案

本頁彙整 Python softmax 與溫度 的 12 道練習。先做練習頁,再回到這裡核對準確答案和原因。

快速答案

本答案頁包含 Python softmax 與溫度 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。

答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。

01 · 選擇題

softmax 分布的總和是多少?

  1. 最大 logit
  2. 1正確答案
  3. 0
  4. 類別數量

答案: 1

為什麼: softmax 用總和歸一化每個指數值,因此機率總和為一。

02 · 選擇題

為什麼在取 exp 前減去最大 logit?

  1. 避免數值溢出,同時不改變比例正確答案
  2. 刪除負類
  3. 讓答案比模型更準確
  4. 讓所有機率相等

答案: 避免數值溢出,同時不改變比例

為什麼: 所有 logit 減去同一常數不會改變 softmax 比例,還能讓 exp 保持在範圍內。

03 · 選擇題

較低的溫度會怎樣?

  1. 讓分布更尖銳正確答案
  2. 不再需要歸一化
  3. 改變類別數量
  4. 讓每個機率相等

答案: 讓分布更尖銳

為什麼: 用更小的正溫度除 logits,會擴大高分與低分之間的差距。

04 · 選擇題

執行結果是什麼?

import math

def softmax(logits):
    largest = max(logits)
    exps = [math.exp(x - largest) for x in logits]
    total = sum(exps)
    return [x / total for x in exps]

print([round(p, 2) for p in softmax([0, 0])])
  1. [1.0, 1.0]
  2. [0.0, 0.0]
  3. [0.25, 0.75]
  4. [0.5, 0.5]正確答案

答案: [0.5, 0.5]

為什麼: 相同 logits 得到相同機率,兩個值總和為一。

05 · 填空題

補全 softmax 中的穩定平移。

import math

logits = [1000, 1000]
largest = max(logits)
exps = [math.exp(x - ____) for x in logits]
total = sum(exps)
print([round(x / total, 2) for x in exps])

答案: largest

為什麼: 減去最大 logit 可以避免指數溢出。

06 · 填空題

補全歸一化的分母。

import math

logits = [2, 0]
largest = max(logits)
exps = [math.exp(x - largest) for x in logits]
total = sum(exps)
print([round(x / ____, 3) for x in exps])

答案: total

為什麼: 每個指數值都除以所有指數值的總和。

07 · 填空題

補全溫度縮放步驟。

import math

logits = [2, 0]
temperature = 2.0
scaled = [x / ____ for x in logits]
largest = max(scaled)
exps = [math.exp(x - largest) for x in scaled]
total = sum(exps)
print([round(x / total, 3) for x in exps])

答案: temperature

為什麼: 溫度在穩定 softmax 計算前除 logits。

08 · 填空題

補全按機率選擇最大值的 key 函式。

probs = [0.2, 0.8]
winner = max(range(len(probs)), key=probs.____)
print(winner)

答案: __getitem__

為什麼: probs.__getitem__ 讓 max 按索引比較機率。

09 · 輸出預測

這段程式列印出什麼?

import math

def softmax(logits):
    largest = max(logits)
    exps = [math.exp(x - largest) for x in logits]
    total = sum(exps)
    return [x / total for x in exps]

print([round(p, 3) for p in softmax([0, 0])])

答案: [0.5, 0.5]

為什麼: 相同 logits 產生總和為一的相等機率。

10 · 輸出預測

程式碼的輸出結果是什麼?

import math

def softmax(logits):
    largest = max(logits)
    exps = [math.exp(x - largest) for x in logits]
    total = sum(exps)
    return [x / total for x in exps]

print([round(p, 3) for p in softmax([2, 0])])

答案: [0.881, 0.119]

為什麼: 較大的 logit 獲得大部分機率:約 0.881 對 0.119。

11 · 輸出預測

螢幕上會顯示什麼?

import math

def softmax(logits, temperature):
    scaled = [x / temperature for x in logits]
    largest = max(scaled)
    exps = [math.exp(x - largest) for x in scaled]
    total = sum(exps)
    return [x / total for x in exps]

print([round(p, 3) for p in softmax([2, 0], 2.0)])

答案: [0.731, 0.269]

為什麼: 更高的溫度讓分布更平緩,約為 0.731 和 0.269。

12 · 輸出預測

這段程式碼會輸出什麼?

probs = [0.7, 0.2, 0.1]
print(round(sum(probs), 3))

答案: 1.0

為什麼: 這些機率的總和是 1.0。

先試一遍題目

打開 Python softmax 與溫度 練習頁,用即時回饋回答同樣的 12 道題。

練習本課