深度学习中的数值计算
renyuzhuo 人气:1
- 本文首发自公众号:[RAIS](https://ai.renyuzhuo.cn/about)
## 前言
本系列文章为 [《Deep Learning》](https://ai.renyuzhuo.cn/books/DeepLearning) 读书笔记,可以参看原书一起阅读,效果更佳。
## 数值计算
机器学习算法需要大量的数字计算,并且这些计算包含有一些迭代拟合的过程,在这个计算过程中,由于计算机的局限,无法完全精确的表示,因此总是存在误差的,小的误差经过迭代次数的增多,或者多个误差的叠加,甚至会使得算法不可用,系统失效。
### 上溢和下溢
- 下溢:在现有的精度无法表示那么小的数的时候,接近零的数四舍五入为零时,会发生下溢。
- 上溢:在现有的精度无法表示那么大的数的时候,数过大被近似为无限大的时候,会发生上溢。
解决办法:softmax 函数,也称 **归一化指数函数**,是逻辑函数的一种推广,将任意实数的 K 维向量映射到另外一个 K 维空间内,使得每一个元素都在 (0, 1) 之间。这里的 **归一化** 与之前在房价预测中提到的 **标准化** 不是一个概念(标准化对数据进行某种非线性变换,使其服从某一种分布,归一化对数值的范围进行缩放,不改变数据分布的一种线性变换)。
$$
softmax(x)_i=\frac{e^{x_i}}{\sum_{j=1}^ne^{x_j}}
$$
### 病态条件(poor conditioning)
这个词我觉得翻译不准确,但是大家都喜欢这么叫暂且先这么叫吧。一般来说这个概念针对的是方程组或矩阵,微小的扰动让方程组的解发生巨大的变化,这样的方程组称为病态方程组,他们的系数组成的矩阵叫病态矩阵。
与之相关的还有一个概念叫 **条件数**:函数相对于输入的微小变化而变化的程度,可以理解为一种敏感度。计算方法是求矩阵极大和极小特征值之比。
$$
\max_{i,j}=|\frac{\lambda_i}{\lambda_j}|
$$
### 基于梯度的优化方法
这个概念要分几步去理解。对于深度学习算法,往往会定义出很多函数,针对具体的问题,我们往往需要让某些函数的函数值尽可能的小或大,求最大值极值,我们往往求导(针对多个变量,这里的求导包括求偏导和方向导数),也会求梯度。**梯度下降** 指的是往梯度方向相反方向移动一个小距离来减小函数值的方法。这里还有极小值、极大值、驻点、最大值、最小值等概念,不再赘述。
### 雅可比矩阵(Jacobian)
在向量分析中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,它的重要性是体现了一个可微分方程与给出点的最优线性逼近。
$$
J_{i,j}=\frac{\partial}{\partial x_j}f(x)_i
$$
### 海森矩阵(Hessian)
函数有多维输入时,二维导数有很多,将其合为一个矩阵,就是海森矩阵,等价于梯度的雅可比矩阵。
$$
H(f)(x)_{i,j}=\frac{\partial^2}{\partial x_i\partial x_j}f(x)=H(f)(x)_{j,i}
$$
一个点在每个方向上的二阶导数是不同的,海森的条件数衡量这些二阶导数的变化范围,当海森的条件数变得很差时,梯度下降法也会表现得很差,在 **牛顿法** 中,我们用海森矩阵指导搜索,来解决上面这个问题。
- 二阶导数测试:一阶导数等于 0,二阶导数大于零是一个极小值点;一阶导数等于 0,二阶导数小于零是一个极大值。
- 仅使用梯度信息的优化算法称为 **一阶优化算法**,使用海森矩阵的优化算法称为 **二阶优化算法**。
## 总结
这一部分的内容涉及东西比较多,书中的内容还包括一些推导和解释,看上文看的不是很清楚的请阅读原书,那就不是我的笔力所能讲清楚的了。
到此本书中关于应用数学相关的内容就结束了,想要放弃了吗?
- 本文首发自公众号:[RAIS](https://ai.renyuzhuo.cn/about)
加载全部内容