Overview of Transformer

news2024/10/3 22:20:10

写在开头

在学习 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.coloradmin.cn/o/2186953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UNRAID使用rclone挂在alist网盘

UNRAID使用rclone挂在alist网盘 需求:考虑异地备份,将部分重要的资料上传至网盘,保证nas中的资料安全。 考虑:当然网盘备份存在安全性问题,后续也可以通过加密的方式进行上传,不过这是后话,有精…

Python常见问题解答:从基础到进阶

Python常见问题解答:从基础到进阶 Python 是一种简单易学、功能强大的编程语言,广泛应用于数据分析、Web 开发、自动化脚本、人工智能等领域。即便如此,Python 开发者在编写代码的过程中,常常会遇到各种各样的问题。本文将从基础…

java集合 -- 面试

Java集合框架体系 ArrayList底层实现是数组 LinkedList底层实现是双向链表 HashMap的底层实现使用了众多数据结构,包含了数组、链表、散列表、红黑树等 List ps : 数据结构 -- 数组 ArrayList源码分析 ArrayList底层的实现原理是什么? ArrayList list new…

HKMG工艺为什么要用金属栅极?

知识星球里的学员问:在HKMG工艺中,会用到HfO2等作为栅介质层,为什么不能再用多晶硅做栅极,而是改为金属栅极? 什么是HKMG工艺? HKMG(High-K Metal Gate ),是45nm&#…

《深度学习》OpenCV 背景建模 原理及案例解析

目录 一、背景建模 1、什么是背景建模 2、背景建模的方法 1)帧差法(backgroundSubtractor) 2)基于K近邻的背景/前景分割算法BackgroundSubtractorKNN 3)基于高斯混合的背景/前景分割算法BackgroundSubtractorMOG2 3、步骤 1)初…

利士策分享,年前如何合理规划,轻松搞点小钱?

利士策分享,年前如何合理规划,轻松搞点小钱? 随着春节的日益临近,不少人开始为过年期间的开销而犯愁。 如何在年前合理规划,轻松搞点小钱,成了大家热议的话题。 别担心,这里有几个既实用又不伤…

华为OD机试 - 分班问题(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

华为OD机试 - 密室逃生游戏(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

杀疯啦-yolov11+deepsort的目标跟踪实现

目录 yolov11介绍——实时端到端物体检测 概述 主要特征 支持的任务和模式 性能指标 总结 deepsort介绍: yolov11结合deepsort实现目标跟踪 效果展示 训练与预测 UI设计 其他功能展示 完整代码实现UI界面 yolov11介绍——实时端到端物体检测 概述 YOLO…

IDEA 使用技巧与插件推荐

目录 前言1. IDEA 使用技巧1.1 快捷键优化与应用1.2 高效调试与日志分析1.3 代码模板与片段的自定义 2. 插件推荐2.1 MyBatisX2.2 Lombok2.3 CheckStyle-IDEA2.4 Key Promoter X2.5 GitToolBox2.6 Rainbow Brackets 3. IDEA 性能优化3.1 内存与堆栈设置3.2 禁用不必要的插件3.3…

论文翻译 | Language Models are Few-Shot Learners 语言模型是少样本学习者(中)

3 结果 在图3.1中,我们展示了第2节描述的8个模型的训练曲线。对于这个图表,我们还包括了6个额外的超小型模型,参数数量少至100,000。正如[KMH20]中观察到的,当有效利用训练计算时,语言建模性能遵循幂律。在将这个趋势再…

FreeRTOS篇15:中断管理

一.中断优先级 任何中断的优先级都大于任务! 在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先 级并不是从 015 ,默认情况下它是从 515 ,0~4 这 5 个中断优先级不是 F…

【逐行注释】PF(Particle filter,粒子滤波)的MATLAB代码(附源代码)

文章目录 程序设计1. 介绍2. 系统模型3. 算法步骤 源代码运行结果 程序设计 1. 介绍 粒子滤波是一种用于动态系统状态估计的先进方法,广泛应用于机器人定位、目标跟踪和金融预测等领域。该算法通过一组粒子及其权重来表示系统状态的概率分布,能够有效处…

JavaSE——面向对象8:Object类详解(==与equals的区别、hashCode、toString方法)

目录 一、与equals()的区别 (一)是一个比较运算符 (二)equals是Object类中的方法,只能判断引用类型 (三)equals方法重写练习 1.练习1 2.练习2 3.练习3 二、hashCode方法 三、toString方法 1.默认返回:全类名(包名类名)哈希值的十六进制 (1)不…

VS编译器实用调试技巧

一.什么是bug bug本意是"昆虫"或"虫子],现在一般是指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞。“Bug"的创始人格蕾丝.赫柏(Grace Murray Hopper)&#xff…

算法笔记(七)——哈希表

文章目录 两数之和判定是否互为字符重排存在重复元素存在重复元素 II字母异位词分组 哈希表:一种存储数据的容器; 可以快速查找某个元素,时间复杂度O(1); 当频繁查找某一个数时,我们可以使用哈希表 创建一个容器&#…

堆的代码和基础知识

堆的向上和向下调整-CSDN博客 1.堆的基础知识 2.堆的代码 Heap.h #pragma once #include<stdio.h> #include<assert.h> #include<stdlib.h> #include<stdbool.h> #include<time.h>// typedef int HPDataType; typedef struct Heap {HPDataTy…

电场磁场,能量密度和平均值(定义式是用实数场计算的,不能直接将定义式里面修改为复数场)

能量密度的定义式&#xff0c;都是实数场 平均能量密度&#xff0c;里面的是复数表示的场。具体推导类似坡印廷矢量 、

4.6章节python中空语句pass保留字作用

在Python中&#xff0c;pass 是一个空语句&#xff0c;它什么也不做。它通常用作占位符&#xff0c;在需要语法上需要一个语句但程序逻辑上不需要执行任何操作的地方。 1.占位符&#xff1a;在编写代码时&#xff0c;如果你还没有决定某个部分应该做什么&#xff0c;可以先用 p…

[深度学习][python]yolov11+bytetrack+pyqt5实现目标追踪

【算法介绍】 YOLOv11、ByteTrack和PyQt5的组合为实现高效目标追踪提供了一个强大的解决方案。 YOLOv11是YOLO系列的最新版本&#xff0c;它在保持高检测速度的同时&#xff0c;通过改进网络结构、优化损失函数等方式&#xff0c;提高了检测精度&#xff0c;能够同时处理多个…