深度学习总结(一)

2023-11-18

深度学习总结(一)

1、经典优化算法

(1)一阶迭代法(又称梯度下降法):
在这里插入图片描述
(2)二阶迭代法(牛顿法):
在这里插入图片描述
一般在神经网络里面,L()函数就是代价函数。

2、不同梯度下降法

(1) 经典梯度下降法

在这里插入图片描述在这里插入图片描述

(2)随机梯度下降法

在这里插入图片描述
随机梯度下降法可以解决经典梯度下降法数据量大,计算量大,耗时长的问题。
但是对于SGD来说,局部最小还不是最可怕的,在陷入鞍点(鞍点的形状像是一个马 鞍,一个方向上两头翘,另一个方向上两头垂,而中心区域是一片近乎水平的平 地)才是最可怕的,就像在山谷中一样,在两石壁上来回反弹振荡,故称plateau。
解决办法:
a、动量方法:
在这里插入图片描述
具体来说,前进步伐−vt由两部分组成。一是学习速率η乘以当前估计的梯度gt;二 是带衰减的前一次步伐vt−1。这里,惯性就体现在对前一次步伐信息的重利用上。 类比中学物理知识,当前梯度就好比当前时刻受力产生的加速度,前一次步伐好 比前一时刻的速度,当前步伐好比当前时刻的速度。为了计算当前时刻的速度, 应当考虑前一时刻速度和当前加速度共同作用的结果,因此vt直接依赖于vt−1和gt, 而不仅仅是gt。另外,衰减系数γ扮演了阻力的作用。
在这里插入图片描述
由图可知:动量梯度下降法的收敛熟读更快。
b、环境感知—AdaGrad方法
惯性的获得是基于历史信息的,除了从过去的步伐中获取得一股子向前 冲的劲儿,还能获得什么呢?我们还期待获得对周围环境的感知,即使蒙上双眼,依靠前几次迈步的感觉,也应该能判断出一些信息,比如这个方向总是坑坑 洼洼的,那个方向可能很平。
随机梯度下降法对环境的感知是指在参数空间中,根据不同参数的一些经验性判断,自适应地确定参数的学习速率,不同参数的更新步幅是不同的。在应用中,我们希望更新频率低的参数可以拥有较大的更新步幅,而更新频率高的参数的步幅可以减少。AdaGrad方法采用“历史梯度平方和”来衡量不同参数的梯度的稀疏性,取值越小表明越稀疏,具体的更新公式如下:
在这里插入图片描述
AdaDelta和RMSProp两个方法非常类似,是对AdaGrad方法的改进。
在这里插入图片描述
c、Adam方法
在这里插入图片描述
Adam方法将惯性保持和环境感知这两个优点集于一身。一方面,Adam记录梯度的一阶矩阵,即过往梯度与当前梯度的平均,这体现了惯性保持 ;另一方面,Adam还记录梯度的二阶矩,即过往梯度平方与当前梯度平方的平均,体现了环境感知能力,为不同参数产生自适应的学习速率

(3)小批量梯度下降法

在这里插入图片描述
注意:
a、m一般选取2的幂次,如32、64、128等;
b、为了避免数据的特定顺序给算法收敛带来的影响,在每次遍历训练数据之前,先对所有的数据进行随机排序,然后在每次迭代时按顺序挑选m个训练数据直至遍历完所有的数据;
c、学习速率α要选择合适。

3、 正则化

(1)L1和L2正则项

在这里插入图片描述

(2)正则项可以较少过拟合

在这里插入图片描述
假设激活函数是tanh,当lambda增大时,导致w减少,z=w*a+b也会减少,由上图可知,在z较少的区域内,tanh(z)函数近似线性,所以每层的函数就接近线性函数,整个网络就成为了一个简单的线性网络,从未不会发生过拟合。

(3)Dropout正则项

Dropout正则项为每个神经元设置一个随机消除的概率,对于保留下来的神经元,我们将得到一个节点较少,规模较大的网络进行训练。
在这里插入图片描述
对于Dropout的理解,以单个神经元入手,单个神经元工作就是接受输入,并产生一些有意义的输出,但是假如Dropout以后,输入的特征就是有可能会被随机清楚(概率是K的值),所以该神经元不会再特别依赖于任何一个输入特征,也就是不会给任何一个输入设置太大的权重。

4、梯度消失和梯度爆炸

