ziop
Published on 2025-01-10 / 2 Visits
0
0

花书-深度学习

2025年01月10日

重要的事情说三遍:

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

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

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

数值的上溢和下溢

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

例如:softmax函数

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

$$
p_i = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}}
$$

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

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

解决上溢和下溢问题

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

数值稳定化的Softmax函数

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

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

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

例子

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

  1. 找到最大值

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

  2. 减去最大值

$$
\mathbf{z} - \max(\mathbf{z}) = [1000 - 1002, 1001 - 1002, 1002 - 1002] = [-2, -1, 0]
$$

  1. 计算每个元素的指数

$$
e^{-2} \approx 0.1353
$$

$$
e^{-1} \approx 0.3679
$$

$$
e^{0} = 1
$$

  1. 计算指数和

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

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

$$
p_1 = \frac{e^{-2}}{1.5032} \approx 0.0900
$$

$$
p_2 = \frac{e^{-1}}{1.5032} \approx 0.2447
$$

$$
p_3 = \frac{e^{0}}{1.5032} \approx 0.6652
$$

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


Comment