Transformer:从入门到精通

学习一个深度学习模型,我们首先需要从理论的角度理解它的构架,进而理解代码。

Transformer背景

首先我们知道,神经网络有一个巨大的家族,其中的CNN(卷积神经网络)源于视觉研究,目标是让机器自动学习图像特征,而RNN的出现是源于对记忆和序列建模的需求,目标是处理自然语言、语音等时序数据。循环神经网络(RNN)的关键思想是:不仅考虑当前输入,它还会记住之前的输入信息,把历史信息通过隐藏状态(hidden state)传递到下一步,从而实现“记忆”。所以,RNN可以用于自然语言处理(机器翻译、文本生成),语音处理(语音识别),时间序列预测(天气预测)等。

在RNN之前,语言模型主要是采用N-Gram,即预测当前词是什么的时候,我们只假设它和前面的N个词相关。显然这个模型并不靠谱,因为有时候关键信息藏在几句话之前。所以RNN出现了,它理论上可以向前/前后看任意多词:

双向循环神经网络结构

因此,RNN一定程度解决了N-Gram无法处理的问题(RNN详解见循环神经网络)。但是RNN也存在自己的不足:

1. RNN在处理长序列问题的时候,反向传播梯度会变得极小或极大,造成梯度消失或梯度爆炸

2. RNN难以捕捉长距离的依赖关系

3. RNN必须逐步处理输入,无法并行计算,训练速度缓慢

针对以上问题,科学家们想到了通过引入单元状态(cell state)的方法(长短时记忆网络)。LSTM的输入包括:当前时刻的输入值x _t,上一时刻LSTM的输出值h_{t-1},以及上一时刻的单元状态c_{t-1}。LSTM的输出包括:当前时刻输出值h_t,和当前时刻单元状态c_t。LSTM的关键就是怎样控制长期状态c。它引入了三个状态开关,即三个门:

1. 遗忘门:它决定了上一个时刻的单元状态c_{t-1}有多少保留到当前时刻单元状态c_t

2. 输入门:它决定当前时刻网络输入x _t有多少保留到单元状态c_t

3. 输出门:它控制单元状态c_t有多少输出到LSTM的当前输出值h_t

LSTM的前向计算

这样,遗忘门的控制可以保留很早期的信息,输入门的控制又可以避免当前无关紧要的信息进入记忆,输出门的控制又可以保证输出结果中包含早期的记忆。LSTM的引入使RNN能保留长期的依赖信息,缓解了梯度消失/爆炸的问题。后来在LSTM的基础上还发展出了GRU,Seq2Seq架构。但是,这些模型并没有本质上解决长距离依赖和训练效率低的问题。直到Transformer的出现。

(LSTM详解见长短时记忆网络(LSTM)

Transformer前言

一、独热编码(One-Hot Encoding)

计算机只能处理0/1编码,所以在面对文字的时候,我们需要一个词表来表示词(Token),即通过0/1将词表示为高维度稀疏向量(维度高,但大部分元素是0)。但是这样表示出来的句子无法包含上下文信息,词与词之间完全没有关系。因此在此基础上,我们引入了词嵌入。

二、词嵌入

所谓词嵌入,就是为词表中的每个词分配一个词向量,将其映射到语义空间中。这里语义空间维度表示词向量的维度,语义空间维度越高,语义表达能力就越强。词向量的每个值都是浮点数,词向量之间的距离也和词的语义距离有关。例如,我们可以将“红苹果”表示为 [0.13, 0.16, -0.89, 0.9] ,“青苹果”表示为 [0.12, 0.17, -0.88, 0.9] ,两者十分相似。常见的语义空间维度包括512(Transformer),12288(GPT3)。

三、嵌入矩阵

假设我们通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值