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

跟着李沐老师学习深度学习(八)

数值稳定性 + 模型初始化和激活函数

数值稳定性

神经网络的梯度

  • 考虑如下d层的神经网络(t代表层)
    在这里插入图片描述
  • 计算损失 l 关于参数 Wt 的梯度:

在这里插入图片描述
这样的矩阵乘法带来的问题:
(1)梯度爆炸
(2)梯度消失

在这里插入图片描述

例子:MLP

  • 加入如下MLP(省略偏移)
    在这里插入图片描述
    进行累乘:
    在这里插入图片描述

(1) 梯度爆炸

  • 使用ReLU 作为激活函数
    在这里插入图片描述
    在这里插入图片描述
    假设W中的值都大于1,那么会得到很大的值(梯度爆炸)

  • 梯度爆炸的问题

    • 值超出值域(infinity)
      • 对于 16位浮点数尤为严重(数值区间 6e-5-6e4)
    • 对学习率敏感
      • 如果学习率太大 ->大参数值 ->更大的梯度
      • 如果学习率太小->训练无进展
      • 我们可能需要在训练过程不断调整学习率

(2) 梯度消失

  • 使用 sigmoid作为激活函数
    在这里插入图片描述
    在这里插入图片描述
    当输入相对较大的时候,激活函数的导数会变成0;

  • 梯度消失的问题

    • 梯度值变成 0
      • 对 16 位浮点数尤为严重
    • 训练没有进展
      • 不管如何选择学习率
    • 对于底部层尤为严重
      • 仅仅顶部层训练的较好
      • 无法让神经网络更深(和一个很浅的神经网络没有区别)
        (反向传播,更新参数,w越来越小,最终趋于零,也失去了学习的必要)

总结

  • 当数值过大或者过小时会导致数值问题
  • 常发生在深度模型中,因为其会对n个数累乘

让训练更加稳定

目标:让梯度值在合理的范围内,例如[le-6,1e3]

  • 乘法变加法
    • ResNet, LSTM
  • 归一化:将梯度变成均值为0,方差为1
    • 梯度归一化,梯度裁剪
  • 合理的权重初始和激活函数

模型初始化和激活函数

让每层的方差是一个常数

  • 将每层的输出和梯度都看做随机变量
  • 让它们的均值和方差都保持一致

t: 第t层;i: 第i个变量

假设:我们想要的输出如下:所有的输出和梯度的均值、方差 都在一个常数
在这里插入图片描述

权重初始化

  • 在合理值区间里随机初始参数
  • 训练开始的时候更容易有数值不稳定
    • 远离最优解的地方损失函数表面可能很复杂
    • 最优解附近表面会比较平
  • 使用 N(0,0.01)来初始可能对小网络没问题,但不能保证深度神经网络

如何保证之前的假设成立呢?

例子:MLP

  • 假设:
    在这里插入图片描述
    i.i.d:独立同分布;均值E为0,Var方差为一个常数;当前层的权重和当前层的输入是一个独立事件。

  • 假设没有激活函数:
    在这里插入图片描述
    在这里插入图片描述

实现的目标中的 正向方差:

在这里插入图片描述

【方差公式】方差等于平方的期望减去期望的平方:方差D(X)=E(X^ 2)-E(X)^2
对于和的平方 等价于 每一项的平方+不相等的交叉项的乘积和
第二行的加号后面的累加为0的原因是:之前假设了wt_i,j是独立的同分布(即 i.i.d),那么w_t_i,j的均值就为0,即E(wti,j)=0,即 E(第二行第二项)=0
方差 = 平方的期望 - 期望的平方 现在期望的平方等于0,所以方差 = 平方的期望,可得到第四行
n_t-1:当前第t层的输入的维度

接下来看 反向的均值和方差
注意: (AB)转置=B转置xA转置
和正向类似,老师并没有细推:
在这里插入图片描述
Xavier初始化:(常用的权重初始化的方法)
基于该方式对某层权重初始化时,该层权重的初始化会根据该层的输入维度、输出维度来决定(如权重的方差),尤其是当 输入输出维度不一定、或网络变化比较大时,可以根据输入输出维度来适配权重,使得输出的方差和梯度都在恒定(合理)的范围内
在这里插入图片描述
满足正向和反向的条件很难,但可以取一个折中的方法:即 给定当前第t层的输入维度nt-1和输出维度nt的大小,那么就可以由这俩得到当前第t层的权重的方差γt。

假设 线性的激活函数(只是为了简单理论分析,实际上不可能用线性的激活函数))
在这里插入图片描述
这就说明:为了使正向的输出为均值为0、方差为固定值,则要求线性激活函数的α=1、β=0,即为 输入x本身;
反向,与正向类似:
在这里插入图片描述
也说明:激活函数必须是f(x)=x;

