从AI原理到模型演进及代码实践 的学习二

参考:全面解析:从AI原理到模型演进及代码实践-CSDN博客

训练过程
Transformer仅一个Encoder模块就可以工作,可以处理信息抽取、识别、主体识别等任务,比如 BERT(Bidirectional Encoder Representations from Transformers)是只使用了Encoder,可以从给定的文本段落中找到并提取出回答问题的文本片段,目标是识别或检索信息,而不是生成新的文本序列。

实际上,只通过Encoder直接连接一个全连接层去求 f(x) 也不是不可以,但不连接其他模块性能会差很多,同时也没有办法实现并行训练(Teacher Forcing方式),所以又设计了Decoder模块,这两种模块的组合可以实现下面的场景:

  • 文本分类(仅使用Encoder模块),label=f(tokens)

  • 下一个token预测(仅使用Decoder模块),next_token=f(token)。比如给定一些词,做出下一个词的预测,而且是逐字向后推测

  • 文本翻译(Encoder+Decoder模块),中文=f(英文)


下面从观察训练过程了解Decoder的构成。
整个训练过程还是求f8d7ad3ea19561a813298e97c1fcb746.png,即输入"LL、M、with、ban、z、ang"(此时的输入相比Encoder已经包含了token之间的相互关注信息),调整参数计算出结果和"大模型、与、半臧"比较,loss收敛后结束。

第一个是在训练时词序引入了,翻译是以“大”、“大模型”、“大模型与”、“大模型与半臧”这样的顺序进行输出的,这样token之间的注意力加上词序的训练,在翻译(预测)场景会更贴合上下文场景,变得准确。

但是在技术上,引入词序会导致训练任务必须得到前一个任务的输出结果做输入进行串行,无法并行执行,所以transformer引入mask来解决这个问题,具体是把本来串行的任务,通过直接将完整的预期结果按词序做了mask覆盖,分成多个可以并行执行的任务。

mask的主要实现就是对样本输入做了右上三角形的掩码(覆盖了一个非常小的数,可以让softmax归一后趋0),在做Decoder的QKV的时候忽略了。

任务并行后,同时任务也变成了“Teacher Forcing”方式,可以让loss收敛更快。

在机器学习和深度学习领域,“loss收敛”是指损失函数(loss function)的值随着训练过程的进行逐渐减少并趋于稳定。损失函数是用来量化模型预测值与真实目标值之间差异的一个指标,训练模型的目标通常是最小化这个损失函数。

收敛的过程

  1. 初始阶段:刚开始训练时,由于模型参数是随机初始化的,所以模型对数据的预测能力较差,损失值通常较高。
  2. 下降阶段:通过反向传播算法调整模型参数,使得每次迭代后损失函数的值逐渐减小。
  3. 接近最小值:随着训练的深入,损失函数的值越来越接近一个最小值(局部或全局)。当损失值的变化幅度变得非常小,几乎不再变化时,我们说模型达到了收敛状态。
  4. 收敛状态:在理想情况下,这意味着模型已经学到了从输入到输出的最佳映射关系。然而,在实践中,完全达到理论上的最小值往往难以实现,更多的是找到一个足够好的近似解。

影响收敛的因素

  • 学习率:过高的学习率可能导致模型无法稳定地收敛;而过低的学习率则可能使训练过程极其缓慢。
  • 优化器的选择:不同的优化器(如SGD、Adam等)对于不同问题可能有不同的表现,选择合适的优化器可以加速收敛。
  • 正则化技术:L1/L2正则化、dropout等技术可以帮助防止过拟合,从而影响模型的收敛性。
  • 数据质量与数量:高质量且充足的数据有助于模型更准确地学习到数据中的模式,促进收敛。

确保模型正确收敛是训练过程中的关键步骤之一,它直接关系到最终模型性能的好坏。如果模型没有很好地收敛,可能需要调整上述提到的一些参数或策略。

 

Teacher Forcing是一种在训练序列模型(如循环神经网络RNN、长短时记忆网络LSTM或Transformer等)时使用的技术。它的主要目的是加速模型的训练过程并提高模型的稳定性。

基本概念

