【动手学深度学习】--07.数值稳定性、模型初始化、激活函数

news2024/11/26 22:20:35

文章目录

  • 数值稳定性、模型初始化、激活函数
    • 1.数值稳定性
      • 1.1举例
      • 1.2数值稳定性的常见两个问题
      • 1.3梯度爆炸
      • 1.4梯度消失
      • 1.5打破对称性
    • 2.模型初始化
      • 2.1让训练更加稳定
      • 2.2权重初始化
      • 2.3Xavier初始
    • 3.激活函数

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

学习视频:数值稳定性 + 模型初始化和激活函数【动手学深度学习v2】

官方笔记:数值稳定性和模型初始化

到目前为止,我们实现的每个模型都是根据某个预先指定的分布来初始化模型的参数。 有人会认为初始化方案是理所当然的,忽略了如何做出这些选择的细节。甚至有人可能会觉得,初始化方案的选择并不是特别重要。 相反,初始化方案的选择在神经网络学习中起着举足轻重的作用, 它对保持数值稳定性至关重要。 此外,这些初始化方案的选择可以与非线性激活函数的选择有趣的结合在一起。 我们选择哪个函数以及如何初始化参数可以决定优化算法收敛的速度有多快。 糟糕选择可能会导致我们在训练时遇到梯度爆炸或梯度消失。 本节将更详细地探讨这些主题,并讨论一些有用的启发式方法。 这些启发式方法在整个深度学习生涯中都很有用。

1.数值稳定性

1.1举例

神经网络的梯度

image-20230716120815446

1.2数值稳定性的常见两个问题

  • 梯度爆炸
  • 梯度消失

举例

image-20230716121029948

image-20230716123156175

1.3梯度爆炸

image-20230716121102094

如果d - t很大,代表层数很多,不断累积的乘法会使得大于1的梯度累乘出现一个非常大的梯度

梯度爆炸出现的问题:

  • 值超出值域

    • 对于16位浮点数尤为严重(数值区间6e5-6e4)
  • 对学习率敏感

    • 如果学习率太大—>大参数值—>更大的梯度
    • 如果学习率太小—>训练无进展
    • 我们可能需要在训练过程不断调整学习率

1.4梯度消失

image-20230716121358423

image-20230716121435439

%matplotlib inline
import torch
from d2l import torch as d2l

x = torch.arange(-8.0,8.0,0.1,requires_grad = True)
y = torch.sigmoid(x)
y.backward(torch.ones_like(x))

d2l.plot(x.detach().numpy(), [y.detach().numpy(), x.grad.numpy()],
         legend=['sigmoid', 'gradient'], figsize=(4.5, 2.5))

image-20230716123400676

正如上图,当sigmoid函数的输入很大或是很小时,它的梯度都会消失。 此外,当反向传播通过许多层时,除非我们在刚刚好的地方, 这些地方sigmoid函数的输入接近于零,否则整个乘积的梯度可能会消失。 当我们的网络有很多层时,除非我们很小心,否则在某一层可能会切断梯度。 事实上,这个问题曾经困扰着深度网络的训练。 因此,更稳定的ReLU系列函数已经成为从业者的默认选择(虽然在神经科学的角度看起来不太合理)。

梯度消失的问题:

  • 梯度值变为0

    • 对16位浮点数尤为严重
  • 训练没有进展

    • 不管如何选择学习率
  • 对于底层尤为严重

    • 仅仅顶部层训练的较好
    • 无法让神经网络更深

总结:

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

1.5打破对称性

image-20230716123904580

2.模型初始化

2.1让训练更加稳定

image-20230716121845586

让每层的方差是一个常数

image-20230716122009158

2.2权重初始化

image-20230716122135095

举例

image-20230716122256473

正向方差

image-20230716122403074

反向均值和方差

image-20230716122517447

2.3Xavier初始

image-20230716122654983

image-20230716124016832

image-20230716124026989

3.激活函数

假设线性的激活函数

image-20230716122748901

反向

image-20230716122834504

常用的激活函数

image-20230716122923359

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

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

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

相关文章

vue3后台管理系统实现动态侧边导航菜单管理(ElementPlus组件)

记住 一级(el-sub-menu)的都是只是展示的 点击跳转的都是一级下的子级(el-menu-item) 完整展示 1:在登陆功能进行登陆 获取menu列表 注册路由表的时候 把文件进行创建好 因为注册的方法需要获取这个路径 整个router下的main product等等都要创建 //1:发送你的用户名和密码获…

Linux--进程终止

一、进程终止时,操作系统做了什么?? 释放进程申请的相关内核数据结构和对应的代码和数据 本质就是释放系统资源(最主要的资源是内存) 二、进程终止的常见方式? a.代码跑完,结果正确 b.代码跑完&…

【我的2023上半年总结】感谢CSDN:第一次100w+阅读,赚大了!

大家好,这里是程序员晚枫。 因为工作一般都是996的原因,今天是2023上半年少有的周六休息日,正好看到平台的#2023年中总结#活动,赶紧来分享一下这半年的自媒体收获~ 主要说一些开心的事情 1、CSDN CSDN账号👉Python…

MySQL的循环语句分析

1.while循环 复制 -- 设置mysql分隔符为//,也就意味着,当遇到下一个//时,整体执行SQL语句 DELIMITER //DROP PROCEDURE if EXISTS ‘test’; # 如果存在test存储过程则删除CREATE procedure test() # 创建无参存储过程,名称为testBEGIN DECLARE i I…

