[解读] Rethinking the Usage of Batch Normalization and Dropout in the Training of Deep Neural Networks

本文提出一个新奇的方法来加快神经网络的训练速度, 基于这样一个想法, 即对输入进行白化处理有助于加快收敛速度. 已知独立的随机变量之间一定是白化的(不相关的), 所以对网络输入进行独立成分分析能够获得白化的输入. 然而进行独立成分分析是十分耗时的, 为此作者提出一种被称为 Independent-Component (IC) 的神经网络结构来实现, 这个结构是批归一化和 dropout 的组合. 本文通过理论分析了这一结构的有效性, 通过实验也表明了这一改进提升了分类性能.

论文链接: https://arxiv.org/abs/1905.05928v1

相关的工作

白化是一种用于去除数据之间相关性的方法, 这使得网络训练更加容易 (Le Cun et al., 1991), 但 Le Cun 所做的工作仅限于预处理训练数据. 而在神经网络中每个激活层上实现白化则需要大量的计算, 因此有了后来的批归一化方法(Batch Normalization, (Ioffe & Szegedy, 2015)), 该方法通过将每个激活层的净激活比例缩放为零均值和单位方差来增强性能. 批归一化程序可以显着平滑参数空间中的优化环境 (Bjorck et al., 2018),以提高训练性能. 由于批归一化易于实施和成功. 因此注意力从最初的白化目标转移了. 这项工作的动机是恢复对设计出高效的计算方法来白化每一层的输入的追求.

为什么要通过获得变量的独立成分来进行白化呢? 这受到神经科学的一项发现的支持: 神经系统的表达能力随群体中独立神经元的数量而线性增加 (Moreno-Bote et al., 2014; Beaulieu-Laroche et al., 2018). 因此要使得每一层的输入变量之间尽可能独立, 这也将使得训练更加稳定. 本文提出的 IC 层是由批归一化 Batch Normalization (Ioffe & Szegedy, 2015) 和 Dropout (Srivastava et al., 2014) 组成的, 这两种方法能够很容易的实现.

在 (Huang et al., 2018) 中提出了在网络中添加额外的层来实现独立成分分析, 然而这种方法计算两太大了.

本文的方法

本文提出的 IC 层结构是非常简单的, 首先它的位置如下图所示:

在这里插入图片描述

IC 层位于激活层之后, 它的下一层就是卷积层. IC 层的结构从代码上来看如下:

在这里插入图片描述

也就是简单得将 BatchNorm 和 Dropout 叠加在一起.

IC 层能够二次方地减少变量之间的非独立性, 线性地减少相关性. 在减少非独立性的同时, Dropout 操作也会线性的减少信息熵, 作者提到可以通过调整 p p p 值来权衡获得的独立性和减少的信息熵. 有关理论证明请查看原文.

IC 方法直观解释如下: 批归一化使得变量具有零均值和单位方差, 这 ZCA 方法一样.Dropout 操作使得神经元以概率 p 输出其值, 或者通过输出零来使神经元失活,
这样一来经元的输出的信息将很少来自其他神经元, 也就是使得这些神经元在统计上变得彼此独立.

参考

  • Ioffe, S. and Szegedy, C. Batch normalization: Accelerating deep network training by reducing internal covariate shift. arXiv preprint arXiv:1502.03167, 2015.
  • Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., and Salakhutdinov, R. Dropout: a simple way to prevent neural networks from overfitting. The Journal of Machine Learning Research, 15(1):1929–1958, 2014.
  • Le Cun, Y., Kanter, I., and Solla, S. A. Eigenvalues of covariance matrices: Application to neural-network learning. Physical Review Letters, 66(18):2396, 1991.
  • Moreno-Bote, R., Beck, J., Kanitscheider, I., Pitkow, X., Latham, P., and Pouget, A. Information-limiting correlations. Nature neuroscience, 17(10):1410, 2014.
  • Beaulieu-Laroche, L., Toloza, E. H., van der Goes, M.-S., Lafourcade, M., Barnagian, D., Williams, Z. M., Eskandar, E. N., Frosch, M. P., Cash, S. S., and Harnett, M. T. Enhanced dendritic compartmentalization in human cortical neurons. Cell, 175(3):643–651, 2018.

补充

互信息可用来衡量变量之间的独立性, 而相关性则用协方差来表示.

独立成分分析 (Independent Component Analysis, ICA)

https://blog.youkuaiyun.com/Tonywu2018/article/details/91490158
, 论文: Independent Component Analysis: Algorithms and Applications

https://www.zhihu.com/question/28845451

https://zhuanlan.zhihu.com/p/43130318

在这里插入图片描述

Whitening (白化)

https://www.cnblogs.com/demian/p/7627324.html

在这里插入图片描述

为什么使用白化? 教程给出的解释是:

假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的。白化的目的就是降低输入的冗余性。

比如在独立成分分析(ICA)中,对数据做白化预处理可以去除各观测信号之间的相关性,从而简化了后续独立分量的提取过程,而且,通常情况下,数据进行白化处理与不对数据进行白化处理相比,算法的收敛性较好。

注意: 白化可以去除相关性, 但不能去除非独立性, 即独立不一定相关, 但是不相关不一定独立. 详见 https://blog.youkuaiyun.com/Tonywu2018/article/details/91490158

### 关于 EfficientNet 的论文下载 《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》是一篇由 Google Research 发表的重要论文,探讨了如何通过复合扩展方法来优化卷积神经网络 (ConvNets) 的性能。该论文提出了一种新的模型缩放策略——复合扩展(Compound Scaling),这种方法能够更高效地平衡宽度、深度和分辨率之间的关系,从而显著提高模型的精度和效率[^1]。 如果需要获取这篇论文的 PDF 文件,可以通过以下几种方式: #### 1. **官方发布平台** 论文最初发表在 arXiv 上,因此可以直接访问其官方网站进行下载: - 链接地址:https://arxiv.org/abs/1905.11946 (此链接指向原始版本的预印本) #### 2. **学术搜索引擎** 使用学术搜索引擎可以帮助快速定位到论文资源。常用的工具包括但不限于: - Google Scholar: https://scholar.google.com/ 输入关键词 “EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks”,即可找到相关条目并尝试点击免费或付费选项下载。 #### 3. **第三方存储库** 如果无法直接从上述渠道获取,还可以考虑一些开放存取网站,例如: - Papers With Code: 提供大量机器学习领域经典论文及其对应代码实现。 地址:https://paperswithcode.com/paper/efficientnet-rethinking-model-scaling-for - Semantic Scholar: 类似于Google Scholar的功能,但界面更加简洁友好。 地址:https://www.semanticscholar.org/ 以下是基于 Python 编写的简易脚本来模拟自动抓取功能(仅作演示用途,请勿滥用爬虫技术违反版权规定): ```python import requests def fetch_paper(url, filename="paper.pdf"): response = requests.get(url) if response.status_code == 200: with open(filename, 'wb') as f: f.write(response.content) print(f"Paper successfully downloaded as {filename}") else: print("Failed to retrieve the paper") # Example usage fetch_paper('https://arxiv.org/pdf/1905.11946', 'EfficientNet_paper.pdf') ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值