深度学习的优化方法

2023-11-10

深度学习的优化方法

学习目标

  • 知道梯度下降算法
  • 理解神经网络的链式法则
  • 掌握反向传播算法(BP算法)
  • 知道梯度下降算法的优化方法
  • 了解学习率退火

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ztfRrTBB-1645256376589)(笔记图片/image-20200731113227192.png)]

梯度下降算法

梯度下降法简单来说就是一种寻找使损失函数最小化的方法。大家在机器学习阶段已经学过该算法,所以我们在这里就简单的回顾下,从数学上的角度来看,梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数减少最快的方向,所以有:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUm5V3oj-1645256376590)(笔记图片/image-20200731113915710.png)]

其中,η是学习率,如果学习率太小,那么每次训练之后得到的效果都太小,增大训练的时间成本。如果,学习率太大,那就有可能直接跳过最优解,进入无限的训练中。解决的方法就是,学习率也需要随着训练的进行而变化。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IP2MYT3p-1645256376592)(笔记图片/image-20200731142541549.png)]

在上图中我们展示了一维和多维的损失函数,损失函数呈碗状。在训练过程中损失函数对权重的偏导数就是损失函数在该位置点的梯度。我们可以看到,沿着负梯度方向移动,就可以到达损失函数底部,从而使损失函数最小化。这种利用损失函数的梯度迭代地寻找局部最小值的过程就是梯度下降的过程。

根据在进行迭代时使用的样本量,将梯度下降算法分为以下三类:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cOpdwFHx-1645256376592)(笔记图片/image-20200731162157513.png)]

实际中使用较多的是小批量的梯度下降算法,在tf.keras中通过以下方法实现:

tf.keras.optimizers.SGD(
    learning_rate=0.01, momentum=0.0, nesterov=False, name='SGD', **kwargs
)

例子:

# 导入相应的工具包
import tensorflow as tf
# 实例化优化方法:SGD 
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
# 定义要调整的参数
var = tf.Variable(1.0)
# 定义损失函数:无参但有返回值
loss = lambda: (var ** 2)/2.0  
# 计算梯度,并对参数进行更新,步长为 `- learning_rate * grad`
opt.minimize(loss, [var]).numpy()
# 展示参数更新结果
var.numpy()

更新结果为:

# 1-0.1*1=0.9
0.9

在进行模型训练时,有三个基础的概念:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9doM5yW-1645256376593)(笔记图片/image-20200805161222933.png)]

实际上,梯度下降的几种方式的根本区别就在于 Batch Size不同,,如下表所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M8ZGXpu4-1645256376594)(笔记图片/image-20200805161408473.png)]

注:上表中 Mini-Batch 的 Batch 个数为 N / B + 1 是针对未整除的情况。整除则是 N / B。

假设数据集有 50000 个训练样本,现在选择 Batch Size = 256 对模型进行训练。

  • 每个 Epoch 要训练的图片数量:50000
  • 训练集具有的 Batch 个数:50000/256+1=196
  • 每个 Epoch 具有的 Iteration 个数:196
  • 10个 Epoch 具有的 Iteration 个数:1960

反向传播算法(BP算法)

利用反向传播算法对神经网络进行训练。该方法与梯度下降算法相结合,对网络中所有权重计算损失函数的梯度,并利用梯度值来更新权值以最小化损失函数。在介绍BP算法前,我们先看下前向传播与链式法则的内容。

前向传播与反向传播

前向传播指的是数据输入的神经网络中,逐层向前传输,一直到运算到输出层为止。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lwltSG0A-1645256376595)(笔记图片/image-20200731145337538.png)]

在网络的训练过程中经过前向传播后得到的最终结果跟训练样本的真实值总是存在一定误差,这个误差便是损失函数。想要减小这个误差,就用损失函数ERROR,从后往前,依次求各个参数的偏导,这就是反向传播(Back Propagation)。

链式法则

