图解深度学习-三种梯度下降法可视化(BGD,SGD,MBGD)

  • BGM(批量梯度下降法)
  • SGD(随机梯度下降法)
  • MBGD(小批量梯度下降法)
  • 总结

用可视化的方式来看下三种梯度下降法。
我们来拟合简单的函数 $f(x)=wx+1 $ 其中w=0.5其中w=0.5其中w=0.5

import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import *
np.random.seed(1)
%matplotlib inline
# 生成数据
def generate_data(sample_num=200):   #在返回(-1, 1)范围内的等差序列X = np.linspace(-1, 1, sample_num) Y = 0.5* X+1 ++ np.random.normal(0, 0.1, (sample_num, ))#生成Y并添加噪声return X,Y
#显示要拟合的数据
X, Y = generate_data()
plt.scatter(X,Y)
plt.show()

def plot(thetas,losses):plt.figure(figsize=(8,6))plt.plot(thetas, losses)plt.plot(np.array(thetas),np.array(losses),color='r',marker='o')plt.xlim(-0.1,0.6)plt.ylim(-0.1,0.2)plt.plot(0.5, 0, 'r*',ms=15)plt.text(0.5, 0, 'min', color='k')plt.text(thetas[0]+0.01,  losses[0], 'start', color='k')plt.text(thetas[-1]+0.01, losses[-1]-0.01, 'end', color='k')plt.xlabel('w')plt.ylabel('loss')plt.title('w-loss')plt.figure(figsize=(8,6))plt.plot(np.linspace(0,1000,len(losses)), losses)plt.xlabel('epoch')plt.ylabel('loss')plt.title('epoch-loss')plt.figure(figsize=(8,6))X, Y = generate_data()plt.scatter(X,Y)Y = thetas[-1]* X+1plt.plot(X,Y,'r')plt.xlabel('x')plt.ylabel('y')plt.title('x-y')plt.show()   print('w:',thetas[-1])print('loss:',losses[-1])

BGM(批量梯度下降法)

每次都要全部样本进行计算,方向比较稳,不会波动,但是比较慢,要迭代好多次

def bgd(X, Y, lr=0.01, epoch=10):sample_num = X.shape[0]w = 0.1loss=0thetas=[]losses=[]for i in range(epoch):loss=0dj=0error=0#每次都是所有样本一起算,更新一次for j in range(sample_num):predict_y =w*X[j]+1error +=0.5*np.power((predict_y - Y[j]), 2)dj+=(predict_y - Y[j])*X[j]loss = error/sample_numdj/=sample_numw = w-lr *djlosses.append(loss)thetas.append(w)plot(thetas,losses)
@interact(lr=(0, 1, 0.001),epoch=(1,2000,10),continuous_update=False)
def visualize_gradient_descent(lr=0.01,epoch=10):X, Y = generate_data()bgd(X, Y,lr,epoch)



SGD(随机梯度下降法)

def sgd(X, Y, lr=0.01, epoch=10):sample_num = X.shape[0]w =0thetas=[]losses=[]for _ in range(epoch):loss=0#每个样本单独算,单独更新一次for j in range(sample_num):predict_y =w*X[j]+1loss =0.5* np.power((predict_y - Y[j]), 2)w = w-lr *(predict_y - Y[j])*X[j]losses.append(loss)thetas.append(w)plot(thetas,losses)
#可以随时调节,查看效果 (最小值,最大值,步长)
@interact(lr=(0, 5, 0.001),epoch=(1,100,1),continuous_update=False)
def visualize_gradient_descent(lr=0.01,epoch=10):X, Y = generate_data()sgd(X, Y,lr,epoch)


MBGD(小批量梯度下降法)

def mbgd(X, Y, lr=0.01, epoch=10,batch_size=8):sample_num = X.shape[0]w =0thetas=[]losses=[]batch_num=(sample_num-1)//batch_size+1for _ in range(epoch):for i in range(batch_num):loss=0start_index = i * batch_sizeend_index = min((i + 1) * batch_size, sample_num)batch_x=X[start_index:end_index]batch_y=Y[start_index:end_index]num=end_index-start_indexfor j in range(num):predict_y =w*batch_x[j]+1loss+=0.5* np.power((predict_y - batch_y[j]), 2)w = w-lr *(predict_y - batch_y[j])*batch_x[j]loss /= numlosses.append(loss)thetas.append(w)plot(thetas,losses)
#可以随时调节,查看效果 (最小值,最大值,步长)
@interact(lr=(0.01, 5.00, 0.01),epoch=(1,100,1),batch_size=(0,200,8),continuous_update=False)
def visualize_gradient_descent(lr=0.01,epoch=10,batch_size=8):X, Y = generate_data()mbgd(X, Y,lr,epoch,batch_size)



总结

BGD需要所有样本计算才迭代一次,数据能更好的代表所有样本总体,所以比较稳,不会出现波动,因此也比较慢,但是每次可以用矩阵并行计算,如果样本不大可以这样做。

SGD每次样本都计算一次,因为可能有噪声,所以可能会波动,但是总体趋势还是对的,虽然可以观察每个样本的信息,但是这样也失去了并行处理的优化操作,只能一个个算。

