序
先说一句 张子豪 不应该被淘汰
自然语言处理通用解决方案
- 需要熟悉word2vec RNN网络模型,了解词向量如何建模
- Transformer,BERT 训练方法,实际应用
Transformer做了一件什么事?
基本组成是机器翻译模型中常见的Seq2Seq网络
RNN网络模型 是什么?
RNN(循环神经网络,Recurrent Neural Network)是一种用于处理序列数据的神经网络模型。相对于传统的前馈神经网络,RNN在网络内部引入了循环结构,使得网络可以对先前的信息进行记忆和利用。
RNN的关键特点是它可以处理任意长度的输入序列,并且能够在序列的不同位置共享参数。这使得RNN在处理语音识别、文本生成、机器翻译、时间序列预测等任务时非常有效。
RNN的基本结构是一个循环单元(recurrent unit),通过不断传递隐藏特征(hidden state)来处理输入序列的每个元素。每个循环单元接收当前时刻的输入和前一时刻的隐藏状态,并输出当前时刻的隐藏状态。隐藏状态可以看作是网络对之前输入序列的编码表示,它会通过时间传递的方式在序列的不同位置进行传播。这种循环结构使得RNN能够捕捉到序列中的时间相关信息。
然而,传统的RNN在处理较长序列时存在梯度消失和梯度爆炸的问题,导致难以捕捉长期依赖关系。为了克服这些问题,出现了一些改进的RNN模型,如长短时记忆网络(LSTM)和门控循环单元(GRU),它们通过引入门控机制和记忆单元来增强网络对长期依赖关系的建模能力。
总而言之,RNN是一种适用于序列数据处理的神经网络模型,通过引入循环结构和隐藏特征传递来处理序列中的时间相关信息,可以应用于多种任务中。
RNN的为什么 可以处理任意长度的输入序列
RNN之所以可以处理任意长度的输入序列,是因为其具有循环结构和参数共享的特点。
在传统的前馈神经网络中,每个输入和输出之间是独立的,网络没有记忆能力,无法对序列数据进行处理。而RNN引入了循环结构,使得网络可以在每个时间步上接收输入,并将隐藏特征从一个时间步传递到下一个时间步。这意味着网络可以通过时间传递的方式在序列中保持信息的流动,对序列的不同位置进行建模。
具体来说,每个循环单元在每个时间步接收当前时刻的输入和前一时刻的隐藏特征,并输出当前时刻的隐藏特征。这个隐藏状态可以看作是网络对之前输入序列的编码表示,它会通过时间传递的方式在序列的不同位置进行传播。因此,无论输入序列的长度是多少,RNN都可以通过这种循环结构来处理和利用序列中的信息。
此外,RNN还具有参数共享的特点。在RNN中,每个时间步使用的参数是相同的,无论序列的长度是多少。这样一来,网络可以通过共享参数的方式来处理任意长度的输入序列,而不需要针对不同长度的序列重新训练网络。
综上所述,RNN通过循环结构和参数共享的特点,使得它能够处理任意长度的输入序列,并通过隐藏特征的传递在序列的不同位置进行建模和处理。这使得RNN成为处理序列数据的有效模型。
既然已经有RNN,为什么还有Transformer
RNN可优化的点
- RNN网络模型,因为 串行执行,后一个t1 肯定需要t0的隐藏特征 作为入参,每一个后一步都要用到前一步的结果,不能并行执行,这个就是Transformer优化的地方
- RNN 对一句话解析没有重点,Transformer 引入自注意力机制(Self-Attention)来实现长距离的依赖关系建模
尽管RNN(循环神经网络)在处理序列数据上具有一定的优势,但它也存在一些限制。为了克服这些限制,Transformer 模型应运而生。
下面是一些推动 Transformer 模型出现的原因:
- 长期依赖性问题:传统的RNN在处理长序列时面临梯度消失或梯度爆炸的问题,难以有效捕捉长期依赖关系。而 Transformer 通过引入自注意力机制(Self-Attention)来实现长距离的依赖关系建模,从而更好地处理长序列。
- 并行计算:RNN 是逐步处理序列的,每个时间步的计算需要依赖前一个时间步的结果。这导致 RNN 无法进行有效的并行计算,限制了其在大规模数据上的训练效率。而 Transformer 使用自注意力机制,可以在每个时间步同时处理整个序列,使得计算可以并行进行,提高了训练效率。
- 全局信息交互:RNN 在处理序列时是逐步进行的,每个时间步只能看到有限的历史信息。而 Transformer 的自注意力机制允许每个位置都可以访问序列中的所有位置信息,实现了全局的信息交互,使得模型能够更好地理解整个序列的语义。
- 编码器-解码器架构:Transformer 借鉴了编码器-解码器架构,将其应用于机器翻译等任务。该架构可以同时处理源语言和目标语言的序列,使得模型能够更好地捕捉源语言和目标语言之间的关联性。
总体而言,Transformer 引入了自注意力机制和编码器-解码器架构,使得模型能够更好地处理长序列、实现全局信息交互,并提高并行计算效率。这使得 Transformer 成为处理自然语言处理(NLP)任务中的重要模型,如机器翻译、文本生成和语言理解等。然而,对于某些序列数据的特定情况,RNN 仍然可以是一个有效的选择。
Transformer 除了上面的还改动了什么?
除了网络模型的改动,word2vec 词向量能表达 文本特征,那么word2vec 有什么问题么?
- 相同的词在一起,不同的词 远一点。但是训练出来之后 ,这个词的词向量就不会变了,希望能在不同场景,语境中有不同的词向量
self-attention是什么?
目的是 对词做编码的时候,不是单单考虑当前这个词,而是当前词所处的上下文语境,把语境融入到当前词当中
self-attention如何计算
三个需要训练的矩阵
- Q query 要去查询的
- K Key 等着被查的
- V Value 实际的特征信息
自注意力(self-attention)是一种用于处理序列数据的机制,广泛应用于自然语言处理和计算机视觉领域。在自注意力机制中,输入序列中的每个元素都会与序列中的其他元素进行交互,以便捕捉全局上下文信息。
下面是一种常见的自注意力计算方法,称为Transformer中的Scaled Dot-Product Attention。
假设我们有一个输入序列X,其中包含N个元素。每个元素可以表示为X = [x₁, x₂, …, xₙ],其中 xᵢ 是一个d维的向量。自注意力的计算分为三个步骤:查询(Query)、键(Key)和值(Value)。
-
计算查询(Query)、键(Key)和值(Value):
- 通过将输入序列X与三个权重矩阵进行线性变换,分别得到查询(Q)、键(K)和值(V): Q = X · W_Q K = X · W_K V = X · W_V
- 这里的·表示矩阵乘法,W_Q、W_K 和 W_V 是学习的权重矩阵。
-
计算注意力权重:
- 通过计算查询(Q)和键(K)之间的点积得到未经缩放的注意力权重: A = QKᵀ
- 这里的ᵀ表示矩阵的转置。
-
归一化注意力权重并计算加权和:
- 将未经缩放的注意力权重A除以一个缩放因子 √d,其中 d 是查询(Q)和键(K)的维度的平方根: A = A / √d
- 将归一化的注意力权重通过softmax函数进行激活,得到最终的注意力权重矩阵: A = softmax(A)
- 将注意力权重矩阵与值(V)相乘,得到最终的自注意力表示: Y = AV
最后,得到的自注意力表示Y可以继续传递给后续的神经网络层或用于其他任务。
需要注意的是,上述描述中的线性变换和注意力计算是基于单个头(head)的自注意力机制。在实际应用中,常常使用多头注意力(multi-head attention)来增强模型的表达能力,通过并行计算多个注意力头并将它们的输出进行拼接或加权平均来得到最终的自注意力表示。