凸性
凸性(convexity)在优化算法的设计中起到至关重要的作用,这主要是由于在这种情况下对算法进行分析和测试要容易得多。换言之,若该算法甚至在凸性条件设定下的效果很差,通常我们难在其他条件下看到好的结果。此外,即使深度学习中的优化问题通常是非凸的,它们也经常在局部极小值附近表现出一些凸性
%matplotlib inline
import numpy as np
import torch
from mpl_toolkits import mplot3d
from d2l import torch as d2l
1 - 定义
在进行凸分析之前,我们需要定义凸集(convex sets)和凸函数(convex functions)
凸集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yxc4dyaI-1663162058671)(images.b2.png)]
f = lambda x : 0.5 * x**2 # 凸函数
g = lambda x: torch.cos(np.pi * x) # ⾮凸函数
h = lambda x: torch.exp(0.5 * x) # 凸函数
x,segment = torch.arange(-2,2,0.01),torch.tensor([-1.5,1])
d2l.use_svg_display()
_,axes = d2l.plt.subplots(1,3,figsize=(9,3))
for ax,func in zip(axes,[f,g,h]):
d2l.plot([x,segment],[func(x),func(segment)],axes=ax)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qsaX5HuK-1663162058671)(https://yingziimage.oss-cn-beijing.aliyuncs.com/img/202209142121963.svg)]
詹森不等式
2 - 性质
局部极小值是全局极小值
f = lambda x: (x - 1) ** 2
d2l.set_figsize()
d2l.plot([x,segment],[f(x),f(segment)],'x','f(x)')
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wPE1U7xw-1663162058672)(https://yingziimage.oss-cn-beijing.aliyuncs.com/img/202209142121964.svg)]
凸函数的下平集是凸的
凸性和二阶导数
3 - 约束
拉格朗日函数
惩罚
投影
凸投影的一个用途是计算稀疏权重向量。在本例中,我们将权重向量投影道一个
L
1
L_1
L1的球上,这是图11.2.4中菱形例子的一个广义版本
4 - 小结
在深度学习的背景下,凸函数的主要目的是帮助我们详细了解优化算法。我们由此得出梯度下降法和随机梯度下降法是如何相应推导出来的
- 凸集的交点是凸的,并集不是
- 根据詹森不等式,“⼀个多变量凸函数的总期望值”⼤于或等于“⽤每个变量的期望值计算这个函数的总值”
- 一个二次可微函数是凸函数,当且仅当其Hessian(二阶导数矩阵)是半正定的
- 凸约束可以通过拉格朗日函数来添加的。在实践中,只需在目标函数中加上一个惩罚就可以了
- 投影映射到凸集中最接近原始点的点