当前位置: 首页 > article >正文

【深度学习 | Transformer】释放注意力的力量:探索深度学习中的 变形金刚,一文带你读通各个模块 —— 总结篇(三)

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

作者: 计算机魔术师
版本: 1.0 ( 2023.10.15 )

摘要: 本系列旨在普及那些深度学习路上必经的核心概念,文章内容都是博主用心学习收集所写,欢迎大家三联支持!本系列会一直更新,核心概念系列会一直更新!欢迎大家订阅

该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]

残差链接和层归一化

Transformer 模型使用残差连接(residual connections)来使梯度更容易传播,在进行self(自我)-attention 加权之后输出,也就是 Self(自我)-Attention(Q, K, V),然后把他们加起来做残差连接

X e m b e d d i n g + S e l f − A t t e n t i o n ( Q , K , V ) Xembedding+Self-Attention(Q, K, V) Xembedding+SelfAttention(Q,K,V)

以及层归一化(layer normalization)来加速训练过程和提高模型性能。 [classical concept.md](classical concept.md) 这里有讲解关于层归一化的概念

下面的图总结了以上 encode 的部分,接下来我们看关于decode的部分

在这里插入图片描述

Deocoder中的 Masked Encoder-Decoder Attention 唯一不同的是这里的 K,V 为 Encoder 的输出,Q 为 Decoder 中 Masked(掩盖) Self(自我)-Attention 的输出
在这里插入图片描述

该方法将输入的信息作为键值传入,并将对于输入的序列查询信息糅合,达到学习关联二者序列的关系,并通过最终结果训练得到最优参数。

English to French 机器翻译案例

在机器翻译任务中,输入是一个源语言句子(例如英文句子),输出是该句子的目标语言翻译(例如法文句子)。

  1. 输入(Input):

    • 源语言句子:将源语言句子进行编码,通常使用词嵌入(Word Embedding)来表示每个单词。例如,将英文句子"Hello, how are you?"转换为一系列词嵌入向量。
    • 位置编码(Positional Encoding):为了捕捉单词在句子中的位置信息,Transformer模型引入位置编码,将位置信息与词嵌入向量相结合。
    • 输入嵌入(Input Embedding):将词嵌入向量和位置编码向量相加,得到每个单词的最终输入表示。
  2. 输出(Output):

    • 目标语言句子:目标语言句子也会进行类似的处理,将目标语言句子进行编码和嵌入表示。
    • 解码器输入(Decoder Input):解码器的输入是目标语言句子的编码表示,通常会在每个目标语言句子的开头添加一个特殊的起始标记(例如<start>)来表示解码器的起始位置。
    • 解码器输出(Decoder Output):解码器的输出是对目标语言句子的预测结果,通常是一个单词或一个单词的词嵌入向量。解码器会逐步生成目标语言句子,每一步生成一个单词,直到遇到特殊的结束标记(例如<end>)或达到最大长度。

下面是一个机器翻译任务的例子:

源语言句子(英文): “Hello, how are you?”
目标语言句子(法文): “Bonjour, comment ça va ?”

在这个例子中,输入是源语言句子的编码表示,输出是目标语言句子的解码器输入和解码器输出。

输入(Input):

  • 源语言句子编码:[0.2, 0.3, -0.1, …, 0.5] (词嵌入向量表示)
  • 位置编码:[0.1, 0.2, -0.3, …, 0.4]
  • 输入嵌入:[0.3, 0.5, -0.4, …, 0.9]

输出(Output):

  • 解码器输入:[<start>, 0.7, 0.2, -0.8, …, 0.6]
  • 解码器输出:[0.1, 0.5, -0.6, …, 0.2]

通过训练,Transformer模型会根据输入的源语言句子和目标语言句子进行参数优化,使得模型能够生成准确的目标语言翻译。

需要注意的是,具体任务中的输入和输出的表示方式可能会有所不同,这只是一个简单的机器翻译示例。不同任务和模型架构可能会有不同的输入和输出定义。

一些值得思考的问题
为什么说 Transformer 在 seq2seq 能够更优秀?

RNN等循环神经网络的问题在于将 Encoder 端的所有信息压缩到一个固定长度的向量中,并将其作为 Decoder 端首个隐藏状态的输入,来预测 Decoder 端第一个单词 (token) 的隐藏状态。在输入序列比较长的时候,这样做显然会损失 Encoder 端的很多信息,而且这样一股脑的把该固定向量送入 Decoder 端,Decoder 端不能够关注到其想要关注的信息。Transformer 通过使用Multi-self-attention 模块,让源序列和目标序列首先 “自关联” 起来,并实现全局观和并行能力,模型所能提取的信息和特征更加丰富,运算更加高效。

在这里插入图片描述

关于代码

官方代码地址: https://github.com/tensorflow/tensor2tensor

