最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

理解 NLP 中网红特征抽取器 Tranformer | NLP 专栏

  • 2019-09-20
  • 本文字数:2344 字

    阅读完需:约 8 分钟

理解NLP中网红特征抽取器Tranformer | NLP 专栏


本篇介绍目前 NLP 领域的“网红”特征抽取器 Transformer。首先,作为引子,引入 Transformer 是什么的问题;接着,详细介绍了 Transformer 的结构和其内部的机制;最后,再总结 Transformer 的本质和定义。

1 Transformer 是什么?

很早就不断的有读者问我什么时候介绍 Transformer。确实,Transformer 是现在 NLP 领域最大的网红特征抽取器,基本现在所有的前沿研究都基于 Transformer 来做特征提取,不奇怪大家对它颇有兴致。


但是,我其实并不是很想写 Transformer,主要是网上写它的文章真的太多太多了,基本上能说的,各路神仙都把它说了一遍,要写出新意真的太难。


今天姑且就在这里说说,我所理解的 Transformer 吧,如有不对的地方,请大家指正。


在《Attention is all you need》中,Transformer 是一个用于机器翻译的编解码结构,这也是它为什么叫 Transformer 的原因。后来,因为在序列编码中强大的特征抽取能力和高效的运算特性,Transformer 被从编解码结构里抽离出来,成为了在 NLP 领域,目前最流行的特征抽取器。


我们暂且把对 Transformer 的认知,停留在这个层面,看完 Transformer 里到底有什么之后,再来思考这个问题,看能不能有更多的收获。

2 Transformer 里有什么


安利一下,上图来自http://jalammar.github.io/illustrated-transformer/该篇博客讲tranformer的网络结构讲的非常细和形象,想要了解这方面的读者开源仔细读一下。


上图是 Transformer 中,第一个 sub-layer 的结构示意图。其特别之处只有输入接收的为字向量和位置编码的和,其他 sub-layer 的输入为上一层 sub-layer 的输出。每一个 sub-layer,除上述差异之外,别无二致,所以我们只需要了解一个就可以。


通常,会有多层这样的 sub-layer,在 Bert-base 中,有 12 层,GPT-2.0 则更深,所以参数量都很大。GPT-2.0 的参数量达到了“丧心病狂”的 3 亿之多,是名副其实的大模型了。曾经刚入 NLP 坑的时候,会庆幸自己不用像 CV 的同学那样,天天看着贵的显卡乍舌叹气。不过小 Dream 哥现在也不用看了,训练最新模型的显卡,是一定买不起了。话说回来,NLP 中,模型参数已经大大超过了 CV 模型的参数量,正在朝着超大规模网络的方向狂奔。真有点担心,这样下去,后面 NLP 的玩家就只剩下那几个大玩家了。


好了,我们先看看 sub-layer 都有些什么内容。

(1) self-attention


上图是 Transformer 中 self-attention 的计算过程。其实在 Transformer 中,Q,K,V 指的都是输入序列乘上不同的权重 W_Q,W_K,W_V。上述过程,可以用如下的公式概括:



看过我们上一篇 Attention 文章的同学,应该对这个公式很熟悉。在 Transformer 中,主要通过这样一层 self-Attention 对输入序列进行编码。


该编码过程的一个特点是,在编码序列中的某一个词时,让该词充分的与序列中的其他词进行运算,从而能够得到该词与序列中所有词的句法和语义关系编码。


该编码过程的另外一个重要的特点是,序列是并行输入的,因此运算效率很高。

(2) Multi-head Attention

Multi-head Attention,即多头注意力机制。大概的处理流程如下图所示:



更多的细节,读者可以参考原文,这里不再详述。总的来说,多头机制就是 8 组权重,计算出了 8 个不同的输出,再通过拼接和运算得到新的序列编码。


那么,增加了 8 倍的参数和运算量。引入这样的机制有什么好处呢?


1) 极大的增强了模型的序列编码能力,特别是序列内词之间关系的语义表征能力。这个可以这样去想,假如只有一个头的话,因为是 self-attention,在计算过程中,很有可能该词与该词的的计算结果可能会比较大,从而词与自身的运算占据了很大的影响。如果引入多头机制,不同的权重,则可以避免这种弊端,增强模型的编码能力。


2) 实现了 Attention 的多个表征子空间。这样的好处是,每个子空间可以表征序列不同方面语义信息。这方面小 Dream 哥也没有看到相关论文的解释和支撑,就不多说了,了解的小伙伴可以留言指教。

(3) Feed-forward

每一个 sub-layer 还会接一个 Feed-forward Neural Network(FNN),FNN 的计算公式如下:



即在每个 sub-layer,针对 self-Attention 层的输出,先使用一个线性变换,再针对该线性变换的输出使用 RELU 函数,最后再针对 RELU 函数的输出使用一个线性变化。那么,做这么繁琐的变换有什么意义呢?


我们将 FNN 与 CNN 做对比,其实可以发现,其效果与加上一层卷积核大小为 11 的 CNN 是一样的。那么这就好理解了,这层所谓的 FNN 其实也是做特征提取的。至于它为什么不直接取名为 11CNN layer,这就要去问 Tranformer 的发明者了。


