老饼讲解-机器学习 机器学习 神经网络 深度学习
机器学习入门
1.学前解惑
2.第一课:初探模型
3.第二课:逻辑回归与梯度下降
4.第三课:决策树
5.第四课:逻辑回归与决策树补充
6.第五课:常见的其它算法
7.第六课:综合应用

【实例】梯度下降算法实例与代码

作者 : 老饼 发表日期 : 2022-06-26 03:48:35 更新日期 : 2023-12-18 12:29:26
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



为进一步具体掌握梯度下降法,

本文展示一个梯度下降算法求解二元函数最小值的例子

先用手算展示每一步的过程和结果,再展示python的实现代码




   01. 梯度下降法-实例介绍   



本节梳理梯度下降法的计算流程与介绍本文所使用的实例问题



    梯度下降算法-实现过程思路梳理   


梯度下降算法简单来说,就是将解按负梯度方向不断迭代,直到满足终止条件
由于需要用到目标函数梯度,所以一般需要先算出梯度公式,以方便迭代过程中计算梯度
 梯度下降算法求解值的原理 
 总的来说,梯度下降算法在落地过程中,需要如下四步:
  1. 梯度公式准备      :计算目标函数的梯度                          
 2. 初始化解与参数  :设置好解的初始值和学习率               
 3. 按负梯度更新解  :按照负梯度将解不断迭代                  
 4. 终止条件判断     :直到梯度极小,就停止迭代               




    梯度下降算法实例-问题    


求二元函数的最小值
 
求  为何值时,
 
取得最小值
 易知道,y 的最小值在 x1​=2, x2​=3 处取得,为0 
下面展示用梯度下降法寻找解的具体过程,看结果是否与我们预期一致





   02. 梯度下降法-手算过程   



本节通过手动计算,展示梯度下降算法的每一步具体操作



    梯度下降算法-手算具体过程    


使用梯度算法求解上节的问题是较为简单的,
作为学习例子,我们展示整个手算过程如下
 
1、梯度公式计算
由  ,

2、参数设定
现设初始值为

此时 
3、迭代
迭代1:
计算梯度 :                    
更新x      :                   
查看 y值  :                                            

迭代2:
计算梯度 :
更新x      : 
查看 y值  :                                                                      
...............
...............
...............

 
迭代40:
计算梯度 :                                            
更新x      :                                                                  
查看 y值  :                                         
4、结果
第40次迭代时,都极小,我们退出迭代 ,
以 作为最终结果,此时函数值 
易知,与预期的 x= [2,3] , y=0 几乎一致。




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



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



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


# -*- coding: utf-8 -*-
"""
梯度下降求y= (x1-2)^2+(x2-3)^2的最小解
"""
x1 = 0    # 初始化x1
x2 = 0    # 初始化x2
for i in range(100):
    
    #------计算梯度--------
    dx1 = 2*x1-4          
    dx2 = 2*x2-6
    
    #----- 往负梯度方向更新x------
    x1  = x1 - 0.1*dx1    
    x2  = x2 - 0.1*dx2
    #----- 如果梯度过小,则退出迭代 --------
    if((abs(dx1)< 0.001)  & (abs(dx2)< 0.001)):break
    print("第"+str(i+1)+"轮迭代:x=:["+str(x1)+","+str(x2)+"],y="+str((x1-2)**2+(x2-3)**2))
运行结果如下:
第1轮迭代:x=:[0.4,0.6000000000000001],y=8.32
第2轮迭代:x=:[0.7200000000000001,1.08],y=5.3248
第3轮迭代:x=:[0.976,1.464],y=3.4078720000000002
..................
第39轮迭代:x=:[1.9996676930010537,2.9995015395015807],y=3.588908100330732e-07
第40轮迭代:x=:[1.999734154400843,2.9996012316012646],y=2.2969011842121404e-07





以上就是梯度下降算法实例与代码的全部内容了~






 End 




联系老饼