花书第四章笔记 数值计算
数值上溢和下溢
产生原因: 由于计算机的精度造成,超过浮点数的精度的部分数值就会被舍去。但是在我们正常退导中是不存在的。当操作数值极小或者极大的情况下可能引起上溢或者下溢。
深度学习底层框架需要考虑的数值稳定性。
下溢: 接近零的数被四舍五入为0时候发生下溢。 运算通常会导致这些无限值变为非数字
上溢:当大量级的数被近似为 ∞ 或 −∞ 发生上溢。与计算通常会导致这些无限值变为非数字。
示例:
softmax(xi)=∑j=1nexjexi
解决办法,通过计算 softmax(z) 同时解决 z=x−maxixi。 分母至少一项为1 避免下溢 exp的最大参数为0 避免上溢。
病态条件
输入被轻微扰动而迅速改变的函数对于科学计算可能是有问题的,输入中的舍入误差可能导致输出的巨大变化。
例子:https://blog.csdn.net/pipisorry/article/details/52241141
基于梯度的优化方法
临界点 : f′(x)=0 ,导数无法提供往哪个方向移动的信息。
局部最小点: 该点小于所有邻近点,无法通过移动无穷小步来减小函数值
局部极大点: 该点大于所有邻近点 ,无法动过移动无穷小步来增大函数值
鞍点: 临界点中不是局部极小点或者不是局部最大点。
全局最小点: 使得 f(x) 取得绝对的最小值的点 。 全局最小点有可能存在多个, 有可能不存在
导数: 一元函数中对变量求导得到的值,称为导数。图形中可以表示为曲线的斜率。
偏导数: 多元函数中,对其中一个向量的导数。偏导数衡量 x处变化只有 xi 增加时,f(x)该如何变化。
梯度: 多元函数中,包含所有偏导数值的向量。 g(x)=▽f(x)=(∂x1∂f,∂x2∂f,⋯,∂xm∂f)
方向导数: 在 μ(单位向量) 方向的方向导数是函数f 在μ 方向的斜率 ∂α∂f(x+αμ)=μT▽xf(x) 在 α=0 时刻取得
最速下降法或梯度下降: 负梯度方向上移动减小f 。 minμ,μTμ=1μT▽xf(x)=min∣∣μ∣∣2∣∣▽xf(x)∣∣2cosθ
θ=180 度时候 取得最小值 -1
x′=x−ϵ▽xf(x)ϵ=learningrate
参考资料: https://blog.csdn.net/tina_ttl/article/details/51202566
雅克比矩阵 (jacobian): 输入输出都是向量的函数,对应的是所有偏导数。 f:Rm→:Rn
▽f(x)=⎣⎢⎢⎡∂x1∂f1⋮∂x1∂f1∂x2∂f2⋯⋯⋯⋯⋯∂xn∂fm⋮∂xn∂fm⎦⎥⎥⎤m×n
海森矩阵(Hessian) : 输入 m 为向量,输出标量。 二阶导数构成的矩阵矩阵。
如果元素为实数,Hessian 为实对称阵
Hf=▽x[g(x)]=▽x[(∂x1∂f,∂x2∂f,⋯,∂xm∂f)T]=⎣⎢⎢⎡∂x1x1∂2f⋮∂xn∂x1∂2f∂x1x2∂2f⋯∂xn∂x2∂2f⋯⋯⋯∂x1xn∂2f⋮∂xn∂xn∂2f⎦⎥⎥⎤n×n
Hessian 矩阵是实对称的,可以将其分解成一组实特征值和一组特征向量的正交基。
所以 Hd=λd⟹dTHd=λdTd=λ ,是由于特征向量的平方为1。特定方向的二阶导数对应的就是一个特征值。
由此我们可以得到性质,当 Hessian 矩阵是正(负)定的 (所有特征值都是正(负)的),改临界点是局部最小(大)点。
鞍点的判定,Hessian 矩阵的特征值至少一个为正,一个为负。x 为 f 为个横切面的局部极大值,确实另一个横切面的局部极小值。 梯度为0,无法进行判断。
有哪些学术界都搞错了,忽然间有人发现问题所在的事情?
深度学习的优化问题到底难在哪里?
https://www.zhihu.com/question/52782960/answer/133724696
hessian 矩阵在牛顿法中的使用 。
使用条件, Hessian 的条件数很差,即一个方向上导数增加很快,另外一个方向上增加很慢的情况。
无法使用 梯度下降来进行优化, (1)无法得知导数的变化 (2) 无法找到合适的步长。
基于一个二阶泰勒展开。
f(x)≈f(x0)+(x−x0)▽Tf(x0)+21(x−x0)Hf(x0)(x−x0)T
可以得到 这个函数的临界点:
x∗=x(0)−H(f)(x(0))−1▽xf(x(0))
f 是一个正定二次函数, 牛顿法只要应用一次式 就能直接跳到函数的最小值
f 不是一个真正二次但能在局部近似为正定二次,牛顿法则需要多次迭代应用式。迭代地更新近似函数和跳到近似函数的极小值可以比梯度下降更快地到达邻近点。
约束优化
希望在x 的一定范围集合中 找到 f(x) 的最大最小值,集合内的点 x 称为可行点。
比较常用的做法是设计一个不同的、无约束的优化问题,它的解可以转化为原始约束优化问题的解。
