第四章 数值计算
掌握深度学习中所需要的数值计算相关知识
- 数值计算[p72-p85]
4.1 上溢和下溢
-
下溢(underflow):当接近零的数被四舍五入为零时发生下溢。许多函数在其参数为零会发生异常,如除数为零、取零的对数等。
-
上溢(vector):当大量级的数被近似为 ∞ \infty ∞ 或 − ∞ -\infty −∞ 时发生上溢。进一步的运算通常会导致这些无限值变为非数字。
4.2 病态条件
- 条件数表征函数相对于输入的微小变化而变化的快慢程度。输入被轻微扰动而迅速改变的函数对于科学计算来说可能是有问题的,因为输入中的舍入误差可能导致输出的巨大变化。
4.3 基于梯度的优化方法
- 目标函数(objective function)或准则(criterion):我们希望最小化或最大化的函数,也把它称为代价函数(cost function)、
损失函数(loss function)或误差函数(error function)。
x ∗ = arg min f ( x ) \boldsymbol{x}^{*}=\arg \min f(\boldsymbol{x}) x∗=argminf(x)
- 导数(derivative): f ′ ( x ) {f}'(x) f′(x)代表 f ( x ) f(x) f(x)在点 x x x处的斜率。
f ( x + ξ ) ≈ f ( x ) + ξ f ′ ( x ) f(x+\xi )\approx f(x)+\xi {f}'(x) f(x+ξ)≈f(x)+ξf′(x)
-
梯度下降(gradient descent):以将 x x x往导数的反方向移动一小步来减小 f ( x ) f(x) f(x)。
-
临界点(critical point)或驻点(stationary point): f ′ ( x ) = 0 {f}'(x) = 0 f′(x)=0 的点
-
局部极小点(local minimum):这个点的 f ( x ) f(x) f(x)小于所有邻近点
-
局部极大点(local minimum):这个点的 f ( x ) f(x) f(x)大于所有邻近点
-
鞍点(saddle point):有些临界点既不是最小点也不是最大点
-
全局最小点(global minimum):使 f ( x ) f(x) f(x)取得绝对的最小值(相对所有其他值)的点
-
偏导数(partial derivative):偏导数 ∂ ∂ x i f ( x ) \frac{\partial }{\partial x_i}f(\boldsymbol{x}) ∂xi∂f(x)衡量点 x \boldsymbol{x} x处只有 x i x_i xi 增加时 f ( x ) f(x) f(x) 如何变化。
-
梯度(gradient)是相对一个向量求导的导数: f f f 的导数是包含所有偏导数的向量,记为 ∇ x f ( x ) ∇_x f(x) ∇xf(x)。
-
在 u u u(单位向量)方向的方向导数(directional derivative)是函数 f f f 在 u u u 方向的斜率。
-
最速下降法(method of steepest descent)或梯度下降(gradient descent):在负梯度方向上移动可以减小 f f f。 ξ \xi ξ是学习率(learning rate)。
x ′ = x − ξ ∇ x f ( x ) \boldsymbol{x}'=\boldsymbol{x}-\xi ∇_x f(x) x′=x−ξ∇xf(x)
4.3.1 梯度之上:Jacobian 和Hessian 矩阵
- 计算输入和输出都为向量的函数的所有偏导数。包含所有这样的偏导数的矩阵被称为Jacobian矩阵。
f : R m → R n , J ∈ R n × m , J i , j = ∂ ∂ x j f ( x ) i \boldsymbol{f}:\mathbb{R}^m \to \mathbb{R}^n,J \in \mathbb{R}^{n \times m},J_{i,j}=\frac{\partial }{\partial x_j}f(\boldsymbol{x})_i f:Rm→Rn,J∈Rn×m,Ji,j=∂xj∂f(x)i
-
二阶导数(second derivative):即导数的导数,它表示一阶导数将如何随着输入的变化而改变。
-
Hessian矩阵:二阶导数的矩阵,等价于梯度的Jacobian矩阵。
H ( f ) ( x ) i , j = ∂ 2 ∂ x i ∂ x j f ( x ) \boldsymbol{H}(f)(\boldsymbol{x})_{i,j}=\frac{\partial^2 }{\partial x_i \partial x_j}f(\boldsymbol{x}) H(f)(x)i,j=∂xi∂xj∂2f(x)
-
二阶导数测试(second derivative test):当${f}’(x) = 0 且 且 且{f}’’(x) > 0$ 时, x x x 是一个局部极小点。同样,当 f ′ ( x ) = 0 {f}'(x) = 0 f′(x)=0 且 f ′ ′ ( x ) < 0 {f}''(x) < 0 f′′(x)<0时, x x x是一个局部极大点。
-
一阶优化算法(first-order optimization algorithms):仅使用梯度信息的优化算法,如梯度下降。
-
使用Hessian 矩阵的优化算法被称为二阶最优化算法
(second-order optimization algorithms),如牛顿法(Newton’s method)。 -
Lipschitz 连续(Lipschitz continuous):
∀ x , ∀ y , ∣ f ( x ) − f ( y ) ∣ ⩽ L ∥ x − y ∥ 2 \forall \boldsymbol{x},\forall \boldsymbol{y},\left | f(\boldsymbol{x}) - f(\boldsymbol{y}) \right | \leqslant L \left \| \boldsymbol{x} - \boldsymbol{y} \right \|_2 ∀x,∀y,∣f(x)−f(y)∣⩽L∥x−y∥2
- 凸优化(Convex optimization):通过更强
的限制提供更多的保证。凸优化算法只对凸函数适用,在深度学习中应用很少。
4.4 约束优化
-
约束优化(constrained optimization):在 x x x 的某些集合 S \mathbb{S} S 中找 f ( x ) f(x) f(x) 的最大值或最小值。集合 S \mathbb{S} S 内的点 x x x 被称为可行(feasible)点。
-
Karush–Kuhn–Tucker(KKT)方法是针对约束优化非常通用的解决方案,Lagrange 乘子法(只允许等式约束)的推广。这些是确定一个点是最优点的必要条件,但不一定是充分条件。这些条件是:
- 广义Lagrangian 的梯度为零。
- 所有关于 x x x 和 K K T KKT KKT 乘子的约束都满足。
- 不等式约束显示的"互补松弛性": α ⊙ h ( x ) = 0 \alpha ⊙ h(x) = 0 α⊙h(x)=0
-
广义Lagrangian 定义:那么 S \mathbb{S} S可以表示为$\mathbb{S} = \left { \boldsymbol{x} \mid \forall i,g^{(i)}(\boldsymbol{x}) =0 and \forall j,h^{(j)}(\boldsymbol{x}) \leq 0 \right } 。 其 中 涉 及 。其中涉及 。其中涉及g^{(i)}$ 的等式称为等式约束(equality constraint),
涉及 h ( j ) h^{(j)} h(j) 的不等式称为不等式约束(inequality constraint)。
L ( x , λ , α ) = f ( x ) + ∑ i λ i g ( i ) ( x ) + ∑ j α j g ( j ) ( x ) L(\boldsymbol{x,\lambda,\alpha})=f(\boldsymbol{x})+\sum_{i} \lambda_{i}g^{(i)}(\boldsymbol{x})+\sum_{j} \alpha_{j}g^{(j)}(\boldsymbol{x}) L(x,λ,α)=f(x)+i∑λig(i)(x)+j∑αjg(j)(x)
- 线性相关(linear dependence):某个向量是一组向量中某些向量的线性组合
- 线性无关(linear independent):一组向量中
的任意一个向量都不能表示成其他向量的线性组合 - 方阵(square):矩阵行和列相等
- 奇异矩阵(singular):列向量线性相关的方阵,不可逆
4.5 实例:线性最小二乘
f ( x ) = 1 2 ∥ A x − b ∥ 2 2 f(\boldsymbol{x})=\frac {1} {2} \left \| \boldsymbol{Ax}-\boldsymbol{b} \right \|_2 ^2 f(x)=21∥Ax−b∥22