人工智能之用excel和python实现一元二元函数梯度下降

本文介绍了梯度下降法和牛顿法在机器学习中的应用,对比了批量、随机梯度下降及其优缺点,并通过Python实现了这两种方法。同时,文章还涉及了一元和二元函数的梯度下降法,展示了如何用Excel进行分析。
摘要由CSDN通过智能技术生成

梯度下降法和牛顿法的总结与比较

机器学习的本质是建立优化模型,通过优化方法,不断迭代参数向量,找到使目标函数最优的参数向量。最终建立模型

通常用到的优化方法:梯度下降方法、牛顿法、拟牛顿法等。这些优化方法的本质就是在更新参数。

一、梯度下降法

0、梯度下降的思想

通过搜索方向和步长来对参数进行更新。其中搜索方向是目标函数在当前位置的负梯度方向。因为这个方向是最快的下降方向。步长确定了沿着这个搜索方向下降的大小。

迭代的过程就像是在不断的下坡,最终到达坡地。
接下来的目标函数以线性回归的目标函数为例:
在这里插入图片描述

在这里插入图片描述

1、批量梯度下降法

在这里插入图片描述
在这里插入图片描述

2、随机梯度下降法

在这里插入图片描述

在这里插入图片描述

3.随机梯度下降和梯度下降的比较

批量梯度下降:1.是最小化所有样本的损失函数,最终得到全局最优解。

2.由于每次更新参数需要重新训练一次全部的样本,代价比较大,适用于小规模样本训练的情况。

随机梯度下降:1.是最优化每个样本的损失函数。每一次迭代得到的损失函数不是,每次每次向着全局最优的方向,但是大体是向着全局最优,最终的结果往往是在最优解的附近。

2.当目标函数是凸函数的时候,结果一定是全局最优解。

3.适合大规模样本训练的情况。

小批量梯度下降法

将上述两种方法作结合。每次利用一小部分数据更新迭代参数。即样本在1和m之间。

二、牛顿法

首先牛顿法是求解函数值为0时的自变量取值的方法。

利用牛顿法求解目标函数的最小值其实是转化成求使目标函数的一阶导为0的参数值。这一转换的理论依据是,函数的极值点处的一阶导数为0.

其迭代过程是在当前位置x0求该函数的切线,该切线和x轴的交点x1,作为新的x0,重复这个过程,直到交点和函数的零点重合。此时的参数值就是使得目标函数取得极值的参数值。

其迭代过程如下:

在这里插入图片描述

迭代的公式如下:
在这里插入图片描述
当θ是向量时,牛顿法可以使用下面式子表示:
在这里插入图片描述
其中H叫做海森矩阵,其实就是目标函数对参数θ的二阶导数。

三、牛顿法和梯度下降法的比较

1.牛顿法:是通过求解目标函数的一阶导数为0时的参数,进而求出目标函数最小值时的参数。

收敛速度很快。

海森矩阵的逆在迭代过程中不断减小,可以起到逐步减小步长的效果。

缺点:海森矩阵的逆计算复杂,代价比较大,因此有了拟牛顿法。

2.梯度下降法:是通过梯度方向和步长,直接求解目标函数的最小值时的参数。

越接近最优值时,步长应该不断减小,否则会在最优值附近来回震荡。

一元函数梯度下降

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import math
from mpl_toolkits.mplot3d import Axes3D
import warnings

"""
对当前一维原始图像求最小点:
1、随机取一个点(横坐标为x),设定阿尔法参数值。  
2、对这个点求导数 ,x =x - α*(dY/dx)。  
3、重复第二步、设置迭代 y的变化量小于多少时 不再继续迭代。
"""
# 导数
def h1(x):
    return 0.5 * 2 * (x-0.25)
X = np.arange(-4,4,0.05)
Y = np.array(list(map(lambda t: f1(t),X)))
Y

 
x = 4
alpha = 0.5
f_change = f1(x) # y的变化量
iter_num = 0 # 迭代次数
GD_X = [x] #保存梯度下降所经历的点
GD_Y = [f1(x)]
 
while(f_change > 1e-10) and iter_num<100:
    tmp = x - alpha * h1(x)
    f_change =  np.abs(f1(x) - f1(tmp))
    x = tmp
    GD_X.append(x)
    GD_Y.append(f1(x))
    iter_num += 1
    
print(u"最终结果为:(%.5f,%.5f)"%(x,f1(x)))
print(u"迭代过程中X的取值,迭代次数:%d" % iter_num
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值