为什么看了那么多资料还是无法理解Transformer啊???

图片

要理解和熟悉一个新的技术/新模型,比较好的方式是通过以下框架结构来熟悉:

为什么:一个新模型的诞生,一般是解决了现有的模型不能解决的一些问题。因此需了解该技术提出的背景和创新点。

是什么:熟悉这个模型的内容和架构、训练过程等

怎么用:了解模型的应用场景,将模型为我们所用。

接下来就从这三步骤来聊聊Transformer

01、为什么

Transformer最早是Google在2017年的Attention Is Al You Need论文中提出,用于解决解决传统的序列到序列(sequence-to-sequence,Seq2Seq)模型在处理可变长序列时遇到的问题。

图片

在传统的序列建模方法中,如循环神经网络(RNN)和卷积神经网络(CNN),在处理长序列均存在限制:RNN在处理长序列时容易出现梯度消失或梯度爆炸的问题,模型难以捕捉到长距离的依赖关系,不能并行计算 ;而CNN卷积操作通常要求输入具有固定的尺寸,在处理可变长序列时,为了使序列具有相同的长度,要对较短序列进行填充,导致计算效率低下。

而Transformer通过自注意力机制(self-attention)来解决这些问题。

自注意力机制(self-attention)

自注意力机制是一种用于处理序列数据的机制,它能够在序列中的每个位置上计算该位置与其他位置之间的关联程度,并根据这些关联程度来加权组合序列中的信息。

图片

如图所示,a为输入的序列,中间的方框是self attention操作,最终输出的b为依据a每个位置与其它位置关联程度加权后输出的序列。

从细节来说,需要理解几个概念:

  • 查询(Query):查询是你想要了解的信息或者你想要从文本中提取的特征。它类似于你对文本中的某个词语提出的问题或者你想要了解的内容。
  • 键(Key):键是文本中每个词语的表示。它类似于每个词语的标识符或者关键信息,用于帮助计算查询与其他词语之间的关联程度。
  • 值 (Value):值是与每个词语相关的具体信息或特征。类似于每个词语的具体含义或者特征向量 。

在自注意力机制中,具体步骤是:

Step1:从输入值a乘以矩阵Wq、Wk和Wv(这三个矩阵 是模型参数,需要通过训练数据来学习)获取查询(Q)、键(K)、值(V);

Step2:通过计算查询(Q)与键(K)之间的点积,来衡量查询与其他词语之间的关联程度,然后通过对这些关联程度进行归一化处理(一般采用softmax归一化),得到每个词语的注意力权重。

Step3:最后,根据这些注意力权重,对每个词语的值(V)进行加权求和,得到一个新的表示该表示会更加关注与查询相关的信息。

图片

如图所示,α1.1是q1和k1点积计算并归一化后得到的关联程度,以此类推,最后再用关联程度与所有v进行加权求和,就能获得到与q1关联最大的信息b1,而其它的b2、b3、b4也是同样的计算方式。

最终,从矩阵的角度运算的角度,整个过程可以被表示为:

图片

此外,这里没有考虑到输入的位置信息,因为对每个位置的输入操作都是一样的。而有时,序列的位置信息也很重要,因此,还需对输入使用位置编码(Positional Encoding),将位置信息给到输入。

由于sin和cos函数包含位置信息,Transformer中,使用了sin函数和cos函数进行了位置编码:

图片

计算得到位置向量后,将位置向量与输入a相加后再计算对应的Q、K、V,这样就考虑了输入的位置。

图片

我们可以将Self Attention层的输出给全连接神经网络(Fully-Connected Network),学习更多的信息,最终的结构可以如下:

图片

可以看出,自注意力机制通过直接建模词与词之间的关联程度,可以更好地捕捉到远距离的依赖关系;它可以进行并行计算,在处理大规模数据时具有较高的计算效率。

多头自注意力机制(Multi-head self attention)

多头注意力机制是一种在自注意力机制基础上的扩展,它允许模型同时关注不同的表示子空间以更好地捕捉输入序列中的不同关系和特征。

在传统的自注意力机制中,你只能使用一组查询(Q)、键(K)和值(V)来计算注意力权重,但是,在多头注意力机制中,你可以使用多组不同的Q、K和V来进行计算。

图片

每个注意力头都有自己独立的一组Q、K和V,它们通过独立的线性变换来生成。这样,每个注意力头可以关注文本中不同的方面和特征,从而提取更丰富的信息。最后,多个注意力头的结果会被拼接在一起,并通过另一个线性变换进行整合,得到最终的输出。

通过使用多头注意力机制,模型可以同时关注不同的表示子空间,从而捕捉到输入序列中更多的关系和特征。这种并行处理的方式可以提高模型的表达能力和泛化能力,使得模型更好地理解和处理复杂的输入数据。

02、是什么

以下是Transformer完整的架构,总体来看,它由**编码器(Encoder)解码器(Decoder)**两部分组成。

图片

编码器(Encoder)

左边是编码器部分,主要作用是将输入数据编码成计算机能理解的高维抽象表示。

