公式:softmax(x_i) = exp(x_i) / ∑ exp(x_j)。指数运算放大差异:如果一个logit是10,另一个是5,softmax后的比率不是2:1而是大约150:1。这种赢家通吃的行为是模型倾向于自信的原因——softmax自然产生尖峰分布而非均匀分布。
温度通过在softmax之前除以logits来应用:softmax(x_i / T)。温度T=1是标准值。T<1使分布更尖锐(更自信、更确定性)。T>1使其更平坦(更均匀、更随机)。这正是LLM API中“温度”参数的工作原理——它是在选择下一个token的最终softmax之前应用于logits的标量。
一个实际的实现细节:对较大的x值计算exp(x)会导致溢出。标准修复方法是在应用softmax之前从所有logits中减去最大值:softmax(x_i - max(x))。这不会改变输出(减去的常数在比率中抵消),但使数值保持在可管理的范围内。每个生产级softmax实现都这样做,这是从零开始构建时很重要的细节。