文章目录

  • 一般梯度下降方法
    • 批量梯度下降(BGDBGDBGD)
    • 随机梯度下降(SGD)(SGD)(SGD)
    • 小批量梯度下降(MBGD)(MBGD)(MBGD)
  • PyTorch梯度下降方法

一般梯度下降方法

  • 损失函数(Lossfunction)(Loss\ function)(Loss function):计算的是一个样本的误差;

    • 示例 (ypred−y)2(y_{pred}-y)^2(ypred​−y)2
  • 代价函数(Costfunction)(Cost\ function)(Cost function):计算的是训练集所有样本误差的平均值
    • 示例 1N∑(ypred−y)2\frac{1}{N}\sum(y_{pred}-y)^2N1​∑(ypred​−y)2

批量梯度下降(BGDBGDBGD)

w=w−α∂cost∂ww = w - \alpha \dfrac{\partial cost}{\partial w} w=w−α∂w∂cost​

∂cost∂w=1N2w(xw−y);ypred=xw时\dfrac{\partial cost}{\partial w} = \frac{1}{N}2w(xw-y);\ \ \ \ \ \ y_{pred} = xw时 ∂w∂cost​=N1​2w(xw−y);      ypred​=xw时

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]w = 1 # 初始值def forward(x): # 模型return x * wdef cost(xs, ys): # MSEcost = 0for x, y in zip(xs, ys):y_pred = forward(x)cost += (y_pred-y)**2return cost/len(xs)def gradient(xs, ys): # 计算梯度grad = 0for x,y in zip(xs,ys):grad += 2*x*(x*w-y)return grad/len(xs)print('Predict (before training)', 4, forward(4))for epoch in range(100): # 下降次数cost_val = cost(x_data, y_data)grad_val = gradient(x_data, y_data)w -= 0.01 * grad_val # 梯度下降print('Epoch:',epoch,'w=',w,'cost=',cost_val)
print('Predict (after training)',4,forward(4))
  • 优点:每次都会朝着正确的方向进行,最终保证收敛到极值点
  • 缺点:每次需用所有样本,更新速度慢

随机梯度下降(SGD)(SGD)(SGD)

w=w−∂loss∂ww = w - \frac{\partial loss}{\partial w} w=w−∂w∂loss​

∂loss∂w=2w(xw−y);ypred=xw时\dfrac{\partial loss}{\partial w} = 2w(xw-y);\ \ \ \ \ \ y_{pred} = xw时 ∂w∂loss​=2w(xw−y);      ypred​=xw时

import random
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]w = 1 # 初始值def forward(x): # 模型return x * wdef loss(x, y):y_pred = forward(x)return (y_pred - y) ** 2def gradient(x, y): # 计算梯度y_pred = forward(x)return 2*w*(y_pred - y)print('Predict (before training)', 4, forward(4))for epoch in range(100): # 下降轮数for x, y in zip(x_data, y_data):loss_val = loss(x, y)grad_val = gradient(x, y)w -= 0.01 * grad_val # 梯度下降print('Epoch:',epoch,'w=',w,'loss=',loss_val)
print('Predict (after training)',4,forward(4))
  • 每次考虑一个样本点,更新速度快
  • 每次更新可能不会按照正确的方向进行,可能有扰动。
  • 扰动也有好处,有可能从一个局部极小值跳到另一个局部极小值

小批量梯度下降(MBGD)(MBGD)(MBGD)

二者折中
小批量随机梯度下降是深度学习默认的求解算法;
其具备两个重要的超参数:批量大小和学习率;

PyTorch梯度下降方法

核心:省去梯度函数,利用tensor中的grad即可得到所需梯度∂loss∂w\frac{\partial loss}{\partial w}∂w∂loss​。

import torchx_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]w =  torch.Tensor([1.0]) # 默认不带有梯度
w.requires_grad = True # 使w张量具有梯度def forward(x):return x * w # 返回值含有梯度# 此处乘法运算符被重载,可用于Tensor的计算def loss(x, y): # 一个样本的lossy_pred = forward(x)return (y_pred-y) ** 2 # 返回值含有梯度print('Predict (before training)', 4, forward(4).item()) # item()是将Tensor中的grad计算值转换成一个标量for epoch in range(100): # 梯度下降次数for x,y in zip(x_data, y_data): # 要全部遍历一遍啊l = loss(x,y) # 前向传播; 前馈的过程就是建立计算图的过程;l.backward() # 反向传播; 求出了所有需要的梯度; 反向传播之后计算图就被释放print('\tgrad:', x, y, w.grad.item())# 构建时用Tensor,权重更新时用.dataw.data -= 0.01 * w.grad.data# 引入PyTorch的grad自动求每个样本时的梯度print('w.grad.item() ',w.grad.item())print('w.grad.data ',w.grad.data)w.grad.data.zero_() # 将本轮计算的grad清零,否则默认是dL/dw累加至下一轮print('process:', epoch, l.item())print('Predict (after training)',4,forward(4).item())

