【NLP251】Transformer精讲 残差链接与层归一化
精讲部分,主要是对Transformer的深度理解方便日后从底层逻辑进行创新,对于仅应用需求的小伙伴可以跳过这一部分,不影响正常学习。
1. 残差模块
何凯明在2015年提出的残差网络(ResNet),Transformer在2016年提出时正好踏上了ResNet的东风,所以就顺其自然的加上了这一部分以提高特征的提取能力,残差模块(Residual Block)是残差网络(ResNet)中的核心组件,其设计原理是为了解决深度神经网络训练中的退化问题,即随着网络层数的增加,网络的性能反而可能下降。残差模块通过引入恒等映射(Identity Mapping)和残差连接(Residual Connection)来缓解这一问题。残差模块是实践证明有效的模块对于数学原理的证明目前还没有较为清晰的推导,我来简单说一下他的原理。
恒等映射(Identity Mapping)
恒等映射是指输入直接通过一个“快捷方式”传递到后面的层,而不需要经过任何变换。这种设计允许输入信息在网络中直接流动,不受中间层的影响。
残差连接(Residual Connection)
残差连接是指将输入 x 直接加到网络的输出上。具体来说,如果网络的输出是 F(x),那么残差模块的最终输出是 F(x)+x。这种设计使得网络可以通过学习残差函数 F(x) 来优化原始函数 H(x),即 H(x)=F(x)+x。
残差函数(Residual Function)
残差函数 F(x) 是网络中需要学习的函数,它表示输入 x 经过一系列变换后的结果。通过残差连接,网络实际上是在学习 F(x) 来逼近目标函数 H(x),而不是直接学习 H(x)。这种设计使得网络更容易优化,因为 F(x) 只需要学习 H(x) 与 x 之间的差异,即H(x)=F(x)+x≈ x。由此我们可知F(x)趋近于0。
激活函数
在残差模块中,通常会在残差连接之后添加一个激活函数(如ReLU),以引入非线性特性。这样可以确保网络的表达能力,同时保持残差连接的线性特性。
权重层(Weight Layers)
残差模块中的权重层可以包括卷积层、全连接层等,用于对输入进行变换。这些权重层通常包含多个层,如图中所示的两个权重层。
当 F(x) 趋近于0时的意义
梯度流:当 F(x) 趋近于0时,残差块的输出 y 将主要由输入 x 决定。这意味着即使在深层网络中,梯度也可以直接通过恒等映射传播回输入层,从而缓解梯度消失问题。
我们可以从数学角度、非严格证明一下它为什么能够解决梯度消失问题。
假设现在存在一个神经网络,它由多个残差结构相连(类似于Transformer的结构)。每个残差结构被定义为F(x,W),这一结构是由一个复杂结构和一个残差链接并行组成的,其中x代表残差输入的数据,W代表该结构中的权重。设xi,xi+1分别代表残差结构F()的输入和输出,设xI代表整个神经网络的输入,令relu激活函数为r(y)=max(0,x),简写为r()。由此可得:
残差网络中的前向传播过程:
残差网络中的反向传播过程:
由于“1+”结构的引入,残差网络能够有效地避免梯度消失现象,即在求解过程中梯度不致变为零。这使得深层网络的梯度可以直接传递至浅层,从而使得整个迭代过程更加稳定。此外,残差网络在更新梯度时将部分乘法操作转化为加法操作,这一改变显著提升了计算效率。
网络深度:残差网络允许构建非常深的网络,因为即使深层网络的权重层输出趋近于0,网络仍然可以通过恒等映射学习到有效的特征表示。
优化难度:当 F(x) 趋近于0时,优化问题变得相对简单,因为网络可以通过调整权重层的输出来最小化损失函数,即使权重层的输出很小或接近0。
特征重用:残差块允许网络在深层中重用浅层的特征表示,从而提高模型的表达能力和泛化能力。
2. 层归一化
层归一化是实践上证明有效的中间过程特征处理方法,在目前大多数网络结构的重要层后都会加一个归一化层,Layer Normalization(层归一化)是一个至关重要的部分,它是一种特定的归一化技术,它在2016年被提出,用于减少训练深度神经网络时的内部协方差偏移(internal covariate shift)。而我们要讲的Transformer也是在同年(2016)层归一化提出不久后发表出来的,所以在构造网络时也加入了从层归一化。
归一化在现在的网络结构中被广泛的应用,之后会出一期详细的进行讲解。链接会被放到这一位置方便小伙伴们学习。
我们来简单讲一下归一化在NLP领域的应用。
首先,为什么要进行归一化操作?
- 减少内部协方差偏移:在深度学习模型训练过程中,参数的更新会影响后续层的激活分布,这可能导致训练过程不稳定。Layer Normalization通过规范化每一层的输出来减轻这种效应,有助于稳定训练过程。
- 加速训练速度:归一化可以使得梯度更稳定,这通常允许更高的学习率,从而加快模型的收敛速度。
- 减少对初始值的依赖:由于Layer Normalization使得模型对于输入数据的分布变化更为鲁棒,因此可以减少模型对于参数初始值的敏感性。
- 允许更深层网络的训练:通过规范化每层的激活,Layer Normalization可以帮助训练更深的网络结构,而不会那么容易出现梯度消失或爆炸的问题。
接下来,第二个问题为什么要进行层归一化?
通过前面的学习我们知道对于自然语言的处理通常是在三个维度上进行的
(batch_ size, vocal_ size, input_ dimensions)或
(batch_ size,time_ step, input_ dimensions )
出去特征维度 input_ dimensions还有两个维度,一个是批次维度,另一个是时间维度或词表维度
也就对应了两种归一化即批归一化(Batch Normalization)和层归一化(Layer Normalization)。
那为什么不进行批归一化呢?其实也不是绝对的,主要是经过以下三方面的考量,为了方便大家理解在说明之前我们先来认识以下这两种归一化方式分别是什么逻辑
在自然语言处理(NLP)中,层归一化(Layer Normalization,LN)比批归一化(Batch Normalization,BN)更常用,原因如下:
-
变长序列:NLP任务中的输入序列长度不固定,层归一化能有效处理变长序列,而批归一化依赖于批次中的数据均值和方差,可能会受到序列长度变化的影响。换句话说就是在三个批次中提取到的特征分别是(填充,0.5775,0.3798)提取到的数据均值和方差就不准确,即便是将填充替换为某一数字,仍然无法像其他 input_ dimensions数字一样体现有效的特征信息,故而算出的数据均值和方差也会受到影响
-
小批次训练:NLP任务中通常使用较小的批次大小,BN在小批次时较小的样本数很难提取出具有广泛代表意义的数据均值和方差,导致均值和方差估计不稳定,而LN不依赖于批次大小,适应性更强。
-
RNN和Transformer:尤其在Transformer模型中,层归一化能够在每个样本的特征维度上进行归一化,避免了批归一化需要跨样本计算均值和方差的问题,从而提高了模型的训练稳定性。
所以呀基于上述考量我们多采用LN即层归一化方式。
相关文章:

【NLP251】Transformer精讲 残差链接与层归一化
精讲部分,主要是对Transformer的深度理解方便日后从底层逻辑进行创新,对于仅应用需求的小伙伴可以跳过这一部分,不影响正常学习。 1. 残差模块 何凯明在2015年提出的残差网络(ResNet),Transformer在2016年…...

康德哲学与自组织思想的渊源:从《判断力批判》到系统论的桥梁
康德哲学与自组织思想的渊源:从《判断力批判》到系统论的桥梁 第一节:康德哲学中的自然目的论与自组织思想 核心内容: 康德哲学中的自然目的论和反思判断力概念,为现代系统论中的自组织思想提供了哲学基础,预见了复…...

SpringBoot 整合 SpringMVC:SpringMVC的注解管理
分类: 中央转发器(DispatcherServlet)控制器视图解析器静态资源访问消息转化器格式化静态资源管理 中央转发器: 中央转发器被 SpringBoot 自动接管,不需要我们在 web.xml 中配置: <servlet><servlet-name>chapter2&l…...

松灵机器人 scout ros2 驱动 安装
必须使用 ubuntu22 必须使用 链接的humble版本 #打开can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…...

使用 Numpy 自定义数据集,使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数
1. 导入必要的库 首先,导入我们需要的库:Numpy、Pytorch 和相关工具包。 import numpy as np import torch import torch.nn as nn import torch.optim as optim from sklearn.metrics import accuracy_score, recall_score, f1_score2. 自定义数据集 …...

