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

本文主要是介绍【深度学习 | 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模型的改进和扩展,通过引入不同的结构和训练策略,提高了模型在自然语言处理和其他领域任务中的表现。它们的出现丰富了深度学习模型的选择,并推动了自然语言处理领域的发展。

在这里插入图片描述

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

这篇关于【深度学习 | Transformer】释放注意力的力量:探索深度学习中的 变形金刚,一文带你读通各个模块 —— 总结篇(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/281491

相关文章

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys