神经网络和深度学习(7)-- 梯度下降算法

神经网络和深度学习
上一篇 主目录 下一篇

文章结构

    • 1.什么是梯度下降算法
    • 2. 一个梯度下降的数学例子
    • 3. 梯度下降的作用
    • 4. 梯度下降参数的更新
    • 5. 逻辑回归中的梯度下降
    • 6. m个样本的梯度下降
    • 7. 区别于梯度下降算法的正规方程

前言


1.什么是梯度下降算法

顾名思义,梯度下降法的计算过程就是沿梯度下降的方向求解极小值(局部最小值)。
初始化参数时参数选取不同,在梯度下降时所沿着的最大梯度下降方向可能不同,如下图所示:
神经网络和深度学习(7)-- 梯度下降算法_第1张图片
神经网络和深度学习(7)-- 梯度下降算法_第2张图片
百度百科 说, 梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。

2. 一个梯度下降的数学例子

如求函数 f(x)=x2的最小值。
利用梯度下降的方法解题步骤如下:
1、求梯度, ▽=2x
2、向梯度相反的方向移动 x ,如下
在这里插入图片描述
,其中, γ为步长。如果步长足够小,则可以保证每一次迭代都在减小,但可能导致收敛太慢,如果步长太大,则不能保证每一次迭代都减少,也不能保证收敛。
3、循环迭代步骤2,直到 x的值变化到使得 f(x) 在两次迭代之间的差值足够小,比如0.00000001,也就是说,直到两次迭代计算出来的f(x) 基本没有变化,则说明此时 f(x) 已经达到局部最小值了。
4、此时,输出x ,这个x 就是使得函数 f(x) 最小时的 x的取值 。
神经网络和深度学习(7)-- 梯度下降算法_第3张图片

3. 梯度下降的作用

在你测试集上,通过最小化代价函数(成本函数)J(w,b)来训练的参数 w和b ܾ
神经网络和深度学习(7)-- 梯度下降算法_第4张图片
神经网络和深度学习(7)-- 梯度下降算法_第5张图片
在上图中,横轴表示你的空间参数 w和 ܾb,在实践中,w可以是更高的维度,但是为 了更好地绘图,我们定义w 和 ܾb,都是单一实数,代价函数(成本函数)J(w,b)是在水平轴w和 ܾb上的曲面,因此曲面的高度就是 J(w,b)在某一点的函数值。我们所做的就是找到使得 代价函数(成本函数)J(w,b)函数值是最小值,对应的参数w和 ܾb。
初始化参数 w 和b ܾ可以采用随机初始化的方法,对于逻辑回归几乎所有的初始化方法都有效,因为函数是凸函数,无论在哪里初始化,应该达到同一 点或大致相同的点。
神经网络和深度学习(7)-- 梯度下降算法_第6张图片
我们以如图的小红点的坐标来初始化参数w和b .朝最陡的下坡方向走一步,不断地迭代:
神经网络和深度学习(7)-- 梯度下降算法_第7张图片
我们朝最陡的下坡方向走一步,如图,走到了如上图中第二个小红点处。
神经网络和深度学习(7)-- 梯度下降算法_第8张图片
我们可能停在这里也有可能继续朝最陡的下坡方向再走一步,如上图,经过两次迭代走到 第三个小红点处。直到走到全局最优解或者接近全局最优解的地方,如下图:
神经网络和深度学习(7)-- 梯度下降算法_第9张图片
通过以上的步骤我们可以找到全局最优解,也就是代价函数(成本函数)J(w,b)这 个凸函数的最小值点。

4. 梯度下降参数的更新

