深度学习基础知识-误差反向传播+训练技巧(无代码仅用来理解)

news2024/12/24 2:35:34

参考书籍:(找不到资源可以后台私信我)
《深度学习入门:基于Python的理论与实现 (斋藤康毅)》
《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Géron, Aurélien])》


神经网络正向传播进行的运算在几何学中称为“仿射变换”,即一次线性变换和一次平移,对应的就是加权和与加偏置运算。

在神经网络中,正向传播(forward propagation)是指输入数据通过网络中的每一层,最终产生输出的过程。反向传播(back propagation)是指在网络训练中,通过计算损失函数对网络参数进行更新的过程。

正向时可以通过数值微分计算梯度,反向时直接用链式法则求梯度。前者实现简单,一般不容易出错,但是会慢;后者实现复杂,但是快。可以通过计算两者之差是否够小确认计算是否正确。(梯度确认,gradient check)

反向传播

  • 每次处理一小批数据(mini-batch,比如32个),但是会处理全部训练数据很多次。跑完一遍全部数据称为一个epoch。
  • 正向过程(forward pass)类似预测,就在每层进行计算,然后传递结果到上一层。中间结果需要保留。
  • 计算输出错误(比如用损失函数),并计算每个输出对错误的贡献(error gradients)。继续往下计算,直到达到输入层,这就是反向过程(backward pass)。计算时使用链式法则。
  • 最后使用梯度下降调节所有权重
  • 最开始隐藏层的权重应该是随机的

参数更新