配置 Vite 的环境变量与模式 (.env mode)

目录 创建项目环境变量内建变量创建.env 文件定义变量HTML 环境变量替换 模式 创建项目 npm create vitelatest or yarn create vite or pnpm create vite 环境变量 Vite 在一个特殊的 import.meta.env 对象上暴露环境变量。 console.log(import.meta.env)内建变量 import.met…

关于chatGPT、AI绘画、AI提词器等AI工具国内如何使用

目前的AI潮流非常火热,OPENAI 出的CHATGPT可谓是目前大模型人工智能的代表,刚开始听说chatGPT可以写代码,写作,写方案,无所不能。还有AI绘画也很NB作为一个程序员,为了体验这些&…

python+pytest接口自动化之参数关联

目录 一. 参数关联场景 二. 脚本编写 1. 在用例中按顺序调用 2. 使用Fixture函数 三. 总结 什么是参数关联? 参数关联,也叫接口关联,即接口之间存在参数的联系或依赖。在完成某一功能业务时,有时需要按顺序请求多个接口&…

听GPT 讲K8s源代码--pkg(三)

在 Kubernetes 项目中,pkg/controller目录下的子目录通常包含控制器相关的代码和逻辑。控制器是 Kubernetes 中用于管理资源的核心组件之一。它们负责监控资源的状态,并确保其符合所定义的期望状态。下面是对这些子目录的一些常见作用的解释:…

JavaScript中数据类型

对象和原始值 ● 在JavaScript中,有两种主要类型的数据,要不是原始值,要不是对象; 7种原始数据类型 1.数字 浮点数用于小数和整数。let age 23; 2.字符串 一系列字符的序列,用于文本。let firstName “IT知识…

全网最全整理,Allure集成Jenkins自动化测试实战(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Allure插件安装 …

libbpf-bootstrap 开发指南:概念与如何安装

目录 概念 如何安装& 使用 git 地址 使用git clone 下载代码 安装依赖环境 安装libbpf 编译example 概念 libbpf-bootstrap 是一个项目,旨在帮助开发者快速启动和开发使用 eBPF (Extended Berkeley Packet Filter) 和 libbpf 的程序。eBPF 是一种可以在…

2023.07.16 学习周报

文章目录 摘要文献阅读1.题目2.问题3.介绍4.Problem definition5.Method5.1 Feature Extractor5.2 Synthetic Node Generation5.3 Edge Generator5.4 GNN Classifier5.5 Optimization Objective5.6 算法 6.实验6.1 数据集6.2 基线6.3 实验结果 7.结论 数学建模1.欧式距离2.切比…

0130 物理层1

目录 2.物理层 2.1通信基础 2.1部分习题 2.物理层 2.1通信基础 2.1部分习题 1.下列说法正确的是() A.信道与通信电路类似,一条可通信电路往往包含一个信道 B.调制是把模拟数据转换为数字信号的过程 C.信息传输速率是通信信道上每秒传…

SIP支持的传输协议

一、SIP支持的传输协议-UDP、TCP、TLS SIP是一个应用层的会话协议,与一般协议不同的是,SIP协议可以同时支持各种传输协议。 SIP支持UDP传输:UDP是一个无连接的协议,且不提供可靠性。在UDP上建立SIP连接存在不可靠性。 SIP…

【K210模块】使用UART模块发送和接收数据

官方案例链接 【K210模块】使用UART模块发送和接收数据 官方案例链接 一、代码部分1、添加转换句(1)字节data 转字符串① 添加了转换语句② 没有添加转换语句 (2)字符串str 转 字节data 2、三种方式的比较,K210发送到S…

图解Vit 2:Vision Transformer——视觉问题中的注意力机制

文章目录 Patch Embedding 回顾Seq2Seq中的attentionTransformer中的attention Patch Embedding 回顾 上节回顾 Seq2Seq中的attention 在Transformer之前的RNN,其实已经用到了注意力机制。Seq2Seq。 对于Original RNN,每个RNN的输入,都是对…

vue3项目创建(vite3+ts+elementui-plus)

文章目录 1.创建工程 1.创建工程 目的:vue3vitets 安装依赖,安装vite的工具 Vite下一代的前端工具链为开发提供极速响应v4.3 npm install -g create-vite创建工程 create-vite font-userui --template vue-ts –template vue-ts 后面的是配置模板&#…

CS 144 Lab Zero

CS 144 Lab Zero 环境搭建使用socket写一个网络程序In-memory reliable byte stream 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab 0 对应的PDF: Lab Checkpoint 0: networking warmup Lab 0 会省去Telnet部分内容。 环境搭建 Run Ubuntu version 22.10, then ins…

基于linux下的高并发服务器开发(第二章)- 2.3 进程创建

/*#include <sys/types.h>#include <unistd.h>pid_t fork(void)函数的作用&#xff1a;用于创建子进程返回值&#xff1a;fork()的返回值会返回两次。一次是在父进程中&#xff0c;一次是在子进程中在父进程中返回创建的子进程的ID&#xff0c;在子进程中返回0如何…

《微服务架构设计模式》第十三章 微服务架构的重构策略

微服务架构的重构策略 一、重构到微服务需要考虑的问题1、为什么重构2、重构形式3、重构策略 二、设计服务与单体的协作方式三、总结 一、重构到微服务需要考虑的问题 1、为什么重构 单体地狱造成的业务问题&#xff1a; 交付缓慢充满故障的软件交付可扩展性差 2、重构形式 …