在这里插入图片描述
从输入到输出有很多层结构,y=w(l) * w(l-1) * w(l-2) *** w(1) * x
a、w(l)>1时:
在这里插入图片描述
激活函数的值将以指数级递增,在梯度函数上出现以指数级递增,成为梯度爆炸;
b、w(l)<1时:
在这里插入图片描述
激活函数的值将以指数级递减,在梯度函数上出现以指数级递减,成为梯度消失。
解决办法:

  • 利用初始化缓解问题
  • 梯度剪切、权重正则化(针对梯度爆炸)
  • 使用不同的激活函数
  • 使用batchnorm,即BN规范化
  • 使用残差结构
  • 使用LSTM网络

5、Batch norm—BN

以一个简单的神经网络为例:
在这里插入图片描述
注意:没有写出偏置参数b,是因为z=w * a+b,而b=Batch norm要做的就是将z归一化,结果为均值为0,标准差为1的分布,再由B和r进行重新的分布缩放,那就意味着,无论b的值为多少,在这个过程中都会减去,不再起作用。所以如果在神经网络中应用Batch norm的话,直接将偏置参数b去掉。
Batch norm起作用的原因:
1)可以加速神经网络训练的原因和输入层的输入特征进行归一化,从而改变Cost function的形状,只是Batch norm不是单纯的将输入的特征进行归一化,而将各个隐含层的激活值进行归一化,并调整到另外的分布;
2)使权重比网络更滞后或者更深层。
covariate shift问题
通俗上说,covariate shift问题就是训练集上分布较好的点,它所对应的参数,在测试集上是否好呢?
在神经网络中,第二个隐含层的输出值a[2]作为输入特征时,通过前向传播得到最终的预测输出y,但是由于我们的网络还有前面两层,由于训练过程,参数w[1]、w[2]是不断变化,那么也就对于后面的网络,a[2]的值也处于不断变化中,就有了covariate shift问题。
对于Z使用了Batch norm,那么即使其值不断的变化,但是其均值和方差却会保持。Batch norm的作用就是限制前两层的参数更新导致对后面网络数值分布程度的影响,使得后 层的数值变得更加稳定。另外一个角度就是,Batch norm削弱了前两层与后层之间的联系,使得网络的每一层都可以自己学习,相对其他层有一定的独立性,有助于加速整个网络的学习。
由于不是在整个训练集上训练,是在mini-batch中训练,计算均值和偏差,会带来小误差,起到了正则化的效果。

6、梯度检验

在这里插入图片描述
在这里插入图片描述

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

深度学习总结(一) 的相关文章

  • Vite3 + Svelte3使用@import导入scss样式

    近年来 前端技术日新月异 Vite Vue3 Svelte SolidJS 等框架工具大放异彩 身为一个前端开发 总感觉一刻不学习就要out了 最近使用 Vite3 Svelte3 来构建封装自定义的 Web Components 开始了艰
  • 开发板配置NFS服务

    文章目录 NFS介绍 NFS版本 NFS服务器和客户端 安装NFS 配置NFS服务器 启动NFS服务 挂载NFS共享 NFS安全性 NFS日志 开发板配置NFS环境 环境 操作前先关闭防火墙 配置过程 server端的配置 开发板的操作 常
  • 华为OD机试真题 Java 实现【拔河比赛】【2023 B卷 100分】,附详细解题思路

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 专栏导读 本专栏收录于 华为OD机试 JAVA
  • JAVA--windows和linux下执行.class

    windows和linux下执行 class windows下执行 class linux下执行 class windows下执行 class title testJOb java cp jar com yang jobTest start
  • CMake命令

    1 aux source directory 查找当前目录所有源文件 并将源文件名称列表保存到DIR SRCS变量 不能查找子目录 aux source directory DIR SRCS 2 添加一个库或预编译库 添加一个库 名为