它的结构也就是前面一节我们所说的多头注意力机制+ 全连接神经网络的结构。此外,这里用了残差连接(Residual connection)的方式,将输入和多头注意力层或全连接神经网络的输出相加,再传递给下一层,避免梯度递减的问题。

解码器(Decoder)

右边是解码器的部分,主要作用是利用高维表示信息生成目标序列。它的结构大致与编码器相同不同的有两点:

第一,采用了掩码多头自注意力(Masked-Multi-head self attention)即在计算注意力得分时,模型只能关注生成内容的当前位置之前的信息,避免未来信息的泄漏。

比如,这里计算输出b2时,就只使用了a1、a2两个位置的注意力得分进行加权

图片

采用这种方式的原因是,模型需要按照顺序逐步生成序列(a1、a2),因此不能提前获取到未来a3、a4的信息。

第二,中间部分,利用了Encoder的输出结果计算交叉注意力(CrossAttention)。同之前的注意力机制类似,Cross Attention通过计算解码器当前位置(Q)的表示与编码器上下文表示(K)之间的注意力权重,将编码器上下文表示(V)加权,然后将该加权表示与解码器当前位置的表示进行融合。

训练过程

Transformer的训练过程和深度神经网络模型类似。以中文翻译成英文的翻译任务为例:

数据准备:首先,需要准备训练数据集,包括大量中文序列和人工标注的正确英文序列。

输入表示:将中文源语言句子和英语句子进行编码,并进行适当的标记和嵌入处理。常见的编码方式是使用词嵌入(Word Embedding)将每个词转换为向量表示,并添加位置编码(PositionaEncoding)以保留序列的顺序信息。注意在训练时,Decoder的输入是人工标注为正确的英文序列,而不是Decoder自己生成的英文序列。

确定模型架构:构建Transformer模型 的架构,包括编码器和解码器层数、注意力机制和前馈神经网络层数等等

训练模型:定义适当的损失函数 来衡量模型在训练过程中的性能。对于机器翻译任务,常用的损失函数是交叉熵损失函数,用于比较模型生成的英语句子与正确的英语句子之间的差异。训练过程中,通过反向传播算法和优化器(如Adam优化器)来更新模型的参数(如全连接神经网络的参数、注意力机制中的Wk、Wg、W参数),以最小化损失函数。通常会使用小批量(mini-batch)的方式进行训练,即将训练数据划分为多个批次,每个批次包含一定数量的样本。

验证和调优:使用验证数据集评估模型Q的性能,进一步进行超参数调整、模型结构调整等操作,提升模型的性能。

推理和应用:训练完成后,使用已训练好的模型将中文句子翻译成英文句子

注意,Transformer所需的训练数据量通常在数百万到数十亿个tokens(输入向量)之间,因此个人训练是很困难的,最好直接使用预训练好的模型。

03、为什么

目前Transformer被广泛使用在机器翻译 、文本生成、语义理解、语音识别、对话系统等多个领域。尤其现在比较火的GPT、New Binga等大语言模型都是基于Transformer架构进行改进和研发的。

不是所有人都需要去细致研究Transformer,更多的情况下我们只是希望能便捷的使用预训练好的模型来帮助我们提高效率,而现在基于Transformer的最新的技术便是大模型。

给大家推荐这个项目,它是基于PyTorch、JAX、TensorFlow的自然语言处理模型库,提供了数千个预训练模型,支持多种任务,包括文本分类、信息提取、问答、摘要、翻译、文本生成等。

图片

看到这里,最后再看原论文这张图,是不是能很好的理解了呢?

图片

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

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

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

相关文章

pip 配置缓存路径

在windows操作平台,默认情况,pip下使用的系统目录 C:\Users\用名名称\AppData\Local\pip C盘是系统盘,如果常常使用pip安装会占用大量的空间很快就满,这时候就有必要变更一下缓存保存路径了。 pip 配置缓存路径: Win…

10 -每台机器的进程平均运行时间(高频 SQL 50 题基础版)

10 - 每台机器的进程平均运行时间 -- sum(if(activity_type end,timestamp ,-timestamp )) -- 如果activity_type为“end”,值为timestamp,为“start” 为-timestamp,所有数相加end-start -- count(distinct process_id),获取同一机器有几个进行id -- r…

详解 Flink Table API 和 Flink SQL 之流处理中的表

一、关系型表和流处理表对比 关系型表/SQL流处理表处理的数据对象字段元组的有界集合字段元组的无限序列查询(Query)对数据的访问可以访问到完整的数据输入无法访问所有数据,必须持续“等待”流式输入查询终止条件生成固定大小的结果集后终止…

内网环境MySQL操作非正常耗时问题排查小结

写在文章开头 早起笔者进行数据库操作实验时,会习惯性通过内网虚拟机安装MySQL,在完成部署并进行操作过程中发现MySQL操作无论是连接还是操作都非常耗时,结合之前SSH连接慢大抵推测MySQL连接操作耗时也是卡在DNS反向解析上,遂以此…

探索 doc 和 docx 文件格式的区别

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

docker启动

1. 将docker文件上传到服务器 2. docker load < alims-load 将docker 文件加载为镜像 3. docker run -itd --name alims -p 5000:5000 ailims:0.9.2 启动镜像 4. 查看容器docker ps 5. 查看连接 6. 其他 docker常用命令

