答案页 · 12 道题

Python softmax 与温度练习答案

本页汇总 Python softmax 与温度 的 12 道练习。先做练习页,再回到这里核对准确答案和原因。

快速答案

本答案页包含 Python softmax 与温度 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。

答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。

01 · 选择题

softmax 分布的总和是多少?

  1. 类别数量
  2. 1正确答案
  3. 0
  4. 最大 logit

答案: 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. [0.25, 0.75]
  2. [1.0, 1.0]
  3. [0.5, 0.5]正确答案
  4. [0.0, 0.0]

答案: [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 道题。

练习本课