在序列预测任务中,模型的目标是基于输入序列生成一个输出序列。例如,在语言翻译任务中,输入是一段源语言句子,而输出是对应的目标语言句子。在训练过程中,通常的做法是让模型在每一步都预测下一个词,并使用真实的目标序列中的实际词作为下一步的输入。这就是所谓的Teacher Forcing。

具体来说,在没有使用Teacher Forcing的情况下,模型会使用其上一步预测出的词作为下一步的输入。而在使用Teacher Forcing时,无论模型上一步预测的结果是什么,都会将正确答案(即训练数据中的实际目标词)作为下一步的输入给到模型。这样做的好处是可以使得训练过程更加稳定,因为模型每次都能接收到正确的输入信息,从而有助于更快地学习到正确的模式。

优点与缺点

优点:

  • 加速收敛:由于模型总是接收正确的前序输入,因此可以更快速地学习到正确的输出。
  • 提升稳定性:减少因错误累积导致的偏差,尤其是在早期训练阶段,这有助于提高训练过程的稳定性。

缺点:

  • 暴露偏差(Exposure Bias):在训练期间,模型习惯于依赖真实的前序单词,但在推理(inference)阶段,它必须基于自己之前的预测进行操作。这种差异可能导致模型在处理未见过的数据时表现不佳。
  • 缺乏鲁棒性:长期依赖Teacher Forcing可能会使模型变得不够健壮,因为它没有机会学会如何从自身的错误中恢复。

为了解决这些问题,一些方法如Scheduled Sampling被提出,这种方法在训练过程中逐步减少Teacher Forcing的比例,使得模型能够逐渐适应在推理时遇到的情况。通过这种方式,可以在一定程度上缓解暴露偏差的问题,同时保留Teacher Forcing带来的训练效率和稳定性的优势。


 

RNN中的Teacher Forcing

在RNN中,如果没有Teacher Forcing,模型会基于它之前预测出的词来预测下一个词。这意味着如果模型在一个时间步骤上做出了错误的预测,这个错误可能会“传播”到后续的时间步骤,导致误差累积,使得loss难以收敛。例如,在你的例子中,“大”->["模型"(90%)、“小”(4%)],如果模型错误地选择了“小”,那么接下来的预测可能会越来越偏离正确路径。

  • 采用Teacher Forcing后,即使模型预测出了“小”,在下一个时间步骤中,我们仍然给模型提供正确的词(即应该跟随“大”的那个正确词),这样可以避免因为早期的错误预测而导致后续预测完全偏离轨道的问题。

Transformer中的Teacher Forcing

虽然Transformer架构不同于RNN系列模型(因为它不依赖于序列顺序进行计算,允许并行化处理),但在训练阶段,Teacher Forcing的概念同样适用。

  • 在训练过程中,尽管Transformer能够并行处理整个token序列,但为了模拟推理时的情况(即每次只能根据已有的信息预测下一个词),我们会对每个位置的token进行mask操作,隐藏未来的信息。这确保了模型在训练期间只基于前面的上下文进行预测。
  • Teacher Forcing在Transformer中的应用就是在这个masked自注意力机制的基础上,对于每个位置,除了使用真实的前序tokens作为输入外,还直接使用目标序列中的实际token来预测当前位置的输出。这与RNN中Teacher Forcing的思想是一致的:即在训练时总是提供正确的前序信息,以帮助模型学习更准确的表示。

在transformer中,完整token序列参与训练,但屏蔽每个token后面信息,形成可并行执行任务,每个token序列推测过程无视其他任务推测结果,采用训练样本值进行前序context推测下个token。

 

另外一个特别点是Decoder含有两层注意力,第一层是和Encoder一样的实现(自注意力),接受来自训练文本的真实输出,形成token的相互关注信息,第二层注意力QKV中Q来自上一个Decoder,KV并非由上一层Decoder结果计算来的,而是来自Encoder的KV结果(非同源,非自注意力),这样的设计是将来自Encoder的训练文本输入和训练真实输出(按词序mask)的相互关注都整合在一起预测被mask的值。

论文中Encoder和Decoder是可以堆叠的,即输入通过堆叠n层Encoder(论文中使用了2/4/6/8层,只有6层效果最好,但实际在只有一行训练样本场景下,n_layers=1是效果最好的)处理后在传递到n层Deocder继续处理,同时每层Deocder的KV都来自最后一层的Encoder的输出。