最后,检查真正的激活函数(因为激活函数都是非线性的,而上面是以线性激活函数举例的),如使用泰勒展开:
可以发现下图中tanh和relu在原点处基本都是f(x)=x,虽然sigmoid不过原点,但经过调整后的sigmoid(如下图中蓝线,即 乘四再减二后)也是过原点且在原点处近似为f(x)=x(即 经过调整后的sigmoid函数也能解决以前原sigmoid存在的问题)
请添加图片描述
为何只关注在0点附近的表现是否能满足f(x)=x的要求:因为一般神经网络的权重w的取值都是在0附近的。

QA

  • 问题:nan、inf如何产生,以及怎么解决?
    inf:就是太大,即一般是lr太大权重初始化时太大
    nan一般是 除0

    • 解决:
      合理初始化权重(权重的初始 一般均值为0,方差小一点,当能出现正确的值之后 再慢慢调大权重(的方差)使得训练有进展)
      选择合适的激活函数、选择合适大小的lr(一般是把lr一直往小调 直到inf、nan不出现)
  • 问题:使用ReLU激活函数是如何做到拟合x平方或者三次方这种曲线的?
    不是单独的relu来拟合,而是relu+学习到的权重w 共同作用(只是基于relu提供非线性的特性)

  • 问题:梯度消失可以说是因为使用了sigmoid激活函数引起的对吗?所以我们可以用ReLU替换sigmoid解决梯度消失的问题?
    梯度消失产生的原因有很多种,sigmoid只是其中的一种可能
    用ReLU替换 可以降低 产生梯度消失的概率,但不确保一定能完全解决

  • 问题:梯度爆炸是由什么激活函数引起的吗?
    爆炸的产生和激活函数无关,一般都是由每层的输出太大 然后多个层累乘引起的

  • 问题:resnet还是会出现数值稳定性?
    各种技术都是在缓解、减轻问题,但不是完全解决,用ResNet只是会让数值稳定性更好一点(整个深度学习的进展都是在 让数值更加稳定)

总结

  • 合理的权重初始值和激活函数的选取可以提升数值稳定性

相关文章:

跟着李沐老师学习深度学习(八)

数值稳定性 模型初始化和激活函数 数值稳定性 神经网络的梯度 考虑如下d层的神经网络(t代表层) 计算损失 l 关于参数 Wt 的梯度: 这样的矩阵乘法带来的问题: (1)梯度爆炸 (2)梯度…...

元宵小花灯

吃完饭散步回来的路上,看到一个小朋友拿着元宵小灯,后面的家长也闲适的哼着歌。 想起前阵子看到说,大人爱看小孩玩,也是共享那份天真快乐吧。 我小时候每年的元宵节,也有自己的小灯,那是九几年&#xff0c…...

算法——搜索算法:原理、类型与实战应用

搜索算法:开启高效信息检索的钥匙 在信息爆炸的时代,搜索算法无疑是计算机科学领域中熠熠生辉的存在,它就像一把神奇的钥匙,为我们打开了高效信息检索的大门。无论是在日常生活中,还是在专业的工作场景里,…...

告别传统测量:三维扫描仪测量工件尺寸

在现代制造业中,精确测量工件尺寸是确保产品质量和生产效率的关键环节。然而,传统测量方法往往存在效率低下、精度不足以及操作复杂等问题,难以满足高精度和复杂形状工件的测量需求。 传统工件尺寸测量主要依赖于卡尺、千分尺、三坐标测量仪…...

win32汇编环境,对话框程序使用跟踪条(滑块)控件示例一

;运行效果 ;win32汇编环境,对话框程序使用跟踪条控件示例一 ;生成2条横的跟踪条,分别设置不同的数值范围,设置不同的进度副度的例子 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>…...

WordPress 角标插件:20 种渐变色彩搭配,打造专属菜单标识

源码介绍 WordPress 角标插件使用教程 本插件旨在为 WordPress 菜单添加角标,并且支持 20 种不同的角标样式。 使用步骤 您可以在 WordPress 后台的“插件”页面中,找到“WordPress 角标插件”,然后点击激活按钮。您需要进入主题的菜单设置…...

【鸿蒙开发】第二十九章 Stage模型-应用上下文Context、进程、线程

目录 1 Stage模型基本概念 1.1 开发流程 3 应用上下文Context的典型使用场景 3.1 获取应用文件路径 3.2 获取和修改加密分区 3.3 获取本应用中其他Module的Context 3.4 订阅进程内UIAbility生命周期变化 4 进程 4.1 概述 5 线程 5.1 线程类型 5.2 使用EventHub进行线…...

window 安装GitLab服务器笔记

