梯度下降法以及实现

1.梯度下降的场景假设:

假如你想从山顶下山,但是迷雾重重,你看不清楚前方的路,假设你每一步走的距离是一样的,你想要尽快下山,那么你该怎么走?

这个问题就相当于梯度下降,每走一步,直接找坡度最大的方向,在步长一定的情况下,下降的高度是最多的,所以下山最快。

这里坡度最大的方向其实就是梯度下降的方向。

2.梯度下降法使用的场景

在机器学习中,其实我们主要的目的一直都是建模,将误差,损失降到最小,那就会有损失函数,就是求损失函数的最小值,也就是上边所说的到达山底,主要运用到特征值比较多的情况下,因为我们也知道损失函数直接求导等于0就可以得到最小值,但是当特征值多的时候,计算太过繁琐,复杂度太大,所以我们选用梯度下降法,比较简单,得到一个近似值。

3.梯度下降的相关概念

(1)步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

(2)特征(feature):指的是样本中输入部分,比如2个单特征的样本(x(0),y(0)),(x(1),y(1))(x(0),y(0)),(x(1),y(1)),则第一个样本特征为x(0)x(0),第一个样本输出为y(0)y(0)。

(3)假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)hθ(x)。比如对于单个特征的m个样本(x(i),y(i))(i=1,2,...m)(x(i),y(i))(i=1,2,...m),可以采用拟合函数如下:假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)hθ(x)。比如对于单个特征的m个样本(x(i),y(i))(i=1,2,...m)(x(i),y(i))(i=1,2,...m),可以采用拟合函数如下:

(4)损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方(最小二乘法)。比如对于m个样本(xi,yi)(i=1,2,...m)(xi,yi)(i=1,2,...m),采用线性回归,损失函数为:

4.梯度下降具体使用

# 导包
import numpy as np

import matplotlib.pyplot as plt
%matplotlib inline
# 定义函数,也就是损失函数
f = lambda x : (x - 3)**2 + 2.5*x -7.5
# 求解导数令导数等于0求解最小值
2*(x - 3)*1 + 2.5 = 0
2*x - 3.5 = 0
x = 1.75
# 画出函数图
x = np.linspace(-2,5,100)

y = f(x)

plt.plot(x,y)
# 梯度下降求解最小值
# 导数函数
d = lambda x : 2*(x - 3) + 2.5

# 学习率,每次改变数值的时候,改变多少,就是步长
learning_rate = 0.1

# min_value瞎蒙的值,方法,就是个初始值,最快的速度找到最优解(梯度下降)
min_value = np.random.randint(-3,5,size = 1)[0]
print(‘-------------------‘,min_value)
# 记录数据更新了,原来的值,上一步的值,退出条件,其实就是保证下边死循环的时候第一步不退出
min_value_last = min_value + 0.1
# tollerence容忍度,误差,在万分之一,任务结束
tol = 0.0001
count = 0
while True:
    if np.abs(min_value - min_value_last) < tol:
        break
#梯度下降
    min_value_last = min_value
#更新值:梯度下降
    min_value = min_value - learning_rate*d(min_value)
    count +=1
    print(‘+++++++++++++++++++++%d‘%(count),min_value)
print(‘**********************‘,min_value)

5.梯度上升

# 定义函数
f2 = lambda x : -(x - 3)**2 + 2.5*x -7.5

x = np.linspace(-2,10,100)
y = f2(x)
plt.plot(x,y)

# 梯度提升 导数函数
result = []
d2 = lambda x : -2*(x - 3) + 2.5
learning_rate = 10
# max_value瞎蒙的值,方法,最快的速度找到最优解(梯度下降)
# 梯度消失,梯度爆炸(因为学习率太大)
max_value = np.random.randint(2,8,size = 1)[0]
# max_value = 1000

result.append(max_value)

print(‘-------------------‘,max_value)
# 记录数据更新了,原来的值,上一步的值,退出条件
max_value_last = max_value + 0.001
# tollerence容忍度,误差,在万分之一,任务结束
# precision精确度,精度达到了万分之一,任务结束
precision = 0.0001
count = 0
while True:
    if count >3000:
        break
    if np.abs(max_value - max_value_last) < precision:
        break
#     梯度上升
    max_value_last = max_value
#     更新值:梯度上升
    max_value = max_value + learning_rate*d2(max_value)
    result.append(max_value)
    count +=1
    print(‘+++++++++++++++++++++%d‘%(count),max_value)
print(‘**********************‘,max_value)
# 观察一下变化
plt.figure(figsize=(12,9))
x = np.linspace(4,8,100)
y = f2(x)
plt.plot(x,y)
result = np.asarray(result)
plt.plot(result,f2(result),‘*‘)

最后一个图

6.梯度消失和梯度爆炸(神经网络训练中会出现)

这里只是简单参考

梯度爆炸的原因:

梯度爆炸一般出现在深层网络和权值初始化比较大的情况下,其实就是学习率太大,步长太大,比如即将到达山底,结果步长太大,就会越来越大,不是越来越小.

原文地址:https://www.cnblogs.com/xiuercui/p/11961967.html

时间: 2024-10-08 18:50:14

梯度下降法以及实现的相关文章

梯度下降法

