3.正向传播与反向传播 - 学习率LR - Batch size - 激活函数 - 损失函数

news/2025/2/23 17:58:38/文章来源:https://www.cnblogs.com/littlecc/p/18732529
  • 正向传播

    • 尽量降低损失函数
  • 梯度

    • 梯度是一个向量(矢量),函数在一点处沿着该点的梯度方向变化最快,变化率最大。换而言之,自变量沿着梯度方向变化,能够使应变量(函数值)变化最大。
  • 如图:如果想要 w 下降最快就沿着梯度的负方向下降,就能降低损失函数

  • 方向传播

    • 更新各个参数的值(如图中 w 的值),重新导入正向传播,达到减低损失函数
    • 一次的方向传播会更新所有的参数


  • 学习率 - Learning Rate(LR)
    • 决定了模型参数的更新幅度,学习率越高,模型参数更新越激进,即相同loss对模型参数产生的调整幅度越大,反之越小
    • 如果学习率太小,会导致网络loss下降非常慢;
    • 如果学习率太大,那么参数更新幅度就非常大,产生振荡,导致网络收敛到局部最优,或者loss不降反增


  • Batch size
    • Batch size 是一次相模型输入的数据量,Batch size越大,模型一次处理的数据量就越大,能够更快的运行完一个Epoch,反之运行完一个Epoch越慢
    • 由于模型一次是根据一个Batch size的数据计算Loss,然后更新模型参数,如果Batch size过小,单个Batch 可能与整个数据的分布有较大的差异,会带来较大的噪音,导致模型难以收敛
    • 与此同时,Batch size越大,模型单个Step加载的数据量越大,对于GPU显存的占用也越大,当GPU现存不够充足的情况下,较大的Batch size会导致OOM(内存溢出),因此,需要针对实际的硬件情况,设置合理的Batch size取值
    • 训练大模型时如果数据集越大,batch size越大越好,相反如果数据集越少,Batch size不能太大,否则参数迭代更新的次数太少,从而导致loss降不下来
    • 在合理范围内,更大的Batch size能够:
      • 提高内存利用率,提高并行化效率
      • 一个Epoch所需的迭代次数变少,减少训练时间
      • 梯度计算更加稳定,训练曲线更平滑,下降方向更准,能够取得更好的效果
    • 对于传统的模型,在较多的场景中,较小的Batch size能够取得更好的模型性能;对于大模型,往往更大的Batch size能够取得更好的性能


  • 激活函数

    • 为什么需要激活函数:
    • 线性函数是一次函数的别称,则非线性函数(即函数图像不是一条直线的函数)。非线性函数包括 指数函数、幂函数、对数函数、多项式函数等等基本初等函数以及他们组成的复合函数
    • 激活函数时多层神经网络的基础,保证多层网络不退化成线性网络
  • 不加激活函数时

  • 由于线性模型的表达能力不够,激活函数 使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中

  • 激活函数的种类

  • 1.sigmoid - 会导致梯度消失

    • sigmoid函数既有软饱和特性,在正负饱和区的梯度都接近于0,只在0附近有比较好的激活特性
    • sigmoid导数值最大0.25,也就是反向传播过程中,每层至少有75%的损失,这使得当sigmoid被用在隐藏层的时候,会导致梯度消失(一般5层子内就会产生)
    • 函数输出不以0为中心,也就是输出均值不为0,会导致参数更新效率减低
    • sigmoid函数涉及指数运算,导致计算速度较慢
  • 2.softmax 和 tanh

  • 3.ReLu

    • ReLU 是一个分段线性函数,因此是非线性函数
    • ReLu 的发明是深度学习领域最重要的突破之一;
    • ReLU 不存在梯度消失的问题
    • ReLU 计算成本低(没有指数运算),收敛速度比sigmoid快6倍
    • 函数输出不以0为中心,也就是输出的均值不为0,这样会导致参数更新效率降低
    • 存在dead ReLU 问题(输入ReLU有负值时,ReLU输出为0,梯度在反向传播期间无法流动,导致权重不会更新)
  • 4.Leaky ReLU 和ELU

    • ReLU的变体
    • 不存在 dead ReLU 问题
  • Swish

    • 目前大模型普遍在用的激活函数
    • 参数不变的情况下,将模型中ReLU替换为Swish,模型性能提升
    • Swish无上界,不会出现梯度饱和
    • Swish有下界,不会出现dead ReLU问题
    • Swish处处连续可导


  • 损失函数 - loss function

    • 就是用来度量模型的预测值f(x)于真实值Y的差异程度(损失值)的运算函数,他是一个非负实值函数
    • 损失函数仅用于模型训练阶段,得到损失值厚,通过反向传播来更新参数,从而减低预测值与真实值之间的损失值,从而提升模型性能
    • 整个模型训练的过程,就是再通过不断更新参数,是的损失函数不断逼近全局最优点(全局最小值) - 很难
    • 不同类型的任务会定义不同的损失函数,例如回归任务重的MAE、MSE,分类任务中的交叉熵损失等
  • 损失函数类别

  • 1.MSE 和 MAE

    • 均方误差(mean squared error,MSE)也叫平方损失或L2损失,常用在最小二乘法中,他的思想是使得各个训练点得到最优拟合线的距离最小(平方和最小)

    • 平均绝对误差(Mean Absolute Error,MAE)是所有单个观测值与算数平均值的绝对值的平均,也被称为L1 loss,常用于回归问题中

  • 2.交叉熵损失

    • 二分类

      • 表达式中的:Yi为样本i的真实标签 - 要么为正=1, 负类=0

      • Pi表示样本i预测为正类的概率

      • 案例

    • 多分类

      • 其中M为类别数量(如类别A、B、C。。。);Yic为符号函数,样本i真实类别等于 c 则为 1,否则为0;预测样本i属于类别c的预测概率

      • 案例1

      • 案例2

        • 如下图:样本1的真实值是C、样本2的真实值是B、样本3的真实值是A,所以对应的真实值Yia(或Yib、或Yic) = 1

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

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