目录 视频: 资源: Linux CeneOS7: VMware: Linux无法安装 yum install vim -y 1.手动创建目录 2.下载repo PS 补充视频不可复制的代码 安装GitLab *修改root用户密码相关(我卡在第一步就直接放弃了这个操作&…...

3dgs 2025 学习笔记

CVPR 2024 3D方向总汇包含(3DGS、三维重建、深度补全、深度估计、全景定位、表面重建和特征匹配等)_cvpr2024-structure-awaresparse-viewx-ray3dreconstr-CSDN博客 https://github.com/apple/ml-hugs 3DGS COLMAP-Free 3D Gaussian Splatting ⭐code &…...

2024.1.2版本Android Studio gradle下载超时问题处理

一、问题背景 在项目的根build.gradle里面配置了以下地址后,依旧下载gradle包失败,平常如果出现第三方库或者gradle下载失败,配置以下地址,一般可以下载成功 maven { url https://maven.aliyun.com/repository/public } maven { url https://maven.aliyun.com/nex…...

ffmpeg学习:ubuntu下编译Android版ffmpeg-kit

文章目录 前言一. 配置环境1.1 虚拟机版本1.2 安装Android环境1.2.1 Android SDK安装1.2.2 Android NDK安装 1.3 编译前的准备工作1.3.1 libtasn1-1安装1.3.2 meson安装1.3.3 harfbuzz下载 二. 编译ffmpeg-kit三. 总结 前言 ffmpeg-kit是一款跨多个平台的,用于在应…...

mydb:TM实现

一、说明 TM就是事务管理:实现对于事务的新增(active)、事务的状态修改(commit、abort)、事务的状态判断 二、事务管理 2.1创建xid文件/打开xid文件 创建xid、写一个空的 XID 文件头并创建TM public static Transac…...

神经缩放定律:涌现能力与神经元数量、参数数量、数据集大小以及训练所使用的计算量有关

大语言模型的神经缩放定律 大语言模型(LLMs)在自然语言处理领域取得了显著进展,这很大程度上得益于神经缩放定律。该定律指出,模型的损失与模型规模、数据集大小以及训练所使用的计算量呈幂律关系 ,随着模型参数、数据量等的增加,模型会展现出涌现能力,性能会有质的飞跃…...

Microsoft Porject常用字段描述

点击下载《Microsoft Porject常用字段描述》 1. 前言 Microsoft Project 是项目管理中不可或缺的工具,它通过丰富的列(字段)帮助项目经理全面跟踪和管理项目的各个方面。这些列名通常以简称的形式出现,如 ACWP、BCWP、BCWS 等&a…...

web前端开发中vscode常用的快捷键

1.快速复制一行 快捷键: shiftalt 下箭头(上箭头) 或者 ctrlc 然后 ctrlv 2.选定多个相同的单词 快捷键: ctrl d 先双击选定一个单词,然后按下 ctrl d 可以往下依次选择相同的单词。 这样同时修改相同的单词 3.全局替换某单词 当我们一个…...

鲲鹏(ARM64)升级GCC

1、下载压缩包 wget http://ftp.gnu.org/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.xz2、解压 tar -xvf gcc-9.5.0.tar.xzcd gcc-9.5.03、下载关联软件 ./contrib/download_prerequisites4、新建文件夹 mkdir build && cd build5、配置 ../configure -enable-checkingrelea…...

国产操作系统安装DeepSeek

从年前到现在,DeepSeek这款语言AI模型,一经发布直接在全球爆火,在热搜上更是牢牢占据一席之地。无论是技术大神,还是紧跟潮流的技术小白,都被它强大的自然语言处理能力所吸引。作为国产操作系统的用户,千万…...

安科瑞 Acrel-2000ES:解锁储能管理新高度,引领能源未来!

安科瑞 崔丽洁 在能源转型的关键时期,高效的储能管理成为众多企业和项目的核心需求。今天,就给大家介绍一款储能管理的 “神器”—— 安科瑞 Acrel-2000ES 储能能量管理系统。 安科瑞电气可是行业内的 “明星企业”,2003 年成立,2…...

DeepSeek总是提示“服务器繁忙,请稍后再试。”的问题的解决办法(替代网站推荐)

文章目录 问题现象原因分析替代网站的可行性分析替代网站秘塔搜索超算互联网360 纳米AI助手百度云千帆字节跳动火山引擎阿里云PAI硅基流动其他文思助手Fireworks英伟达POE 问题现象 频繁遇到错误提示: 在使用DeepSeek时(开启“深度思考(R1&a…...

OpenBayes 教程上新 | 告别服务器繁忙,DeepSeek 一键部署教程上线!

近日,DeepSeek 的技术突破如同一颗横空出世的「科技烟花」,在全球范围内瞬间炸开。 日活跃用户数在短短 18 天内便突破 1500 万,增速达到 ChatGPT 的 13 倍。根据 SensorTower 数据显示,DeepSeek 应用的每日下载量接近 500 万&am…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...