Overview of Transformer

news/2024/10/3 20:08:22 标签: 后端

写在开头

在学习 Transformer 之前,需要对卷积神经网络和循环神经网络,以及 GRU 和 LSTM 有所了解。推荐吴恩达在 Coursera 平台的课程【深度学习专项】,B 站有搬运版 https://www.bilibili.com/video/BV12E411a7Xn/?spm_id_from=333.337.search-card.all.click&vd_source=2e0bed8f939119c48817ce61f4f75bdd

Transformer 在网上有很多的教程,我推荐观看李沐老师讲解的【Transformer论文逐段精读】,B 站地址 https://www.bilibili.com/video/BV1pu411o7BE/?spm_id_from=333.337.search-card.all.click&vd_source=2e0bed8f939119c48817ce61f4f75bdd,Transformer 发表在论文 "Attention is all you need" 中,感兴趣的也可以看看原文。

如果想进一步了解 Transformer 的底层知识,可以看看 Karpathy 的 minGPT 项目 https://github.com/karpathy/minGPT,minGPT 是一个小巧的、只有 300 行代码的 GPT 的从头实现。当然,我们也可以使用 minGPT 训练自己的项目。


理解 Transformer

传统的循环神经网络,包括 RNN、LSTM、GRU,以及后来引入了注意力机制的模型,都是序贯模型(sequential model),输入和输出都是从前往后按顺序进行的,这样导致模型难以进行并行计算,效率比较低。

那么,如何改进循环神经网络呢,以语言模型为例,可不可以一次性地将一个语言序列输入到模型中呢?可不可以像卷积神经网络那样通过多个输出通道(channel)输出不同模式的信息呢?

Transformer 通过引入自注意力机制(self attention mechanism)和多头注意力机制(multi-head attention mechanism)很好地回答了上述两个问题,改进了循环神经网络。Transformer(中文名为变形金刚)是一个只基于注意力机制的神经网络架构,它使用了编码器-解码器架构(encoder-decoder architecture),它没有使用循环,它把所有的循环层全部替换为了 multi-head attention 层。

Transformer 借鉴了卷积神经网络的思想,它引入的自注意力机制可以一次性地将一个语言序列输入到模型中,这种批量操作有点儿类似于卷积神经网络的 filter 窗口,自注意力机制一次可以扫描整个序列,而 filter 窗口只能扫描窗口范围。Transformer 的多头注意力机制借鉴了卷积神经网络的多输出通道设计,通过多次使用自注意力机制,然后将输出结果 concat 连接起来,使得更好地理解语言序列的信息。

自注意力机制通俗理解就是,我们输入的信息(1个词➡1个token➡1个embedding)同时被表示为查询向量(q)、键向量(k)和值向量(v),查询向量用作投放注意力,去和其他输入信息的键向量相乘(这些其他输入信息的键向量为被注意到的对象),计算内积作为相似度,内积越大,说明这两个信息的相似度越高。将这些内积进行 softmax 分数归一化处理,得到各个【注意-被注意】对的注意力权重,然后根据这些注意力权重对所有的值向量求加权和,即得到自注意力机制的输出。

传统的循环神经网络由于本身是序贯模型,所以输出信息是带有顺序信息的,而 Transformer 的输出信息是 key 和 query 乘积的加权和,是不带有顺序信息的。而语言序列的顺序是很重要的,Transformer 通过给输入信息的 embedding 加上一个位置编码(positional encoding)来给输入信息标记上位置信息。位置编码采用的是正余弦编码,假如第 t 个 embedding 的维度为 512,则选择 512 个不同变换的正余弦函数的 x=t 时的函数值作为位置编码向量,位置编码向量的维度也为 512。

此外,Transformer 还使用了 layerNorm 对数据进行标准正态分布化处理,以及在训练时对输入到解码器的信息进行掩码(mask)处理。


写在文末

人工智能技术日新月异,逐渐渗透进了各行各业。人工智能技术在生物领域有非常大的应用潜力,让我们一起学习,致力于人工智能推动生物发展。

为了促进交流,我创建了 AI in Bio 微信交流群,可以点击公众号主页底部进交流群一栏,获取交流群二维码,如果二维码失效,请给我留言,我会尽快更新。也可以先加我微信(微信ID:AIinbio),备注交流群,然后我拉你进群。

感谢大家的支持与帮助!

本文由 mdnice 多平台发布


http://www.niftyadmin.cn/n/5688917.html

相关文章

02SQLite

文章目录 索引创建索引删除索引索引优点及缺点?避免使用索引 视图创建视图删除视图 事务事务控制命令通过事务方式对数据库进行访问优势: 索引 创建索引 索引(Index)是一种特殊查找表,数据库搜索引擎用来加速数据检索…

【重学 MySQL】五十一、更新和删除数据

【重学 MySQL】五十一、更新和删除数据 更新数据删除数据注意事项 在MySQL中,更新和删除数据是数据库管理的基本操作。 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句。UPDATE语句的基本语法如下: UPDATE ta…

基于Springboot+Vue的小区停车场管理系统登录(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 在这个…

MySQL高阶2010-职员招聘人数2

目录 题目 准备数据 分析数据 总结 题目 一家公司想雇佣新员工。公司的工资预算是 $70000 。公司的招聘标准是: 继续雇佣薪水最低的高级职员,直到你不能再雇佣更多的高级职员。用剩下的预算雇佣薪水最低的初级职员。继续以最低的工资雇佣初级职员&…

docker的安装与启动——配置国内Docker源

移除旧版本docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 配置docker yum源。 sudo yum install -y yum-utils sudo yum-config-manager –add-repo ht…

C/C++进阶(一)--内存管理

更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: 学习专栏C语言_Stark、的博客-CSDN博客 其它专栏: 数据结构与算法_Stark、的博客-CSDN博客 ​​​​​​项目实战C系列_Stark、的博客-CSDN博客 座右铭&a…

Megabit兆比特10月比特币激增做好准备-最新加密货币新闻

Kaiko Research最近的分析表明,交易员正在积极为潜在的强劲表现做好准备特币(BTC)比今年十月。目前,BTC的交易价格为60800美元,在测试了60000美元的支撑位后,最近上涨了800美元。Megabit兆比特自成立以来,Megabit凭借用户友好的界…

RabbitMQ的相关题

一、 MQ的作⽤及应⽤场景 类似问题: 项⽬什么场景下使⽤到了MQ, 为什么需要MQ? RabbitMQ 的作⽤?使⽤场景有哪些? RabbitMQ…