基于深度学习的目标检测原理与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2.1 函数极值理论

为什么求函数的极值?深度学习、机器学习建模过程就是寻找一个最优解,达到最好的预测效果,简单来说,就是通过降低损失函数的损失来求得模型的最优参数。

如何求函数的最小值?一般就是求导数为零的点,但导数为零的点一定是极值点吗?不一定,当一阶导数为0时,可能是一条平行于x轴的直线,根本没有极大和极小的问题,因此,一阶导数为0是极值点的必要条件,而非充分条件。再如,fx)=-x3的函数图像如图2-2-1所示,虽然在x=0处函数的一阶导数为0,但是x=0并不是函数的极值点。如果是极值点,不是上凹,就是下凹。如果是上凹,则极值点处的二阶导数一定大于0,为极小值点;如果是下凹,则极值点处的二阶导数一定小于0,为极大值点。

图2-2-1 fx)=-x3的函数图像

在使用深度学习解决实际问题的过程中,很难找出与实际问题相吻合的函数fx),因此,使用梯度下降法使模型预测的结果不断靠近正确值。所谓梯度,就是在多维坐标空间中,该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快、变化率最大(为该梯度的模)。直观地理解,在图2-2-2中,起始点A到达最低点B最快捷的路径,就是沿着梯度方向下降,其函数表达式为fxy)=x2+y2,假设A点的坐标为(1,1),则该点的梯度。注意,梯度是一个向量,不是标量。

图2-2-2 函数三维图像

梯度下降更新参数w的公式为,其中,w′是经过一轮更新得到的参数;lr是学习率(Learning Rate);是损失函数的梯度。

假设损失函数是,函数的图形如图2-2-3所示,相应的,其中,0.005就是学习率,当x=3时,。如果这里没有使用lr对x的更新进行约束,那么x′=3-(-5.9)=8.9,比以前更大,因此,用lr对参数更新进行约束,使参数逐步逼近极值点。

但是,从x=3出发求出的极值就在A点,显而易见,A点并不是在定义域内真正的极值点,而是一个局部最优点,真正的全局最优点在B点。这就引出随机梯度下降法。

随机梯度下降法,顾名思义,就是随机在坐标上选择多个起始点进行梯度下降,从而避免局部最优的问题。如图2-2-3所示,对于函数fx)=x2 sin xx的定义域为(-10,10),在定义域中随机取多个x进行梯度下降,最后就能找到全局最优点B点。

图2-2-3 fx)=x2sinx

以上计算fx)结果的过程是正向传播,利用计算结果对参数w进行更新的过程是反向传播,只不过在PyTorch或者TensorFlow等框架中,是通过神经网络进行的,我们将在第4章进行详细讲解。