pytorch梯度下降法讲解(非常详细)

pytorch随机梯度下降法
1、梯度、偏微分以及梯度的区别和联系
(1)导数是指一元函数对于自变量求导得到的数值,它是一个标量,反映了函数的变化趋势;
(2)偏微分是多元函数对各个自变量求导得到的,它反映的是多元函数在各个自变量方向上的变化趋势,也是标量;
(3)梯度是一个矢量,是有大小和方向的,其方向是指多元函数增大的方向,而大小是指增长的趋势快慢。

2、在寻找函数的最小值的时候可以利用梯度下降法来进行寻找,一般会出现以下两个问题局部最优解和铵点(不同自变量的变化趋势相反,一个处于极小,一个处于极大)


3、初始状态、学习率和动量(如何逃出局部最优解)是全部寻优的三个重要影响因素


4、常见函数的梯度计算基本和一元函数导数是一致的


5、常见的激活函数主要有三种:
(1)sigmoid函数

(2)tanh函数

(3)Relu函数


6、常用的损失函数-loss函数
(1)MSE-回归问题
(2)Cross entropy loss-分类问题


7、对于MSE均方差的loss函数,计算时可以利用norm函数来进行计算,调用的格式如下所示:
MSE=torch.norm(y-y_pre,2).pow(2)
也可以直接调用API:
F.mse_loss(y,y_pre)来进行求解
8、对于梯度的求取在pytorch里面主要有两种方式:
(1)torch.autograd.grad(loss,[w0,w1,...],retain_graph=True)
(2)loss.backward(retain_graph=True) #其中使得retain_graph=True的目的是使得其不发生变化


9、感知机及其梯度推导——完整的神经网络的梯度计算的过程
(1)单输出模型的梯度计算

(2)多输出模型的梯度计算

10、链式法则
链式法则主要是用来求取多隐含层和多输出的神经网络的梯度计算关系,它可以方便地进行计算,高效准确


11、使用梯度下降法求解一个2D函数的最小值:
#反向传播过程解析
#2D函数最优化曲线
#画3D函数图像输出
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d
figure=plt.figure()
#ax = Axes3D(figure)
ax=figure.gca(projection="3d")
x1=np.linspace(-6,6,1000)
y1=np.linspace(-6,6,1000)
x,y =np.meshgrid(x1,y1)
z=(x**2+y-11)**2+(x+y**2-7)**2
#ax.plot_surface(x,y,z,rstride=10,cstride=4,cmap=cm.YlGnBu_r)
ax.plot_surface(x,y,z,cmap="rainbow")
plt.show()

#梯度下降法寻找2D函数最优值函数
def f(x):
return (x[0]**2+x[1]-11)**2+(x[0]+x[1]**2-7)**2
x=torch.tensor([-4.,0.],requires_grad=True) #
optimizer=torch.optim.Adam([x],lr=1e-3)
for step in range(20000):
  pre=f(x)
  optimizer.zero_grad()
  pre.backward()
  optimizer.step()
  if step % 2000==0:
    print(step,x.tolist(),pre)

输出结果如下所示:

原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/11600259.html

时间: 2024-10-08 18:06:45

pytorch梯度下降法讲解(非常详细)的相关文章

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

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

浅析梯度下降法

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

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

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

解梯度下降法的三种形式BGD、SGD以及MBGD

原帖地址:https://zhuanlan.zhihu.com/p/25765735           在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练.其实,常用的梯度下降法还具体包含有三种不同的形式,它们也各自有着不同的优缺点. 下面我们以线性回归算法来对三种梯度下降法进行比较. 一般线性回归函数的假设函数为: $$h_\theta=\sum_{j=0}^n\theta_jx_j$$   对应的损失函数为: $$J_{train}(\theta)=\frac1{2m}\s

梯度下降法与牛顿下降法速度的比较

"牛顿下降法和梯度下降法在机器学习和自适应滤波中都很重要,本质上是为了寻找极值点的位置.但是收敛的速度不同. 本文中就两种方法来探究一下,哪种收敛方法速度快" 牛顿下降法的递推公式: xn+1=xn?f′(xn)/f′′(xn) 梯度下降算法的递推公式: xn+1=xn?μ?f′(xn) 解释一 下图是两种方法的图示表示,红色为牛顿下降法,绿色为梯度下降法,从图中直观的感觉是,红色线短,下降速度快.因为牛顿下降法是用二次曲面去拟合当前的局部曲面,而梯度下降法是用平面去拟合当前的局部曲面

线性回归与梯度下降法

前言 最近在看斯坦福的<机器学习>的公开课,这个课程是2009年的,有点老了,不过讲的还是很好的,廓清了一些我以前关于机器学习懵懂的地方.我的一位老师曾经说过: 什么叫理解?理解就是你能把同一个事情用自己的语言表达出来,并且能让别人听得懂. 本着这样的原则,同时也为了证明自己是”理解”的,于是决定打算在学习<机器学习>公开课的时候,写一些系列文章类巩固学到的东西.机器学习中的很多内容都是和数学推导相关的,而我本人的数学功底并不扎实,所以文章也许会写得比较慢.另外,这个系列的文章大体

梯度下降法和随机梯度下降法的区别

这几天在看<统计学习方法>这本书,发现 梯度下降法 在 感知机 等机器学习算法中有很重要的应用,所以就特别查了些资料.  一.介绍       梯度下降法(gradient descent)是求解无约束最优化问题的一种常用方法,有实现简单的优点.梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量.  二.应用场景      1.给定许多组数据(xi, yi),xi (向量)为输入,yi为输出.设计一个线性函数y=h(x)去拟合这些数据. 2.感知机:感知机(perceptron)为二类分类

(转)梯度下降法及其Python实现

梯度下降法(gradient descent),又名最速下降法(steepest descent)是求解无约束最优化问题最常用的方法,它是一种迭代方法,每一步主要的操作是求解目标函数的梯度向量,将当前位置的负梯度方向作为搜索方向(因为在该方向上目标函数下降最快,这也是最速下降法名称的由来).梯度下降法特点:越接近目标值,步长越小,下降速度越慢.直观上来看如下图所示: 这里每一个圈代表一个函数梯度,最中心表示函数极值点,每次迭代根据当前位置求得的梯度(用于确定搜索方向以及与步长共同决定前进速度)和

梯度下降法解逻辑斯蒂回归

梯度下降法解逻辑斯蒂回归 本文是Andrew Ng在Coursera的机器学习课程的笔记. Logistic回归属于分类模型.回顾线性回归,输出的是连续的实数,而Logistic回归输出的是[0,1]区间的概率值,通过概率值来判断因变量应该是1还是0.因此,虽然名字中带着"回归"(输出范围常为连续实数),但Logistic回归属于分类模型(输出范围为一组离散值构成的集合). 整体步骤 假如我们的自变量是"数学课和英语课的成绩",x={x1,x2},因变量是"