当前位置: 首页 > news >正文

机械设备行业网站建设做凸透镜成像的网站

机械设备行业网站建设,做凸透镜成像的网站,wordpress在线报名,wordpress开发视频Transformer背后的核心概念#xff1a;注意力机制#xff1b;编码器-解码器结构#xff1b;多头注意力等#xff1b; 例如#xff1a;The cat sat on the mat#xff1b; 1、嵌入#xff1a; 首先#xff0c;模型将输入序列中的每个单词嵌入到一个高维向量中表示…Transformer背后的核心概念注意力机制编码器-解码器结构多头注意力等 例如The cat sat on the mat 1、嵌入 首先模型将输入序列中的每个单词嵌入到一个高维向量中表示这个嵌入过程允许模型捕捉单词之间的语义相似性。 2、查询键和值向量 接下来模型为序列中的每个单词计算向量查询向量、键和值向量。在训练过程中模型学习这些向量每个向量都有不同的作用。查询向量表示单词的查询即模型在序列中寻找的内容。键向量表示单词的键即序列中其他单词应该注意的内容。值向量表示单词的值即单词对输出所贡献的信息。 3、注意力分数 一旦模型计算了每个单词的查询、键和值向量它就会为序列中的每一对单词计算注意力分数。这通常通过取查询向量和键向量的点积来实现以评估单词之间的相似性。 4、softmax归一化 然后使用 softmax 函数对注意力分数进行归一化以获得注意力权重。这些权重表示每个单词应该关注序列中其他单词的程度。注意力权重较高的单词被认为对正在执行的任务更为关键。 5、加权求和 最后使用注意力权重计算值向量的加权和。这产生了每个序列中单词的自注意力机制输出捕获了来自其他单词的上下文信息。 代码举例 # 导入库 import torch import torch.nn.functional as F# 示例输入序列 input_sequence torch.tensor([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]])# 生成 Key、Query 和 Value 矩阵的随机权重 random_weights_key torch.randn(input_sequence.size(-1), input_sequence.size(-1)) random_weights_query torch.randn(input_sequence.size(-1), input_sequence.size(-1)) random_weights_value torch.randn(input_sequence.size(-1), input_sequence.size(-1))# 计算 Key、Query 和 Value 矩阵 key torch.matmul(input_sequence, random_weights_key) query torch.matmul(input_sequence, random_weights_query) value torch.matmul(input_sequence, random_weights_value)# 计算注意力分数 attention_scores torch.matmul(query, key.T) / torch.sqrt(torch.tensor(query.size(-1), dtypetorch.float32))# 使用 softmax 函数获得注意力权重 attention_weights F.softmax(attention_scores, dim-1)# 计算 Value 向量的加权和 output torch.matmul(attention_weights, value)print(自注意力机制后的输出:) print(output) Transformer基础 1、编码器-解码器结构 在transforemr的核心是编码器-解码器结构两个关键组件之间的共生关系分别负责输入序列和生成输出序列编码器和解码器中的每一层都包含相同的子层包括自注意力机制和前馈网络这种架构不仅有助于全面理解输入序列而且能够生成上下文丰富的输出序列 2、位置编码 尽管Transformer模型具有强大的功能但它缺乏对元素顺序的内在理解——这是位置编码所解决的一个缺点。通过将输入嵌入与位置信息结合起来位置编码使模型能够区分序列中元素的相对位置。这种细致的理解对于捕捉语言的时间动态和促进准确理解至关重要。 3、多头注意力 Transformer模型的一个显著特征是它能够同时关注输入序列的不同部分——这是多头注意力实现的。通过将查询、键和值向量分成多个头并进行独立的自注意力计算模型获得了对输入序列的细致透视丰富了其表示带有多样化的上下文信息。 4、前馈网络 与人类大脑能够并行处理信息的能力类似Transformer模型中的每一层都包含一个前馈网络——一种能够捕捉序列中元素之间复杂关系的多功能组件。通过使用线性变换和非线性激活函数前馈网络使模型能够在语言的复杂语义景观中航行促进文本的稳健理解和生成。 Transformer 组件的详细说明代码 要实现首先运行位置编码、多头注意力机制和前馈网络的代码然后是编码器、解码器和Transformer架构。 import math import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F 1、位置编码; 在Transformer模型中位置编码是一个关键组件它将关于标记位置的信息注入到输入嵌入中。 与循环神经网络RNNs或卷积神经网络CNNs不同Transformer 模型由于其结构性质缺乏对序列中标记位置的内在知识。这是因为 Transformer 主要依赖于自注意力机制该机制在处理输入序列时是置换不变的。这意味着自注意力机制本身无法区分序列中标记的位置也就是说它对输入序列的排列顺序不敏感。 1、问题缺乏位置信息:RNNs 通过其递归结构自然地捕捉序列的顺序信息因为它们逐步处理输入序列的每个元素。CNNs 则通过卷积核和池化层在空间上逐步缩小范围保留局部空间关系。相比之下Transformers 的自注意力机制在处理序列时可以在任意位置之间建立依赖关系这种特性使得它们缺乏对输入标记位置的内在感知。 2、解决办法位置编码为了使 Transformer 模型能够感知输入序列中的位置信息研究人员引入了位置编码Positional Encoding。位置编码是一种向量添加到输入序列的每个标记的嵌入向量中以提供位置信息。这些位置编码使模型能够区分序列中不同位置的标记并按照正确的顺序处理序列。可学习的位置编码是将位置编码作为模型参数进行学习。与固定位置编码不同可学习的位置编码在训练过程中会根据数据自动调整从而可能更适应特定任务和数据集。 3、位置编码的作用位置编码的主要作用是将位置信息显式地注入到输入序列中使得 Transformer 模型能够正确处理和理解序列顺序。这使得 Transformer 可以处理各种序列任务例如机器翻译、文本生成和时间序列预测。 代码 import torch import torch.nn as nn import mathclass PositionalEncoding(nn.Module):def __init__(self, embed_size, max_len5000):super(PositionalEncoding, self).__init__()pe torch.zeros(max_len, embed_size)position torch.arange(0, max_len, dtypetorch.float).unsqueeze(1)div_term torch.exp(torch.arange(0, embed_size, 2).float() * (-math.log(10000.0) / embed_size))pe[:, 0::2] torch.sin(position * div_term)pe[:, 1::2] torch.cos(position * div_term)pe pe.unsqueeze(0).transpose(0, 1)self.register_buffer(pe, pe)def forward(self, x):x x self.pe[:x.size(0), :]return x# 使用示例 embed_size 512 max_len 100 pos_encoder PositionalEncoding(embed_size, max_len) input_tensor torch.randn(max_len, 1, embed_size) # (sequence length, batch size, embed size) output_tensor pos_encoder(input_tensor) print(output_tensor.shape) # 应输出 torch.Size([100, 1, 512])在这个示例中PositionalEncoding 类定义了位置编码并在 forward 方法中将位置编码添加到输入张量上。这样输入序列的每个标记都会有一个唯一的位置编码使得模型能够感知和利用位置信息。 总结位置编码通过为 Transformer 模型提供位置信息解决了其缺乏对序列位置的内在感知的问题。通过将位置信息注入到输入序列中位置编码使得 Transformer 能够正确处理序列任务并在各种自然语言处理任务中取得了显著的效果。 位置编码的概念         通常在将输入嵌入传入Transformer模型之前会将位置编码添加到嵌入中。它由一组具有不同频率和相位的正弦函数组成允许模型根据它们在序列中的位置区分标记。 位置编码的公式如下 不同的位置编码方案 在Transformer中使用了各种位置编码方案每种方案都有其优点和缺点 固定位置编码在这种方案中位置编码是预定义的并对所有序列固定不变。虽然简单高效但固定位置编码可能无法捕捉序列中的复杂模式。 学习位置编码另一种选择是在训练过程中学习位置编码使模型能够自适应地从数据中捕捉位置信息。学习位置编码提供了更大的灵活性但需要更多的参数和计算资源。 2、多头注意力机制 在Transformer架构中多头注意力机制是一个关键组件它使模型能够同时关注输入序列的不同部分。它允许模型捕捉序列内的复杂依赖关系和关联从而提高了语言翻译、文本生成和情感分析等任务的性能 多头注意力机制的重要性 多头注意力机制具有几个优点 并行化通过同时关注输入序列的不同部分多头注意力显著加快了计算速度使其比传统的注意力机制更加高效。 增强表示每个注意力头都关注输入序列的不同方面使模型能够捕捉各种模式和关系。这导致输入的表示更丰富、更强大增强了模型理解和生成文本的能力。 改进泛化性多头注意力使模型能够关注序列内的局部和全局依赖关系从而提高了跨不同任务和领域的泛化性。 多头注意力的计算 让我们分解计算多头注意力所涉及的步骤 线性变换输入序列经历可学习的线性变换将其投影到多个较低维度的表示称为“头”。每个头关注输入的不同方面使模型能够捕捉各种模式。 缩放点积注意力每个头独立地计算输入序列的查询、键和值表示之间的注意力分数。这一步涉及计算令牌及其上下文之间的相似度乘以模型深度的平方根进行缩放。得到的注意力权重突出了每个令牌相对于其他令牌的重要性。 连接和线性投影来自所有头的注意力输出被连接并线性投影回原始维度。这个过程将来自多个头的见解结合起来增强了模型理解序列内复杂关系的能力 代码 # 多头注意力的代码实现 class MultiHeadAttention(nn.Module):def __init__(self, d_model, num_heads):super(MultiHeadAttention, self).__init__()self.num_heads num_headsself.d_model d_modelassert d_model % num_heads 0self.depth d_model // num_heads# 查询、键和值的线性投影self.query_linear nn.Linear(d_model, d_model)self.key_linear nn.Linear(d_model, d_model)self.value_linear nn.Linear(d_model, d_model)# 输出线性投影self.output_linear nn.Linear(d_model, d_model)def split_heads(self, x):batch_size, seq_length, d_model x.size()return x.view(batch_size, seq_length, self.num_heads, self.depth).transpose(1, 2)def forward(self, query, key, value, maskNone):# 线性投影query self.query_linear(query)key self.key_linear(key)value self.value_linear(value)# 分割头部query self.split_heads(query)key self.split_heads(key)value self.split_heads(value)# 缩放点积注意力scores torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(self.depth)# 如果提供了掩码则应用掩码if mask is not None:scores scores.masked_fill(mask 0, -1e9)# 计算注意力权重并应用softmaxattention_weights torch.softmax(scores, dim-1)# 应用注意力到值attention_output torch.matmul(attention_weights, value)# 合并头部batch_size, _, seq_length, d_k attention_output.size()attention_output attention_output.transpose(1, 2).contiguous().view(batch_size,seq_length, self.d_model)# 线性投影attention_output self.output_linear(attention_output)return attention_output# 示例用法 d_model 512 max_len 100 num_heads 8 d_ff 2048# 多头注意力 multihead_attn MultiHeadAttention(d_model, num_heads)# 示例输入序列 input_sequence torch.randn(5, max_len, d_model)# 多头注意力 attention_output multihead_attn(input_sequence, input_sequence, input_sequence) print(attention_output shape:, attention_output.shape) 3、前馈网络 在Transformer的背景下前馈网络在处理信息和从输入序列中提取特征方面发挥着关键作用。它们是模型的支柱促进了不同层之间表示的转换。 前馈网络的作用 每个Transformer层内的前馈网络负责对输入表示应用非线性变换。它使模型能够捕捉数据中的复杂模式和关系促进了高级特征的学习。 前馈层的结构和功能 前馈层由两个线性变换组成两者之间通过一个非线性激活函数通常是ReLU分隔。让我们来解析一下结构和功能 线性变换1使用可学习的权重矩阵将输入表示投影到更高维度的空间中。 非线性激活第一个线性变换的输出通过非线性激活函数例如ReLU传递。这引入了模型的非线性使其能够捕捉数据中的复杂模式和关系。 线性变换2激活函数的输出然后通过另一个可学习的权重矩阵投影回原始的维度空间中。 # 前馈网络的代码实现 class FeedForward(nn.Module):def __init__(self, d_model, d_ff):super(FeedForward, self).__init__()self.linear1 nn.Linear(d_model, d_ff)self.linear2 nn.Linear(d_ff, d_model)self.relu nn.ReLU()def forward(self, x):# 线性变换1x self.relu(self.linear1(x))# 线性变换2x self.linear2(x)return x# 示例用法 d_model 512 max_len 100 num_heads 8 d_ff 2048# 多头注意力 multihead_attn MultiHeadAttention(d_model, num_heads)# 前馈网络 ff_network FeedForward(d_model, d_ff)# 示例输入序列 input_sequence torch.randn(5, max_len, d_model)# 多头注意力 attention_output multihead_attn(input_sequence, input_sequence, input_sequence)# 前馈网络 output_ff ff_network(attention_output) print(input_sequence,input_sequence.shape) print(output_ff, output_ff.shape) 4、编码器 在Transformer模型中起着至关重要的作用其主要任务是将输入序列转换为有意义的表示捕捉输入的重要信息。 每个编码器层的结构和功能 编码器由多个层组成每个层依次包含以下组件输入嵌入、位置编码、多头自注意力机制和位置逐点前馈网络。 输入嵌入我们首先将输入序列转换为密集向量表示称为输入嵌入。我们使用预训练的词嵌入或在训练过程中学习的嵌入将输入序列中的每个单词映射到高维向量空间中。 位置编码我们将位置编码添加到输入嵌入中以将输入序列的顺序信息合并到其中。这使得模型能够区分序列中单词的位置克服了传统神经网络中缺乏顺序信息的问题。 多头自注意力机制在位置编码之后输入嵌入通过一个多头自注意力机制。这个机制使编码器能够根据单词之间的关系权衡输入序列中不同单词的重要性。通过关注输入序列的相关部分编码器可以捕捉长距离的依赖关系和语义关系。 位置逐点前馈网络在自注意力机制之后编码器对每个位置独立地应用位置逐点前馈网络。这个网络由两个线性变换组成两者之间通过一个非线性激活函数通常是ReLU分隔。它有助于捕捉输入序列中的复杂模式和关系。 代码 # 编码器的代码实现 class EncoderLayer(nn.Module):def __init__(self, d_model, num_heads, d_ff, dropout):super(EncoderLayer, self).__init__()self.self_attention MultiHeadAttention(d_model, num_heads)self.feed_forward FeedForward(d_model, d_ff)self.norm1 nn.LayerNorm(d_model)self.norm2 nn.LayerNorm(d_model)self.dropout nn.Dropout(dropout)def forward(self, x, mask):# 自注意力层attention_output self.self_attention(x, x,x, mask)attention_output self.dropout(attention_output)x x attention_outputx self.norm1(x)# 前馈层feed_forward_output self.feed_forward(x)feed_forward_output self.dropout(feed_forward_output)x x feed_forward_outputx self.norm2(x)return xd_model 512 max_len 100 num_heads 8 d_ff 2048# 多头注意力 encoder_layer EncoderLayer(d_model, num_heads, d_ff, 0.1)# 示例输入序列 input_sequence torch.randn(1, max_len, d_model)# 多头注意力 encoder_output encoder_layer(input_sequence, None) print(encoder output shape:, encoder_output.shape) 在 Transformer 模型中掩码mask有几个关键的用途主要是为了确保模型正确处理输入序列中的特定位置防止不相关的信息影响注意力机制的计算。下面解释掩码的具体原因和作用 填充掩码Padding Mask 原因 在处理变长序列时为了使得序列长度一致我们通常会在较短的序列末尾添加填充标记padding tokens。这些填充标记并不包含有用的信息因此在计算注意力权重时需要忽略这些位置。 作用 填充掩码用于屏蔽填充位置确保这些位置的值不会对注意力计算产生影响。这可以防止模型在训练时将填充位置误认为有意义的数据从而提高模型的性能和稳定性。 示例 假设输入序列 [A, B, C, PAD, PAD]其中 PAD 表示填充标记。掩码会确保注意力计算时忽略 PAD 位置只考虑实际数据 [A, B, C]。 序列掩码Sequence Mask 在自回归任务如文本生成、翻译等中解码器在生成每个位置的输出时只能使用之前生成的标记而不能看到未来的标记。 作用 序列掩码用于屏蔽解码器中未来位置的信息确保在生成第 t 个标记时只能使用第 1 到第 t-1 个标记。这可以防止模型在训练过程中作弊从而提高生成任务的性能。 示例 假设解码器在生成序列 [X1, X2, X3] 时在生成 X2 时只能看到 X1而不能看到 X3。 这样通过使用掩码我们可以确保模型在处理序列数据时正确忽略填充位置只关注实际的数据避免不相关信息的干扰提高模型的性能和稳定性。 5、解码器 在Transformer模型中解码器在基于输入序列的编码表示生成输出序列方面起着至关重要的作用。它接收来自编码器的编码输入序列并将其用于生成最终的输出序列。 解码器的功能 解码器的主要功能是生成输出序列同时注意到输入序列的相关部分和先前生成的标记。它利用输入序列的编码表示来理解上下文并对生成下一个标记做出明智的决策。 解码器层及其组件 解码器层包括以下组件 输出嵌入右移在处理输入序列之前模型将输出嵌入向右移动一个位置。这确保解码器中的每个标记在训练期间都能从先前生成的标记接收到正确的上下文。解释在序列生成任务中例如机器翻译、文本生成等我们希望模型能够逐步生成序列中的每一个标记。假设我们有一个目标序列 [y1, y2, y3, y4]在生成标记 yt 时我们希望模型只能使用之前生成的标记 [y1, ..., yt-1] 作为上下文而不能看到未来的标记 [yt1, ..., y4]。在训练过程中我们一次性提供整个目标序列 [y1, y2, y3, y4] 给模型。训练过程中的问题如果不做任何处理模型在生成每个标记时都可以看到整个目标序列这与实际推理过程不符因为在推理过程中模型生成每个标记时只能依赖之前生成的标记。解决方案右移目标序列为了模拟推理时逐步生成的过程我们在训练时将目标序列右移一个位置形成一个新的输入序列。这样模型在生成第 t 个标记时只能看到前面的 t-1 个标记而看不到第 t 个及后面的标记。具体操作假设目标序列是 [BOS, y1, y2, y3, EOS]其中 BOS 是序列开始标记EOS 是序列结束标记。 实际操作中的示例 假设我们有一个目标序列 [1, 2, 3, 4]模型在训练时需要生成该序列。原始目标序列[1, 2, 3, 4]。右移后的序列[BOS, 1, 2, 3]。模型输入和目标输出模型输入[BOS, 1, 2, 3]目标输出[1, 2, 3, 4] 通过这种方式模型在生成每个标记时只能看到前面的标记。例如在生成 1 时只能看到 BOS。在生成 2 时只能看到 BOS 和 1。在生成 3 时只能看到 BOS、1 和 2。在生成 4 时只能看到 BOS、1、2 和 3。 位置编码与编码器类似模型将位置编码添加到输出嵌入中以合并标记的顺序信息。这种编码帮助解码器根据标记在序列中的位置进行区分。 掩码的多头自注意力机制解码器采用掩码的多头自注意力机制以便注意输入序列的相关部分和先前生成的标记。在训练期间模型应用掩码以防止注意到未来的标记确保每个标记只能注意到前面的标记。在 Transformer 模型中掩码的多头自注意力机制是一个关键组件尤其是在解码器部分。它通过引入掩码确保每个标记在生成过程中只能关注到之前生成的标记而不会看到未来的标记。这对于确保模型在训练和推理过程中行为一致至关重要。多头自注意力机制允许模型在输入序列中不同位置之间建立依赖关系。然而为了确保模型在生成序列时只关注之前的标记我们引入了掩码mask。总结输出嵌入右移确保输入序列在每一步生成时只包含之前的标记。掩码进一步确保注意力计算时只关注到之前的位置。 编码器-解码器注意力机制除了掩码的自注意力机制外解码器还包括编码器-解码器注意力机制。这种机制使解码器能够注意到输入序列的相关部分有助于生成受输入上下文影响的输出标记。 位置逐点前馈网络在注意力机制之后解码器对每个标记独立地应用位置逐点前馈网络。这个网络捕捉输入和先前生成的标记中的复杂模式和关系有助于生成准确的输出序列。 5、Transformer 模型架构 Transformer模型概述; 在其核心Transformer模型由编码器和解码器模块堆叠在一起用于处理输入序列并生成输出序列。以下是架构的高级概述 编码器 编码器模块处理输入序列提取特征并创建输入的丰富表示。 它由多个编码器层组成每个层包含自注意力机制和前馈网络。 自注意力机制允许模型同时关注输入序列的不同部分捕捉依赖关系和关联。 我们将位置编码添加到输入嵌入中以提供有关序列中标记位置的信息。 解码器 解码器模块以编码器的输出作为输入并生成输出序列。 与编码器类似它由多个解码器层组成每个层包含自注意力、编码器-解码器注意力和前馈网络。 除了自注意力外解码器还包含编码器-解码器注意力以在生成输出时关注输入序列。 与编码器类似我们将位置编码添加到输入嵌入中以提供位置信息。 连接和标准化 在编码器和解码器模块的每一层之间都有残差连接后跟层标准化。 这些机制有助于在网络中流动梯度并有助于稳定训练。 6、模型的训练与评估 训练Transformer模型涉及优化其参数以最小化损失函数通常使用梯度下降和反向传播。一旦训练完成就会使用各种指标评估模型的性能以评估其解决目标任务的有效性。 训练过程 在训练期间将输入序列输入模型并生成输出序列。 将模型的预测与GT进行比较涉及使用损失函数例如交叉熵损失来衡量预测值与实际值之间的差异。 梯度下降用于更新模型的参数使损失最小化的方向。 优化器根据这些梯度调整参数迭代更新它们以提高模型性能。 学习率调度     可以应用学习率调度技术来动态调整训练期间的学习率。 常见策略包括热身计划其中学习率从低开始逐渐增加以及衰减计划其中学习率随时间降低。 评估指标 困惑度 困惑度是用于评估语言模型性能的常见指标包括Transformer。 它衡量模型对给定标记序列的预测能力。 较低的困惑度值表示更好的性能理想值接近词汇量大小。 BLEU分数 BLEU双语评估研究分数通常用于评估机器翻译文本的质量。 它将生成的翻译与一个或多个由人类翻译人员提供的参考翻译进行比较。 BLEU分数范围从0到1较高的分数表示更好的翻译质量。 Ref一文彻底搞懂 Transformer图解手撕
http://www.zqtcl.cn/news/522025/

