机器学习中需要大量的数值运算,通常指的是迭代更新求解数学问题。常见的操作包括优化算法和线性方程组的求解。
1-溢出
- 下溢:由于计算机进行数值计算时精度有限,下溢是在四舍五入为零时发生。例如:当零做除数时,会返回非数值( not a number,NaN n o t a n u m b e r , N a N ),对零取对数则会得到 −∞ − ∞
- 上溢:当大数量级的数被近似为”
+∞,−∞
+
∞
,
−
∞
”时,进一步的运算容易导致返回(
NaN
N
a
N
)
对上溢和下溢需要进行数值稳定,例如 softmax s o f t m a x 函数:
softmax(xi)=exp(xi)∑nj=1exp(xj) s o f t m a x ( x i ) = e x p ( x i ) ∑ j = 1 n e x p ( x j )
若
xi
x
i
是都是很小的负数,
exp(xi)
e
x
p
(
x
i
)
会发生下溢,分母会变为0,则最后的结果会是NaN。当
xi
x
i
是很大的正数,
exp(xi)
e
x
p
(
x
i
)
h会发生上溢,同样会导致结果未定义。这两种情况都可以通过
softmax(z),zi=xi−max(xi)
s
o
f
t
m
a
x
(
z
)
,
z
i
=
x
i
−
m
a
x
(
x
i
)
来解决。
zi
z
i
的最大值为0,且相当于分子分母同时除以
exp(max(xi))
e
x
p
(
m
a
x
(
x
i
)
)
,并不会影响
softmax
s
o
f
t
m
a
x
的结果。
还有个小问题:在计算
logsoftmax(x)
l
o
g
s
o
f
t
m
a
x
(
x
)
时,如果先计算
softmax(x)
s
o
f
t
m
a
x
(
x
)
,载将其传给
log(x)
l
o
g
(
x
)
,分子的下溢就会导致
log(0)=−∞
l
o
g
(
0
)
=
−
∞
。因此需要以数值稳定方式同时计算
logsoftmax
l
o
g
s
o
f
t
m
a
x
:
2-病态条件
条件数用于表征当输入发生微小变化时,函数变化的快慢程度。
例如:
f(x)=A−1x,当A∈Rn×n
f
(
x
)
=
A
−
1
x
,
当
A
∈
R
n
×
n
具有特征分解时,条件数为:
max|λi/λj|
m
a
x
|
λ
i
/
λ
j
|
,条件数较大时,求逆对于输入误差特别敏感。
这是矩阵本身的特性,与计算机精度无关。
3- 基于梯度下降的优化
优化是指通过改变
x
x
来最大化或最小化函数.在深度学习中,通常都是用最小化函数拉进行优化,对于最大化任务则可以通过最小化
−f(x)
−
f
(
x
)
来完成。 表示为:
f(x) f ( x ) 可以称之为 目标函数( object function o b j e c t f u n c t i o n ),或者准则( crition c r i t i o n ), 在最小化任务中还可以称之为 损失函数( loss function l o s s f u n c t i o n )、代价函数( cost function c o s t f u n c t i o n )或误差函数( error function e r r o r f u n c t i o n )。
函数的导数: f′(x)=0 f ′ ( x ) = 0 时, x x 称为临界点()或驻点( stationary point s t a t i o n a r y p o i n t ),这些点有可能是局部极小点、局部极大点或者鞍点。
g
其中 ϵ ϵ 为学习率(learning rate),用于确定更新的步长大小。可以通过线搜索的方式选择合适的学习率,即根据几个备选 ϵ ϵ 最终所得到的目标函数的最小值,选择结果最小的那个。