神经网络的一些常规概念

epoch:是指所有样本数据在神经网络训练一次(单次epoch=(全部训练样本/batchsize)/iteration=1)或者(1个epoch=iteration数 × batchsize数)

batch-size:顾名思义就是批次大小,也就是一次训练选取的样本个数

iteration:1个iteration=1个正向通过+1个反向通过=使用batchsize个样本训练一次。

注意:每一次迭代得到的结果都会被作为下一次迭代的初始值。

在人工神经网络中,权重是相邻两层神经元之间的连接强度。权重的更新是通过反向传播算法实现的,主要步骤如下:

  1. 前向传播:输入数据从输入层向前传播,在各层被激活并加权,得到输出值。
  2. 计算损失:使用损失函数计算输出值和真实标签之间的差距,得到总体损失。
  3. 求导:使用链式法则计算损失相对于各层权重的偏导数。
  4. 权重更新:使用梯度下降法则更新各层权重,使损失最小化。

 

梯度下降法的概念:

梯度下降法的基本思想是通过不断迭代,找到函数的最小值点,从而得到最优的模型参数。在梯度下降法中,我们首先需要定义一个损失函数,该函数表示了模型的预测结果与实际结果之间的差距。然后,我们初始化一组模型参数,并计算损失函数关于这些参数的梯度,即损失函数在参数空间中的斜率。接着,我们沿着负梯度方向移动一定的步长,更新模型参数,直到损失函数的值收敛或达到预定的迭代次数。 

下面介绍几种常见的梯度下降算法优化方法。

1. 批量梯度下降算法(Batch Gradient Descent)

批量梯度下降算法是最基本的梯度下降算法,它在每次迭代中使用所有的样本来计算梯度。虽然批量梯度下降算法的收敛速度比较慢,但是它的收敛结果比较稳定,因此在小数据集上表现良好。

2. 随机梯度下降算法(Stochastic Gradient Descent)

随机梯度下降算法是一种每次只使用一个样本来计算梯度的算法,因此它的收敛速度比批量梯度下降算法快很多。但是,由于它只使用一个样本来计算梯度,所以收敛结果可能会受到噪声的影响,因此它的收敛结果不够稳定。

3. 小批量梯度下降算法(Mini-Batch Gradient Descent)

小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的一种算法。它在每次迭代中使用一部分样本来计算梯度,通常选择的样本数是几十或几百。小批量梯度下降算法的收敛速度比批量梯度下降算法快,而且比随机梯度下降算法更稳定。

4. 动量梯度下降算法(Momentum Gradient Descent)

动量梯度下降算法是一种基于动量的优化算法,它的核心思想是在更新参数的时候,将上一次的梯度方向加入到本次梯度方向中,从而加速收敛。动量梯度下降算法通常可以减少梯度震荡,从而加速收敛。

5. 自适应学习率梯度下降算法(Adaptive Learning Rate Gradient Descent)

自适应学习率梯度下降算法是一种自适应学习率的优化算法,它的核心思想是根据梯度的大小来调整学习率,从而提高算法的效率和稳定性。常见的自适应学习率梯度下降算法有Adagrad、Adadelta和Adam等。

在深度学习中,一般采用SGD训练(随机梯度下降),即每次训练在训练集中取batchsize个样本训练; 

 

(1)经验总结:Batch_Size的正确选择是为了在内存效率和内存容量之间寻找最佳平衡

相对于正常数据集,如果Batch_Size过小,训练数据就会非常难收敛,从而导underfitting。增大Batch_Size,相对处理速度加快。但是,增大Batch_Size,所需内存容量增加(epoch的次数需要增加以达到最好的结果)这就出现了矛盾。——因为当epoch增加以后,同样也会导致耗时增加从而速度下降。因此我们需要寻找最好的Batch_Size。

(2)适当的增加Batch_Size的优点:

1.通过并行化提高内存利用率。
2.单次epoch的迭代次数减少,提高运行速度。
3.适当的增加Batch_Size,梯度下降方向准确度增加,训练震动的幅度减小。

为什么我们必须要使用梯度下降法?

参考:一文全解梯度下降法_已知两组样本梯度下降-CSDN博客

以线性回归问题为例说明这个流程:

过原点的直线 y=wx 就相当于线性回归问题中用于做预测的函数,y是房价,x是面积,每个样本代表不同面积的具体房价机器的任务就是想办法计算出一条最好的直线来拟合这些样本点数据,而直线的斜率w就可以简单控制直线,所以我们的目的是要求解出最能拟合数据分布的变量w

 

为了方便求解出最优参数w,我们引入了与这条直线相关的损失函数

我们通过预测函数和误差公式推导出损失函数,成功的将直线拟合样本点的过程映射到了一个损失函数上,并且它是个开口向上的抛物线图像,它是以参数w为自变量、误差或者损失值作为因变量的,见下图中的右侧图

因为我们的目标是拟合出最接近这些数据分布的直线,也就是找到使得误差代价最小的参数w,对应在右图的损失函数图像上就是它的最低点,这个不断寻找最低点的过程就是梯度下降要干的活。

