赞
踩
本文整理和翻译自 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 基础, 但没有关系也不大。
self-attention 运算是所有 transformer 架构的基本运算。
从最简形式上来说,神经网络是一系列对输入进行加权计算,得到一个输出的过程。
具体来说,比如给定一个向量 [1,2,3,4,5] 作为输入,权重矩阵可能是 [0, 0, 0, 0.5, 0.5]
, 也就是说最终的 output 实际上只与 input 中的最后两个元素有关系 —— 换句话说, 这一层神经网络只关注最后两个元素(注意力在最后两个元素上), 其他元素是什么值对结果没有影响 —— 这就是 attention
这一名字的由来。
注意力模型大大降低了神经网络的计算量:经典神经网络是全连接的,而上面的例子中, 这一层神经网络不需要全连接了,每个输出连接到最后两个输入就行了,也就是从 1x5 维降低到了 1x2 维。
图像处理中的卷积神经网络(CNN)也是类似原理:只用一小块图像计算下一层的输出,而不是用整帧图像。
Self-attention 是一个 sequence-to-sequence 运算: 输入一个向量序列(a sequence of vectors),输出另一个向量序列。
我们用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。