神经网络的学习是为了找到使损失函数值尽可能小的参数,解决这个问题的过程称为最优化(optimization

为什么SGD会低效?因为梯度的方向并不一定指向最小值方向(所以SGD会沿z形下降),比如函数的形状是非均向(anisotropic),如
在这里插入图片描述
Momentum(动量)
在这里插入图片描述
αv指在不受任何力的时候,物体要逐渐减速(摩擦、空气阻力等原因)。α可能设为0.9之类的值。
momentum的更新路径像小球在碗中滚动,因为虽然x轴受力小,但是一直在受力,所以会向一个方向加速;虽然y轴上受力大,但是会交互地受到正向和反向的力,会抵消,所以会更快向x轴靠近。

AdaGrad
学习的时候为参数的每个元素适当地调整学习率。Ada指Adaptive
在这里插入图片描述
随着学习的深入,更新的幅度会变小。如果无止境地学习,更新量就会变成0,改善的方法之一是使用RMSProp,其思路是逐渐“遗忘”过去的梯度,在做加法运算时将新梯度的信息更多地反映出来。

Adam
融合了Momentum和AdaGrad的优点,并进行超参数的“偏置校正”。其更新过程也类似小球在碗中滚动,但是左右摇晃的程度会减轻一点(因为AdaGrad)。

每种方法都有擅长解决的问题类型。但总体来说,这三种比SGD学习得更快,有时候识别精度也会更高。
在这里插入图片描述

权重的初始值

权重的初始值应该是随机产生的、不同的值。

梯度消失是指在神经网络训练过程中,某些层的梯度变得非常小,甚至趋近于零,导致这些层无法更新参数。这会导致模型无法收敛,训练过程变得非常缓慢,甚至完全停滞不前。

梯度消失通常发生在深度神经网络中,特别是在使用传统的激活函数(如 sigmoid 函数)时。这是因为这些激活函数的导数在输入很大或很小的时候会趋近于零,从而导致梯度变得非常小。为了解决这个问题,研究者们提出了一系列的解决方案,包括使用更加稳定的激活函数(如 ReLU 函数)、使用批量归一化(Batch Normalization)、使用残差连接(Residual Connection)等。

权重初始值可以采用Xavier初始值。(一般深度学习框架已经纳入为标准)。Xavier就是如果前一层节点数为n,则应该使用标准差为1/sqrt(n)的高斯分布初始化权重(这是Caffe等框架中的做法,原始论文中还考虑了下一层输出节点的数量)。
Xavier初始值是以激活函数为线性函数为前提推导出来的,因为sigmoid和tanh函数左右对称,且中央附近可以视作线性函数,所以可以使用Xavier初始值。

如果激活函数使用ReLU时,一般要使用He 初始值:前一层节点数为n时,使用标准差为sqrt(2 / n)的高斯分布初始化权重

Batch Normalization

优点:可以快速学习;不那么依赖初始值;抑制过拟合

思路是调整各层的激活值分布,使其拥有适当的广度。因此,需要向神经网络中插入对数据分布进行正规化的层。
具体来说,就是以进行学习时的mini-batch为单位,使数据分布的均值为0,方差为1。
在这里插入图片描述
前两个公式求均值和方差,第三个公式中加入ε是为了使分母大于0,可以取值1e-7之类的。
在这里插入图片描述
BatchNorm层插入到激活函数前面,激活函数之后再经过一个层,即yi ← γxi + β 其中γ和β的值分别为1和0,后面会通过学习调整到合适的值。

正则化

发生过拟合的原因:模型拥有大量参数、表现力强;训练数据少
权值衰减:在学习过程中对大的权重进行惩罚,以抑制过拟合。比如可以加1/2λW*W(L2范数)到损失函数上。其中λ是控制正则强化度的超参数,越大,对权重施加的惩罚越大。用1/2是为了让求导结果变成λW
在这里插入图片描述
如果网络模型很复杂,只用权值衰减可能不够,一般使用dropout
在这里插入图片描述

class Dropout:
	def __init__(self, dropout_ratio=0.5):
		self.dropout_ratio = dropout_ratio
		self.mask = None
	# 
	def forward(self, x, train_flg=True):
		if train_flg:
			# 随机生成与x形状相同的数组,大于dropout_ratio的设为True
			self.mask = np.random.rand(*x.shape) > self.dropout_ratio
			return x * self.mask
		else:
			return x * (1.0 - self.dropout_ratio)
	
	def backward(self, dout):
		return dout * self.mask

正向传播时传递了信号的神经元,反向传播时也传递信号,否则反向传播时停止。
所以训练时,每传递一次数据,就会随机删除一些神经元。测试时,虽然所有神经元都要信号传递,但对于各个神经元的输出,要乘上训练时的删除比例再输出。

机器学习中经常使用集成学习,就是让多个模型单独进行学习,推理时再取多个模型的输出的平均值。Dropout相当于模拟集成学习,因为每次随机删神经元相当于换新模型。

超参数的验证

一般用验证集评估超参数的好坏。
1.设定超参数的范围 2. 在设定范围中随机采样 3. 使用采样的超参数进行学习,设置很小的epoch,通过验证数据评估识别精度 4. 重复2和3多次(比如100次),根据识别精度缩小超参数范围

如果需要严谨的方法,可以使用贝叶斯最优化Bayesian optimization

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Delphi日薄西山?不仅用户300万,还大佬无数,转身就风靡全球

主人公名叫David Vacanti,是Delphi的长期开发人员,已有接近30年以上的编程经验。 我之所以注意到他,一是因为Delphi属实一波回忆杀。 二是不可思议:他在1983年,便开启了自己的副业。 开了一家叫做“Vacanti Yacht D…

成功加冕!用友大易获评2023最佳招聘管理软件供应商

人力资源服务业旗帜性商业奖项2023金帜奖(HRFLAG AWARDS)颁奖典礼于近日隆重举行。经过3个月的评选,用友大易从615家人力资源服务机构中脱颖而出,最终荣获「2023最佳招聘管理软件供应商」奖项。 2023金帜奖(HRFLAG AWARDS)是人力资源服务行业旗帜性的商业…

STM32cubemx配置驱动DHT11模块

文章目录 前言一、DHT11模块介绍二、DHT11引脚连接及cubemx配置三、DHT11时序分析四、DHT11代码编写总结 前言 本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围…

SpringBoot+layUI实现表格的某一列数据刷新功能案例分享

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

mysql执行计划explain

mysql 执行计划 explain 介绍 mysql8.0为例:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html EXPLAIN为语句中使用的每个表返回一行信息 SELECT。它按照 MySQL 在处理语句时读取它们的顺序列出输出中的表。这意味着 MySQL 从第一个表中读取一行&…

四维轻云平台常见问题及解决方法

1、在地图中看不见加载的点云或倾斜摄影模型数据? 若点云或模型数据加载后,在地图中看不见,可能是地形的高度高于倾斜模型的高度,导致数据漂浮在空中或者在地形以下,可通过增加数据的移动值Y来调整点云或者模型数据的…

《Java并发编程实战》课程笔记(一)

并发领域的全景图 并发编程的三个核心问题 并发编程可以总结为三个核心问题:分工、同步、互斥。 分工指的是如何高效地拆解任务并分配给线程; Java SDK 并发包里的 Executor、Fork/Join、Future 本质上都是⼀种分工方法。除此之外,并发编程…

吉时利 Keithley 2700数据采集器技术参数

概述: 每个 2700 系列系统均将精密测量、开关和控件集于一个紧凑集成的机箱中,适用于机架安装或台式应用。虽然所有三个系统的核心功能和编程是相同的,但各个主机都具有独特的功能。例如,2701 型具有 10/100BaseTX 以太网接口&am…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(5月24日论文合集)

文章目录 一、检测相关(7篇)1.1 Learning Remote Sensing Object Detection with Single Point Supervision1.2 Online Open-set Semi-supervised Object Detection via Semi-supervised Outlier Filtering1.3 Generalizable Synthetic Image Detection via Language-guided Co…

代码随想录训练营Day51| 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结

目录 目录 学习目标 学习内容 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 学习目标 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结 学习内容 309.最佳买卖股票时机含冷冻期 309. 最佳买卖股票时机含冷冻期 - 力扣&#xff0…

大模型知识Out该怎么办?浙大团队探索大模型参数更新的方法—模型编辑

夕小瑶科技说 原创 作者 | 小戏、Python 大模型在其巨大体量背后蕴藏着一个直观的问题:“大模型应该怎么更新?” 在大模型极其巨大的计算开销下,大模型知识的更新并不是一件简单的“学习任务”,理想情况下,随着世界…

网络协议 — IPSec 安全隧道协议族

目录 文章目录 目录IPSec 安全隧道协议族封装协议Authentication HeaderEncapsulating Security Payload 封装模式传输模式隧道模式 安全偶联协商Security AssociationInternet Key ExchangeIKE 的交换过程 IPSec Virtual Private NetworkIPSec NAT-TTransport 模式Tunnel 模式…

mjpg-streamer框架分析

mjpg-streamer框架分析 文章目录 mjpg-streamer框架分析框架maininput_initinput_runoutput_init 框架 main 这个函数是一个C程序的主函数,接受命令行参数并执行相应的操作。下面是这个函数的要点: 定义了一些变量,包括输入插件数组input、输…

知识点滴 - dBm和mW的转换

分贝毫瓦dBm,decibel-milliwatts,全写为“decibel relative to one milliwatt”,为一个指代功率的绝对值,而不同于dB只是一个相对值。 dBm或dBmW(分贝-毫瓦)用于表示功率的水平或级别,以分贝&am…

Android | 关于 OOM 的那些事

前言 Android 系统对每个app都会有一个最大的内存限制,如果超出这个限制,就会抛出 OOM,也就是Out Of Memory 。本质上是抛出的一个异常,一般是在内存超出限制之后抛出的。最为常见的 OOM 就是内存泄露(大量的对象无法被释放)导致…

精准数据分析,TeeChart为企业量身定制可视化退休预估方案

TeeChart for .NET是优秀的工业4.0 WinForm图表控件,官方独家授权汉化,集功能全面、性能稳定、价格实惠等优势于一体。TeeChart for .NET 中文版还可让您在使用和学习上没有任何语言障碍,至少可以节省30%的开发时间。 点击立即下载最新版Tee…

docker下不同容器的网络互相访问问题

目录 背景 ​编辑 docker网络模式 解决方法 mysql下 docker-compose下网络设置 nacos 效果 背景 我这边有两个容器,宿主机ip为 192.168.1.115,一个mysql,一个nacos,部署在主机上,使用的默认网络bridge&#xff…

学习SpringBoot入门知识,附带教程源码分享,快速掌握开发技巧-【imooc-java2021】体系课-Java工程师 2022版

学习SpringBoot入门知识,附带教程源码分享,快速掌握开发技巧 目录福利:文末有分享SpringBoot教程及源码哦 一、Spring Boot 是什么二、为什么要使用 Spring Boot三、快速入门3.1 创建 Spring Boot 项目3.1.1 通过 Spring Initializr 来创建1、…

微信小程序入门开发懂你找图小程序

文章目录 搭建 tabbar页面路径 首页模块tabs组件需求推荐组件精选大图月份热门分类模块需求 分类详情业务 首页模块专辑模块需求 专辑详情精美视频需求 视频详情需求 图片详情需求 搭建 tabbar 页面路径 页面名称路径首页index横屏horizontal精美视频video搜索search我的mine …

MySQL——存储引擎于索引应用

文章目录 一、 存储引擎1.1 MySQL结构1.2 存储引擎简介1.3 存储引擎特点1.3.1 InnoDB1.3.1.1 InnoDB 基本介绍1.3.1.2 InnoDB 逻辑存储结构 1.3.2 MyISAM1.3.3 Memory 1.4 三种引擎特点及区别1.5 存储引擎选择 二、 索引 - 重点2.1 介绍2.2 索引结构2.2.1 B-Tree 多路平衡二叉树…