MBGD刚好是BGD和SDG结合,不采取两个极端,取中间最优吧,既可以相对稳定损失,也可以进行批量化处理,至于batch取多少,还是得看具体情况的,没有固定值,尽可能2的次数比较好,因为计算机存储是2进制的,会有一定的优化。

修改后的jupyter的文件链接

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

图解深度学习-三种梯度下降法可视化(BGD,SGD,MBGD)相关推荐

  1. 深度学习原理-----线性回归+梯度下降法

    系列文章目录 深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络 深度学习原理-----卷积神经网络 深度学习原理-----循环神经网 ...

  2. 三种梯度下降法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)

    梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降(stochastic gradient descent).批量梯度下降(Batch gradient descent)和mini ...

  3. 语音识别 AI 挑战赛上线:用深度学习三种结构,对 50 种环境声音分类!

    雷锋网 AI 源创评论按:此前,AI 研习社(https://god.yanxishe.com )陆续推出了医疗.美食.安全等多个领域的图像识别挑战赛以及 NLP 方向的挑战赛 30 余场.在这过程中 ...

  4. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

    深度学习笔记(一):logistic分类  深度学习笔记(二):简单神经网络,后向传播算法及实现  深度学习笔记(三):激活函数和损失函数  深度学习笔记:优化方法总结  深度学习笔记(四):循环神经 ...

  5. 深度学习相关概念:梯度下降

    深度学习相关概念:梯度下降法.动量法与自适应梯度 1. 梯度下降概念 2. 梯度下降的目的 3. 梯度下降的原理 4. 梯度计算 5. 梯度下降算法的类别及计算效率 5.1 批量梯度下降(BGD) 5 ...

  6. 三种梯度下降的方式:批量梯度下降、小批量梯度下降、随机梯度下降

    在机器学习领域中,梯度下降的方式有三种,分别是:批量梯度下降法BGD.随机梯度下降法SGD.小批量梯度下降法MBGD,并且都有不同的优缺点. 下面我们以线性回归算法(也可以是别的算法,只是损失函数(目 ...

  7. 【深度学习系列】——神经网络的可视化解释

    这是深度学习系列的第三篇文章,欢迎关注原创公众号 [计算机视觉联盟],第一时间阅读我的原创!回复 [西瓜书手推笔记] 还可获取我的机器学习纯手推笔记! 深度学习系列 [深度学习系列]--深度学习简介 ...

  8. 鸢尾花数据集使用三种梯度下降MGD、BGD与MBGD

    鸢尾花数据集 目录 一.鸢尾花数据集是什么? 二.使用python获取鸢尾花数据集 1.数据集的获取及展示 2.数据可视化及获得一元线性回归 3.数据集的划分 三.鸢尾花数据集使用三种梯度下降MGD. ...

  9. 深度学习三(PyTorch物体检测实战)

    深度学习三(PyTorch物体检测实战) 文章目录 深度学习三(PyTorch物体检测实战) 1.网络骨架:Backbone 1.1.神经网络基本组成 1.1.1.卷积层 1.1.2.激活函数层 1. ...

  10. 深度学习三巨头共获 2018 年图灵奖(经典重温)!

    整理 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 2019 年 3 月 27 日,ACM 宣布,深度学习三位大牛 Yoshua Bengio.Yann LeCun.Geoffrey ...

最新文章

  1. linux下的软硬资源限制,关于ulimit命令修改软硬资源大小说明及正确修改软硬资源限制数配置...
  2. Keep裁员、程序员被抓,看了下行情,我选择投奔AI
  3. 专家也要小心,HTTPS网址的网站就一定安全吗?
  4. Python地信专题 | 基于geopandas的空间数据分析—数据结构篇
  5. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.18. 数组函数和操作符...
  6. ORB-SLAM2中四叉树管理特征点
  7. Tomcat7/8开启WebDAV的支持
  8. 面向对象程序设计的术语
  9. lamp mysql位置_linux查看 LAMP环境安装路径
  10. tinypng upload一键压缩上传工具
  11. c索引超出了数组界限_关于MATLAB逻辑数组索引的二三事(二)
  12. DBMS_STATS常用方法(收集oracle信息)
  13. 如果美图可以把妹,如何用技术手段做一个会拍照的程序员?
  14. origin如何绘制双y轴曲线_Origin系列:绘制双Y轴图
  15. 牛客 处女座的约会 规律
  16. 单点登录(SSO)原理
  17. 65位高校教师接龙晒工资!给打算入高校的研究生们参考!
  18. unix下c语言recv函数,Linux send与recv函数详解
  19. 失落世界服务器国庆宝箱位置,失落的斯菲尔 图文攻略 全剧情任务流程全宝箱收集...
  20. 设置.exe程序图标(ico文件)

热门文章

  1. usbcan、can分析仪、can卡的产品特点和功能特点
  2. The Environment class in C#
  3. Greenplum恢复系统知多少
  4. bootdo增加多级菜单
  5. 这个录屏神器好用哭了!
  6. C# 小票打印机 直接打印 无需驱动
  7. Webstorm—Webstorm汉化(图文详解)
  8. SaltStack之数据系统
  9. Python 和Java 哪个更适合做自动化测试?
  10. Selenium FirePath的安装和使用