权威的郑州网站建设唐山的网站建设公司
2026/6/20 7:54:47 网站建设 项目流程
权威的郑州网站建设,唐山的网站建设公司,谷哇网站建设,网络游戏开发成本文章目录前言一、序列转导模型#xff08;Sequence Transduction Model#xff09;1.1 前馈神经网络 Feedforward Neural Network#xff08;FNN#xff09;1.2 循环神经网络 Recurrent Neural Network (RNN)1.3 编码器 - 解码器结构 Encoder and Decoder1.4 传统注意力机制…文章目录前言一、序列转导模型Sequence Transduction Model1.1 前馈神经网络 Feedforward Neural NetworkFNN1.2 循环神经网络 Recurrent Neural Network (RNN)1.3 编码器 - 解码器结构 Encoder and Decoder1.4 传统注意力机制二、Transformer前言《Attention is All You Need》论文地址https://arxiv.org/abs/1706.03762通过前面的两篇文章我们知道《Attention is All You Need》的两个核心创新点是Transformer 架构和Self-Attention自注意力机制那么为什么这两个创新会带来革命性的突破呢换句话说在2017年这篇论文出现之前为什么没有迎来大语言模型时代为了搞清楚这个问题我们就需要知道以往的一些模型结构是什么样的它们都存在着什么样的瓶颈。从而进一步的理解Transformer做了哪些创新解决了什么样的难点以及为什么Transformer能突破这些瓶颈或者限制。在Transformer论文的摘要中出现了一个词序列转导模型Sequence Transduction Model那么什么是序列转导模型Sequence Transduction Model呢我们就以它入手吧。一、序列转导模型Sequence Transduction Model序列转导模型Sequence Transduction Model是处理序列数据的模型序列数据具有顺序关系的数据每个元素的顺序对于数据的整体含义非常重要典型的序列转导模型文本翻译翻译前的文本(“How are you”) - 翻译后的文本“你好吗”文本生成用户的输入文本(“How are you?”) - AI生成的回复文本(“I’m fine, thank you.”)语音转文字一个音频片段 — 音频的文字转写Transformer出现之前这些序列转导模型主要是复杂的卷积神经网络CNN和循环神经网络RNN。由此我们知道主流序列转导模型的结构发展如下Transformer之前基于RNN/CNN使用编码器-解码器结构使用注意力机制增强Transformer结构的创新:完全摒弃RNN/CNN(仍然使用编码器-解码器构)完全基于注意力机制为了更好的理解Transformer让我们先来看一些以往的模型结构以及他们的不足吧。1.1 前馈神经网络 Feedforward Neural NetworkFNN在学习深度学习的时候FNN是大家接触到的最基本的神经网络X为输入Y为输出W和V分别为对应层的权重矩阵具体细节这里不过多说明了主要想探讨一下为什么FNN就不适合做序列转导任务呢让我们看一个例子输入水是有毒的步骤一分词Tokenization[“水”, “是”, “有毒”, “的”]步骤二词向量表示Embedding“水” → [0.2, -0.1, 0.3, 0.0]“是” → [0.0, 0.5, -0.2, 0.1]“有毒” → [0.9, -0.3, 0.4, 0.2]“的” → [0.1, 0.0, 0.0, 0.1]步骤三合并词向量平均或拼接平均将上面四个向量对应位置相加后取平均值最有得到一个新的1*4的向量这种方式完全丢掉了词语的顺序。拼接将上面四个向量收尾相连变为一个1 * 16的向量。FNN 需要固定维度的输入对不同长度的句子处理效率低下,比如上图中的FNN接受的收入是x1~x4一个四位的向量而现在我们是一个1*16的向量它是处理不了的除非我们将FNN的输入变为16维或更高维度大于16的位置补0但这样的处理方式如果想要应对非常长的句子我们就得事先将FNN的属于定义的维度非常高但是平时更常见的场景是处理短句后面补很多0处理效率低下。仍然会将句子视作一个整体来处理无法理解真正的“谁先谁后”的关系。1.2 循环神经网络 Recurrent Neural Network (RNN)由于前馈神经神经网络FNN在处理时序转导模型时存在以上的一些不足因此后续诞生了循环神经网络 Recurrent Neural Network (RNN) 。首先我们看一下RNN解决了什么问题能够建模词序RNN 是按时间顺序token 顺序逐个处理输入的能够建模上下文依赖RNN 是逐个喂入词语并且会有“记忆”机制支持不定长输入不再需要 FNN 那种固定长度的输入格式句子多长都行RNN相对CNN在处理时序信息时有以上三个优势那RNN是如何达到以上效果的呢可以看到RNN其实也并不复杂不过是在FNN的基础上加了h位置的一个圈循环。输入X XX不再表示为x n x_nxn​而是表示为x t x_txt​因为RNN的输入是时序的每次输入一个时序值x t x_txt​: t时间步的输入h t h_tht​: t时间步的状态h t g ( W x t U h t − 1 ) h_t g(Wx_t Uh_{t-1})ht​g(Wxt​Uht−1​)y t y_tyt​: t时间步的输出也可能没有y t g ( V ∗ h t ) y_t g(V*h_t)yt​g(V∗ht​)U , V , W U, V, WU,V,W: 权重矩阵h t h_tht​中的g gg激活函数如R e L U s i g m o i d ReLUsigmoidReLUsigmoid用于引入非线性增强表达能力同时限制数值范围避免梯度爆炸/消失。y t y_tyt​中的g gg视任务而定比如如果是分类问题可能是s o f t m a x softmaxsoftmax函数用于把输出转成概率分布。对于“我爱水课”这句话【我】将作为第一个token即x 1 x_1x1​进行输入处理完成后【爱】作为第二个token进行输入这便是时序输入。让我们将其过程进行展开h 0 h_0h0​是我们初始化的参数x 1 x_1x1​是t 1 t_1t1​时刻的输入【我】进行运算后得到了第一个输出y 1 y_1y1​,而中间状态h 1 h_1h1​,将参与下一个时刻的输入计算即h 1 g ( W ∗ x 1 U ∗ h 0 ) y 1 g ( V ∗ h 1 ) h 2 g ( W ∗ x 2 U ∗ h 1 ) y 2 g ( V ∗ h 2 ) . . . h_1 g(W * x_1 U *h_0) \\ y_1 g(V*h_1) \\ h_2 g(W * x_2 U *h_1) \\ y_2 g(V*h_2) \\ ...h1​g(W∗x1​U∗h0​)y1​g(V∗h1​)h2​g(W∗x2​U∗h1​)y2​g(V∗h2​)...从上图以及公式可以看到一下信息对于一个时刻的输入会有两个输出一个是y t y_tyt​对于时刻t tt输入的输出一个是h t h_tht​,是对于t tt时刻输入的中间态会参与后续时刻的计算。h 1 h_1h1​不仅参与了y 1 y_1y1​的计算也参与了h 2 h_2h2​的计算也就是前一个时刻计算的中间状态会参与下一个时刻的计算正式由于这个依赖后续时刻的输入因为依赖了前置时刻输入的中间态h t h_tht​从而导致了无法并行计算。为什么W U V WUVWUV矩阵在上面公式中不用表示为W t , U t , V t W_t,U_t,V_tWt​,Ut​,Vt​比如W 1 , W 2 W_1,W_2W1​,W2​等因为上图是将多个时序计算进行了展开方便理解从而让我们以为有多个W U V WUVWUV的错觉但实际上对于每一个时序的计算WUV矩阵都是一模一样的就是在循环针对每个时序输入进行计算所以不用带下标区分。至此我们知道了RNN可以解决FNN在处理时序任务时的一些瓶颈问题能记住输入的顺序后续输入能知道前置时刻输入的上下文但是RNN也有自身的一些局限性输入输出不等长时怎么办无法并行计算训练效率低1.3 编码器 - 解码器结构 Encoder and Decoder可以简单的理解下图将RNN的上半部分和下半部分分开做Encoder : RNN的下半部分将所有时序输入进行编码计算出最后一个中间状态h 4 h_4h4​也就是上下文C他包含了整个时序输入的上下文信息。Decoder: RNN的上半部分, 对上下文C进行解码输出操作注意前一个输出(如下图I以及前一个输出的中间态如下图S1都会作为下一个时序的输入参与计算。下图中的S0就是C即C作为了解码器的原始输入。编码器的输出C上下文向量context vector它是对整个输入序列的语义编码是一个固定长度的向量涵盖了整个输入文本的语义信息同时也隐式的包含了输入序列的顺序位置信息因为是一个一个时序输入循环计算得来的C输入时序不一样得到的C会不一样的。最简单的编码方式C 最后一个时间步的隐藏状态输出(h4)它将作为 Decoder 的输入用于生成目标序列。由于解码到靠后为止的时候相关信息可能已经被稀释的差不多了会丢失一些较早信息的特征情况所以我们又想到了一种方式给每一个解码器的时间步再输入一次上下文C如下图但是这种方式也有缺陷所有时间步的输入在计算当前时刻输出时被同等对待忽略了不同时间步对当前时刻输出的重要性可能存在的差异。由此引出了注意力机制。1.4 传统注意力机制注意力机制解决的问题解决模型处理长序列时的“遗忘”问题随着序列长度的增长远距离依赖信息在传递过程中易被稀释导致模型对长距离依赖关系的建模能力减弱。解决不同时间步输入对当前时刻输出的“重要性”问题所有时间步的输入在计算当前时刻输出时被同等对待忽略了不同时间步对当前时刻输出的重要性可能存在的差异。比如下图我们将上下文C又作为了解码器每个时序解码时的一个输入而我们知道C是h 4 h_4h4​h 4 h_4h4​计算的时候肯定是受离它进的一些时序输入token比较大如x 3 x_3x3​)而离它更远的token因为进行了多层的计算和稀释可能已经被稀释的差不多了。那么我们希望解码器的每个时间步可以关注到上下文C中不同的重点因此这个C对于解码器的每个时间步不能再是相同的了。此时就因为了基础的注意力机制注意这个和Transformer中的自注意力机制QKV含义是不同的不过他们两者的思想是一致的期望当前token可以关注到上下文中的不同重点传统注意力机制基本都是与RNN一起使用将RNN的时序输入对应的输出进行加权求和得到新的输出步骤如下一个输入序列记为X XX它由t tt个元素组成(t tt个时序输入分别表示为x ( 1 ) x^{(1)}x(1)到x ( t ) x^{(t)}x(t)。注意力分数w ww词元x ( n ) x^{(n)}x(n)与其他词元的点积而得点积值越大则这两个词元相似度越高即对齐度越高嵌入化词元序列之间的注意力权重α αα 注意力分数w ww的归一化注意力分数归一化s o f t m a x softmaxsoftmax后得到每一个词元的注意力权重α αα即获得总和为1的注意力权重最后上下文向量Z ( n ) S u m Z(n)SumZ(n)Sum(所有x ( i ) x^{(i)}x(i)的注意力权重α αα* 嵌入化词元本身的矩阵)即注意力权重和词元嵌入矩阵相乘后再求和。位移词元下标i ii循环以上步骤将所有词元的注意力权重都计算出来。图中是列举i 2 i2i2的此词元注意力上下文向量。注意力分数w 词元 x ( 2 ) w词元x^{(2)}w词元x(2)与其他词元包括自身的点积而得两个向量点击得到一个数值标量所以这里与每个词元点积将得到t个标量可以组成一个维度为t的向量点积值越大则这两个词元相似度越高即对齐度越高注意力权重 α 注意力分数 w 的归一化 注意力权重 α 注意力分数w的归一化注意力权重α注意力分数w的归一化第一步中的t tt维向量经过s o f t m a x softmaxsoftmax归一化得到每个词元对于词元x ( 2 ) x^{(2)}x(2)的注意力权重a 21 , a 22 , . . . . a 2 t a_{21},a_{22},....a_{2t}a21​,a22​,....a2t​他们的和为1最后上下文向量Z ( 2 ) x ( 1 ) ∗ a 21 x ( 2 ) ∗ a 22 . . . x ( t ) ∗ a 2 t Z(2) x^{(1)}*a_{21} x^{(2)}*a_{22} ... x^(t) *a_{2t}Z(2)x(1)∗a21​x(2)∗a22​...x(t)∗a2t​。上面仅以C 2 C_2C2​进行了举例实际通过以上步骤我们就可以得到所有的C i C_iCi​从而解码器将变为如下形式每个解码时间步不再关注同一个整体上下文C CC而是关注注意力算出来的C i C_iCi​到此为止我们解决了容易遗忘远距离时候输入的问题那么还有什么问题没有解决呢并行计算能力RNN 的时序依赖特性导致无法充分利用 GPU 并行能力(即RNN模型中一句话的每个词是按时间顺序输入的前一个词计算完之后将其隐藏状态继续和下一个输入的词计算如此循环因此得名循环神经网络而Transformer是一次性输入的一句话Transformer 的并行处理能力使其能够高效利用现代硬件资源。在进入Transformer前我们先来小结一下RNN能够建模词序(因为是时序输入能够建模上下文依赖前面时序的隐藏状态会作为后面时序输入的一部分支持不定长输入(因为是时序输入编码器-解码器支持输入输出不等长编码器将所有输入信息编码为一个上下文向量解码器对齐进行解码输出注意力机制解决处理长序列时的“遗忘”问题解决不同时间步输入对当前时刻输出的“重要性”问题Transformer解决串行化计算问题二、TransformerTransformer 的自注意力机制是“全局互相关注”完全摆脱了序列结构支持并行是最底层的范式改变。【Transformer】二、Transformer架构原理通识

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询