在这里插入图片描述
注::= 表示更新参数,α表示学习率(learning rate)用来控制步长,一般学习率大于零。
这样做的原因:
(假定代价函数(成本函数)J只有一个参数 w,即用一维曲线J(w)代替多维曲线,这样可以更好画出图像。)
在这里插入图片描述

  • 斜率大于零
    神经网络和深度学习(7)-- 梯度下降算法_第10张图片
    对于导数更加形象化的理解就是斜率(slope),如图该点的导数就是这个点相切于J(w) 的小三角形的高除宽。假设我们以如图点为初始化点,该点处的斜率的符号是正的,即 ݀
    在这里插入图片描述
    所以接下来会向左走一步:
    神经网络和深度学习(7)-- 梯度下降算法_第11张图片
    整个梯度下降法的迭代过程就是不断地向左走,直至逼近最小值点。

  • 斜率小于零
    神经网络和深度学习(7)-- 梯度下降算法_第12张图片
    假设我们以如图点为初始化点,该点处的斜率的符号是负的,即݀
    ݓݔܬͲ ݀ݓ ൏ Ͳ,
    所以接下 来会向右走一步:
    神经网络和深度学习(7)-- 梯度下降算法_第13张图片
    整个梯度下降法的迭代过程就是不断地向右走,即朝着最小值点方向走。

  • 斜率等于零
    神经网络和深度学习(7)-- 梯度下降算法_第14张图片
    当求导等于零(斜率为零)参数就不再更新,此时已经得到代价函数的极小值

【注意】

  1. α表示学习率(learning rate),它的值不能太大,否则步长过长会导致在接近极小值时直接越过极小值,无法收敛甚至发散。如下所示:
    神经网络和深度学习(7)-- 梯度下降算法_第15张图片
    此时的代价函数为:
    在这里插入图片描述
    正常情况下代价函数随着迭代次数的增加曲线为:
    神经网络和深度学习(7)-- 梯度下降算法_第16张图片
  2. 越接近导数值为零的极小值点时,导数值会越来越接近零,作用在
    在这里插入图片描述
    的表现形式就是,参数更新的步长越来越小。(这里不详细解释,自行体会)

5. 逻辑回归中的梯度下降

假设样本只有两个特征x1ͳ和x2,为了计算 z,我们需要输入参数w1,w2,b除此之 外还有特征值x1ͳ和x2。因此z 的计算公式为:

z=w1x1+w2x2+b

假设现在只考虑单个样本的情况,单个样本的代价函数定义如下:
在这里插入图片描述
其中 ܽ a是逻辑回归的输出,y是样本的标签值。
w 和 b 的修正量可以表达如下:
在这里插入图片描述
神经网络和深度学习(7)-- 梯度下降算法_第17张图片

为了使得逻辑回归中最小化代价函数L(a,y),我们需要做的仅仅是修改参数 w和b的值,这需要进行一系列的求偏导数的运算,具体过程如下所示:
求出L对a的导数(代码中使用da表示)
在这里插入图片描述
求出L对z的导数:
神经网络和深度学习(7)-- 梯度下降算法_第18张图片
现在进行最后一步反向推导,也就是计算 w和 b变化对代价函数 L的影响
在这里插入图片描述
最后,更新参数w和b:
在这里插入图片描述
神经网络和深度学习(7)-- 梯度下降算法_第19张图片
以上是实现针对单个训练样本的逻辑回归的梯度下降算 法。但是,训练逻辑回归模型不仅仅只有一个训练样本,而是有m个训练样本的整个训练 集。因此在下一节中,我们将这些思想应用到整个训练样本集中,而不仅仅只是单个样 本上。

6. m个样本的梯度下降

m个样本的损失函数的定义:
在这里插入图片描述
神经网络和深度学习(7)-- 梯度下降算法_第20张图片
代码如下:

    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)

7. 区别于梯度下降算法的正规方程

吴恩达在机器学习中有相关介绍,具体可 点击链接 进行学习

到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法
是更好的解决方案。如:
神经网络和深度学习(7)-- 梯度下降算法_第21张图片
正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:
在这里插入图片描述
假设我们的训练集特征矩阵为 X(包含了x0=1 )并且我们的训练集结果为向量 y,则利用正规方程解出向量:
在这里插入图片描述
例:
神经网络和深度学习(7)-- 梯度下降算法_第22张图片
神经网络和深度学习(7)-- 梯度下降算法_第23张图片
梯度下降与正规方程的比较:

梯度下降与正规方程的优劣势
梯度下降 正规方程
需要选择学习率 α 不需要
需要多次迭代 一次运算得出
当特征数量 n 大时也能较好适用 需要计算(XTX)-1。 如果特征数量 n 较大则运算代价大,因 为矩阵逆的计算时间复杂度为O(n3) ,通常 来说当 n 小于 10000 时还是可以接受的
适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模 型等其他模型

神经网络和深度学习系列笔记: 传送门

你可能感兴趣的:(神经网络和深度学习,梯度下降算法)