深度学习模型中Encoder-Decoder架构的一种实现方式,特别是在处理序列到序列(sequence-to-sequence, seq2seq)任务时。这种架构通常用于自然语言处理任务,比如机器翻译、文本摘要等。下面是对这段话的详细解释:

Encoder-Decoder架构

  • Encoder:输入序列通过堆叠的多层Encoder进行编码。每层Encoder都会对输入数据进行抽象和转换,捕捉输入的不同层次的特征表示。在你的例子中,论文尝试了不同层数的Encoder(2层、4层、6层、8层),发现6层的效果最佳。

  • Decoder:编码后的信息被传递给Decoder,Decoder同样由若干层组成(n层)。Decoder的任务是基于Encoder生成的高级特征表示来生成目标序列。

关键点解析

  1. 堆叠的层数(n_layers)

    • 在实验中,不同的Encoder和Decoder层数(如2层、4层、6层、8层)被用来测试效果。结果显示,在一般情况下,使用6层Encoder和Decoder的模型表现最好。然而,在特定场景下(例如只有一行训练样本的情况下),仅使用单层(n_layers=1)的模型反而效果最佳。这表明模型复杂度需要根据具体应用场景和数据集大小进行调整。
  2. KV来自最后一层Encoder

    • 在Decoder中,每一层都会使用“K(Key)”和“V(Value)”这两个概念,它们是从Encoder的最后一层输出得到的。这是指在注意力机制(Attention Mechanism)中,Decoder会参考Encoder最后一层产生的隐藏状态来计算注意力权重。这样做可以让Decoder更好地关注到输入序列中的重要部分,从而生成更准确的输出序列。
  3. 应用情景考虑

    • 当处理的数据集非常简单或规模很小时(如只有一个训练样本的情况),过于复杂的模型可能会导致过拟合。因此,在这样的场景下,简化模型(例如减少为单层)可以避免模型过度学习训练数据的细节,提高泛化能力。

整个训练过程如下:

1. 训练文本(输入/输出)['LLM with banzang', '大模型和半臧']的输入['LLM with banzang']进行分词和embedding

2. Encoder计算训练文本输入X的Self-AttentionScore,形成输入X的token间关注信息带入Decoder

3. 训练文本(输入/输出)['LLM with banzang', '大模型和半臧']的输出['大模型和半臧']进行分词和embedding

4. 第一层Decoder对训练文本输出X'进行右上三角形MASK遮盖操作后进行Self-AttentionScore,形成输出X'从左往右词序的token间关注信息(即只能了解过去信息,无法提前知道未来词序,因为要预测),事实上形成了训练输出长度为m()的并行任务

5. 第二层Decoder将第一层Deocder输出的结果做为输入Q,使用Encoder的KV参数,拼接训练输入和输出再次做AttentionScore

6. 预测下一个结果和训练输出对比后,反向传播调整各层参数,直到Loss收敛到预期结果。

小结一下流程:

 预测过程

相比训练过程,切换到预测模式后,原本训练的并行输入由最后一个Decoder输出取代,然后开始串行循环,直至<EOS>标记结束。就和RNN一样,逐一预测到底,例如:

LL -> LLM

LLM -> LLM with

LLM with -> LLM with ban

LLM with ban -> LLM with banz

LLM with banz -> LLM with banzang

实际上预测下一个token是按照softmax后概率挑选的,在串行循环时,选取不同概率的词会形成不同的预测分支,例如:


预测结果因概率挑选以及前馈层的非线性激活函数,将整个预测变的更加丰富,有点像基因突变,可能未来会产生艺术创造的价值,当前基于transfomer的各个模型都有会有多个预测输出分支待采用。
 输出的处理
当输入X被Encoder和Decoder*2处理完后,形成token_size*embedding_size大小的矩阵,每行代表着一个token,每列是这个token在不同维度的某个magic number,最后再经过一个全连接层(Linear Layer)
对输入矩阵做线形变化成token_size*logits_size,同时引入训练参数做拟合,再经过一个softmax归一,拟合每个token在字典表中最高概率的index,拿index还原最终token。

在深度学习中,线性层(Linear Layer),也常被称为全连接层(Fully Connected Layer)或密集层(Dense Layer),是神经网络的基本构建块之一。线性层对输入数据执行线性变换,其操作可以简单理解为矩阵乘法加上一个偏置项。

