【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)更常用,原因如下:

  1. 变长序列:NLP任务中的输入序列长度不固定,层归一化能有效处理变长序列,而批归一化依赖于批次中的数据均值和方差,可能会受到序列长度变化的影响。换句话说就是在三个批次中提取到的特征分别是(填充,0.5775,0.3798)提取到的数据均值和方差就不准确,即便是将填充替换为某一数字,仍然无法像其他 input_ dimensions数字一样体现有效的特征信息,故而算出的数据均值和方差也会受到影响

  2. 小批次训练:NLP任务中通常使用较小的批次大小,BN在小批次时较小的样本数很难提取出具有广泛代表意义的数据均值和方差,导致均值和方差估计不稳定,而LN不依赖于批次大小,适应性更强。

  3. RNN和Transformer:尤其在Transformer模型中,层归一化能够在每个样本的特征维度上进行归一化,避免了批归一化需要跨样本计算均值和方差的问题,从而提高了模型的训练稳定性。

 所以呀基于上述考量我们多采用LN即层归一化方式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全程Kali linux---CTFshow misc入门(25-37)

第二十五题: 提示:flag在图片下面。 直接检查CRC,检测到错误,就直接暴力破解。 暴力破解CRC的python代码。 import binascii import struct def brute_force_ihdr_crc(filename): # 读取文件二进制数据 with open(filen…

OpenAI深夜反击:o3-mini免费上线,能否撼动DeepSeek的地位?

还在为寻找合适的 AI 模型而烦恼吗?chatTools 平台为您精选 o1、GPT4o、Claude、Gemini 等顶尖 AI 模型,满足您不同的 AI 应用需求。立即体验强大的 AI 能力! 深夜反击,OpenAI祭出o3-mini 在DeepSeek异军突起,搅动AI行…

蓝桥杯备考:模拟算法之字符串展开

P1098 [NOIP 2007 提高组] 字符串的展开 - 洛谷 | 计算机科学教育新生态 #include <iostream> #include <cctype> #include <algorithm> using namespace std; int p1,p2,p3; string s,ret; void add(char left,char right) {string tmp;for(char ch left1;…

NLP深度学习 DAY5:Sequence-to-sequence 模型详解

Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;模型是一种用于处理输入和输出均为序列任务的深度学习模型。它最初被设计用于机器翻译&#xff0c;但后来广泛应用于其他任务&#xff0c;如文本摘要、对话系统、语音识别、问答系统等。 核心思想 Seq2Seq 模型的目标是将…

于动态规划的启幕之章,借 C++ 笔触绘就算法新篇

注意&#xff1a;代码由易到难 P1216 [IOI 1994] 数字三角形 Number Triangles 题目链接&#xff1a;[IOI 1994] 数字三角形 Number Triangles - 洛谷 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每…

Three.js 后期处理(Post-Processing)详解

目录 前言 一、什么是后期处理&#xff1f; 二、Three.js 后期处理的工作流程 2.1 创建 EffectComposer 2.2 添加渲染通道&#xff08;Render Pass&#xff09; 2.3 应用最终渲染 三、后期处理实现示例 3.1 基础代码 四、常见的后期处理效果 4.1 辉光效果&#xf…

低代码系统-产品架构案例介绍、炎黄盈动-易鲸云(十二)

易鲸云作为炎黄盈动新推出的产品&#xff0c;在定位上为低零代码产品。 开发层 表单引擎 表单设计器&#xff0c;包括设计和渲染 流程引擎 流程设计&#xff0c;包括设计和渲染&#xff0c;需要说明的是&#xff1a;采用国际标准BPMN2.0&#xff0c;可以全球通用 视图引擎 视图…

从 HTTP/1.1 到 HTTP/3:如何影响网页加载速度与性能

一、前言 在最近使用Apipost时&#xff0c;突然注意到了http/1.1和http/2&#xff0c;如下图&#xff1a; 在我根深蒂固的记忆中&#xff0c;对于http的理解还停留在TCP协议、三次握手。由于我的好奇心&#xff0c;于是触发了我被动“开卷”&#xff0c;所以有了这篇文章&…

项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser

文章目录 一、情景说明二、解决办法 一、情景说明 在重写若依后端服务的过程中 使用了Redis存放LoginUser对象数据 那么&#xff0c;有存就有取 在取值的时候&#xff0c;报错 二、解决办法 方法1、在TokenService中修改如下 getLoginUser 方法中&#xff1a;LoginUser u…

C语言------二维数组指针从入门到精通

前言: 目标:需要了解及掌握数组指针的行地址、列地址、具体元素地址、具体元素地址的值是怎样定义及实现。 重点:指针的偏移,指针解引用。 难点:指针的升阶与降阶。 1. 基本概念 二维数组&#xff1a;二维数组可以看作是一个数组的数组。例如&#xff0c;int a[3][4] 表示一个 …

AI-ISP论文Learning to See in the Dark解读

论文地址&#xff1a;Learning to See in the Dark 图1. 利用卷积网络进行极微光成像。黑暗的室内环境。相机处的照度小于0.1勒克斯。索尼α7S II传感器曝光时间为1/30秒。(a) 相机在ISO 8000下拍摄的图像。(b) 相机在ISO 409600下拍摄的图像。该图像存在噪点和色彩偏差。©…

自定义数据集 ,使用朴素贝叶斯对其进行分类

代码&#xff1a; # 导入必要的库 import numpy as np import matplotlib.pyplot as plt# 定义类1的数据点&#xff0c;每个数据点是二维的坐标 class1_points np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5],[1.5, 0.9],[0.9, 1.2],[1.1, 1.7],[1.4, 1.1]])# 定义类2的数据点&…

蓝桥杯单片机第七届省赛

前言 这套题不难&#xff0c;相对于第六套题这一套比较简单了&#xff0c;但是还是有些小细节要抓 题目 OK&#xff0c;以上就是全部的题目了&#xff0c;这套题目相对来说逻辑比较简单&#xff0c;四个按键&#xff0c;S4控制pwm占空比&#xff0c;S5控制计时时间&#xff0…

小程序设计和开发:如何研究同类型小程序的优点和不足。

一、确定研究目标和范围 明确研究目的 在开始研究同类型小程序之前&#xff0c;首先需要明确研究的目的。是为了改进自己的小程序设计和开发&#xff0c;还是为了了解市场趋势和用户需求&#xff1f;不同的研究目的会影响研究的方法和重点。例如&#xff0c;如果研究目的是为了…

反向代理模块jmh

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当…

一文讲解HashMap线程安全相关问题

HashMap不是线程安全的&#xff0c;主要有以下几个问题&#xff1a; ①、多线程下扩容会死循环。JDK1.7 中的 HashMap 使用的是头插法插入元素&#xff0c;在多线程的环境下&#xff0c;扩容的时候就有可能导致出现环形链表&#xff0c;造成死循环。 JDK 8 时已经修复了这个问…

oracle:子查询

子查询: 一条查询语句中嵌入了另一条查询语句, 被嵌入里面的这条查询语句称为子查询, 外面的查询语句称为主查询 子查询的分类 相关性子查询&#xff08;Correlated Subquery&#xff09;是指子查询的执行依赖于外部查询的每一行数据。也就是说&#xff0c;子查询会对外部查询…

AI技术在SEO关键词优化中的应用策略与前景展望

内容概要 在数字营销的快速发展中&#xff0c;AI技术逐渐成为SEO领域的核心驱动力。其通过强大的数据分析和处理能力&#xff0c;不仅改变了我们优化关键词的方式&#xff0c;也提升了搜索引擎优化的效率和效果。在传统SEO中&#xff0c;关键词的选择与组合常依赖人工经验和直…

Java项目: 基于SpringBoot+mybatis+maven+mysql实现的疫苗发布和接种预约管理系统(含源码+数据库+开题报告+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenmysql疫苗发布和接种预约管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、…

VSCode中快速创建Html文件

1、下载并安装好VSCode软件&#xff0c;启动软件。 2、依次点击左上角选项卡“file”-“New File”。 输入文件名称后缀&#xff0c;如&#xff1a;HelloWorld.html。 选择新建文件的目录所在位置。 3、HelloWorld.html中输入英文格式的!&#xff0c;按回车键后会默认依据…