探究 ChatGPT 的心脏--Transformer(基础知识第一篇)

Transformer 是 ChatGPT 的核心部分,如果将 AI 看做一辆高速运转的汽车,那么 Transformer 就是最重要的引擎。它是谷歌于 2017 年发表的《Attention is All You Need》中提出的 Sequence-to-sequence 的模型,诞生之后便一统江湖,在 NLP, CV, Audio, Video 多个模态领域成为了遥遥领先。

  1. 如果你之前不了解 Transformer, 或者只知道大概的知识,那么这篇文章可以让你通过自己动手写代码深刻地理解 Transformer 的结构、训练方法以及实际用例等;

  2. 如果你了解 Transformer,这篇文章可以让你温习 Transformer 的知识,所谓温故而知新;

由于内容很多,因此拆分为几篇文章的内容。

模型结构

总体流程:

分为 **输入(Input), 模型(Model), 输出(Output)**三部分。接下来详细说明每一个部分。

输入

输入:"我有一只猫"

分词 :用某种分词方法输出 ["我","有","一只", "猫"],常用的中文分词方法有 jieba 分词,THULAC分词等(想要详细了解这些分词方法可以问 悟空 AI 助手,支持 GPT 3.5, GPT 4),这里每个词也叫做 token(token 的概念很重要,后面反复用到)

**转 Embedding:**将 ["我","有","一只", "猫"] 的每一个词转为一个实数向量,常见的是 512 维的向量,因为有 4 个词,每个词变成 512 维向量,所以得到 4*512 维的矩阵,一般用 tensor 存储,简单的就记作 x。具体的转换方法可以问悟空AI,但是本文后面会详细讲到的。

添加位置 Embedding: 位置 embedding 是对 token 顺序的一种表示,因为 token 顺序很重要。例如:

"我","爱","你"\] 跟 \["你","爱","我"\],token 顺序变一下含义就完全不同!那么最简单的顺序表示方法就是 1,2,3,...N,用数组索引表示位置,但是 Transformer 没有这么干而是用正弦/余弦函数来表示: ![](https://file.jishuzhan.net/article/1778650881097469953/35dc16897cd2064cde94b45149a1ab05.webp) 其中,PE 就是位置编码(**P** ositional **E**mbedding),pos 表示单词在句子中的位置,d 表示 PE的维度 (与词 Embedding 一样),2i 表示偶数的维度,2i+1 表示奇数维度 (即 2i≤d, 2i+1≤d)。画图看一下就是这样: ![](https://file.jishuzhan.net/article/1778650881097469953/505df2a9416d1a610c6536be1c4c2b8b.webp) **脑经急转弯**:为什么位置 embedding 不用 \[1,2,3,...N\] 来表示顺序? 请认真思考 5 分钟后再看下面的答案。 有两个原因: 1. ++保证模型训练稳定性和快速收敛性++ :类似于 data normalization, 原始数据的取值可以是负无穷到正无穷,但是一旦输入到模型就要强制归一化到一个固定区间,常见的是 \[-1, 1\] 区间,这样做可以大幅加速模型收敛并减少训练误差,但是 1,2,3,...,N 是没有界限的,如果简单的除以 N 来归一化,那么 N 取多少比较合适呢?实际上很难选择 N 的值,所以一个比较合适的选择就是周期性函数,最经典好用的就是正弦/余弦,为啥嘞?因为它们很常见而且求导巨简单,忘了它们导数的去问问 [悟空 AI 助手](https://aichat.cpolar.cn/ "悟空 AI 助手") 2. 要遵循文本结构的周期性:任何一个句子,任何一个段落都是具有周期性的。为啥呢,因为所有的句子都有固定的结构,最常见的是:主语 + 谓语 + 宾语,所以一段话的结构其实类似于这样子的: ++主语 + 谓语 + 宾语 + 标点符号++ + ++主语 + 谓语 + 宾语 + 标点符号, ......++ 很自然地,就想到了用周期性函数来表示位置了。 网上有人说其中一个原因是可以让模型容易地计算出相对位置,对于固定长度的间距 k,PE(pos+k) 可以用 PE(pos) 计算得到。因为 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)。这个我个人表示不认同,因为 1,2,3,...N 也符合这个性质,不信你算一下。 然后,将文本的 embedding 和位置的 embedding 加起来就是模型的输入了,如下: ![](https://file.jishuzhan.net/article/1778650881097469953/1a78758b50ac2a796c1de150e6bc461b.webp) 到这里 Transformer 的输入就讲完了,下一篇将介绍模型的结构。

相关推荐
墨尘游子31 分钟前
一文读懂循环神经网络—从零实现长短期记忆网络(LSTM)
人工智能·python·深度学习·神经网络·算法·机器学习·lstm
王小王-1231 小时前
基于深度学习的LSTM、GRU对大数据交通流量分析与预测的研究
深度学习·gru·lstm·交通流量预测系统·客流量预测系统·流量预测·拥堵预测
纪伊路上盛名在3 小时前
(鱼书)深度学习入门3:手搓神经网络
人工智能·深度学习·神经网络·机器学习
CoovallyAIHub5 小时前
卷积网络到底能不能“定位”?一次对空间表示能力的深度解析
深度学习·算法·计算机视觉
安思派Anspire5 小时前
企业流程的智能体 AI 生命周期
深度学习·架构
AndrewHZ6 小时前
【图像处理基石】如何入门人体关键点检测?
图像处理·人工智能·深度学习·姿态估计·关键点检测·人体关键点检测
巴伦是只猫8 小时前
【深度学习笔记】3 step by step (jupyter)
笔记·深度学习·jupyter
AI街潜水的八角9 小时前
图像修复:深度学习实现老照片划痕修复+老照片上色
人工智能·深度学习
机器学习之心15 小时前
三种深度学习模型(LSTM、CNN-LSTM、贝叶斯优化的CNN-LSTM/BO-CNN-LSTM)对北半球光伏数据进行时间序列预测
深度学习·cnn·lstm·cnn-lstm·贝叶斯优化的cnn-lstm
技术猿1887027835115 小时前
实现“micro 关键字搜索全覆盖商品”并通过 API 接口提供实时数据(一个方法)
开发语言·网络·python·深度学习·测试工具