1、上溢和下溢
连续数学在计算机上的根本困难是,我们需要通过有限数量的位模式来表示无限多的实数。这意味着我们在计算机中表示实数时,总会引入一些近似误差。
一种极具毁灭性的舍入误差是下溢(underflow)。当接近零的数被四舍五入为零时发生下溢。
另一个极具破坏力的数值错误形式是上溢(overflow),当大量的数被近似为正无穷或负无穷时发生上溢。进一步的运算通常会导致这些无限值变为非数字。
必须对上溢和下溢进行数值稳定的一个例子是softmax函数(softmax function)。softmax 函数经常用于预测与 Multinoulli 分布相关联的概率,定义为
2、病态条件
条件数表征函数相对于输入的微小变化而变化的快慢程度。输入被轻微扰动而迅速改变的函数对于科学计算来说可能是有问题的,因为输入中的舍入误差可能导致输出的巨大变化。
3、基于梯度的优化方法
大多数深度学习都涉及某种形式的优化。优化指的是改变x以最小化或最大化某个函数f(x)的任务。我们通常以最小化f(x)指代大多数优化问题。最大化可以由-f(x)来实现。
我们把要最小化或最大化的函数称为目标函(objective function)或准则(criterion)。当我们对其进行最小化时,我们也把它称为代价函数(cost function)、损失函数(loss function)或误差函(error function)。
我们通常使用一个上标表示最小化或最大化函数的x值。记为x=argmin f(x)。
导数对于最小化函数很有用,因为它告诉我们如何更改x来略微地改善y。例如,我们知道对于足够小的 ϵ来说f(x − ϵsign(f ′ (x))) 是比 f(x) 小的。因此我们可以将 x 往导数的反方向移动一小步来减小 f(x)。这种技术被称为梯度下降
(gradient descent)
使 f(x) 取得绝对的最小值(相对所有其他值)的点是全局最小点(global minimum)在深度学习的背景下,我们要优化的函数可能含有许多不是最优的局部极小点,或者还有很多处于非常平坦的区域内的鞍点。尤其是当输入是多维的时候,所有这些都将使优化变得困难。因此,我们通常寻找使 f 非常小的点,但这在任何形式意义下并不一定是最小。
最速下降建议新的点为
x ′ = x − ϵ∇ x f(x) 其中 ϵ 为学习率(learning rate),是一个确定步长大小的正标量。我们可以通过几种不同的方式选择 ϵ。普遍的方式是选择一个小常数。有时我们通过计算,选择使方向导数消失的步长。还有一种方法是根据几个 ϵ 计算 f(x − ϵ∇ x f(x)),并选择其中
能产生最小目标函数值的 ϵ。这种策略被称为线搜索。