赞
踩
【前言】
顾名思义,梯度下降法的计算过程就是沿梯度下降的方向求解极小值(局部最小值)。
初始化参数时参数选取不同,在梯度下降时所沿着的最大梯度下降方向可能不同,如下图所示:
百度百科 说, 梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。
如求函数 f(x)=x2的最小值。
利用梯度下降的方法解题步骤如下:
1、求梯度, ▽=2x
2、向梯度相反的方向移动 x ,如下
,其中, γ为步长。如果步长足够小,则可以保证每一次迭代都在减小,但可能导致收敛太慢,如果步长太大,则不能保证每一次迭代都减少,也不能保证收敛。
3、循环迭代步骤2,直到 x的值变化到使得 f(x) 在两次迭代之间的差值足够小,比如0.00000001,也就是说,直到两次迭代计算出来的f(x) 基本没有变化,则说明此时 f(x) 已经达到局部最小值了。
4、此时,输出x ,这个x 就是使得函数 f(x) 最小时的 x的取值 。
在你测试集上,通过最小化代价函数(成本函数)J(w,b)来训练的参数 w和b ܾ
在上图中,横轴表示你的空间参数 w和 ܾb,在实践中,w可以是更高的维度,但是为 了更好地绘图,我们定义w 和 ܾb,都是单一实数,代价函数(成本函数)J(w,b)是在水平轴w和 ܾb上的曲面,因此曲面的高度就是 J(w,b)在某一点的函数值。我们所做的就是找到使得 代价函数(成本函数)J(w,b)函数值是最小值,对应的参数w和 ܾb。
初始化参数 w 和b ܾ可以采用随机初始化的方法,对于逻辑回归几乎所有的初始化方法都有效,因为函数是凸函数,无论在哪里初始化,应该达到同一 点或大致相同的点。
我们以如图的小红点的坐标来初始化参数w和b .朝最陡的下坡方向走一步,不断地迭代:
我们朝最陡的下坡方向走一步,如图,走到了如上图中第二个小红点处。
我们可能停在这里也有可能继续朝最陡的下坡方向再走一步,如上图,经过两次迭代走到 第三个小红点处。直到走到全局最优解或者接近全局最优解的地方,如下图:
通过以上的步骤我们可以找到全局最优解,也就是代价函数(成本函数)J(w,b)这 个凸函数的最小值点。
注::= 表示更新参数,α表示学习率(learning rate)用来控制步长,一般学习率大于零。
这样做的原因:
(假定代价函数(成本函数)J只有一个参数 w,即用一维曲线J(w)代替多维曲线,这样可以更好画出图像。)
斜率大于零
对于导数更加形象化的理解就是斜率(slope),如图该点的导数就是这个点相切于J(w) 的小三角形的高除宽。假设我们以如图点为初始化点,该点处的斜率的符号是正的,即 ݀
所以接下来会向左走一步:
整个梯度下降法的迭代过程就是不断地向左走,直至逼近最小值点。
斜率小于零
假设我们以如图点为初始化点,该点处的斜率的符号是负的,即݀
所以接下 来会向右走一步:
整个梯度下降法的迭代过程就是不断地向右走,即朝着最小值点方向走。
斜率等于零
当求导等于零(斜率为零)参数就不再更新,此时已经得到代价函数的极小值
【注意】
假设样本只有两个特征x1ͳ和x2,为了计算 z,我们需要输入参数w1,w2,b除此之 外还有特征值x1ͳ和x2。因此z 的计算公式为:
假设现在只考虑单个样本的情况,单个样本的代价函数定义如下:
其中 ܽ a是逻辑回归的输出,y是样本的标签值。
w 和 b 的修正量可以表达如下:
为了使得逻辑回归中最小化代价函数L(a,y),我们需要做的仅仅是修改参数 w和b的值,这需要进行一系列的求偏导数的运算,具体过程如下所示:
求出L对a的导数(代码中使用da表示)
求出L对z的导数:
现在进行最后一步反向推导,也就是计算 w和 b变化对代价函数 L的影响:
最后,更新参数w和b:
以上是实现针对单个训练样本的逻辑回归的梯度下降算 法。但是,训练逻辑回归模型不仅仅只有一个训练样本,而是有m个训练样本的整个训练 集。因此在下一节中,我们将这些思想应用到整个训练样本集中,而不仅仅只是单个样 本上。
m个样本的损失函数的定义:
代码如下:
m = X.shape[1]#样本个数
#正向传播
A = sigmoid(np.dot(w.T,X) + b) #计算激活值,请参考公式2。。A是(1,m)维度的
cost = (- 1 / m) * np.sum(Y * np.log(A) + (1 - Y) * (np.log(1 - A))) #计算成本,,相当于J(a,y)即代价函数
#反向传播,梯度下降算法,需要用到J对w和b的导数等。J对z的倒数结果是A-Y
dw = (1 / m) * np.dot(X, (A - Y).T) #请参考视频中的偏导公式。(num_px * num_px * 3,1)
db = (1 / m) * np.sum(A - Y) #请参考视频中的偏导公式。(1,1)
吴恩达在机器学习中有相关介绍,具体可 点击链接 进行学习
到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法
是更好的解决方案。如:
正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:
假设我们的训练集特征矩阵为 X(包含了x0=1 )并且我们的训练集结果为向量 y,则利用正规方程解出向量:
例:
梯度下降与正规方程的比较:
梯度下降与正规方程的优劣势 | ||
---|---|---|
梯度下降 | 正规方程 | |
需要选择学习率 α | 不需要 | |
需要多次迭代 | 一次运算得出 | |
当特征数量 n 大时也能较好适用 | 需要计算(XTX)-1。 如果特征数量 n 较大则运算代价大,因 为矩阵逆的计算时间复杂度为O(n3) ,通常 来说当 n 小于 10000 时还是可以接受的 | |
适用于各种类型的模型 | 只适用于线性模型,不适合逻辑回归模 型等其他模型 |
神经网络和深度学习系列笔记: 传送门
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。