深度学习中的数值计算

2020/3/30 6:02:13

本文主要是介绍深度学习中的数值计算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  • 本文首发自公众号:RAIS

前言

本系列文章为 《Deep Learning》 读书笔记,可以参看原书一起阅读,效果更佳。

数值计算

机器学习算法需要大量的数字计算,并且这些计算包含有一些迭代拟合的过程,在这个计算过程中,由于计算机的局限,无法完全精确的表示,因此总是存在误差的,小的误差经过迭代次数的增多,或者多个误差的叠加,甚至会使得算法不可用,系统失效。

上溢和下溢

  • 下溢:在现有的精度无法表示那么小的数的时候,接近零的数四舍五入为零时,会发生下溢。
  • 上溢:在现有的精度无法表示那么大的数的时候,数过大被近似为无限大的时候,会发生上溢。

解决办法: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


这篇关于深度学习中的数值计算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程