相关文章:

  • 佛山住房和城乡建设厅网站wordpress图片外链转内链
  • 海东高端网站建设价格wordpress侧边栏淘宝客
  • 网站功能建设中页面wordpress让投稿
  • 学校网站 asp网站结构方面主要做哪些优化
  • 深圳做网站(信科网络)做网站需要多少资金
  • 做网站实例教程网站图片的作用
  • 网站建设展板营销渠道的三个类型
  • 用php做视频网站有哪些十大免费logo设计
  • 网站建设对于网络营销的意义微信购物商城
  • 基于个性化推荐的电商网站设计与实现网站 用户体验的重要性
  • 怎么用ajax做电商网站企业网查询是什么
  • 海淀企业网站建设张店学校网站建设公司
  • 专业微网站开发做购物网站怎么赚钱
  • 怎样做酒店网站ppt什么是企业网络营销平台
  • 科技部网站改版方案济南众筹网站建设
  • 中国城乡与住房建设部网站电子商务公司名字推荐
  • 设计参考网站有哪些wordpress 支付宝免签
  • 网站关键词排名优化应该怎么做外包加工网缝纫机外放加工活
  • 电影网站建设模板从传播的角度
  • 北京建网站的公司广州冼村和猎德村哪个最有钱
  • 成都网站建设有限公司济南j建设网
  • 一家网站建设公司需要什么资质互联网网站模块
  • 网站开发php支付接口网站平台建设缴纳什么税
  • 百度文库推广网站庆云网站seo
  • 全网通网站wordpress 按点击调用热门文章
  • 添加网站栏目的步骤网站需求分析怎么做
  • 做网站用那一种语言最好武邑网站建设价格
  • 哈尔滨网站制作招聘互动的网站
  • 专业网站建设品牌网站建设基础课件
  • 自学网站编程网站建设银行北京冬奥会纪念币发行时间