网站的营销功能,wordpress 数据库被黑,视频外链在线生成,店铺域名是什么意思目录
Transformer网络是什么#xff1f;
输入模块结构#xff1a;
编码器模块结构#xff1a;
解码器模块:
输出模块结构#xff1a;
Transformer 具体是如何工作的#xff1f;
Transformer核心思想是什么#xff1f;
Transformer的代码架构
自注意力机制是什么…目录
Transformer网络是什么
输入模块结构
编码器模块结构
解码器模块:
输出模块结构
Transformer 具体是如何工作的
Transformer核心思想是什么
Transformer的代码架构
自注意力机制是什么
多头注意力有什么用
前馈神经网络
编码器Encoder
解码器Decoder
基于卷积神经网络CNN的编码器-解码器结构
基于Transformer架构的主流语言模型有哪些 【本文摘录自清华大学出版社《深度学习和大模型原理与实践》】各网站有销售京东地址
https://item.jd.com/10130571131098.html
Transformer网络是什么
是一种基于注意力机制attention mechanism的神经网络架构最初由Vaswani等人在论文《Attention Is All You Need》中提出。它在自然语言处理NLP领域取得了巨大成功特别是在机器翻译任务中。
传统的循环神经网络RNNs和长短时记忆网络LSTM在处理长距离依赖关系时存在一些问题而Transformer引入了自注意力机制来解决这些问题。自注意力机制允许模型在处理序列数据时关注输入序列中的不同位置而不仅仅是当前位置。这使得Transformer能够并行处理输入序列加速训练。
Transformer模型设计之初用于解决机器翻译问题是完全基于注意力机制构建的编码器-解码器架构编码器和解码器均由若干个具有相同结构的层叠加而成每一层的参数不同。编码器主要负责将输入序列转化为一个定长的向量表示解码器则将这个向量解码为输出序列。Transformer总体架构可分为四个部分输入部分、编码器、解码器、输出部分。
如何理解Transformer 架构
第一Transformer 架构。它是模型的底座但 Transformer 不等于大模型但大模型的架构可以基于 Transformer第二GPT。严格意义上讲GPT 可能不算是一个模型更像是一种预训练范式它本身模型架构是基于 Transformer但 GPT 引入了“预测下一个词”的任务即不断通过前文内容预测下一个词。之后在大量的数据上进行学习才达到大模型的效果。
输入模块结构
源文本嵌入层及其位置编码器目标文本嵌入层及其位置编码器
编码器模块结构
由N个编码器层堆叠而成每个编码器层由两个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层、规范化层和一个残差连接第二个子层连接结构包括一个前馈全连接子层、规范化层和一个残差连接
编码器encoder包含两层一个self-attention层和一个前馈神经网络self-attention能帮助当前节点不仅仅只关注当前的词从而能获取到上下文的语义。
解码器模块:
由N个解码器层堆叠而成每个解码器层由三个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层、规范化层和一个残差连接第二个子层连接结构包括一个多头注意力子层、规范化层和一个残差连接第三个子层连接结构包括一个前馈全连接子层、规范化层和一个残差连接
解码器decoder也包含encoder提到的两层网络但是在这两层中间还有一层attention层帮助当前节点获取到当前需要关注的重点内容。
输出模块结构
线性层softmax层 Transformer 具体是如何工作的
首先是对输入进行标识符化基于单词形式或字母或字符子串将输入文本切分成几个 token对应到字典中的 ID 上并对每个 ID 分配一个可学习的权重作为向量表示之后就可以针对做训练这是一个可学习的权重。
在输入 Transformer 结构之后其核心的有自注意力模块和前向传播层。而在自注意力模块中Transformer 自注意力机制建模能力优于 RNN 序列建模能力。因此有了 Transformer 架构后基本上就解决了运行效率和训练很大模型的问题。
Transformer核心思想是什么
自注意力机制Self-Attention 模型能够同时考虑输入序列中的所有位置而不是像传统的固定窗口大小的卷积或循环神经网络一样逐步处理。 传统的神经网络在处理序列数据时对每个位置的信息处理是固定的而自注意力机制允许模型在处理每个位置时关注输入序列的其他部分从而更好地捕捉全局信息。
位置编码Positional Encoding 由于Transformer没有显式的顺序信息为了保留输入序列中元素的位置信息需要添加位置编码。
多头注意力Multi-Head Attention 将自注意力机制应用多次通过多个注意力头来捕捉不同的关系。
前馈神经网络Feedforward Neural Network 每个注意力子层后接一个前馈神经网络用于学习非线性关系。
Transformer的成功不仅限于NLP领域还在计算机视觉等领域取得了重要进展。由于其并行计算的优势Transformer已成为深度学习中的经典模型之一被广泛用于各种任务。
Transformer的代码架构
因为它涉及到自注意力机制、位置编码、多头注意力等多个关键概念。
import torch
import torch.nn as nnclass PositionalEncoding(nn.Module):def __init__(self, d_model, max_len512):super(PositionalEncoding, self).__init__()self.encoding torch.zeros(max_len, d_model)position torch.arange(0, max_len).unsqueeze(1).float()div_term torch.exp(torch.arange(0, d_model, 2).float() * -(torch.log(torch.tensor(10000.0)) / d_model))self.encoding[:, 0::2] torch.sin(position * div_term)self.encoding[:, 1::2] torch.cos(position * div_term)self.encoding self.encoding.unsqueeze(0)def forward(self, x):return x self.encoding[:, :x.size(1)].detach()class TransformerModel(nn.Module):def __init__(self, vocab_size, d_model, nhead, num_encoder_layers, num_decoder_layers):super(TransformerModel, self).__init__()self.embedding nn.Embedding(vocab_size, d_model)self.positional_encoding PositionalEncoding(d_model)self.transformer nn.Transformer(d_model, nhead, num_encoder_layers, num_decoder_layers)self.fc nn.Linear(d_model, vocab_size)def forward(self, src, tgt):src self.embedding(src)src self.positional_encoding(src)tgt self.embedding(tgt)tgt self.positional_encoding(tgt)output self.transformer(src, tgt)output self.fc(output)return output# 定义模型
vocab_size 10000 # 词汇表大小
d_model 512 # 模型维度
nhead 8 # 多头注意力的头数
num_encoder_layers 6 # 编码器层数
num_decoder_layers 6 # 解码器层数model TransformerModel(vocab_size, d_model, nhead, num_encoder_layers, num_decoder_layers)# 定义输入
src torch.randint(0, vocab_size, (10, 32)) # 10个序列每个序列长度为32
tgt torch.randint(0, vocab_size, (20, 32)) # 20个序列每个序列长度为32# 前向传播
output model(src, tgt)自注意力机制是什么
Self Attention 先看例子下列句子是我们想要翻译的输入句子 The animal didn’t cross the street because it was too tired 这个“it”在这个句子是指什么呢它指的是street还是这个animal呢这对于人类来说是一个简单的问题但是对于算法则不是。 当模型处理这个单词“it”的时候自注意力机制会允许“it”与“animal”建立联系。 随着模型处理输入序列的每个单词自注意力会关注整个输入序列的所有单词帮助模型对本单词更好地进行编码。 如果你熟悉RNN循环神经网络回忆一下它是如何维持隐藏层的。RNN会将它已经处理过的前面的所有单词/向量的表示与它正在处理的当前单词/向量结合起来。而自注意力机制会将所有相关单词的理解融入到我们正在处理的单词中 当我们在编码器#5栈中最上层编码器中编码“it”这个单词的时注意力机制的部分会去关注“The Animal”将它的表示的一部分编入“it”的编码中。 自注意力机制Self-Attention Mechanism是Transformer模型的核心组成部分之一用于处理输入序列中各个位置之间的依赖关系。以下是对自注意力机制的详细解读
注意力的概念 注意力机制模拟了人类视觉系统的工作原理即在处理某个任务时我们不是对所有信息一视同仁而是在某个时刻关注一部分信息而另一时刻可能关注其他信息。在自注意力机制中模型通过学习到的权重分配给输入序列中的不同位置以便在生成输出时更加关注相关的部分。
自注意力机制的基本原理
Query查询 通过将输入序列与权重矩阵相乘得到每个位置的查询向量。查询向量用于衡量每个位置与其他位置的相关性。 Key键 通过将输入序列与权重矩阵相乘得到每个位置的键向量。键向量用于被查询向量衡量从而计算注意力分布。 Value值 通过将输入序列与权重矩阵相乘得到每个位置的值向量。值向量将根据注意力分布加权求和形成最终的输出。 注意力分布计算
计算相似度 通过查询向量和键向量的点积计算每个位置的相似度得分。 缩放 为了避免相似度过大导致的梯度消失或梯度爆炸问题一般会对相似度进行缩放常用的缩放因子是输入维度的平方根。 Softmax 对缩放后的相似度应用Softmax函数得到注意力权重分布。Softmax确保所有权重的总和为1使其成为有效的概率分布。 注意力加权求和 将值向量按照得到的注意力权重进行加权求和得到最终的自注意力输出。 多头注意力Multi-Head Attention 为了增强模型的表达能力自注意力机制通常会使用多个独立的注意力头。每个头学习不同的查询、键、值权重矩阵最后将多个头的输出拼接在一起并通过线性映射进行融合。
位置编码Positional Encoding 自注意力机制没有直接考虑序列中元素的顺序为了捕捉序列的位置信息常常会在输入序列中添加位置编码。位置编码是一个与位置有关的可学习参数使得模型能够更好地处理序列的顺序信息。
多头注意力有什么用
多头注意力机制的引入具有以下几个优势
多头并行计算 不同注意力头可以并行计算提高了计算效率。 学习不同表示 不同头关注输入序列的不同部分有助于模型学习更丰富、更复杂的特征表示。 提高模型泛化能力 多头注意力可以使模型在处理不同类型的信息时更加灵活提高了模型的泛化能力。 通过这种方式多头注意力机制在Transformer模型中起到了至关重要的作用使得模型能够更好地捕捉输入序列中的关系提高了模型的表达能力。
前馈神经网络
前馈神经网络Feedforward Neural Network是一种最基本的神经网络结构也被称为多层感知机Multilayer PerceptronMLP。在深度学习中前馈神经网络被广泛应用于各种任务包括图像分类、语音识别、自然语言处理等。下面是对前馈神经网络的详细解读
1. 基本结构 前馈神经网络由输入层、隐藏层和输出层组成。每一层都包含多个神经元或称为节点每个神经元与上一层的所有神经元都有连接连接上带有权重。每个连接上都有一个权重表示连接的强度。
输入层Input Layer 接受输入特征的层每个输入特征对应一个输入层神经元。
隐藏层Hidden Layer 在输入层和输出层之间的一层或多层神经元负责学习输入数据中的复杂模式。
输出层Output Layer 提供网络的输出输出的维度通常与任务的要求相匹配例如对于二分类任务可以有一个输出神经元表示两个类别的概率。
2. 激活函数 每个神经元在接收到输入后会通过激活函数进行非线性变换。常用的激活函数包括
Sigmoid 函数 将输入映射到范围 ((0, 1))适用于二分类问题。
Hyperbolic Tangenttanh函数 将输入映射到范围 ((-1, 1))具有零中心性有助于减少梯度消失问题。
Rectified Linear UnitReLU函数 对于正数输入输出等于输入对于负数输入输出为零。ReLU 是目前最常用的激活函数之一。
Softmax 函数 用于多分类问题的输出层将输出转化为概率分布。
3. 前向传播 前馈神经网络的训练过程中信息从输入层传播到输出层的过程称为前向传播。具体步骤如下
输入层接收输入特征。
每个神经元接收来自上一层神经元的输入计算加权和。
加权和经过激活函数进行非线性变换得到每个神经元的输出。
输出传递到下一层作为输入重复以上步骤。
最终网络的输出被用于任务的预测。
编码器解码器 编码器-解码器结构是深度学习中常用的一种网络架构特别在图像分割和生成任务中得到广泛应用。以下是对编码器-解码器结构的详细解读
编码器Encoder
特征提取 编码器的主要作用是从输入数据中提取关键特征。对于图像任务输入通常是图像编码器通过一系列卷积层Convolutional Layers进行特征提取。这些卷积层可以捕捉图像中的低级别和高级别特征例如边缘、纹理和对象形状。
降维 随着网络深度的增加编码器通常会进行降维操作通过池化层Pooling Layers或步幅较大的卷积层减小特征图的尺寸。这有助于减少计算复杂性和内存需求并提高网络对输入的抽象表示能力。
语义信息提取 在编码器的高层级特征表示中网络通常能够捕捉到更抽象的语义信息例如图像中的物体类别、结构等。这些特征通常被称为“语义特征”。
解码器Decoder
上采样 解码器负责将编码器提取的特征映射还原为输入数据的尺寸。这通常涉及到上采样操作其中通过插值或反卷积操作将特征图的尺寸放大。
特征融合 解码器通常需要与编码器的相应层进行特征融合以保留从输入到编码器的层次结构中学到的语义信息。这可以通过连接编码器和解码器的相应层来实现形成所谓的“跳跃连接”Skip Connections。
重建输出 解码器的最终目标是生成与输入数据相匹配的输出。对于图像分割任务输出通常是一个与输入图像尺寸相同的特征图其中每个像素或区域对应一个类别的概率或标签。
基于卷积神经网络CNN的编码器-解码器结构
import torch
import torch.nn as nnclass EncoderDecoder(nn.Module):def __init__(self):super(EncoderDecoder, self).__init__()# 编码器部分self.encoder nn.Sequential(nn.Conv2d(3, 64, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),nn.Conv2d(64, 128, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2)# 添加更多卷积层和池化层...)# 解码器部分self.decoder nn.Sequential(# 添加上采样层和特征融合...nn.Conv2d(128, 64, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Upsample(scale_factor2, modebilinear, align_cornersFalse),nn.Conv2d(64, 32, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Upsample(scale_factor2, modebilinear, align_cornersFalse),nn.Conv2d(32, 1, kernel_size3, padding1),nn.Sigmoid() # 用于二分类任务时添加Sigmoid激活函数)def forward(self, x):# 编码器前向传播x self.encoder(x)# 解码器前向传播x self.decoder(x)return x# 创建模型实例
model EncoderDecoder()# 打印模型结构
print(model)编码器和解码器的结构可能会更加复杂具体的设计取决于任务的要求和数据集的特点。上述代码中使用的是PyTorch的简单卷积层、池化层和上采样层实际场景中可能需要更深的网络结构和更复杂的组件。
基于Transformer架构的主流语言模型有哪些
一是自编码模型如 BERT简单讲就是给到一句话然后把这句话的内容挖空当问及挖空的内容时就把内容填回去这其实是典型地用来做一个自然语言理解的任务但做生成任务是非常弱的
二是自回归模型如 GPT它是通过不断地预测下一个词特点是只能从左到右生成而看不到后面的内容。GPT-1 最后接了一个 Linear 层做分类或选题题等任务到了 GPT-2 已经将一些选择任务或者分类任务全部都变成文本任务统一了生成的范式
三是编码器-解码器模型如 T5它的输入和输出是分为比较明显的两块内容或者是问答式或者序列到序列的转换型的任务
四是通用语言模型如 GLM该模型结合了自回归和自编码两种形式的模型举个例子“123456”是一串输入的序列现在把 “3”、“5”、“6” 挖空让模型去学习那么挖空以后换成一个 “ mask token” 告诉模型这个地方遮掉了一些内容现在需要去预测出来遮掉的内容。