AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

理解 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


2019-09-20 13:291353

评论

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

车载小程序改善车载设备体验与性能,打造智能出行生态圈

没有用户名丶

小程序容器

数禾科技 AI 模型服务 Serverless 容器化之旅

阿里巴巴云原生

阿里云 Serverless 云原生 Knative 容器化

【网易云商】记一次实遇的 MySQL--index merge 死锁历程

网易云信

MySQL 数据库 数据库死锁

在 Flutter 多人视频中实现虚拟背景、美颜与空间音效

声网

flutter AI 虚拟背景 美颜

Rainbond的 Gateway API 插件制作实践

北京好雨科技有限公司

Kubernetes API Gateway rainbond

局域网IP扫描软件:IP Scanner Pro 激活版

真大的脸盆

Mac Mac 软件 局域网管理 IP扫描工具

【网易云商】记一次实遇的 MySQL--index merge 死锁历程

网易智企

MySQL 数据库

从数仓发展史浅析数仓未来技术趋势

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

Flink CDC 专题首发|每天 10 分钟,解锁新一代数据集成框架

Apache Flink

大数据 flink 实时计算

MobTech|如何使用秒验

MobTech袤博科技

微前端架构的业务价值:实现独立部署、快速迭代和按需加载

FinFish

微前端 小程序容器 小程序化 微前端框架

窗口管理器:Lasso 中文激活版

真大的脸盆

Mac Mac 软件 窗口管理 窗口管理工具

OneFlow源码解析:Eager模式下的设备管理与并发执行

OneFlow

中康数字科技:基于大模型的医学文本信息处理与抽取

飞桨PaddlePaddle

中间件:数字化时代系统集成商的得力助手

FinFish

中间件 系统集成 小程序容器 软件中间件

数仓如何进行表级控制analyze

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

不会性能调优,被面试官狂虐!全靠阿里Java性能调优全彩手册死撑

做梦都在改BUG

Java 性能优化 JVM 性能调优

海泰方圆出席首届工业和信息化领域商用密码应用峰会

电子信息发烧客

火山引擎DataLeap一招教你避坑“数据开发”中的资源隔离问题

字节跳动数据平台

大数据 数据治理 资源隔离 数据研发 企业号 3 月 PK 榜

C++开发者必读经典书籍推荐

小万哥

c++ 程序员 后端 开发 推荐书籍

龙蜥白皮书精选:跨云-边-端的只读文件系统 EROFS

OpenAnolis小助手

镜像 操作系统 白皮书 龙蜥技术 EROFS

得帆云iPaaS是主数据必备工具

得帆信息

集成

降本增效:12种常见接口优化方案总结

程序员小毕

Java 程序员 性能优化 后端 架构师

通过 Amazon Managed Microsoft Active Directory 运行混合 Active Directory 服务

亚马逊云科技 (Amazon Web Services)

Amazon

MobTech|移动应用开发中的消息推送

MobTech袤博科技

小巧简单的图像处理软件:Acorn 激活版

真大的脸盆

Mac 图像处理 Mac 软件 图像编辑工具

类 ChatGPT 开源软件,开发者用的上吗?

开源雨林

人工智能 开源软件 ChatGPT

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