《AI企业级知识库》-rasa爆改中文版本-实战!

阿丹&#xff1a; 之前有同学反应分享的东西有点概念化&#xff0c;表示不看着代码无法更深刻能理解。那么今天直接上代码&#xff01;&#xff01;&#xff01; 有两种方式使用自己训练好的nlu 1、rasa与nul分开启动&#xff0c;就是在rasa中的配置中配置好目标对应的nlu的服…

私人云盘(自动云同步)

一、项目简介 模仿小米的云服务&#xff0c;实现一个通过TCP实现的私人云盘&#xff0c;因为能力有限&#xff0c;所以只实现自动云同步这一个功能&#xff0c;具体可以分为三个小功能&#xff0c;即保持云端和终端数据一致、实现文件的上传与下载以及手动同步 二、涉及到的知…

【每日刷题】Day62

【每日刷题】Day62 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 852. 山脉数组的峰顶索引 - 力扣&#xff08;LeetCode&#xff09; 2. 2806. 取整购买后的账户余额…

WWDC 2024及其AI功能的引入对中国用户和开发者的影响

WWDC&#xff08;Apple Worldwide Developers Conference&#xff09;是苹果公司一年一度的重要活动&#xff0c;吸引了全球开发者的关注。WWDC 2024引入了许多新技术和功能&#xff0c;尤其是AI功能的加入&#xff0c;引发了广泛讨论。本文将深入探讨中国开发者如何看待WWDC 2…

Prisma数据库ORM框架学习

初始化项目 中文网站 点击快速开始,点击创建sql项目,后面一步一步往后走 这个博主也挺全的,推荐下 可以看这个页面初始化项目跟我下面是一样的,这里用得是ts,我下面是js,不需要额外的配置了 1.vscode打开一个空文件夹 2.npm init -y 初始化package.json 3.安装相关依赖 …

JAVA中验证码工具类的封装

1. 方案一 Java内部方法生成&#xff0c;不需要其它依赖 样式如图所示&#xff1a; package com.hyh.ad.common.utils;import javax.imageio.ImageIO; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File;…

C语言 sizeof 和 strlen

目录 一、sizeof 和 strlen 的区别 a.sizeof b.strlen c.sizeof与strlen的区别 二、数组和指针笔试题解析(32位环境) a.一维数组( int a[ ] { 1 , 2 , 3 , 4 } ) b.字符数组 &#xff08;char arr[ ] {a , b , c , d , e , f }&#xff09; &#xff08; char arr[ …

Ubuntu系统调试分析工具

文章目录 一、火焰图一、下载 FlameGraph二、安装 iperf三、使用二、Lockdep1、内核开启 Lockdep 配置2、判断 Lockdep 开启是否成功一、火焰图 一、下载 FlameGraph git clone https://github.com/brendangregg/FlameGraph.gitFlameGraph 介绍:   基本思想是将程序的函数…

vue生成二维码中间自定义logo并截图分享

需求描述&#xff1a;在公众号中&#xff0c;生成二维码&#xff0c;并在二维码中央添加自定义logo&#xff0c;然后生成一张分享给好友的 二维码图片。 一、用到的依赖包 npm install --save html2canvas <script srchttps://cdn.staticfile.org/jquery/2.1.1/jquery.min…

nvm 安装说明

1、下线nvm地址 https://nvm.uihtm.com/2、安装步骤 2.1、双击解压后的exe 2.2、选择I accept…&#xff0c;然后点击next 2.3、选择nvm安装位置,选择好后点击next 2.4、选择nodejs的安装位置&#xff0c;点击next&#xff0c;记住你的nodejs路径&#xff01;甚至可以复制这…

[数据集][目标检测]叶子计数检测数据集VOC+YOLO格式240张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;240 标注数量(xml文件个数)&#xff1a;240 标注数量(txt文件个数)&#xff1a;240 标注类别…

C语言的数据结构:串、数组、广义表

一、串 1、串的定义 串是一个线性表&#xff0c;但其节点中的内容只能为字符&#xff0c;所以也称为字符串。 字符串中可以有多个字符&#xff0c;也可以没有字符。没有字符的叫作&#xff1a;空串。 空串&#xff1a;""。 有值的串&#xff1a;"1123"。 只…

Handler通信机制

目标&#xff1a; 1.Handler和Looper什么关系&#xff1f; 一个Looper对应一个MessageQueue&#xff0c;可以多个handler往MessageQueue发送消息。 2.一个线程有几个Handler&#xff1f; 3.Handler内存泄漏的原因&#xff1f; 4.使用Message时如何创建它&#xff1f; 5.子…

重生奇迹MU剑士介绍

剑士拥有过人的体力及华丽的剑术&#xff0c;加上属于近距离攻击型职业&#xff0c;就算没有其他角色的帮助也可自行锻炼。由于剑士是剑术的专家&#xff0c;所以无法学习魔法&#xff0c;但与其他角色组队冒险时&#xff0c;因优异的体力通常是担任先锋角色。剑士等级达到150级…