0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全面总结深度学习中的归一化技术

新机器视觉 来源:DeepHub IMBA 作者:Maciej Balawejder 2022-04-28 15:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

训练深度神经网络是一项具有挑战性的任务。多年来,研究人员提出了不同的方法来加速和稳定学习过程。归一化是一种被证明在这方面非常有效的技术。

7166194c-c6a9-11ec-bce3-dac502259ad0.png

在这篇文章中,我将使用类比和可视化的方式来回顾这些方法中,这将帮助您了解它们的产生的原因和思维过程。

为什么要归一化?

例如,我们现在用两个特征构建一个简单的神经网络模型。这两个特征一个是年龄:范围在 0 到 65 之间,另一个是工资:范围从 0 到 10 000。我们将这些特征提供给模型并计算梯度。

71740e12-c6a9-11ec-bce3-dac502259ad0.png

不同规模的输入导致不同的权重更新和优化器的步骤向最小值的方向不均衡。这也使损失函数的形状不成比例。在这种情况下,就需要使用较低的学习速率来避免过冲,这就意味着较慢的学习过程。

所以我们的解决方案是输入进行归一化,通过减去平均值(定心)并除以标准偏差来缩小特征。

7180a906-c6a9-11ec-bce3-dac502259ad0.png

718e25ae-c6a9-11ec-bce3-dac502259ad0.png

此过程也称为“漂白”,处理后所有的值具有 0 均值和单位方差,这样可以提供更快的收敛和更稳定的训练。

这是一个很好的解决方案,那么为什么我们不规范化网络中每一层的激活呢?

下面我们先看一下针对于激活的归一化方法

Batch Normalization

719cadea-c6a9-11ec-bce3-dac502259ad0.png

2015 年,Sergey Ioffe 和 Christian Szegedy[3] 采用了这个想法来解决内部协变量偏移问题。以前输入层分布由于权值的更新而不断变化。所以下面的层总是需要适应新的分布,它会导致收敛速度变慢和训练不稳定。

批量标准化提供了一种控制和优化每一层之后的分布的方法。该过程与输入归一化相同,但我们添加了两个可学习的参数,γ 和 β。

通过代码来说明要比枯燥的公式好的多,所以BN的代码如下:

def BatchNorm(x, gamma, beta, eps=1e-5): # x: input shape [N, C, H, W] N, C, H, W = x.shape mean = torch.mean(input=x, dim=[0,2,3], keepdim=True) var = torch.var(input=x, dim=[0,2,3], keepdim=True) # mean, var shape : [1, C, 1, 1] x = (x - mean) / torch.sqrt(var + eps) return x * gamma + beta

这两个参数是通过反向传播沿着网络学习的。他们通过缩放(γ)和移动(β)激活优化分布。

71acf984-c6a9-11ec-bce3-dac502259ad0.png

由于有固定的分布,所以可以提高学习率并加快收敛速度。除了计算提升之外,BN 还可以作为一种正则化技术。数据集统计数据的近似产生的噪声消除了对 Dropout 的需要。

但这是一把双刃剑。这种估计仅适用于较大的批次。当批次数量较少时,性能会急剧下降。

71bc0190-c6a9-11ec-bce3-dac502259ad0.png

BN 的另一个缺点是对于批处理的依赖。如果我们传递了单个样本而不是批量的样本,网络必须使用预先计算的训练均值和方差,这可能会导致不同的结果。

这个问题的重要性促使人们创建替代方法以避免对批处理的依赖。

Layer Normalization

71ce214a-c6a9-11ec-bce3-dac502259ad0.png

这是Geoffrey E. Hinton等人在2016年[4]中首次尝试减少对批大小的约束。提出这个方法的主要原因是无法找到将BN应用于递归神经网络,需要找到一个替代的方法。

71dc9af4-c6a9-11ec-bce3-dac502259ad0.png

在深度神经网络中,由于层数是固定的,因此很容易存储每个 BN 层的统计信息。然而在 RNN 中,输入和输出形状的长度不同。因此,在这种情况下,最好使用单个时间步长(样本)而不是整个批次的统计信息进行标准化。

def LayerNorm(x, gamma, beta, eps=1e-5): # x: input shape [N, C, H, W] N, C, H, W = x.shape mean = torch.mean(input=x, dim=[1,2,3], keepdim=True) var = torch.var(input=x, dim=[1,2,3], keepdim=True) # mean, var shape: [N, 1, 1, 1] x = (x - mean) / torch.sqrt(var + eps) return x * gamma + beta

在这种方法中,batch(N) 中的每个示例都在 [C, H, W] 维度上进行了归一化。与 BN 一样,它可以加速和稳定训练,并且不受批次的限制。此方法可用于批量为 1 的在线学习任务。