随机推荐

  • 企业实名认证接口

    详情链接 http www haoservice com docs 140 企业实名认证接口 通过营业执照全称 营业执照注册号 对公账户名 对公账号 清算联行号来验证信息一致不一致 支持格式 JSON XML 请求方式 GET POST 明
  • Springboot集成Redis——实现分布式锁

    目录 1 分布式锁 2 springboot集成redis 3 使用setnx命令实现分布式锁 4 使用Redission实现分布式锁 5 redission分布式锁的类型 1 分布式锁 分布式锁 即分布式系统中的锁 随着业务发展的需要 原
  • Android App的工作原理

    Android App的工作原理 Android系统是基于liunx内核的 但是与传统的基于liunx的pc系统不同 用户对Android app没有绝对的掌控权 pc系统中 在应用程序的系统菜单上选择 退出 或者 关闭 之类的选项会直接杀
  • 大型项目一定用angular吗

    不一定 虽然Angular在构建大型项目方面具有优势 但选择使用何种前端框架还需要考虑多个因素 包括项目需求 团队技能 开发周期 项目规模和性能需求等 以下是一些需要考虑的因素 项目规模和复杂性 Angular 的模块化 依赖注入和组件化架
  • bootstrap label的for属性

  • Spring Boot 统一返回前端封装VO类型结果集定义

    现在大部分项目都是前后端分离的项目 为了统一管理 后端需要对数据进行封装对应的VO数据 什么是Vo我就不叙述了 这里贴出我自己的VO封装类 项目的故障码并没有定义太多 所以也没有定义枚举类型 供大家参考 import io swagger
  • Unity查看接入的Ironsource和adapter 版本号

    APPLOVINADAPTER版本号
  • vmware 开机自动启动虚拟机

    vmware开机自动启动 可以使用vmrun命令 1 首先在 我的电脑 属性 高级 环境变量 PATH 中添加vmware路径 如 C Program Files x86 VMware VMware Workstation 2 新建一个 启
  • Kafka一文懂

    初识 Kafka 什么是 Kafka Kafka 是由 Linkedin 公司开发的 它是一个分布式的 支持多分区 多副本 基于 Zookeeper 的分布式消息流平台 它同时也是一款开源的基于发布订阅模式的消息引擎系统 Kafka 的基本
  • 影响DDR5稳定性的RAS功能

    内存的稳定性 离不开RAS功能 这里的RAS Reliability Availability and Serviceability 即可靠性 可用性和可维护性的简称 RAS功能一方面可以通过调整信号规避风险 另一方面 在发生错误时及时发现
  • js常用正则表达式 匹配多个汉字、数字、英文、所有字符(附带Layui中form的表单验证)

    常用正则表达式 转自 菜鸟工具 https c runoob com front end 854 一 校验数字的表达式 数字 0 9 n位的数字 d n 至少n位的数字 d n m n位的数字 d m n 零和非零开头的数字 0 1 9 0
  • 系统部署的基本流程

    系统部署的基本流程 系统升级部署的步骤 系统升级部署的步骤 一 web后台 1 确保代码正确 配置正确 打包为war 2 登录现有web端查看部分数据正常 数据库部分表时间段数据正常 3 连接服务器 进入相应tomcat 停止tomcat
  • Vite简介

    Vite是一个快速 轻量级的前端构建工具 它可以让开发者更高效地进行前端开发 相比于其他构建工具 Vite的特点在于快速的冷启动 模块热替换和按需编译等功能 下面我们将详细探讨Vite的优势和如何使用它 什么是Vite Vite是一款基于R
  • python进阶(七):并发和多线程

    一 多线程 原文 大纲 首页 并发是一种同时执行多个任务的方式 而多线程是一种实现并发的技术 在Python中 可以使用多线程来实现并发编程 了解Python的并发和多线程对于编写高效和响应性的程序非常重要 并发 vs 并行 在讨论并发和多
  • 支持本地挂载的网盘文件列表工具AList

    什么是 Alist AList 是一个支持多存储的文件列表程序 使用 Gin 框架和 Solidjs 库 可以将常见的 18 种网盘整合在一起 并支持 WebDAV 客户端访问 之前老苏写过一篇 Alist 但此 Alist 非彼 Alis
  • Hyperledger2.0 链码安装

    文章目录 简介 package install approveformyorg commit 半自动化安装链码 简介 以Hyperldger2 0为例 链码的安装主要分为以下几部分 package 打包源代码 install 安装链码 ap
  • Embedded world conference 2015

    本文转载至 http www embedded world eu program html 一些相关的议程 Tuesday February 24 13 30 14 30 Keynote 1 Conference Keynote 09 30
  • k3服务器端的虚拟,k3服务器 客户端配置

    k3服务器 客户端配置 内容精选 换一换 选择Windows开发环境下 安装Eclipse 安装JDK 请安装JDK1 8及以上版本 Eclipse使用支持JDK1 8及以上的版本 并安装JUnit插件 若使用IBM JDK 请确保Ecli
  • 想搞清是服务器否存在内存泄漏或jvm其他方面的问题

    解决问题 想搞清是服务器否存在内存泄漏或jvm其他方面的问题 heap dump heap dump文件是一个二进制文件 它保存了某一时刻JVM堆中对象使用情况 HeapDump文件是指定时刻的Java堆栈的快照 是一种镜像文件 Heap
  • 深度学习总结(一)

    深度学习总结 一 1 经典优化算法 1 一阶迭代法 又称梯度下降法 2 二阶迭代法 牛顿法 一般在神经网络里面 L 函数就是代价函数 2 不同梯度下降法 1 经典梯度下降法 2 随机梯度下降法 随机梯度下降法可以解决经典梯度下降法数据量大