梯度下降法在凸优化中应用很广泛.经常使用于求凸函数极值. 梯度是个向量.其形式为 一般是表示函数上升最快的方向.因此.我们仅仅须要每一步往梯度方向走一小步.终于就能够到达极值点,其表现形式为: 初始点为x0. 然后往梯度的反方向移动一小步r到x1. 再次往梯度反方向移动r到x2,... ....终于会越来越接近极值点min的. 迭代时的公式为X(n+1) = X(n) - r * grad(f) 以下举样例说明梯度下降法求极值点的有效性: #!/usr/bin/python # -*- codi

【统计学习】随机梯度下降法求解感知机模型

1. 感知机学习模型 感知机是一个二分类的线性分类问题,求解是使误分类点到超平面距离总和的损失函数最小化问题.采用的是随机梯度下降法,首先任意选取一个超平面w0和b0,然后用梯度下降法不断地极小化目标损失函数,极小化过程中不是一次使所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降.假设误分类点集合M是固定的,那么损失函数L(w,b)的梯度: 随机选取一个误分类点,对w和b进行更新: 其中n是步长,又称为学习率(learning rate),这样通过迭代可以使损失函数L(w,b)不

转:梯度下降法(上升法)的几何解释

梯度下降法是机器学习和神经网络学科中我们最早接触的算法之一.但是对于初学者,我们对于这个算法是如何迭代运行的从而达到目的有些迷惑.在这里给出我对这个算法的几何理解,有不对的地方请批评指正! 梯度下降法定义 (维基百科)梯度下降法,基于这样的观察:如果实值函数  在点  处可微且有定义,那么函数 在  点沿着梯度相反的方向  下降最快. 因而,如果                         对于  为一个够小数值时成立,那么 . 考虑到这一点,我们可以从函数  的局部极小值的初始估计  出发

2.9 logistic回归中的梯度下降法(非常重要,一定要重点理解)

怎么样计算偏导数来实现logistic回归的梯度下降法 它的核心关键点是其中的几个重要公式用来实现logistic回归的梯度下降法 接下来开始学习logistic回归的梯度下降法 logistic回归的公式 现在只考虑单个样本的情况,关于该样本的损失函数定义如上面第三个公式,其中a是logistic回归的输出,y是样本的基本真值标签值, 下面写出该样本的偏导数流程图 假设样本只有两个特征x1和x2 为了计算Z,我们需要输入参数w1和w2和b 因此在logistic回归中,我们要做的就是变换参数w

浅析梯度下降法

上段时间学习caffe,caffe的solver优化方法中涉及到梯度下降法.当时对梯度下降法的概念和原理都很模糊,就专门去学习了下,现在把自己的理解记录下来,一方面加深印象,一方面也方便随时查阅.如果有理解错误的地方,希望看到的予以指正,谢谢. 一.什么是梯度?梯度和方向导数的关系是什么?(简述,需要详细了解的可以自行搜索) 方向导数:对于一个函数f,在其定义域内存在一点k,我们把函数f在点k上任一方向的导数,叫做方向导数. 梯度:经过数学推理可以证明,函数f在k点的梯度方向,等于函数f在k点方

梯度下降法解神经网络

本文是Andrew Ng在Coursera的机器学习课程的笔记. 整体步骤 确定网络模型 初始化权重参数 对于每个样例,执行以下步骤直到收敛 计算模型输出:forward propagation 计算代价函数:比较模型输出与真实输出的差距 更新权重参数:back propagation 确定网络模型 神经网络模型由输入层(layer 1).中间层(layer 2,..,L-1).输出层(layer L)三部分组成.输入层每个单元代表一个特征,输出层的每个单元代表一个类别. 如果我们的目标如果是识

常见的几种最优化方法(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)

我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成本下,如何使利润最大化"等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称.随着学习的深入,博主越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优

批量梯度下降法(Batch Gradient Descent)

批量梯度下降:在梯度下降的每一步中都用到了所有的训练样本. 思想:找能使代价函数减小最大的下降方向(梯度方向). ΔΘ = - α▽J      α:学习速率 梯度下降的线性回归 线性模型的代价函数: 对于更新项,为什么是 - α▽J : Θ如果在极值点右边,偏导大于0,则Θ要减去偏导的值(Θ偏大,减去一个正值) Θ如果在极值点左边,偏导小于0,则Θ要减去偏导的值(Θ偏小,减去一个负值) 实现方法:同步更新每个Θ 特点:梯度下降法即使α取很大也可以收敛到局部最小值. 随着算法的进行,越接近最小值

[机器学习入门篇]-梯度下降法

梯度下降法的作用是求到一种方案,使得拟合过程中的损失函数最小(结果可能只为局部最优值),除此之外还有最小二乘法等方法. 关于此方法详细的阐述参见:这里 梯度下降法初始点的选取分为随机选取初值和自动求取初值两种方法. 梯度下降法有两种具体的实现方法: 1.批量梯度下降法:每次向梯度的反方向移动(梯度为函数增长最快的方向,减少最快的方向为其反方向). 2.随机梯度下降法:轮流对分量求偏导,除求偏导的分量外其他分量设为0,向"偏导方向"的反方向移动. 关于这两种方法具体的阐述见:这里

求解方法之梯度下降法

梯度下降法(最速下降法): 求解无约束最优化问题的一种最常用的方法,当目标函数是凸函数时,梯度下降法的解是全局最优解.一般情况下,其解不保证是全局最优解.梯度下降法的收敛速度也未必是很快的. ###############################Matlab############################### %% 最速下降法图示 % 设置步长为0.1,f_change为改变前后的y值变化,仅设置了一个退出条件. %syms x;%求f=x^2最小值 f=x^2; step=0