梯度下降 - BGD SGD MBGD PyTorch相关推荐

  1. 各种梯度下降 bgd sgd mbgd adam

    转载  https://blog.csdn.net/itchosen/article/details/77200322 各种神经网络优化算法:从梯度下降到Adam方法   在调整模型更新权重和偏差参数 ...

  2. 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

    批量梯度下降(BGD).随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解 </h1><div class="clear"></div> ...

  3. 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)及 batch、epoch、iteration

    先介绍一下梯度下降:梯度下降是一种用于机器学习训练参数的一种优化方法.对损失函数进行梯度下降,"梯度"指误差梯度或误差斜率,"下降"指沿着误差斜率移动到误差较小 ...

  4. 梯度下降(BGD)、随机梯度下降(SGD)、Mini-batch Gradient Descent、带Mini-batch的SGD

    原文:http://blog.csdn.net/llx1990rl/article/details/44001921 梯度下降(BGD).随机梯度下降(SGD).Mini-batch Gradient ...

  5. BGD,SGD,MBGD

    文章目录 批量梯度下降BGD 随机梯度下降SGD 小批量梯度下降MBGD 一般线性回归函数的假设函数为: 批量梯度下降BGD 对所有的参数求均方误差 损失函数: 随机梯度下降SGD #更新单个参数,对 ...

  6. GD(gradient descent):梯度下降法(BGD,SGD,mini-batch GD)

      梯度下降法(GD,gradient descent)是一种优化方法,比如对某个损失函数进行最小化的优化. 其共有三种: BGD,batch gradient descent:批量梯度下降 SGD, ...

  7. 优化算法、梯度下降、SGD、Momentum、Adagrad、Adam

    优化算法.梯度下降.随机梯度下降(SGD).动量法(Momentum).自适应法(Adagrad).动量自适应(Adam) 概述: 在机器学习算法实践中,优化总是重头戏,也是最考验功底的地方.深度学习 ...

  8. 机器学习:随机梯度下降(SGD)与梯度下降(GD)的区别与代码实现。

    机器学习:随机梯度下降(SGD)与梯度下降(GD)的区别与代码实现. 梯度下降法(GD) 随即梯度下降(SGD) 代码实现 如果想细致的了解:-> 梯度下降法 梯度下降法(GD) 假设函数fx, ...

  9. 【深度学习——梯度下降】区分BGD,SGD,MBGD

    1.BGD(批量梯度下降): 每次迭代,需要所有训练集数据参与,以更新一次参数: 假设迭代100次,所有训练集数据将被遍历100次,m=all: 优点:对于单峰可以收敛到全局最优解,适合小样本:缺点: ...

最新文章

  1. android html文字垂直居中,Android 浏览器文本垂直居中问题
  2. gif加文字 php,gif动态图片添加文字 gif制作软件 怎样给gif动态图片添加文字
  3. 论文解读 Combating Adversarial Misspellings with Robust Word Recognition
  4. 求助 windows server2008密码策略修改
  5. JAVA集合泛型,类型擦除,类型通配符上限之类的知识点
  6. 科大星云诗社动态20210326
  7. php网页悬浮对联代码,不用js多浏览器兼容纯DIV/CSS对联漂浮广告代码
  8. 彻夜怒肝!Spring Boot+Sentinel+Nacos高并发已撸完,快要裂开了!
  9. 个人对于MySQL的理解_MySQL锁的理解
  10. [转]Spinner的常用技巧
  11. 三级IP地址的子网划分
  12. php 基础 自动类型转换
  13. objective-c 中的关联介绍
  14. Model与Record转换适配
  15. -source 1.6 中不支持 lambda 表达式 [ERROR] (请使用 -source 8 或更高版本以启用 lambda 表达式)
  16. 设计模式 ( 六 ) 建造者模式
  17. 一种雷达和电子海图图像叠加方法
  18. 那些堪称软件神器的工具或网站
  19. 浅谈估值模型:PE指标II——PE Band
  20. 设计模式之访问者模式(Vistor)

热门文章

  1. Ui设计中LOGO设计指南
  2. 串口使用及测量实验1
  3. 下载ebook的地方
  4. 对“23%的受访家庭表现蒙受了资产减值”这一数字
  5. Valid XML document must have a root tag解决办法
  6. 学习java随堂练习-20220602
  7. 高级ACL限制不同网段互访 拓扑与命令
  8. ipad和iphone是不是计算机,iPad和iPhone哪个好 iPhone与iPad的区别
  9. speedoffice如何设置首字下沉效果
  10. C# SqlDataAdapter.update结合事务(SqlTransaction)批量更新数据