MapReduce简单应用(一)——WordCount
目录 1. 执行过程1.1 分割1.2 Map1.3 Combine1.4 Reduce 2. 代码和结果2.1 pom.xml中依赖配置2.2 工具类util2.3 WordCount2.4 结果 参考 1. 执行过程 假设WordCount的两个输入文本text1.txt和text2.txt如下。 Hello World Bye WorldHello Hadoop Bye Hadoop1.1 分割 将每个文…...

c语言(关键字)
前言: 感谢b站鹏哥c语言 内容: 栈区(存放局部变量) 堆区 静态区(存放静态变量) rigister关键字 寄存器,cpu优先从寄存器里边读取数据 #include <stdio.h>//typedef,类型…...

蓝桥杯思维训练营(一)
文章目录 题目总览题目详解翻之一起做很甜的梦 蓝桥杯的前几题用到的算法较少,大部分考察的都是思维能力,方法比较巧妙,所以我们要积累对应的题目,多训练 题目总览 翻之 一起做很甜的梦 题目详解 翻之 思维分析:一开…...

【C语言】结构体对齐规则
文章目录 一、内存对齐规则二、结构体的整体对齐: 一、内存对齐规则 1.第一个数据成员:结构体的第一个数据成员总是放置在其起始地址处,即偏移量为0的位置。 2.其他数据成员的对齐:每个后续成员的存储地址必须是其有效对齐值的整…...

2025-工具集合整理
科技趋势 github-rank 🕷️Github China/Global User Ranking, Global Warehouse Star Ranking (Github Action is automatically updated daily). 科技爱好者周刊 制图工具 D2 D2 A modern diagram scripting language that turns text to diagrams 文档帮助 …...

快速提升网站收录:利用网站用户反馈机制
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/59.html 利用网站用户反馈机制是快速提升网站收录的有效策略之一。以下是一些具体的实施步骤和建议: 一、建立用户反馈机制 多样化反馈渠道: 设立在线反馈表、邮件…...

图漾相机——Sample_V1示例程序
文章目录 1.SDK支持的平台类型1.1 Windows 平台1.2 Linux平台 2.SDK基本知识2.1 SDK目录结构2.2 设备组件简介2.3 设备组件属性2.4 设备的帧数据管理机制2.5 SDK中的坐标系变换 3.Sample_V1示例程序3.1 DeviceStorage3.2 DumpCalibInfo3.3 NetStatistic3.4 SimpleView_SaveLoad…...

如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?
在 C# 中,using语句用于自动释放实现了IDisposable接口的对象所占用的非托管资源,如文件句柄、数据库连接、图形句柄等。其使用方式如下: 基础用法 声明并初始化资源对象:在using关键字后的括号内声明并初始化一个实现了IDisposable接口的对象。使用资源:在using语句块内…...

HTML 字符实体
HTML 字符实体 在HTML中,字符实体是一种特殊的表示方式,用于在文档中插入那些无法直接通过键盘输入的字符。字符实体在网页设计和文档编写中扮演着重要的角色,尤其是在处理特殊字符、符号和数学公式时。以下是关于HTML字符实体的详细解析。 字符实体概述 HTML字符实体是一…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_strerror_init()函数
目录 ngx_strerror_init()函数声明 ngx_int_t 类型声明定义 intptr_t 类型 ngx_strerror_init()函数实现 NGX_HAVE_STRERRORDESC_NP ngx_strerror_init()函数声明 在 nginx.c 的开头引入了: #include <ngx_core.h> 在 ngx_core.h 中引入了 #include <ngx_er…...

【c++】类与对象详解
目录 面向过程思想和面向对象思想类的定义引入类的关键字类定义的两种方式类的访问限定符类的作用域类大小的计算封装 this指针类的6个默认成员函数构造函数初步理解构造函数深入理解构造函数初始化列表单参数构造函数引发的隐式类型转换 析构函数拷贝构造函数赋值运算符重载运…...

nginx目录结构和配置文件
nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件暂存目录 ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相关参…...