反向传播算法是利用链式法则进行梯度求解及权重更新的。对于复杂的复合函数,我们将其拆分为一系列的加减乘除或指数,对数,三角函数等初等函数,通过链式法则完成复合函数的求导。为简单起见,这里以一个神经网络中常见的复合函数的例子来说明 这个过程. 令复合函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习的优化方法 的相关文章

  • Python 有不可变列表吗?

    python 有不可变列表吗 假设我希望具有元素有序集合的功能 但又想保证它不会改变 如何实现呢 列表是有序的 但它们可以改变 是的 它被称为一个tuple 所以 而不是 1 2 这是一个list并且可以突变 1 2 is a tuple并
  • Python argparse 作为函数

    以这种方式获取命令行参数有什么本质上的错误吗 我的意思是把参数解析放入它自己的函数中 它会被认为是非 Pythonic 或更严重吗 usr bin python import argparse def getArgs argv None p
  • 使用 JPype - 如何访问 JDBC 元数据函数

    我在用着杰 德贝API https launchpad net jaydebeapi它使用 JPype 加载 FileMaker 的 JDBC 驱动程序并提取数据 但我也希望能够获取所有表的列表在数据库中 In the JDBC 文档 ht
  • 让 Django 提供可下载文件

    我希望网站上的用户能够下载路径被遮挡的文件 因此无法直接下载它们 例如 我希望 URL 是这样的 http example com download f somefile txt 在服务器上 我知道所有可下载的文件都位于该文件夹中 home
  • Native TF 与 Keras TF 性能比较

    我使用本机和后端张量流创建了完全相同的网络 但在使用多个不同参数进行了多个小时的测试后 仍然无法弄清楚为什么 keras 优于本机张量流并产生更好 稍微但更好 的结果 Keras 是否实现了不同的权重初始化方法 或者执行除 tf train
  • 熊猫加入具有不同索引级别/日期时间的数据帧?

    嗨 我有两个 DataFrame 如下所示 dineType menuName unique columns date y m d
  • 使用 Python 将列名称与 CSV 文件中的数据对齐

    这是我用来将数据写入 csv 文件的代码 with open temp csv a as fp a csv writer fp delimiter t data faceXpos faceYpos faceHeight faceWidth
  • 如何从 Windows 7 PC 上完全卸载 Python 2.7

    从这里安装了Python 2 7 https www python org downloads release python 279 https www python org downloads release python 279 然后我
  • 来自多元 t 分布的样本 python

    我想知道Python中是否有一个从多元学生t分布中采样的函数 我有包含 14 个元素的均值向量 14x14 协方差矩阵和自由度 我想从这个 t 分布中采样一个向量 对于一维情况 我使用 stats t rvs df loc scale 并且
  • NLTK:包错误?朋克和泡菜?

    基本上 我不知道为什么会收到此错误 只是为了获得更多图像 这里有一个代码格式的类似消息 由于是最新的 该帖子的答案已经在消息中提到 Preprocessing raw texts LookupError Traceback most rec
  • 如何使用格式保存 Tkinter 文本小部件的内容

    我在 python 中使用 Tkinter 在文本窗口中显示输出 我发现使用 get 功能我可以从此窗口检索文本内容 但我有用不同背景颜色标记的文本部分 是否可以将内容与这些颜色一起复制到文件 例如 html 或 doc 中 没有对你想要的
  • ipython/jupyter 中的 tk 问题

    我正在尝试编写一个用于从 ipython jupyter 笔记本启动的 gui 但在笔记本中使用 tkinter 时遇到了麻烦 特别是在让 tk gui 窗口正常关闭方面 如何从 jupyter 制作 启动 tkinter gui 然后在不
  • 如何使用Peewee查询多个相似的数据库?

    我遇到了使用 Peewee 查询多个数据库的问题 我有 2 个现有的 mysql 数据库 让我们将它们命名为 A 和 B 结构相似 因为它是两个 Bugzilla 数据库 我使用 Pwiz 生成模型 modelsA py 和 modelsB
  • 错误:tensorflow:无法匹配检查点的文件

    我正在训练一个张量流模型 在每个时期之后我都会保存模型状态并腌制一些数组 到目前为止 我的模型执行了 2 个纪元 并且保存状态的文件夹包含以下文件 checkpoint model e knihy preprocessed txt e0 c
  • django-allauth:电子邮件确认

    我已经设置了 django allauth 并在新用户注册时使用电子邮件确认 效果很好 但在确认电子邮件中 我得到 Hello from example com You re receiving this e mail because us
  • 如何在solidpython中设置特殊变量$fa、$fs、$fn

    in 上一个线程 https stackoverflow com questions 54040390 how to save data in stl file after python solid processing显示了如何通过 So
  • 在 Python 中通过网络发送对象的最佳方式是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要通过网络发送对象 我将使用 Twisted 并且我刚刚开始查看它的文档 据我所知 python实现套接字的唯一方式是通过文本 那么我如何使
  • 在不同进程之间共享列表?

    我有以下问题 我编写了一个函数 它将列表作为输入 并为列表中的每个元素创建一个字典 然后我想将这本字典附加到一个新列表中 这样我就得到了一个字典列表 我正在尝试为此生成多个进程 我的问题是 我希望不同的进程访问由其他进程更新的字典列表 例如
  • 如何使用多阶段构建减小 python (docker) 图像大小?

    我正在寻找一种使用 python 和 Dockerfile 创建多阶段构建的方法 例如 使用以下图像 第一张图片 安装所有编译时要求 并安装所有需要的 python 模块 第二张图片 将所有已编译 构建的包从第一个映像复制到第二个映像 而不
  • 收到 Python 错误“来自:无法读取 /var/mail/Bio”

    我正在运行一个 bio python 脚本 这会导致以下错误 from can t read var mail Bio 由于我的脚本与邮件没有任何关系 我不明白为什么我的脚本在 var mail 中查找 这里似乎有什么问题 我怀疑这会有帮助