相关文章

Qt报错error: member access into incomplete type QTcpSocket

现象解决办法 在mainwindow.cpp文件中添加头文件。 #include <QTcpSocket>

Spring Boot中如何优雅地读取Jar包中的Resources目录下的文件

在Java的Spring Boot项目中,我们经常需要从resources目录下读取配置文件或其他资源文件。在本地开发环境中,我们可以轻松地使用绝对路径访问这些文件,但项目一旦打包成Jar包并部署到服务器上,这种访问方式就失效了。 因此,掌握在Jar包中读取resources目录下文件的方法至关…

开学测试总结owo

经过这次的小测,在这次测试中,我个人认为最大的变化,就是逻辑性增强,sql语句的要求更多了, 这就反应了对于web应用开发这门课对我们专业的用处,还有,前端页面的美化,我认为前端代码,多 数交给AI就可以了,但主要是你自己要明白需求到底是什么,你要完成的项目是什么,…

get current user

02 - 从SpringSecurity中获取当前用户 一行搞定 SecurityContextHolder.getContext().getAuthentication().getPrincipal();这里自定义了一个UserDetailsImpl类实现UserDetails接口, 此时loadUserByUsername方法的返回对象的类型也要改成自定义类型(01篇最后那样), 不然报错。测…

自编译Frp 实现二次开发

在使用过程中,我们都是利用作者打包好的包,直接使用。但是现实中,我们可能需要对其进行二开。 因而,本文简单的为大家介绍下frp的二次开发。以修改frps dashboard为例。现在让我们一起来学习吧。修改之前的界面修改后效果 安装GO环境 因为,Frp是基于GO开发的,所以我们需要…

从黑盒到透明:AI Agent 运行监控实战!

你是否遇到过这样的情况:辛辛苦苦开发的 AI Agent 突然失灵了,却不知道是哪个环节出了问题?今天给家人们分享一下如何让 AI Agent 的运行过程透明化。 一、为什么要监控 AI Agent? 传统的对话系统就像一张预先画好的地图,用户只能按照既定路线前进。而 AI Agent 则像是一位…

[2025.2.23] 周记

引言在这周的面试当中,我遇到了几个不是很清楚的题目,回家之后进行学习发现了一些比较有意思的事情,在这里记录一下 这周还发现了一个很有帮助的Java知识网站:Java 基础 - 面向对象 | Java 全栈知识体系1.字符串和常量池 在这次面试当中遇到的一个原题就是 String i = "i&…

YOLOv5 的量化及部署 - RGB 专题

技术背景 YOLOv5 是一种高效的目标检测算法,尤其在实时目标检测任务中表现突出。YOLOv5 通过三种不同尺度的检测头分别处理大、中、小物体;检测头共包括三个关键任务:边界框回归、类别预测、置信度预测;每个检测头都会逐像素地使用三个 Anchor,以帮助算法更准确地预测物体…

Java基础学习(十七)

Java基础学习(十七):网络编程 目录Java基础学习(十七):网络编程概念IP端口号协议UDP 通信TCP 通信 本文为个人学习记录,内容学习自 黑马程序员概念定义:在网络通信协议下,不同计算机上运行的程序进行的数据传输 常见的软件架构:C/S 和 B/SC/S:Client/Server,在用户…

最小费用最大流问题的 SSP 算法

我们已经了解最大流问题,其目标是通过网络中的各条边传输流量,尽可能地从源点流向汇点。通过经典的算法,如 Ford-Fulkerson 增广,我们能够找到一种方式,最大化从源点到汇点的流量。 然而,最大流问题的基本形式并没有考虑流动的成本。一个图的最大流值是一个固定数,可以由…

逆向软件设计-扫雷(C语言)

本人选用了舍友开发的C语言扫雷游戏用以学习逆向软件设计,环境为vs2022 在该程序中,代码被分成了三个部分,分别是game的头文件和源文件,以及test的源文件 在game的头文件中,代码主要包括了游戏的基本信息和函数 #include<stdio.h> #include<stdlib.h> #includ…

将一个数组旋转 k 步

题目:将一个数组旋转 k步。如输入一个数组[1,2,3,4,5,6,7] 和 k = 3, 即旋转 3步。输出 [5,6,7,1,2,3,4] 解题思路:思路1: 把k 后面的元素,挨个pop,然后unshif 到数组前面 思路2: 将 k 后面的所有数据拿出来作为 part1 将 k前面的所有数据拿出来作为part2 返回 part1.conca…