http://nlp.seas.harvard.edu/2018/04/03/attention.html (Pytorch_实现)

如果有能力的话,大家可以尝试一下手撕代码哦,大佬嘿嘿。

参考文献:

https://wmathor.com/index.php/archives/1438/

https://www.youtube.com/watch?v=ugWDIIOHtPA&list=PLJV_el3uVTsOK_ZK5L0Iv_EQoL1JefRL4&index=62

https://www.bilibili.com/video/BV1pu411o7BE/?spm_id_from=333.337.search-card.all.click&vd_source=2700e3c11aa1109621e9a88a968cd50c

https://wmathor.com/index.php/archives/1453/#comment-2101

https://kazemnejad.com/blog/transformer_architecture_positional_encoding/

http://jalammar.github.io/illustrated-transformer/

https://ifwind.github.io/2021/08/17/Transformer%E7%9B%B8%E5%85%B3%E2%80%94%E2%80%94%EF%BC%887%EF%BC%89Mask%E6%9C%BA%E5%88%B6/#xlnet%E4%B8%AD%E7%9A%84mask

代码详解:http://nlp.seas.harvard.edu/2018/04/03/attention.html (Pytorch_实现)

扩展模型

下面是一些对Transformer模型进行改进和扩展的其他模型:

  1. BERT(Bidirectional Encoder Representations from Transformers):BERT是一种预训练的语言表示模型,通过双向Transformer编码器来学习句子的上下文相关表示。它利用了Transformer的自注意力机制和多层编码器的结构,通过大规模的无监督预训练和有监督微调,取得了在多项自然语言处理任务上的显著性能提升。

  2. GPT(Generative Pre-trained Transformer):GPT是一种基于Transformer的预训练语言生成模型。它通过自回归的方式,使用Transformer的解码器部分来生成文本。GPT模型在大规模文本语料上进行预训练,并通过微调在各种任务上展现出出色的语言生成和理解能力。

  3. XLNet:XLNet是一种自回归和自编码混合的预训练语言模型。不同于BERT模型的双向预训练,XLNet采用了排列语言模型(Permutation Language Model)的方法,通过随机遮盖和预测全局排列来学习句子的上下文表示。这种方法能够更好地捕捉句子内部的依赖关系,提高了模型的性能。

  4. Transformer-XL:Transformer-XL是一种具有记忆能力的Transformer模型。它通过引入相对位置编码和循环机制,解决了标准Transformer模型在处理长文本时的限制。Transformer-XL能够有效地捕捉长距离依赖关系,并保持对先前信息的记忆,从而提高了模型的上下文理解能力。

  5. Reformer:Reformer是一种通过优化Transformer模型的存储和计算效率的方法。它引入了可逆网络层和局部敏感哈希(Locality Sensitive Hashing)等技术,以减少内存消耗和加速自注意力计算。Reformer模型在大规模数据和长序列上具有很好的可扩展性,并在多项任务上取得了优异的性能。

这些模型都是对Transformer模型的改进和扩展,通过引入不同的结构和训练策略,提高了模型在自然语言处理和其他领域任务中的表现。它们的出现丰富了深度学习模型的选择,并推动了自然语言处理领域的发展。

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞
					🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
					 	 🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

http://www.kler.cn/a/105722.html

相关文章:

  • 小程序-基于java+SpringBoot+Vue的小区服务管理系统设计与实现
  • Leetcode 3355 Zero Array Transformation
  • 富格林:安全指正规防欺诈套路
  • 在ubuntu上安装ubuntu22.04并ros2 humble版本的docker容器记录
  • Java putIfAbsent() 详解
  • Windows环境GeoServer打包Docker极速入门
  • 2.7每日一题(分段函数不定积分)
  • Node编写获取用户信息接口
  • 华为eNSP配置专题-策略路由的配置
  • [100天算法】-实现 Trie(day 41)
  • element ui el-table表格纵向横向滚动条去除并隐藏空白占位列
  • 前端开发技术栈(工具篇):2023深入了解webpack的安装和使用以及核心概念和启动流程(详细) 63.3k stars
  • Django 实战开发(一)项目搭建
  • NDK交叉编译FFmpeg安卓编译ffmpeg
  • linux可视化运维工具
  • 如何在Postman中使用静态HTTP
  • Kubernetes 特性门控
  • 全连接层是什么,有什么作用?
  • 域控操作三点五:使用策略下发将域用户添加到本地管理员组
  • 【干货】JVS低代码表单基础组件的配置与应用
  • SPP Net 目标检测网络学习笔记 (附代码)
  • DevOps持续集成-Jenkins(1)
  • stm32的ADC采样率如何通过Time定时器进行控制
  • 【表面缺陷检测】钢轨表面缺陷检测数据集介绍(2类,含xml标签文件)
  • R语言代码示例
  • 包管理工具与配置文件package.json