MacBook Pro(M1芯片)Qt环境配置
MacBook Pro(M1芯片)Qt环境配置 1、准备 试图写一个跨平台的桌面应用,此时想到了使用Qt,于是开始了搭建开发环境~ 在M1芯片的电脑上安装,使用brew工具比较方便 Apple Silicon(ARM/M1…...

Kotlin 使用 Springboot 反射执行方法并自动传参
在使用反射的时候,执行方法的时候在想如果Springboot 能对需要执行的反射方法的参数自动注入就好了。所以就有了下文。 知识点 获取上下文通过上下文获取 Bean通过上下文创建一个对象,该对象所需的参数由 Springboot 自己注入 创建参数 因为需要对反…...

网络安全技术简介
网络安全技术简介 随着信息技术的迅猛发展,互联网已经成为人们日常生活和工作中不可或缺的一部分。与此同时,网络安全问题也日益凸显,成为全球关注的焦点。无论是个人隐私泄露、企业数据被盗取还是国家信息安全受到威胁,都与网络…...

nginx 报错404
404:服务器无法正常解析页面,大多是配置问题(路径配置错误)、或访问页面不存在 如果你也是用nginx来转接服务的话,那你有可能碰到过这种情况,当你启动服务后,在本地打开页面,发现404,然后你找遍…...

【1.安装ubuntu22.04】
目录 参考文章链接电脑参数安装过程准备查看/更改引导方式查看/更改磁盘的分区格式关闭BitLocker加密压缩分区关闭独显直连制作Ubuntu安装盘下载镜像制作启动盘 进入BIOS模式进行设置Secure Boot引导项顺序try or install ubuntu 进入安装分区启动引导器个人信息和重启 参考文章…...

【设计模式-行为型】备忘录模式
一、什么是备忘录模式 来到备忘录模式了,这个模式我感觉相对简单一些,就是备份,或者快照。跟前面一样为了加深理解,我们引入一个电影情结来说明啥是备忘录模式,以来加深大家对备忘录模式的认识。那么,在电影…...

Linux环境下的Java项目部署技巧:安装 Mysql
查看 myslq 是否安装: rpm -qa|grep mysql 如果已经安装,可执行命令来删除软件包: rpm -e --nodeps 包名 下载 repo 源: http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm 执行命令安装 rpm 源(根据下载的…...

云原生(五十三) | SQL查询操作
文章目录 SQL查询操作 一、数据库DDL操作 1、登陆数据库 2、创建DB数据库 二、数据表DDL操作 1、创建数据表 2、RDS中SQL查询操作 三、SQL查询操作 1、RDS中SQL查询操作 SQL查询操作 一、数据库DDL操作 1、登陆数据库 2、创建DB数据库 创建一个普通账号,…...

【前端知识】常用CSS样式举例
文章目录 一、Flex盒子布局1. Flexbox 的基本概念2. Flex 容器的属性2.1 display2.2 flex-direction2.3 flex-wrap2.4 justify-content2.5 align-items2.6 align-content 3. Flex 项目的属性3.1 order3.2 flex-grow3.3 flex-shrink3.4 flex-basis3.5 flex3.6 align-self 4. 示例…...

硕成C语言1笔记
硕成C语言1笔记 这一节内容主要讲了进制转换 进制转换:十进制转其他进制用短除法,最后逆序输出十六进制的15表示的是F,255的十六进制是:FF其他进制转十进制:按权展开,从n的0次方开始,一直到最…...

[SAP ABAP] Debug Skill
SAP ABAP Debug相关资料 [SAP ABAP] DEBUG ABAP程序中的循环语句 [SAP ABAP] 静态断点的使用 [SAP ABAP] 在ABAP Debugger调试器中设置断点 [SAP ABAP] SE11 / SE16N 修改标准表(慎用)...

理解 InnoDB 如何处理崩溃恢复
在数据库领域,数据的一致性与可靠性至关重要。InnoDB 存储引擎的崩溃恢复机制是保障数据安全的核心,其中 Doublewrite Buffer 和 Redo Log 发挥着关键作用。下面,我们将详细探讨 InnoDB 从写入到崩溃恢复的全过程。 一、写入流程 修改页面&…...

UE5 蓝图学习计划 - Day 8:触发器与交互事件
在游戏开发中,触发器(Trigger) 和 交互事件(Interaction Events) 是实现游戏动态交互的关键。例如,当角色接近一扇门时,它可以自动打开,或者当玩家进入特定区域时,游戏触…...