随机推荐

  • #ifdef #if defined #ifndef和#if !defined区别 详解-覆盖所有说明

    首先 让我们先从头文件开始 在很多头文件里 我们会看到这样的语句 ifndef MYHEADFILE H define MYHEADFILE H 语句 endif MYHEADFILE H 为了避免同一个文件被include多次 我们常使用
  • 浅谈构建iOS一个动态化页面的思路

    随着产品的不断迭代 功能的不断完善 我们的项目的中会给用户分成区域呈现出越来越多的东西 咕咚的精选给用户一种信息广场的概念 让用户可以快速的抵达我们感兴趣的点 既然如此 那么每一个项目的综合信息的页面经常会被改动 出现位置的调整 出现新的模
  • STM32中断与事件的理解

    推荐文档 事件与中断区别 目录 事件与中断区别 举例 膝跳反射 人们看见火灾之后打119 事件与中断区别 很多时候 我们经常使用到中断 但是STM32还有一个东西叫做事件 那么这个事件是什么呢 看了上面这个文档我们知道 1 中断是需要CPU
  • MyBatis的Mapper接口以及Example的实例函数及详解

    一 mapper接口中的方法解析 mapper接口中的函数及方法 方法 功能说明 int countByExample UserExample example thorws SQLException 按条件计数 int deleteByPr
  • c#中函数参数中的this(扩展方法)

    首先和大家说一下 最近参加实习了 所以更新可能比较少 而且对于大家提出的问题可能不能及时回复 希望大家理解 在我看完大佬的项目之后 感觉自己啥也不会 于是不出意外 之后再csdn上我就会更新我在项目中遇到的问题 希望对大家也有些帮助 c 函
  • Web前端vueDemo—实现简单计数器功能(一)

    系列文章目录 Web前端vueDemo 实现简单计数器功能 一 Web前端vueDemo 实现图片切换功能 二 Web前端vueDemo 实现记事本功能 三 Web前端vueDemo 实现天气预报功能 四 文章目录 系列文章目录 前言 一
  • mysql数据库登录失败次数_mysql数据库限制多次登录失败,限定用户重试时间

    前言 最近的项目开始进行安全测试 其中有一个安全问题是这样的 应该增加用户登录失败处理功能 限制非法登录次数 建议是增加mysql数据库的登陆失败的锁定功能 相信大家也都会遇到这样的问题 在这里写一下 方便大家直接使用 设置方法 登录mys
  • 封装、继承、多态 详解

    面向对象的三个基本特征 封装 继承 多态 1 封装 1 封装是实现面向对象的第一步 封装就是将数据或函数等集合在一个单元中 类 被封装的对象通常被称为抽象数据类型 2 类具有封装性 类能够把数据和算法 操作数据的函数 组合在一起 构成一个不
  • 【C++】虚函数

    2023年8月23日 周三上午 目录 虚函数 在派生类中重写虚函数 纯虚函数 示例程序 虚函数 在函数返回值前面加上关键字virtual 虚函数必须在类中声明 否则会报错 Error virtual outside class declar
  • SpringBoot整合MyBatis分页组件PageHelper

    介绍 SpringBoot整合MyBatis插件PageHelper实现业务分页逻辑 POM 添加MyBatis PageHelper FastJSON MySQL依赖
  • selenium webdriver一种解决打开chrome浏览器的过程

    1 下载59或58版本的Chrome浏览器 下载地址 http www pc6 com SoftView SoftView 22726 html 2 下载对应的驱动 驱动下载地址如下 当前我使用的版本是2 32 http npm taoba
  • Redis安装与源码调试

    linux版本 64位CentOS 6 5 Redis版本 redis 3 0 6 更新到2016年1月22日 Redis官网 http redis io Redis常用命令 http redis io commands 1 安装Redis
  • https://github.com/gfto/mptsd

    https github com gfto mptsd Tvheadend is a TV streaming server and digital video recorder It supports the following inpu
  • 理解React页面渲染原理,如何优化React性能?

    React JSX转换成真实DOM过程 当使用React编写应用程序时 可以使用JSX语法来描述用户界面的结构 JSX是一种类似于HTML的语法 但实际上它是一种JavaScript的扩展 用于定义React元素 React元素描述了我们想
  • 面对CUDA报错的种种解决办法

    面对CUDA报错的种种解决办法 1 cuda failure 4 1 cuda failure 4 检查是否被docker容器所挂载完
  • ESP32学习笔记(1)—— 搭建开发环境、编译烧录 hello world 工程(基于rtos sdk 3.3.2)

    前言 ESP32 是一套 Wi Fi 2 4 GHz 和蓝牙 4 2 双模解决方案 sdk版本 v3 3 2 此次实验是在 Windows 10 系统下利用虚拟机安装 Ubuntu 16 04系统 并在此系统中进行开发编译和下载固件 一 准
  • 数据结构:递归算法

    记得小时候经常讲的一个故事 从前有座山 山上有座庙 庙里有一个老和尚和一个小和尚 一天 老和尚给小和尚讲了一个故事 故事内容是 从前有座山 山上有座庙 庙里有一个老和尚和一个小和尚 一天 老和尚给小和尚讲了一个故事 故事内容 什么是递归 上
  • 计算机开不了机反复重启,电脑一直反复重启,就是开不了机,怎么处理

    无法开机的情况比较多 总体来讲大概有几种硬件原因导致系统无法开机 1 电脑电源故障 导致无法正常为主机供电 通常表现为主机电源不亮 2 内存条原因出现此类故障一般是因为内存条与主板内存插槽接触不良造成 还有就是内存损坏或主板内存槽有问题也会
  • Vue2项目练手——通用后台管理项目第六节

    Vue2项目练手 通用后台管理项目 用户管理页 table表格 获取表格数据 目录列表 user js mock js index js Users vue 新增和编辑功能 Users vue 删除功能 使用的组件 Users vue 用户
  • 深度学习的优化方法

    优化方法 深度学习的优化方法 梯度下降算法 反向传播算法 BP算法 前向传播与反向传播 链式法则 反向传播算法 梯度下降优化方法 动量算法 Momentum 指数加权平均 动量梯度下降算法 AdaGrad RMSprop Adam 学习率退