尽管优化方法可以最小化深度学习中的损失函数值,但本质上优化方法达到的目标与深度学习的目标并不相同。
- 优化方法目标:训练集损失函数值
- 深度学习目标:测试集损失函数值(泛化性)
两者区别用画图体现:
In [1]:
%matplotlib inline
import sys
sys.path.append('/home/kesci/input')
import d2lzh1981 as d2l
from mpl_toolkits import mplot3d # 三维画图
import numpy as np
def f(x): return x * np.cos(np.pi * x)
def g(x): return f(x) + 0.2 * np.cos(5 * np.pi * x)
d2l.set_figsize((5, 3))
x = np.arange(0.5, 1.5, 0.01)
fig_f, = d2l.plt.plot(x, f(x),label="train error")
fig_g, = d2l.plt.plot(x, g(x),'--', c='purple', label="test error")
fig_f.axes.annotate('empirical risk', (1.0, -1.2), (0.5, -1.1),arrowprops=dict(arrowstyle='->'))
fig_g.axes.annotate('expected risk', (1.1, -1.05), (0.95, -0.5),arrowprops=dict(arrowstyle='->'))
d2l.plt.xlabel('x')
d2l.plt.ylabel('risk')
d2l.plt.legend(loc="upper right")
蓝色代表训练集误差,紫色代表测试集误差,优化目标是将蓝色误差降低到最低点,而我们深度学习的目标是将紫色降到最低点
优化在深度学习中的挑战
局部最小值
梯度下降算法运行到局部最小值点时梯度为0,就会停止收敛,到达不了全局最优值
鞍点
鞍点是对所有自变量一阶偏导都为0,且Hessian矩阵特征值有正有负的点
梯度消失
梯度消失会使算法收敛得非常缓慢
凸性
研究凸性可以帮助算法的分析
深度学习大部分损失函数都不是凸函数,但在局部最小值点会表现出一些凸函数的性质,对损失函数的优化有帮助
凸集合:
一个集合内任意两点的连线上的点都在集合内
如图1不是凸集,2、3都是凸集
凸函数:
函数值y的任意两点连线上的值大于这个点的X值带进函数获得的值
如图左右两个是凸函数,中间不是
Jensen不等式
“函数值的期望大于期望的函数值”
凸函数的性质
- 凸函数没有局部最小值
- 与凸集的关系
- 凸函数与二阶导数
二姐导数大于0是函数是凸函数的充分必要条件
充分性证明中拉格朗日中值定理的第一条式子含义是:
x和a连线的斜率一定是x、a这段函数值上某一点的斜率