2025年01月10日

重要的事情说三遍:

!!!因博客技术问题导致,本文出现的所有数学公式都会重复一次,所以都已第一次为准 !!!
!!!因博客技术问题导致,本文出现的所有数学公式都会重复一次,所以都已第一次为准 !!!
!!!因博客技术问题导致,本文出现的所有数学公式都会重复一次,所以都已第一次为准 !!!

start - [69页](3.14 结构化概率模型)

  • 第三章 概率
    • 结构化概率模型
    • 模型分解
    • 通过条件概率分解成有向图和无向图
  • 第四章 数值计算
    • 数值的上溢和下溢
    • softmax函数
    • 病态条件
    • 基于梯度优化算法
      • 目标函数、代价函数、损失函数、误差函数等
    • 梯度下降
      • 临界点或者驻点
      • 局部极小值
      • 局部极大值
      • 鞍点(saddle point)

数值的上溢和下溢

  • 下溢: 一种极具毁灭性的舍入误差是 下溢(underflow) 。当接近零的数被四舍五入为零时发生下溢。
  • 上溢: 另一个极具破坏力的数值错误形式是 上溢(overflow) 。当大量级的数被近似为∞ 或 −∞ 时发生上溢。进一步的运算通常会导致这些无限值变为非数字

例如:softmax函数

假设我们有一个包含 nn 个元素的向量 z=[z1,z2,,zn]\mathbf{z} = [z_1, z_2, \ldots, z_n],Softmax函数将其转换为一个概率向量 p=[p1,p2,,pn]\mathbf{p} = [p_1, p_2, \ldots, p_n],其中每个元素 pip_i 的计算公式为:

pi=ezij=1nezjp_i = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}}

其中,ee 是自然对数的底(约等于2.71828)。

Softmaxmathbf{z} = [1000, 1001, 1002]$ 的数值稳定化后的Softmax输出为 $\mathbf具有较大或较小的值时。这是因为指数函数 exe^x 的增长速度非常快,当输入值较大时,exe^x 可能会超过计算机所能表示的最大浮点数,导致上溢;当输入值较小时,exe^x 可能会接近零,导致下溢。

解决上溢和下溢问题

为了避免上溢和下溢问题,我们可以对Softmax函数进行数值稳定化处理。常用的方法是减去输入向量中的最大值。这不会改变Softmax函数的输出结果,因为减去一个常数不会影响相对比例。

数值稳定化的Softmax函数

假设我们有一个包含 nn 个元素的向量 z=[z1,z2,,zn]\mathbf{z} = [z_1, z_2, \ldots, z_n],我们可以对其进行数值稳定化处理,计算Softmax输出:

pi=ezimax(z)j=1nezjmax(z) p_i = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_{j=1}^{n} e^{z_j - \max(\mathbf{z})}}

其中,max(z)\max(\mathbf{z}) 是向量 z\mathbf{z} 中的最大值。

例子

假设我们有一个包含3个元素的向量 z=[1000,1001,1002]\mathbf{z} = [1000, 1001, 1002],我们可以计算其数值稳定化后的Softmax输出:

  1. 找到最大值

    max(z)=1002\max(\mathbf{z}) = 1002

  2. 减去最大值

zmax(z)=[10001002,10011002,10021002]=[2,1,0]\mathbf{z} - \max(\mathbf{z}) = [1000 - 1002, 1001 - 1002, 1002 - 1002] = [-2, -1, 0]

  1. 计算每个元素的指数

e20.1353e^{-2} \approx 0.1353

e10.3679e^{-1} \approx 0.3679

e0=1e^{0} = 1

  1. 计算指数和

j=13ezjmax(z)=0.1353+0.3679+11.5032\sum_{j=1}^{3} e^{z_j - \max(\mathbf{z})} = 0.1353 + 0.3679 + 1 \approx 1.5032

  1. 计算每个元素的Softmax输出

p1=e21.50320.0900p_1 = \frac{e^{-2}}{1.5032} \approx 0.0900

p2=e11.50320.2447p_2 = \frac{e^{-1}}{1.5032} \approx 0.2447

p3=e01.50320.6652p_3 = \frac{e^{0}}{1.5032} \approx 0.6652

因此,向量 z=[1000,1001,1002]\mathbf{z} = [1000, 1001, 1002] 的数值稳定化后的Softmax输出为 p=[0.0900,0.2447,0.6652]\mathbf{p} = [0.0900, 0.2447, 0.6652]

下一篇