在 Transformer 中,还有其他的层,例如 Poition-Encoding 层,The Residuals 残差连接等,这些都好理解,读者可以参考前面推荐的 Jay Alammar 的博客。

3 再说 Transformer

前面大概讲述了 Transformer 的结构及其每个 sub-layer 的组成。那么我们再来讨论一下,Transformer 到底是什么?


我们可不可以这样说,Transformer 其实是一个用于对序列输入进行特征编码的工具。它以 self-Attention 机制为基础,从而能够编码序列输入的语义信息,对序列输入内不同词之间的关系也具有较强的编码能力,特别是 Multi-Attention 的引入,极大的增强了其编码能力。同时,Transformer 内其实还有 CNN 的影子,尽管原作者避免提及。并且,因为其结构上的优势,像 CNN 一样,Transformer 天然就能够并行计算,这一点是 RNN 等模型无法具备的。

总结

Transformer 中最重要的特点就是引入了 Attention,特别是 Multi-Head Attention。作为一个序列输入的特征抽取器,其编码能力强大,没有明显的缺点,短期内难以看到可以匹敌的竞争对手。


作者介绍


小 Dream 哥,公众号“有三 AI”作者。该公号聚焦于让大家能够系统性地完成 AI 各个领域所需的专业知识的学习。


原文链接


https://mp.weixin.qq.com/s/_rP-0WgqRCyKq5toXLCEvw


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-09-20 13:291153

评论

发布
暂无评论
发现更多内容

漏洞挖掘之文件漏洞后利用姿势【网络安全】

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

体验SRCNN和FSRCNN两种图像超分网络应用

华为云开发者联盟

人工智能 图像 图像超分

知乎基于 Apache Doris 的 DMP 平台架构建设实践|万字长文详解

SelectDB

Apache 数据库 数据仓库 广告系统 Doris

一个月后,我们又从 MySQL 双主切换成了主 - 从!

悟空聊架构

MySQL 悟空聊架构 征文活动 7月月更

P4Python:合并实践指南之如何脚本化integrate流程

龙智—DevSecOps解决方案

文件合并 P4 Perforce Helix Core

React + Node.js 全栈实战教程 - 手把手教你搭建「文件上传」管理后台

蒋川

node.js react.js mongodb Express axios

影响分析:RubyGems未授权访问漏洞(CVE-2022-29176)

龙智—DevSecOps解决方案

rubygems 漏洞

Hive表类型

五分钟学大数据

hive 7月月更

Spring AOP

武师叔

7月月更

Klocwork部署的安全最佳实践

龙智—DevSecOps解决方案

klocwork 静态代码分析 SAST工具

企业钟情于混合App开发,小程序容器技术能让效率提升100%

Speedoooo

微信小程序 APP开发 跨端开发 小程序容器

后端实战教程:如何使用 Node.js 开发 RESTful API 接口(Node.js + Express + Sequelize + MySQL)

蒋川

node.js MySQL 后端开发 Express

卷是真的卷,“粗心马虎”也是真的要扣分

图灵教育

数学 小学 初中

CloudBees CI使用Velero进行灾备(DR)概念验证

龙智—DevSecOps解决方案

ci 停机时间 灾难恢复计划

跟着官方文档学 Python 之:基础语法

甜甜的白桃

Python 数据类型 7月月更

IPA应用探索:基于客户意图交互让业务受理更有“温度”

鲸品堂

运营商

HTTP的前世今生

技术小生

HTTP 7月月更

企业知识管理过程中常见的误区与解决方法

Baklib

Spring Security用户定义

急需上岸的小谢

7月月更

万字多图,搞懂 Nginx 高性能网络工作原理!

C++后台开发

nginx 中间件 后端开发 高性能网络 C++开发

基础设施 NFTScan 正式发布 Solana 网络 NFT 浏览器

NFT Research

区块链 NFT

关于FAQ页面的一些制作技巧

Baklib

AIRIOT物联网平台助力油库自动化升级 实现业务场景全覆盖

AIRIOT

低代码 物联网 低代码,项目开发

Flutter 构建三维空间动画效果

岛上码农

flutter ios 前端 安卓开发 7月月更

干货|语义网、Web3.0、Web3、元宇宙这些概念还傻傻分不清楚?(上)

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

DevOps工具链:开放、自由地选择最适合团队和业务需要的工具

龙智—DevSecOps解决方案

DevOps DevOps工具 DevOps工具链

全面掌控!打造智慧城市建设的"领导驾驶舱"

华为云开发者联盟

云计算 后端 智慧城市 智慧屏

都有哪些较好用的项目管理软件?

PingCode

项目管理 项目管理软件

带你认识数仓的“规格变更”

华为云开发者联盟

数据库 后端 集群 数仓

刨析Scoped原理

猪痞恶霸

CSS 7月月更

任务拆分中的「敏捷刺客」,你中招了吗?

LigaAI

团队管理 敏捷开发 需求管理 垂直拆分 需求梳理

理解NLP中网红特征抽取器Tranformer | NLP 专栏_AI&大模型_小Dream哥_InfoQ精选文章