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

人工智能-注意力机制之残差连接和层规范化

残差连接和层规范化

层规范化和批量规范化的目标相同,但层规范化是基于特征维度进行规范化。尽管批量规范化在计算机视觉中被广泛应用,但在自然语言处理任务中(输入通常是变长序列)批量规范化通常不如层规范化的效果好。

以下代码对比不同维度的层规范化和批量规范化的效果。

ln = nn.LayerNorm(2)
bn = nn.BatchNorm1d(2)
X = torch.tensor([[1, 2], [2, 3]], dtype=torch.float32)
# 在训练模式下计算X的均值和方差
print('layer norm:', ln(X), '\nbatch norm:', bn(X))
layer norm: tensor([[-1.0000,  1.0000],
        [-1.0000,  1.0000]], grad_fn=<NativeLayerNormBackward0>)
batch norm: tensor([[-1.0000, -1.0000],
        [ 1.0000,  1.0000]], grad_fn=<NativeBatchNormBackward0>)

现在可以使用残差连接和层规范化来实现AddNorm类。暂退法也被作为正则化方法使用。

#@save
class AddNorm(nn.Module):
    """残差连接后进行层规范化"""
    def __init__(self, normalized_shape, dropout, **kwargs):
        super(AddNorm, self).__init__(**kwargs)
        self.dropout = nn.Dropout(dropout)
        self.ln = nn.LayerNorm(normalized_shape)

    def forward(self, X, Y):
        return self.ln(self.dropout(Y) + X)

残差连接要求两个输入的形状相同,以便加法操作后输出张量的形状相同。 

add_norm = AddNorm([3, 4], 0.5)
add_norm.eval()
add_norm(torch.ones((2, 3, 4)), torch.ones((2, 3, 4))).shape

 torch.Size([2, 3, 4])

 

 

 


http://www.kler.cn/a/144799.html

相关文章:

  • Vue框架学习笔记——键盘事件
  • k8s集群资源监控工具metrics-server安装
  • MyBatisPlus入门介绍
  • 原生实现底部弹窗效果 h5 小程序
  • system.setProperty导致的https血案
  • 人工智能学习1
  • 【数据结构】时间和空间复杂度
  • Linux系统常用指令大全(图文详解)
  • idea开发jface、swt环境搭建
  • 井盖位移传感器怎么监测井盖安全
  • SELinux零知识学习二十九、SELinux策略语言之类型强制(14)
  • 11 月 25 日 ROS 学习笔记——3D 建模与仿真
  • 等待多个请求(请求并发执行)都完成后结束Loading框
  • 前端路由hash和history的六大区别
  • 【LeetCode】挑战100天 Day15(热题+面试经典150题)
  • c++11新特性篇-可调用对象包装器, 绑定器
  • Python基础教程: sorted 函数
  • 河南省第五届“金盾信安杯”网络与数据安全大赛实操技能赛 部分wp(自己的一些思路和解析 )(主misc crypto )
  • 快手AI布局:从直播电商到大模型,如何打造智能生态?
  • C# 关于异常处理 try-catch语句的使用