2025年01月10日
重要的事情说三遍:
!!!因博客技术问题导致,本文出现的所有数学公式都会重复一次,所以都已第一次为准 !!!
!!!因博客技术问题导致,本文出现的所有数学公式都会重复一次,所以都已第一次为准 !!!
!!!因博客技术问题导致,本文出现的所有数学公式都会重复一次,所以都已第一次为准 !!!
start - [69页](3.14 结构化概率模型)
- 第三章 概率
- 结构化概率模型
- 模型分解
- 通过条件概率分解成有向图和无向图
- 第四章 数值计算
- 数值的上溢和下溢
- softmax函数
- 病态条件
- 基于梯度优化算法
- 梯度下降
- 临界点或者驻点
- 局部极小值
- 局部极大值
- 鞍点(saddle point)
数值的上溢和下溢
- 下溢: 一种极具毁灭性的舍入误差是 下溢(underflow) 。当接近零的数被四舍五入为零时发生下溢。
- 上溢: 另一个极具破坏力的数值错误形式是 上溢(overflow) 。当大量级的数被近似为∞ 或 −∞ 时发生上溢。进一步的运算通常会导致这些无限值变为非数字
例如:softmax函数
假设我们有一个包含 n 个元素的向量 z=[z1,z2,…,zn],Softmax函数将其转换为一个概率向量 p=[p1,p2,…,pn],其中每个元素 pi 的计算公式为:
pi=∑j=1nezjezi
其中,e 是自然对数的底(约等于2.71828)。
Softmaxmathbf{z} = [1000, 1001, 1002]$ 的数值稳定化后的Softmax输出为 $\mathbf具有较大或较小的值时。这是因为指数函数 ex 的增长速度非常快,当输入值较大时,ex 可能会超过计算机所能表示的最大浮点数,导致上溢;当输入值较小时,ex 可能会接近零,导致下溢。
解决上溢和下溢问题
为了避免上溢和下溢问题,我们可以对Softmax函数进行数值稳定化处理。常用的方法是减去输入向量中的最大值。这不会改变Softmax函数的输出结果,因为减去一个常数不会影响相对比例。
数值稳定化的Softmax函数
假设我们有一个包含 n 个元素的向量 z=[z1,z2,…,zn],我们可以对其进行数值稳定化处理,计算Softmax输出:
pi=∑j=1nezj−max(z)ezi−max(z)
其中,max(z) 是向量 z 中的最大值。
例子
假设我们有一个包含3个元素的向量 z=[1000,1001,1002],我们可以计算其数值稳定化后的Softmax输出:
-
找到最大值:
max(z)=1002
-
减去最大值:
z−max(z)=[1000−1002,1001−1002,1002−1002]=[−2,−1,0]
- 计算每个元素的指数:
e−2≈0.1353
e−1≈0.3679
e0=1
- 计算指数和:
j=1∑3ezj−max(z)=0.1353+0.3679+1≈1.5032
- 计算每个元素的Softmax输出:
p1=1.5032e−2≈0.0900
p2=1.5032e−1≈0.2447
p3=1.5032e0≈0.6652
因此,向量 z=[1000,1001,1002] 的数值稳定化后的Softmax输出为 p=[0.0900,0.2447,0.6652]。