线性层的工作原理
给定一个输入向量 x,线性层通过以下公式计算输出:y=Wx+b

其中:
W 是权重矩阵,
x 是输入向量,
b 是偏置向量,
y 是输出向量。
特点与用途
线性变换:线性层的主要作用是对输入进行线性组合,它不改变输入的维度结构,但可以通过调整权重和偏置来学习输入数据中的模式。
特征映射:在线性层中,每个输出神经元都连接到所有输入神经元,这种全连接方式允许模型学习输入之间的复杂关系,并将这些关系映射到新的特征空间中。
灵活性:线性层通常与其他类型的层(如卷积层、循环层等)结合使用,以构建更复杂的模型。例如,在卷积神经网络(CNN)中,线性层经常被用作最后几层,用于将卷积层提取的特征映射到分类器或回归器的输出上。
激活函数:单独的线性层只能表示线性关系,因此通常会在其后添加非线性激活函数(如ReLU、Sigmoid、Tanh等),使得整个模型能够学习到输入数据中的非线性模式。
应用场景
分类任务:在图像分类、文本分类等任务中,线性层常用于网络的最后一层,用来产生最终的分类得分。
回归任务:在预测连续值的任务中,线性层可以直接输出预测结果。
序列建模:虽然RNN、LSTM、GRU等更适合处理序列数据,但在某些情况下,线性层也可用于处理序列数据的特定部分,比如在Transformer架构中,线性层用于计算注意力权重
总之,线性层是一个非常基础且重要的组件,几乎所有的深度学习模型都会包含至少一层线性层。它们对于将高维数据映射到低维空间或者相反的过程特别有用。

至此Transformer整个工作流程全部结束

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用EXCEL进行XXE攻击

0X00 前言 CTF 选手都清楚我们像 word 文档格式改成 zip 格式后&#xff0c;再解压缩可以发现其中多数是描述工作簿数据、元数据、文档信息的 XML 文件。实际上&#xff0c;与所有 post-Office 2007 文件格式一样&#xff0c;现代 Excel 文件实际上只是 XML 文档的 zip 文件。…

在Mac mini上实现本地话部署AI和知识库

在Mac mini上实现本地话部署AI和知识库 硬件要求&#xff1a;大模型AI&#xff0c;也叫LLM&#xff0c;需要硬件支持&#xff0c;常见的方式有2种&#xff1a;一种是采用英伟达之类支持CUDA库的GPU芯片或者专用AI芯片&#xff1b;第二种是采用苹果M系列芯片架构的支持统一内存架…

鸿蒙UI(ArkUI-方舟UI框架)-开发布局

文章目录 开发布局1、布局概述1&#xff09;布局结构2&#xff09;布局元素组成3&#xff09;如何选择布局4&#xff09;布局位置5&#xff09;对子元素的约束 2、构建布局1&#xff09;线性布局 (Row/Column)概述布局子元素在排列方向上的间距布局子元素在交叉轴上的对齐方式(…

指针的进阶

指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接触过了&#xff0c;我们知道了指针的概念&#xff1a; 1. 指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 2. 指针的大小是固定的4/8个字节&#xff08;32位平台/64位平台&#xff0…

B站评论系统的多级存储架构

1. 背景 评论是 B站生态的重要组成部分&#xff0c;涵盖了 UP 主与用户的互动、平台内容的推荐与优化、社区文化建设以及用户情感满足。B站的评论区不仅是用户互动的核心场所&#xff0c;也是平台运营和用户粘性的关键因素之一&#xff0c;尤其是在与弹幕结合的情况下&#xf…

若依分页插件失效问题

若依对数据二次处理导致查询total只有十条的问题处理办法_若依分页查询total-CSDN博客

css盒子水平垂直居中

目录 1采用flex弹性布局&#xff1a; 2子绝父相margin&#xff1a;负值&#xff1a; 3.子绝父相margin:auto&#xff1a; 4子绝父相transform&#xff1a; 5通过伪元素 6table布局 7grid弹性布局 文字 水平垂直居中链接&#xff1a;文字水平垂直居中-CSDN博客 以下为盒子…

Golang Gin系列-3:Gin Framework的项目结构

