博客
关于我
经典论文系列 | Group Normalization & BN的缺陷
阅读量:584 次
发布时间:2019-03-10

本文共 2318 字,大约阅读时间需要 7 分钟。

Group Normalization:解决Batch Normalization的局限性

引言

Batch Normalization(BN)是深度学习领域的重要突破,它使得许多模型能够进行训练。然而,BN在处理小批量数据时表现出显著的性能下降,这限制了其在需要小批次的计算机视觉任务中的应用,如目标检测、语义分割和视频分类等。此外,BN的依赖性与批次大小使得在内存受限的环境中使用预训练模型变得困难。为此,我们提出了一种新的归一化方法——Group Normalization(GN),它有效地解决了这些问题。

主要思想

Batch Normalization通过对批次内的通道数据进行归一化,显著提高了模型的训练效率。然而,BN的计算依赖于批次大小的变化,导致在小批次下表现不稳定。此外,BN的参数依赖于批次大小,使得在需要小批次的任务中难以直接使用预训练模型。

Group Normalization通过将通道分为若干组,分别对每组数据进行归一化。与BN不同,GN的归一化过程不依赖于批次大小,且计算结果的精度在各种批次大小下保持一致。这种方法不仅解决了BN在小批次下的性能问题,还实现了对预训练模型的更好适应。

在ImageNet训练的ResNet-50模型中,GN在批次大小为2时的错误率低于BN的10.6%。与其他归一化方法(如Layer Normalization和Instance Normalization)相比,GN在不同批次大小下的性能表现更加稳定。

细节

Batch Normalization概述

Batch Normalization通过对批次内的通道数据计算均值和方差进行归一化,然后应用尺度缩放和偏移参数。BN的计算依赖于批次大小,且β和ɣ(缩放和偏移参数)在训练过程中逐步学习。这一特性在批次大小较小时导致统计估计不准确,从而影响模型性能。

Group Normalization的优势

Group Normalization通过将通道分为若干组,分别对每组数据进行归一化。这种方法的关键在于归一化的计算不依赖于批次大小。GN的计算过程与BN相同,只是归一化所使用的数据范围不同。

实现代码

以下是Group Normalization在TensorFlow中的实现代码示例:

import tensorflow as tfdef group_norm(inputs, groups=32):    """    Group Normalization层。    Args:        inputs: 输入张量,形状为[batch_size, channels, height, width]        groups: 分组的数量    Returns:        输出张量    """    channels = inputs.shape[1]    group_size = channels // groups    # 分组操作    perm = tf.image.permute_coordinates(inputs, [3, 1, 2])    perm = tf.reshape(perm, (-1, group_size, channels, 1))    x = tf.nn.reduce_mean(perm, axis=[1, 2])    y = tf.nn.reduce_variance(perm, axis=[1, 2], sample_size=group_size)    # 计算归一化因子    scale = tf.sqrt(tf.cast(group_size, tf.float32))    x_hat = (x - tf.reduce_mean(x, axis=3)) / (y + 1e-6)    x_hat *= scale / scale    # 恢复空间维度    x_hat = tf.reshape(x_hat, (-1, 1, group_size, 1))    x_hat = tf.image.permute_coordinates(x_hat, [2, 0, 1])    x_hat = tf.reshape(x_hat, (tf.shape(inputs)[0], inputs.shape[1], -1))    return x_hat# 示例使用x = tf.random.normal([10, 28, 32, 32])y = group_norm(x)print(y.shape)  # [10, 28, 32, 32]

实验结论

实验结果表明,Group Normalization在不同批次大小下的性能表现更加稳定。与BN相比,GN在小批次下的错误率显著降低,并且在大批次下的性能表现优于BN。同时,GN在与Layer Normalization和Instance Normalization的对比中表现更优,证明了其在多种任务中的通用性。

在ImageNet分类任务中,GN在批次大小为2时的错误率低于BN的10.6%。在目标检测和语义分割任务中,GN的模型性能优于基于BN的同类模型。此外,GN在视频分类任务中的表现同样出色,表明其在计算机视觉领域的广泛适用性。

Group Normalization的简单实现(仅需几行代码)使其在实际应用中易于部署。通过本文的研究,可以看出Group Normalization作为Batch Normalization的替代方案,具有广阔的应用前景。

转载地址:http://uazvz.baihongyu.com/

你可能感兴趣的文章
Nginx的是什么?干什么用的?
查看>>
Nginx访问控制_登陆权限的控制(http_auth_basic_module)
查看>>
nginx负载均衡器处理session共享的几种方法(转)
查看>>
nginx负载均衡的5种策略(转载)
查看>>
nginx负载均衡的五种算法
查看>>
Nginx运维与实战(二)-Https配置
查看>>
Nginx配置ssl实现https
查看>>
Nginx配置TCP代理指南
查看>>
Nginx配置——不记录指定文件类型日志
查看>>
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
Nginx配置参数中文说明
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>