【深度学习】transfomer之Add & Norm 和 Feed Forward

本文概述了深度学习中的三个重要概念:残差连接用于增加模型深度并对抗信号衰减,Norm(Normalization)实现数据分布的规范化,而FeedForward网络通过线性变换和激活函数模拟神经元处理词向量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Add(残差连接)

在这里插入图片描述

作用:使模型卷的更深,因为模型要重复N次,Add操作充分考虑了模型复杂度,抵抗模型深度所导致输入信号的衰减,

二、Norm(Normaliation正则化)

作用:把分散的分布重新拉回到正常的分布区间之中。

在这里插入图片描述

三、Feed Forward

前馈网络(feed-forward network)是一种常见的神经网络结构,由一个或多个线性变换和非线性激活函数组成。它的输入是一个词向量,经过一系列线性变换和激活函数处理之后,输出另一个词向量。
作用:模仿神经元结构,内置两组Linear数据进行转换。

### Transformer 解码器架构与实现 #### 解码器整体结构概述 解码器作为Transformer模型的一部分,在处理序列数据时起着至关重要的作用。其设计旨在接收编码器产生的上下文信息并逐步构建目标序列[^2]。 #### 输入准备 初始阶段,对于解码器而言,输入通常由两部分组成:一是来自前一时刻预测词的嵌入表示;二是经过位置编码后的这些向量。值得注意的是,在训练初期,当不存在先前时间步的结果时,则采用全零张量作为占位符[tgt],这有助于启动整个网络的工作流程[^4]。 #### 多头自注意力机制 为了捕捉不同位置之间的关系,解码器内部集成了多头自注意层。该组件允许模型关注同一句话内各个单词间复杂的依赖模式。具体来说,通过线性变换得到查询(Query)、键(Keys) 值(Values),再经softmax函数计算权重分布,最后加权求获得新的特征表达形式。此过程重复多次形成多个平行视图——即所谓的“头部”,从而增强表征能力[^1]。 #### 编码-解码交互模块 除了自我感知外,还需要引入跨域关联操作来融合源语句提供的背景线索。为此特别设置了另一个基于注意力原理构造的子单元,它接受来自编码器的记忆(memory)作为额外输入,并据此调整当前正在生成的目标片段的状态更新逻辑。 #### 防止未来信息泄露 考虑到因果顺序的重要性,即不允许后续元素影响前面已决定的内容,因此在实际部署中会对某些连接施加掩蔽(masking)策略。简单理解就是屏蔽掉那些不应该被看见的部分,确保每一步只依据已有知识推进下一步骤的选择[^3]。 #### 实现示例 下面给出一段简化版Python代码用于说明上述概念: ```python import torch.nn as nn class DecoderLayer(nn.Module): def __init__(self, d_model=512, nhead=8, dim_feedforward=2048, dropout=0.1): super().__init__() self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout) self.multihead_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout) self.linear1 = nn.Linear(d_model, dim_feedforward) self.dropout = nn.Dropout(dropout) self.linear2 = nn.Linear(dim_feedforward, d_model) self.norm1 = nn.LayerNorm(d_model) self.norm2 = nn.LayerNorm(d_model) self.norm3 = nn.LayerNorm(d_model) def forward(self, tgt, memory, tgt_mask=None, memory_mask=None, tgt_key_padding_mask=None, memory_key_padding_mask=None): # Self-attention over target sequence tgt2 = self.self_attn(tgt, tgt, tgt, attn_mask=tgt_mask)[0] # Add & Norm after first sublayer tgt = self.norm1(tgt + tgt2) # Cross-attention between encoder output and current state of decoder tgt2 = self.multihead_attn(query=tgt, key=memory, value=memory, attn_mask=memory_mask)[0] # Second add & norm operation tgt = self.norm2(tgt + tgt2) # Feed-forward network followed by final normalization step out = self.linear2(self.dropout(F.relu(self.linear1(tgt)))) return self.norm3(out + tgt) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值