Instance Normalization

71f5635e-c6a9-11ec-bce3-dac502259ad0.png

Dmitry Ulyanov 等人在 2016 年的论文 [5] 中介绍了Instance Normalization。这是另一种尝试减少对批处理的依赖以改善样式传输网络的结果。

def InstanceNorm(x, gamma, beta, eps=1e-5): # x: input shape [N, C, H, W] N, C, H, W = x.shape mean = torch.mean(input=x, dim=[2,3], keepdim=True) var = torch.var(input=x, dim=[2,3], keepdim=True) # mean, var shape: [N, C, 1, 1] x = (x - mean) / torch.sqrt(var + eps) return x * gamma + beta

跨批次和通道的标准化允许从图像中删除特定的对比度信息,这有助于泛化。

这种方法在 Pix2Pix 或 CycleGAN 等生成模型中广受欢迎,并成为著名的 StyleGAN2 中使用的自适应实例归一化的先驱。

Group Normalization

72009cce-c6a9-11ec-bce3-dac502259ad0.png

Group Normalization 在 2018[1] 论文中被引入,它直接解决了 CNN 的 BN 限制。主要针对的是分布式学习,其中批次被分成许多机器。这些是在少数例子上训练的,比如 6-8,在某些情况下,甚至是 1-2。

721d068e-c6a9-11ec-bce3-dac502259ad0.png

GN 可以理解为Layer 和Instance的混合。GN 将通道分成组并在它们之间进行标准化。该方案使计算独立于批量大小。

def GroupNorm(x, gamma, beta, G, eps=1e-5): # x: input features with shape [N, C, H, W] # G : number of groups N, C, H, W = x.shape x = torch.reshape(input=x, shape=[N, G, C // G, H, W]) mean = torch.mean(input=x, dim=[2,3,4], keepdim=True) var = torch.var(input=x, dim=[2,3,4], keepdim=True) # mean, var shape : [N, G, 1, 1, 1] x = (x - mean) / torch.sqrt(var + eps) x = torch.reshape(input=x, shape=[N, C, H, W]) return x * gamma + beta

GN 优于在小批量上训练的 BN,但无法击败大批量的结果,但是这是一个很好的起点。

上面的针对于激活的归一化方法我们基本上都听说过也经常会用到,下面我们来介绍针对权重的归一化方法。

Weight Standardization

722c5922-c6a9-11ec-bce3-dac502259ad0.png

我们已经对输入和层输出进行了标准化,唯一剩下的就是权重。因为它们可以在没有任何控制的情况下变大,尤其是当我们无论如何都要标准化输出时。通过标准化权重,我们实现了更平滑的损失和更稳定的训练。

def WeightStand(w, eps=1e-5): # w: input features shape [Cin, Cout, kernel_size, kernel_size] mean = torch.mean(input=w, dim=[0,2,3], keepdim=True) var = torch.var(input=w, dim=[0,2,3], keepdim=True) # mean, var shape : [1, Cout, 1, 1] w = (w - mean) / torch.sqrt(var + eps) return w

权重的标准化是Group Normalization的一个很好的辅助。在仅使用一个样本的 BN(大批量)情况下,将这些方法结合起来会产生更好的结果。

72454180-c6a9-11ec-bce3-dac502259ad0.png

除此以外,有人还提出了BCN方法,称为批处理通道规范化。简而言之,每一层同时使用BN和GN。

总结

归一化是深度学习中的一个基本概念。它加快了计算速度并稳定了训练。多年来发展了许多不同的技术。本篇文章整理了目前与它相关的方法,希望对你有所帮助

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4847

    浏览量

    108387
  • 数据集
    +关注

    关注

    4

    文章

    1242

    浏览量

    26303

