当前位置:   article > 正文

Transformer 是如何工作的:600 行 Python 代码实现两个(文本分类+文本生成)Transformer(2019_基于transformer的文本分类

基于transformer的文本分类

本文整理和翻译自 2019 年(最后更新 2023 年)的一篇文章: Transformers From Scratch

如果对 transformer 的使用场景和所处位置还不清楚,可以先看一下这篇:

理解本文大部分内容只需要基本的高数知识(矩阵乘法)。 原文代码见这里,不过训练代码用到的一些库更新非常快, 因此跑起来可能有点困难。有兴趣有时间的可以考虑基于较新版本的库重构一下 self-attention/transformer 及训练代码。

译者水平有限,不免存在遗漏或错误之处。如有疑问,敬请查阅原文。

以下是译文。



摘要

Transformer 是一类非常令人着迷的机器学习架构(a family of machine learning architectures)。 之前已经有一些不错的介绍文章(例如 [1, 2]),但过去几年 transformer 变得简单了很多, 因此要解释清楚现代架构(modern architectures)是如何工作的,比以前容易多了。

本文试图丢掉历史包袱,开门见山地解释现代 transformer 的工作原理

神经网络和反向传播(neural networks and backpropagation)的基本知识有助于更好地理解本文,

  • 这个讲座 介绍了神经网络的基础知识;
  • 这个讲座 介绍了神经网络如何应用于现代深度学习系统。

另外,理解本文程序需要一点 Pytorch 基础, 但没有关系也不大。

1 self-attention(自注意力)模型

self-attention 运算是所有 transformer 架构的基本运算

1.0 Attention(注意力):名字由来

从最简形式上来说,神经网络是一系列对输入进行加权计算,得到一个输出的过程。

具体来说,比如给定一个向量 [1,2,3,4,5] 作为输入,权重矩阵可能是 [0, 0, 0, 0.5, 0.5], 也就是说最终的 output 实际上只与 input 中的最后两个元素有关系 —— 换句话说, 这一层神经网络只关注最后两个元素(注意力在最后两个元素上), 其他元素是什么值对结果没有影响 —— 这就是 attention 这一名字的由来。

注意力模型大大降低了神经网络的计算量:经典神经网络是全连接的,而上面的例子中, 这一层神经网络不需要全连接了,每个输出连接到最后两个输入就行了,也就是从 1x5 维降低到了 1x2 维。

图像处理中的卷积神经网络(CNN)也是类似原理:只用一小块图像计算下一层的输出,而不是用整帧图像。

1.1 输入输出:vector-to-vector 运算

Self-attention 是一个 sequence-to-sequence 运算: 输入一个向量序列(a sequence of vectors),输出另一个向量序列。

我们用 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/887011
推荐阅读
相关标签