机器学习-一篇入门

【算法】一篇入门之-梯度下降算法

作者 : 老饼 发表日期 : 2022-06-26 03:47:47 更新日期 : 2024-10-10 11:24:11
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



梯度下降法也称为最速下降法,是机器学习中一种基础的函数优化算法

本文讲解梯度下降算法的原理与算法流程,并展示梯度下降算法的一个具体例子

通过本文可以快速了解什么是梯度下降算法,以及如何使用梯度下降算法解决函数优化问题




    01. 梯度下降算法思想    




本节介绍梯度下降算法的思想,快速了解梯度下降算法是什么




      什么是梯度下降算法      


梯度下降法是常用于函数优化的一个基本算法,它的思路是让目标函数不断往梯度方向下降
梯度下降算法的思路如下:

 梯度下降算法的思路 
梯度下降算法先取一个初始值,然后进行迭代,每次都往梯度的反方向调整它
直到满足迭代条件(例如无法令目标函数值下降,或达到到最大迭代次数),则退出训练





       负梯度与初始值的意义   


梯度下降算法-负梯度的意义
在一元函数中,负梯度就是导数的反方向,在多元函数中,负梯度就是各个变量偏导数的反方向
 梯度下降法中负梯度的意义 
 梯度是函数下降最快的方向(即调整相同步长,负梯度能令f(x)下降最快),故也称为最速下降法
   梯度下降算法-初始值的意义  
从梯度下降算法原理,我们可以知道,梯度下降法对 x 的初始化非常敏感,
因为它只能找到离初始值最近的局部极小值,如果初始化不好,找到的结果也不好
 梯度下降算法-初始值的意义
 往往是先随机初始化,然后多跑几次,看哪个结果好,就用哪一个







    02. 梯度下降算法流程    




本节讲解梯度下降算法的具体流程,以及展示算法流程图




    梯度下降算法的流程与流程图    


简单的说,梯度下降法就是先初始化 ​  ,然后按  不断迭代就行 
梯度下降算法的算法流程图如下:

 梯度下降算法流程图 
  梯度下降算法流程与步骤如下:
1. 先初始化x的值 ​(按个人经验初始化,或随机初始化,或设为0)                     
2. 计算 在处的梯度,令,(lr为学习率,可设为0.1) 
3. 计算处的梯度,令                                       
4. ...如此类推....一直到满足迭代终止条件,最后一次的即为所要找的解。        
迭代终止条件:达到迭代次数,或者 变化不大,或者变化不大
在《梯度下降算法实例与代码》中,通过手算梯度下降算法过程,
可以更进一步了解梯度下降算法的具体过程与原理







     03. 梯度下降法-实现代码     




本节利用python进行代码编程,展现如何用代码实现梯度下降算法




    梯度下降算法的代码实现( python)    


下面使用梯度下降算法来求函数的最小值
  
由于梯度下降法需要使用目标函数的梯度,所以需要先算出梯度,如下:
  ,
接下来只需按梯度下降算法的流程,让解不断地往负梯度方向迭代就可以了
 梯度下降法具体实现代码如下:
# -*- coding: utf-8 -*-
"""
梯度下降求y= (x1-2)^2+(x2-3)^2的最小解
"""
import numpy as np
x = np.array([0,0])                             # 初始化x
lr = 0.1                                        # 设置学习率
for i in range(100):                            # 最大迭代100次
    dx = np.array([2*x[0]-4, 2*x[1]-6])         # 计算x的梯度  
    x  = x - lr*dx                              # 往负梯度方向更新x
    if((min(abs(dx))< 0.001) ):break            #  如果梯度过小,则退出迭代
    print("第"+str(i+1)+"轮迭代:x=:["+str(x[0])+","+str(x[1])+"],y="+str((x[0]-2)**2+(x[1]-3)**2))
运行结果如下:
 
梯度下降算法代码运行结果
可以看到,经过38轮迭代,求得的 x1,x2= 【1.999,2.999】与真实极值【2,3】已经非常接近了










 End 



联系老饼