在Gin教程的第3篇&#xff0c;我们将讨论如何设置你的项目。这不仅仅是把文件扔得到处都是&#xff0c;而是要对所有东西的位置做出明智的选择。相信我&#xff0c;这些东西很重要。如果你做得对&#xff0c;你的项目会更容易处理。当你以后不再为了找东西或添加新功能而绞尽脑…

03JavaWeb——Ajax-Vue-Element(项目实战)

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xf…

【无法下载github文件】虚拟机下ubuntu无法拉取github文件

修改hosts来进行解决。 步骤一&#xff1a;打开hosts文件 sudo vim /etc/hosts步骤二&#xff1a;查询 github.com的ip地址 https://sites.ipaddress.com/github.com/#ipinfo将github.com的ip地址添加到hosts文件末尾&#xff0c;如下所示。 140.82.114.3 github.com步骤三…

【Idea启动项目报错NegativeArraySizeException】

项目场景&#xff1a; Idea启动项目报错&#xff08;打包不报错&#xff09;&#xff0c;项目在服务器部署运行没有问题&#xff0c;尝试了重启idea、重启电脑、maven clean/install 都不行 maven-resources-production:sample: java.lang.NegativeArraySizeException: -5833…

【 MySQL 学习2】常用命令

文章目录 一、基础命令1.1、登录1.2 、退出1.3、查看数据库中有哪些数据库1.4 、选择使用的数据库1.5、创建数据库1.6 查看哪个数据库下有哪些表 二、SQL语句的分类2.1 DQL 数据查询语言2.2 DML 数据操作语言2.3 DDL 数据定义语言2.4 TCL 事物控制语言2.5 DCL 数据控制语言 三、…

JVM直击重点

JVM直击重点 JVM内存模型 JVM中类加载器分类与核心功能 Java里有如下几种类加载器 引导类加载器&#xff1a;负责加载支撑JVM运行的位于JRE的lib目录下的核心类库&#xff0c;比如rt.jar、charsets.jar等 扩展类加载器&#xff1a;负责加载支撑JVM运行的位于JRE的lib目录下的e…

图数据库 | 18、高可用分布式设计(中)

上文我们聊了在设计高性能、高可用图数据库的时候&#xff0c;从单实例、单节点出发&#xff0c;一般有3种架构演进选项&#xff1a;主备高可用&#xff0c;今天我们具体讲讲分布式共识&#xff0c;以及大规模水平分布式。 主备高可用、分布式共识、大规模水平分布式&#xff…

【常见BUG】Spring Boot 和 Springfox(Swagger)版本兼容问题

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

关于vite+vue3+ts项目中env.d.ts 文件详解

env.d.ts 文件是 Vite 项目中用于定义全局类型声明的 TypeScript 文件。它帮助开发者向 TypeScript提供全局的类型提示&#xff0c;特别是在使用一些特定于 Vite 的功能时&#xff08;如 import.meta.env&#xff09;。以下是详细讲解及代码示例 文章目录 **1. env.d.ts 文件的…

数字化时代,传统代理模式的变革之路

在数字化飞速发展的今天&#xff0c;线上线下融合&#xff08;O2O&#xff09;成了商业领域的大趋势。这股潮流&#xff0c;正猛烈冲击着传统代理模式&#xff0c;给它带来了新的改变。 咱们先看看线上线下融合现在啥情况。线上渠道那是越来越多&#xff0c;企业纷纷在电商平台…

接口测试自动化实战(超详细的)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言 自从看到阿里云性能测试 PTS 接口测试开启免费公测&#xff0c;就想着跟大家分享交流一下如何实现高效的接口测试为出发点&#xff0c;本文包含了我在接口测…

意图颠覆电影行业的视频生成模型:Runway的Gen系列

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Runway开发的视频生成模型Gen系列&#xff0c;包括Gen-1、Gen-2和Gen3 Alpha等&#xff0c;这些模型每次发布都震惊AI圈&#xff0c;荣获多个视频生成的…

ant design vue的级联选择器cascader的悬浮层样式怎么修改

平时想要修改组件内定样式会使用穿透deep和&#xff01;important调优先级&#xff0c;但是在这里都不行&#xff0c;样式都不能改变 后来尝试出来是因为加了scoped&#xff0c;样式不起作用&#xff0c;但是不能直接去掉scoped&#xff0c;别的样式会受到影响&#xff0c;单独…