我们先随机选取一个参数起始点,对应到曲线上的某个误差值,然后不断的沿着损失函数曲线陡峭程度最大的方向前进,就能更快更准的找到误差的最低点。

这个陡峭程度就是梯度,它是损失函数的导数,对于抛物线而言就是曲线的斜率

另外,因为梯度的方向是损失函数值增加最快的方向,负梯度是损失函数值下降最快的方向,所以我们其实是沿着梯度的反方向前往最低点。这就是为何叫梯度下降的原因

确定了损失函数值的下降方向以后,还需要考虑前进的步长,即学习率

学习率是步长超参数,人为选择,选择学习率时,步子太大即选择数值太大会反复横跳,步子太小会走得很慢浪费计算上面我们是用线性回归做预测函数的,实际情况中房价不仅与面积,还与城市、地段、政策等相关,那么预测函数就会是非线性甚至是曲面多维的各种复杂函数,对应的损失函数也可能是更复杂的,如

上面说了梯度下降的原理,但是实际我们很少直接使用梯度下降,因为我们每次计算梯度时要对每个损失函数求导,这个损失函数是对所有训练样本的平均损失,意味着每次计算梯度都要计算一遍所有样本,花费的时间成本太大了。现在深度学习默认使用的是小批量随机梯度下降方法来训练模型得到最优参数 

另外,小批量batchsize也是个超参数, 它选择越小,对收敛越好,即模型拟合数据的越好;对了,上述那个例子中的直线或者说预测函数 y=wx 就可以看作是简单的预测模型,所以才总说训练模型的参数嘛

batchsize选择越小,产生的噪音越多,噪音对神经网络是有一定好处的,深度神经网络太复杂了,一定的噪音可以避免网络模型在训练的时候不会走偏;也就是说模型对各种噪音的容忍度越好,则模型的泛化性就越好,泛化性越好就能让模型更好预测其他新数据

当然,选择太小也不行,会浪费计算,时间成本高啊;batchsize选择太大会虽然导致收敛问题,但只要不是特别大,最后多花点时间还是能收敛的。小批量随机梯度下降中的‘随机’是随机采样的意思,批量大小都是提前定义好的;假如batchsize是128,那么随机从所有样本中采样128个读进内存用于训练

 

常用的激活函数:

(1)sigmoid

(2)tanh

(3)ReLU

(4)Leaky ReLU

(5)softmax 

 

优化函数:

 optimizer = keras.optimizer.SGD(lr=0.001, momentum=0.9)

动量优化

optimizer = keras.optimizer.SGD(lr=0.001, momentum=0.9, nesterov=True)

optimizer = keras.optimizer.RMSprop(lr=0.001, rho=0.9)

RMSProp算法通过只是累加最近迭代中的梯度(而不是自训练开始以来的所有梯度)

optimizer = keras.optimizer.Adam(lr=0.001, beta_1=0.9, beta_2=0.999)

Adam代表自适应钜估计,结合了动量优化和RMSProp的思想:就像动量优化一样,它跟踪过去梯度的指数衰减平均值;想RMSProp一样,它跟踪过去平方梯度的指数衰减平均值。

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

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

相关文章

Vue中使用定义的函数时,无法访问到data()里面的数据