原文标题:深度学习中的归一化技术全面总结

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深度学习为什么还是无法处理边缘场景?

    [首发于智驾最前沿微信公众号]虽然自动驾驶车辆已经完成了数百万公里的行驶测试,深度学习也已被普遍应用,但依然会在些看似简单的场景犯下低级错误。比如在遇到
    的头像 发表于 05-04 10:16 2273次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>为什么还是无法处理边缘场景?

    零基础手写大模型资料2026

    零基础纯代码手写大模型:从数学原理到工程实践的技术解析 在深度学习框架高度封装的今天,理解大模型底层原理的开发者愈发稀缺。本文将剥离复杂框架的依赖,从数学基础出发,解析如何用基础代码实现
    发表于 05-01 17:44

    人工智能-Python深度学习进阶与应用技术:工程师高培解读

    深度学习的工程落地,早已不是纸上谈兵的事。从卷积神经网络到Transformer,从目标检测到大模型私有部署,技术栈不断延伸,工程师面临
    的头像 发表于 04-21 11:01 474次阅读
    人工智能-Python<b class='flag-5'>深度</b><b class='flag-5'>学习</b>进阶与应用<b class='flag-5'>技术</b>:工程师高培解读

    深度学习驱动的超构表面设计进展及其在全息成像的应用

    当前,深度学习技术与超构表面(metasurface)全息成像技术的融合,有力推动了光学成像领域的发展。得益于超构表面对光波特性的精准调控,全息成像
    的头像 发表于 04-09 13:55 231次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>驱动的超构表面设计进展及其在全息成像<b class='flag-5'>中</b>的应用

    【智能检测】基于AI深度学习与飞拍技术的影像测量系统:实现高效精准的全自动光学检测与智能制造数据闭环

    内容概要:文档内容介绍了图仪器(Chotest)影像测量仪融合人工智能深度学习与飞拍技术的自动检测解决方案。系统通过AI
    发表于 03-31 17:11

    机器学习深度学习需避免的 7 个常见错误与局限性

    无论你是刚入门还是已经从事人工智能模型相关工作段时间,机器学习深度学习中都存在些我们需要时刻关注并铭记的常见错误。如果对这些错误置之不
    的头像 发表于 01-07 15:37 411次阅读
    机器<b class='flag-5'>学习</b>和<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>中</b>需避免的 7 个常见错误与局限性

    穿孔机顶头检测仪 机器视觉深度学习

    顶头状态。 检测顶头算法 引入人工智深度学习技术,通过Keras实现卷积神经网络(CNN),用Numpy实现采集数据的训练,得到符合现场需求的模型,进步提升检测的准确性和现场的适应性
    发表于 12-22 14:33

    【团购】独家全套珍藏!龙哥LabVIEW视觉深度学习实战课(11大系列课程,共5000+分钟)

    强化 无监督学习应用:无需NG样本的缺陷检测方案,解决工业数据标注难题 多模态融合技术:PaddleOCR+YOLOv8联动方案,实现\"文字识别+缺陷定位\"一体化 团购课程大纲
    发表于 12-04 09:28

    【团购】独家全套珍藏!龙哥LabVIEW视觉深度学习实战课程(11大系列课程,共5000+分钟)

    强化 无监督学习应用:无需NG样本的缺陷检测方案,解决工业数据标注难题 多模态融合技术:PaddleOCR+YOLOv8联动方案,实现\"文字识别+缺陷定位\"一体化 团购课程大纲
    发表于 12-03 13:50

    如何深度学习机器视觉的应用场景

    深度学习视觉应用场景大全 工业制造领域 复杂缺陷检测:处理传统算法难以描述的非标准缺陷模式 非标产品分类:对形状、颜色、纹理多变的产品进行智能分类 外观质量评估:基于学习的外观质量标
    的头像 发表于 11-27 10:19 401次阅读

    构建CNN网络模型并优化的一般化建议

    通过实践,本文总结了构建CNN网络模型并优化的一般化建议,这些建议将会在构建高准确率轻量级CNN神经网络模型方面提供帮助。 1)避免单层神经网络:我们清楚神经网络本身是需要不断抽象出更高级别的纹理
    发表于 10-28 08:02

    如何在机器视觉中部署深度学习神经网络

    人士而言往往难以理解,人们也常常误以为需要扎实的编程技能才能真正掌握并合理使用这项技术。事实上,这种印象忽视了该技术为机器视觉(乃至生产自动)带来的潜力,因为深度
    的头像 发表于 09-10 17:38 1132次阅读
    如何在机器视觉中部署<b class='flag-5'>深度</b><b class='flag-5'>学习</b>神经网络

    深度学习对工业物联网有哪些帮助

    、实施路径三个维度展开分析: 深度学习如何突破工业物联网的技术瓶颈? 1. 非结构数据处理:解锁“沉睡数据”价值 传统困境 :工业物联
    的头像 发表于 08-20 14:56 1317次阅读

    自动驾驶Transformer大模型会取代深度学习吗?

    [首发于智驾最前沿微信公众号]近年来,随着ChatGPT、Claude、文心言等大语言模型在生成文本、对话交互等领域的惊艳表现,“Transformer架构是否正在取代传统深度学习”这
    的头像 发表于 08-13 09:15 4458次阅读
    自动驾驶<b class='flag-5'>中</b>Transformer大模型会取代<b class='flag-5'>深度</b><b class='flag-5'>学习</b>吗?

    从接口到架构:工控体机定制深度技术剖析

    在工业4.0与数字转型的浪潮,工控体机作为工业自动与信息融合的核心载体,正通过深度定制
    的头像 发表于 06-17 16:47 813次阅读