一个简单的线性回归模型,有两种不同的训练方法来得到模型的最优解:
- 直接使用封闭方程进行求根运算,得到模型在当前训练集上的最优参数(即在训练集上使损失函数达到最小值的模型参数)。
- 使用迭代优化方法:梯度下降(GD),在训练集上,它可以逐渐调整模型参数以获得最小的损失函数,最终,参数会收敛到和第一种方法相同的的值。梯度下降的变体形式:批量梯度下降(Batch GD)、小批量梯度下降(Mini-batch GD)、随机梯度下降(Stochastic GD)。
梯度下降法
梯度下降是一种非常通用的优化算法,它能够很好地解决一系列问题。梯度下降的整体思路是通过的迭代来逐渐调整参数使得损失函数达到最小值。
假设浓雾下,你迷失在了大山中,你只能感受到自己脚下的坡度。为了最快到达山底,一个最好的方法就是沿着坡度最陡的地方下山。这其实就是梯度下降所做的:它计算误差函数关于参数向量的局部梯度,同时它沿着梯度下降的方向进行下一次迭代。当梯度值为零的时候,就达到了误差函数最小值。
具体来说,开始时,需要选定一个随机的 (这个值称为随机初始值),然后逐渐去改进它, 每一次变化一小步,每一步都试着降低损失函数(例如:均方差损失函数),直到算法收敛到一个最小值。

在梯度下降中一个重要的参数是步长,超参数学习率的值决定了步长的大小。如果学习率太小,必须经过多次迭代,算法才能收敛,这是非常耗时的。

另一方面,如果学习率太大,你将跳过最低点,到达山谷的另一面,可能下一次的值比上一次还要大。这可能使的算法是发散的,函数值变得越来越大,永远不可能找到一个好的答案。

最后,并不是所有的损失函数看起来都像一个规则的碗。它们可能是洞,山脊,高原和各种不规则的地形,使它们收敛到最小值非常的困难。下图显示了梯度下降的两个主要挑战: 如果随机初始值选在了图像的左侧,则它将收敛到局部最小值,这个值要比全局最小值要大。 如果它从右侧开始,那么跨越高原将需要很长时间,如果你早早地结束训练,你将永远到不了全局最小值。

幸运的是线性回归模型的均方差损失函数是一个凸函数,这意味着如果你选择曲线上的任意两点,它们的连线段不会与曲线发生交叉(该线段不会与曲线有第三个交点)。这意味着这个损失函数没有局部最小值,仅仅只有一个全局最小值。同时它也是一个斜率不能突变的连续函数。这两个因素导致了一个好的结果:梯度下降可以无限接近全局最小值。 (只要你训练时间足够长,同时学习率不是太大 )。
事实上,损失函数的图像呈现碗状,但是不同特征的取值范围相差较大的时,这个碗可能是细长的。下图展示了梯度下降在不同训练集上的表现。在左图中,特征 1 和特征 2 有着相同的数值尺度。在右图中,特征 1 比特征2的取值要小的多,由于特征 1 较小,因此损失函数改变时, 会有较大的变化,于是这个图像会在轴方向变得细长。

正如你看到的,左面的梯度下降可以直接快速地到达最小值,然而在右面的梯度下降第一次前进的方向几乎和全局最小值的方向垂直,并且最后到达一个几乎平坦的山谷,在平坦的山谷走了很长时间。它最终会达到最小值,但它需要很长时间。
当我们使用梯度下降的时候,应该确保所有的特征有着相近的尺度范围(例如:使用
Scikit Learn 的 StandardScaler 类),否则它将需要很长的时间才能够收敛。
这幅图也表明了一个事实:训练模型意味着找到一组模型参数,这组参数可以在训练集上使得损失函数最小。这是对于模型参数空间的搜索,模型的参数越多,参数空间的维度越多,找到合适的参数越困难。例如在300维的空间找到一枚针要比在三维空间里找到一枚针复杂的多。幸运的是线性回归模型的损失函数是凸函数,这个最优参数一定在碗的底部。
1.批量梯度下降
使用梯度下降的过程中,你需要计算每一个θj\theta_jθj下损失函数的梯度。换句话说,你需要计算当θj\theta_jθj变化一点点时,损失函数改变了多少。这称为偏导数,它就像当你面对东方的时候问:“我 脚下的坡度是多少?”。然后面向北方的时候问同样的问题(如果你能想象一个超过三维的宇宙,可以对所有的方向都这样做).计算关于θj\theta_jθj的损失函数的偏导数,记为∂∂θjMSE(θ)\frac{\partial}{\partial \theta_j}MSE(\theta)∂θj∂MSE(θ).
损失函数的偏导数为
∂∂θjMSE(θ)=2m∑i=1m(θT⋅x(i)−y(i))xj(i)\frac{\partial}{\partial \theta_j}MSE(\theta)=\frac{2}{m}\sum_{i=1}^{m}(\theta^T·x^{(i)}-y^{(i)})x_j^{(i)}∂θj∂MSE(θ)=m2i=1∑m(θT⋅x(i)−y(i))x

本文深入解析梯度下降算法,涵盖批量、随机及小批量梯度下降的原理与应用,对比不同学习率对收敛速度的影响,阐述模拟退火策略,演示Scikit-Learn中的SGDRegressor类使用。
最低0.47元/天 解锁文章
921

被折叠的 条评论
为什么被折叠?