const translateItems1 () > {this.translatedItems this.items1.map(item > {return {...item,label: this.$t(item.labelKey)};}); items1是我们data()里面的数据,无法访问到 解决办法 把箭头函数替换为普通函数 const translateItems1 function() {th…

EXCEL VBA实现重复字段出现次数并列显示

EXCEL VBA实现重复字段出现次数并列显示 Sub dotest() Dim arr, dApplication.ScreenUpdating FalseSet d CreateObject("Scripting.Dictionary")With Sheets("Sheet2")r .Cells(.Rows.Count, "a").End(xlUp).Rowarr .[a1].Resize(r, 1)En…

HTML标签 - 1

文章目录 HTML标签简介HTML书写规范常见网页制作软件常用标签结构标签排版标签标题标签容器标签字体标签文本格式化标签列表标签图片标签 HTML标签 简介 一门使用标记标签来描述网页,展示信息给用户的语言。 超文本标记语言(Hyper Text Markup Langua…

WMS系统与电商平台快速拉通库存数量

什么是WMS系统 WMS系统是指仓储管理系统(Warehouse Management System)。它是一种用于管理和控制仓库运营的软件系统。WMS系统通过集成信息技术,提供仓库内货物的存储、出入库、库存管理、订单处理等功能,优化仓库的运作效率和准…

Flask 入门3:Flask 请求上下文与请求

1. 前言 Flask 在处理请求与响应的过程: 首先我们从浏览器发送一个请求到服务端,由 Flask 接收了这个请求以后,这个请求将会由路由系统接收。然后在路由系统中,还可以挂入一些 “勾子”,在进入我们的 viewFunction …

adb 无线连接 操作Android设备

最近集五福活动比较热门 可以用这个工具 用自己擅长的语言写一个循环程序 运行起来就可以 自动帮我们 看视频得福卡了 很方便 while (true) {sleep(mt_rand(15, 25));system(adb shell input swipe 500 2000 500 1000 100); } 1. 首先下载 安卓开发工具 adb adb网盘链接 链接…

Django中的模板

目录 一:基本概念 二:模板继承 在Django中,模板是用于呈现动态内容的HTML文件。它们允许你将动态数据与静态模板结合起来,生成最终的HTML页面。 Django模板使用特定的语法和标签来插入动态内容。你可以在模板中使用变量、过滤器和标签来控…

【HarmonyOS】鸿蒙开发之HTTP网络请求——第5章

HTTP网络请求封装 network/request.ets import { configInterface } from ./type import http from ohos.net.http import { getToken } from ../utils/storage//网络请求封装 export const request (config:configInterface)>{let httpRequest:http.HttpRequest http.c…

IDEA 取消参数名称提示、IDEA如何去掉变量类型提醒

一、IDEA 取消参数名称显示 取消显示形参名提示 例如这样的提示信息 二、解决方法 1、File—>Setting–>Editor—>Inlay Hints—>Java 去掉 Show Parameter hints for 前面的勾即可,然后Apply—>Ok 2、右键Disable Hints

强敌环伺:金融业信息安全威胁分析——整体态势

从早期的Zeus和其他以银行为目标的特洛伊木马程序,到现在的大规模分布式拒绝服务(DDoS)攻击,再到新颖的钓鱼攻击和勒索软件,金融服务业已成为遭遇网络犯罪威胁最严重的行业之一。金融服务业的重要性不言而喻&#xff0…

【AI视野·今日NLP 自然语言处理论文速览 第七十七期】Mon, 15 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 15 Jan 2024 Totally 57 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Machine Translation Models are Zero-Shot Detectors of Translation Direction Authors Michelle Wastl, Ja…

docker私有库

1.registry私有仓库 拉取registry镜像 docker pull registry 修改docker配置文件并重启 vim /etc/docker/daemon.json {"insecure-registries": ["172.16.23.23:5000"], #添加,注意用逗号结尾"registry-mirrors": ["ht…

C# .Net Framework Swagger

1.安装 Swagger 在NuGet程序包中安装以下文件 Swashbuckle: Swagger: Swagger.Net: 2.在项目APP_Start 文件夹下面找到 SwaggerNet.cs文件 1.注释掉这两行代码 2.将PreStart方法的内容修改为以下 public static void PreStart() {RouteTable.Routes.MapHttpRoute(…

iview DatePicker 日期选择组件在弹窗中使用transfer,导致选择日期弹窗会关闭的问题

背景:在弹窗里面使用日期选择组件,选择组件的面板被弹窗遮挡了部分,所以需要使用transfer属性,但是使用之后组件面板插入body中了,面板的事件会导致弹窗关闭。 解决方案: 添加上transfer属性和指定的date-…

N65总账凭证管理凭证查询(sql)

--核算账簿 select code , name , pk_setofbook from org_setofbook where ( pk_setofbook in ( select pk_setofbook from org_accountingbook where 1 1 and ( pk_group N0001A11000000000037X ) and ( accountenablestate 2 ) ) ) order by code;--核算账簿 select code …

AI在数模中的应用(附2024年美赛AI规则解读)

近期一直有人私信询问AI对数模的应用。本次想借着2024年美赛对AI工具的使用说明已经去年国赛开会的结果,跟大家分享一下国赛、美赛对于AI的态度以及如何使用AI应用于数模。本文将基于本人常用的三种AI工具(ChatGPT、文心一言、NEW bing)进行讲解 根据2023年国赛总结…

数据库技术栈 —— B树与B+树

数据库技术栈 —— B树与B树 一、复习二、MySQL中的B树应用 一、复习 B树是多路平衡查找树的意思 参考文章或视频链接[1] 【王道计算机考研 数据结构】 二、MySQL中的B树应用 这篇文章里的计算题还是讲的不错的。 参考文章或视频链接[1] 《探究MySQL的索引结构选型》

阿里云推出 3.x Java 探针,解锁应用观测与治理的全新姿势

作者:张铭辉、泮圣伟 前言 随着春节大促即将到来,为了确保线上业务高效稳定地运行,电商企业大多会对旗下关键业务应用进行多轮测试。通过模拟线上较高流量的请求,来观察服务性能的实际表现。以某企业的业务测试报告举例&#xf…

SpringClound项目相关

nacos本机模式非虚拟机启动也可正常连接 nacos中的配置中心相当于在application.yml中的相关配置,转移位置,内容同application.yml完全一样均可。 黑马项目导入后,依赖缺失: 首先尝试maven重新加载,控制台提示传递依…

稀疏场景高性能训练方案演变|京东广告算法架构体系最佳实践

近年来,推荐场域为提升模型的表达能力和计算能力,模型规模和计算复杂度大幅增加,同时,高规格硬件资源为模型迭代、算法优化带来了更大的机遇和挑战。为了应对模型规模和算力升级带来的存储、IO和计算挑战,京东零售广告…