当前位置: 首页 > news >正文

Datawhale x李宏毅苹果书AI夏令营深度学习详解进阶Task03

        在深度学习中,批量归一化(Batch Normalization,BN)技术是一种重要的优化方法,它可以有效地改善模型的训练效果。本文将详细讨论批量归一化的原理、实现方式、在神经网络中的应用,以及如何选择合适的损失函数来提高模型的训练效果,同时对均方误差和交叉熵两种常见的损失函数进行比较。

一、批量归一化的原理

        在深度学习中,误差表面的崎岖不平会使训练变得困难。批量归一化的想法就是通过改变误差表面的地貌,“把山铲平”,让训练变得更容易。

        具体来说,当输入特征在不同维度上的数值范围差距很大时,可能会导致误差表面在不同方向上的斜率差异很大,从而使训练变得困难。为了解决这个问题,可以对特征进行归一化,使不同维度的数值具有相同的数值范围。

        例如,可以使用 Z 值归一化(标准化)的方法,对每个维度的数值计算平均值和标准差,然后将该维度的数值减去平均值并除以标准差,得到归一化后的数值。这样可以使归一化后的数值分布在 0 上下,方差为 1,从而制造一个更好的误差表面,使训练更顺利。

二、批量归一化的实现方式

        在深度学习中,批量归一化的实现方式如下:

  1. 对输入的特征进行归一化,得到归一化后的特征˜x。
  2. 将˜x 输入到深度网络中,经过第一层得到 z^1,然后通过激活函数得到 a^1,接着再通过下一层,以此类推。
  3. 对中间层的特征 z 进行归一化,具体步骤如下:
    • 计算 z^1, z^2, z^3 的平均值 μ 和标准差 σ。
    • 根据计算出的 μ 和 σ 进行归一化:。
    • 最后,加上 β 和 γ 进行调整:,其中代表逐元素的相乘,β 和 γ 是需要学习的参数。

在实际实现中,批量归一化只对一个批量内的数据进行归一化,以近似整个数据集的特征归一化。同时,在测试时,PyTorch 会对训练时每个批量计算出的 μ 和 σ 进行移动平均,测试时直接用训练时的移动平均来取代 μ 和 σ。

三、批量归一化在神经网络中的应用

        批量归一化可以应用于神经网络的各个层,它可以使误差表面变得更加平滑,从而提高训练的稳定性和收敛速度。

        通过对特征进行归一化,可以减少不同维度之间的差异,使得网络更容易学习到有用的特征。此外,批量归一化还可以缓解梯度消失和梯度爆炸的问题,使训练更加稳定。

四、如何选择合适的损失函数来提高模型的训练效果        

        选择合适的损失函数对于提高模型的训练效果至关重要。不同的损失函数适用于不同的问题和模型。

        在分类问题中,常用的损失函数有均方误差和交叉熵。均方误差是将输出与标签之间的差异平方后求和,而交叉熵则是根据输出与标签之间的概率分布来计算损失。

        交叉熵损失函数通常比均方误差更常用在分类上,因为它能够更好地引导模型的训练。当输出与标签相同时,交叉熵可以最小化交叉熵的值,此时均方误差也是最小的。此外,交叉熵还能够使大的值跟小的值的差距更大,从而更好地优化模型。

五、均方误差和交叉熵两种常见的损失函数的比较

        通过一个三类分类的例子,可以比较均方误差和交叉熵在优化中的表现。

        假设网络先输出和,通过 softmax 以后,产生和。假设正确答案是,要计算跟和之间的距离 e,e 可以是均方误差或交叉熵。

        当很大,很小时,代表会很接近 1,会很接近 0,此时不管 e 取均方误差或交叉熵,损失都是小的;当小,大时,是 0,是 1,这个时候损失会比较大。

        在优化过程中,如果选择交叉熵,左上角圆圈所在的点有斜率,可以通过梯度一路往右下的地方 “走”;如果选均方误差,左上角圆圈就卡住了,均方误差在这种损失很大的地方非常平坦,梯度非常小趋近于 0,无法用梯度下降顺利地 “走” 到右下角。因此,在做分类时,选均方误差的时候,如果没有好的优化器,有非常大的可能性会训练不起来。如果用 Adam,虽然图中圆圈的梯度很小,但 Adam 会自动调大学习率,还有机会走到右下角,不过训练的过程比较困难。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于生成对抗模型GAN蒸馏的方法FAKD及其在EdgesSRGAN中的应用
  • OpenGuass under Ubuntu_22.04 install tutorial
  • 基于Python实现AES加密与解密
  • 《QDebug 2024年8月》
  • 深度学习(二)-损失函数+梯度下降
  • 【数据结构】-----哈希
  • 【科研新手必备】如何高效、高质量、科学的科研?
  • 仿论坛项目--第二部分习题
  • JAVA进阶学习14
  • RuoYi-Cloud 部署与配置 [CentOS7]
  • 《深入浅出WPF》读书笔记.8路由事件
  • 使用pgrs在wsl中为postgres写拓展
  • huggingface.co 无法访问问题换源解决
  • c++修炼之路之C++11
  • Mac/Linux系统matplotlib中文支持问题
  • 【刷算法】求1+2+3+...+n
  • Android Volley源码解析
  • Apache的基本使用
  • codis proxy处理流程
  • eclipse的离线汉化
  • js递归,无限分级树形折叠菜单
  • Js基础——数据类型之Null和Undefined
  • js如何打印object对象
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • React组件设计模式(一)
  • Redis的resp协议
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 规范化安全开发 KOA 手脚架
  • 基于Android乐音识别(2)
  • 使用 Docker 部署 Spring Boot项目
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 如何正确理解,内页权重高于首页?
  • ​决定德拉瓦州地区版图的关键历史事件
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #07【面试问题整理】嵌入式软件工程师
  • #if 1...#endif
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (04)odoo视图操作
  • (13)DroneCAN 适配器节点(一)
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (力扣)1314.矩阵区域和
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (七)Java对象在Hibernate持久化层的状态
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)socket Aio demo
  • (转)程序员技术练级攻略
  • (转)可以带来幸福的一本书
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET 给NuGet包添加Readme
  • .net 使用ajax控件后如何调用前端脚本