对\emph{Deep-learning-BN}模型算法的学习-谷歌研究员论文翻译Batch Normalization

版权声明:转载请注明出处,谢谢 https://blog.csdn.net/zysps1/article/details/89113234

\documentclass[master]{thesis-uestc}

\usepackage{algorithm}

\let\cleardoublepage\clearpage

\title{对\emph{Deep-learning-BN}模型算法的学习}
\author{Marshal Zheng}

\begin{document}

\maketitle
\begin{chineseabstract}

\emph{Batch Normalization}是2015年\emph{Google}研究员在论文\emph{《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》}一文中提出的,同时也将\emph{BN}\footnote{按照深度学习研究者的一般习惯,我们用\emph{BN}来代表\emph{Batch Normalization}}应用到了2014年的\emph{GoogLeNet}上,也就是\emph{Inception-v2}。
\emph{BN}算法在很大程度上加速了训练过程,放宽了网络初始化的条件,论文中还提出有了\emph{BN}可以在不使用\emph{Dropout},同时也可以在一定程度上提升网络的识别效果,在之后的\emph{ResNet}等等新网络中有广泛的应用。

本文对\emph{Google}研究员的论文进行了翻译和整理,以备后查和分享。

原文摘要:

训练深度神经网络很复杂,因为当前一层的参数会发生变化,每个层的输入分布在训练期间也会发生变化。
要求较低的学习速率和细致的参数初始化使得训练减慢,并且使得训练具有饱和非线性特点的模型变得非常困难。
我们将这种现象称为内部协变量偏移\emph{(internal covariate shift)},并通过归一化层输入来解决这个问题。
我们的方法的优势在于使标准化成为模式体系结构的一部分,并为每个训练小批量\emph{(train mini-batch)}执行标准化。
批量标准化允许我们使用更高的学习率并且不太关心初始化。
它还可以充当规范器\emph{(regularizer)},在某些情况下可以消除对\emph{Dropout}的需求。
将\emph{BN}应用于最先进的图像分类模型,它的训练步数减少了14倍,但实现了相同的精度,并且显着地超过了原始模型。
使用批量标准化网络\emph{(Batch-normalized networks))}的集合,我们在\emph{ImageNet}分类的最佳发布结果的基础上有了更大提高:达到4.9%的前5个验证错误(和4.8%的测试错误),超出了人类评估者的准确性。

\chinesekeyword{Batch Normalization}
\end{chineseabstract}

\thesistableofcontents

%\thesischapterexordium

\chapter{介绍}

深度学习极大地提升了视觉,演讲和许多其他领域的技术水平。
随机梯度下降\emph{SGD}被证明是训练深度网络的有效方法,并且诸如动量的新\emph{SGD}变体\footnote{Sutskever等,2013}和Adagrad\footnote{Duchi等,2011}已被用于实现。
\\emph{SGD}优化网络参数Θ,以最小化损失
\begin{equation}
\Theta= \mathop{\arg\min}\theta \ {\frac{1}{N}}{\sum{i=1}^{N} \ell(x_i,\Theta)}
\end{equation}

其中 x 1... N x_{1...N} 是训练数据集。
通过\emph{SGD},训练逐步进行,并且在每个步骤中我们考虑尺寸为m的小批量 x 1... m x_{1...m}
小批量用于近似关于参数的损失函数的梯度,通过下式计算:
\begin{equation}
\frac{1}{m}\frac{\partial\ell(x_i,\theta)}{\partial\theta}
\end{equation}

使用小批量的示例,而不是一次一个示例,在几个方面都有所帮助。
\begin{itemize}
\item 首先,小批量损失的梯度是对训练集的梯度的估计,其效果随批量增加而改善。
\item 其次,由于现代计算平台提供的并行性,批量计算可以比单个示例的 m m 计算更有效率。
\end{itemize}

虽然随机梯度简单有效,但需要仔细调整模型超参数,特别是优化中使用的学习率,以及模型参数的初始值。
由于每层的输入都受到所有前面层的参数的影响,因此训练变得复杂 - 因此随着网络变得更深,网络参数的微小变化会放大。

每层的输入分布的变化给我们提出了一个问题:层需要不断适应新的分布。
当学习系统的输入分布发生变化时,便会发生协变量变换\emph{(covariate shift)}\footnote{(Shimodaira,2000)}。
这通常通过域适应\emph{(domain adaptation)}来处理\footnote{(Jiang,2008)}。
然而,协变量偏移的概念可以扩展到整个学习系统之外,以应用于其他部分,例如子网络或某一层。
考虑网络计算如下:
\begin{equation}
\ell =
F_2(F_1(u,\Theta_1),\Theta_2)
\end{equation}
其中 F 1 F_1 F 2 F_2 是任意变换,参数 Θ 1 \Theta_1 Θ 2 \Theta_2 要被学习到以便使损失 \ell 最小化。
可以将学习 Θ 2 \Theta_2 视为输入 x = F 1 ( u , Θ 1 ) x = F_1(u,\Theta_1) 被馈送到子网络中
\begin{equation}
\ell =
F_2(x,\Theta_2)
\end{equation}
例如,梯度下降中的步骤
\begin{equation}
\Theta_2 \gets \Theta_2-\frac{\alpha}{m}\sum_{i=1}^{m}\frac{\partial{F_2}(x_i,\Theta_2)}{\partial{\Theta_2}}
\end{equation}
(对于批量大小m和学习率α)与具有输入\emph{x}的独立网络\emph{ F 2 F_2 }完全等效。
因此,使训练更有效的输入分布属性 - 例如在训练和测试数据之间具有相同的分布 - 也适用于训练子网络。
因此,有利的是,\emph{x}的分布随时间保持固定。
这样的话, Θ 2 \Theta_2 不必重新调整以补偿\emph{x}分布的变化。

固定分配到子网络的输入也会对子网外的层产生积极影响。
考虑具有S形激活值函数 z = g W u + b z = g(Wu + b)的 层,其中u是层输入,权重矩阵W和偏置向量b是要学习的层参数,并且 g ( x ) = 1 1 + e x p ( x ) g(x) = \frac{1}{1+exp(-x)}
x | x | 增加, g ( x ) g'(x) 趋于零。
这意味着对于 x = W u + b x = Wu + b 的所有维度,除了具有小绝对值的那些维度之外,向下到u的梯度将消失并且模型将缓慢地训练。
然而,由于 x x W W b b 和下面所有层的参数的影响,在训练期间对这些参数的改变可能将x的许多维度移动到非线性的饱和状态并且减慢收敛。
随着网络深度的增加,这种效应会得到放大。
在实践中,饱和问题和由此产生的消失梯度通常通过使用纠正线性单元\emph{(Rectified Linear Units)}\footnote{(Nair & Hinton, 2010)}– R e L U ( x ) = m a x ( x , 0 ) ReLU(x) = max(x,0) ,和仔细初始化\emph{ (careful initialization)}\footnote{(Bengio&Glorot,2010; Saxe等人)}
以及小的学习率来解决。
但是,如果我们能够确保非线性输入的分布在网络训练时保持更稳定,那么优化器将不太可能陷入饱和状态,并且训练将加速。

我们将在训练过程中深度网络内部节点分布的变化称为内部协变量偏移\emph{(Internal Covariate Shift)}。
消除它可以更快地训练。
我们提出了一种新的机制,我们称之为批量归一化\emph{(Batch Normalization)},它在减少内部协变量偏移方面迈出了重要一步,这样做大大加速了深度神经网络的训练。
它通过标准化步骤来实现这一点,该步骤可以确定层输入的均值和方差。
批量标准化\emph{(Batch Normalization)}还可以通过减少梯度对参数或其初始值的规模的依赖,从而对通过网络的梯度流有一个有益的影响。
这使我们可以使用更高的学习率而不会出现分歧的风险。
此外,批量标准化使模型正规化并减少了对\emph{Dropout}\footnote{(Srivastava等,2014)}的需求。
最后,批量标准化可以通过防止网络陷入饱和模式来使用饱和非线性方法。

在Sec.4.2\hyperref[sec:4.2],我们将批量标准化\emph{(Batch Normalization)}应用于性能最佳的\emph{ImageNet}分类网络,并表明我们只使用 7 7% 的训练步数就可以匹敌其性能,并且可以进一步超出其准确性。
使用通过批量标准化\emph{(Batch Normalization)}训练的这种网络的集合,我们实现了改进了\emph{ImageNet}分类上的最佳已知结果的前5个错误率。

\chapter{减少内部协变量偏移}

我们将内部协变量偏移\emph{(Internal Covariate Shift)}定义为由于训练期间网络参数的变化导致的网络激活值分布的变化。
为了提高训练效率,我们寻求减少内部协变量偏移\emph{(Internal Covariate Shift)}的方法。
通过在训练过程中确定层输入x的分布,我们希望提高训练速度。
众所周知\footnote{(LeCun等,1998b; Wiesler和Ney,2011)},如果网络训练的输入白化\footnote{白化过程使得学习算法的输入具有如下性质:(i)特征之间相关性较低;(ii)所有特征具有相同的方差},则网络训练收敛得更快 - 即线性变换为具有零均值和单位方差,并且去相关。
由于每层观察由下面的层产生的输入,因此实现每层的输入的相同白化将是有利的。
通过白化每层的输入,我们将朝着实现固定的输入分布迈出一步,这将消除内部协变量偏移\emph{(Internal Covariate Shift)}的不良影响。

我们可以在每个训练步骤或某个时间间隔考虑白化激活值,通过直接修改网络或通过更改优化算法的参数来依赖于网络激活值值\footnote{(Wiesler等,2014; Raiko等,2012 ; Povey等人,2014; Desjardins&Kavukcuoglu)}。
然而,如果这些修改散布在优化步骤中,则梯度下降步骤可以尝试以需要更新归一化的方式更新参数,这降低了梯度步骤的影响。
例如,考虑具有输入 u u 的层,其添加学习偏差 b b ,并通过减去在训练数据上计算的激活值的平均值来标准化结果:
\begin{equation}
\hat{x} = x - E[x]
\end{equation}
其中, x = u + b x = u+b ,\quad χ = { x 1... N } \chi = {\{x_{1...N}\}} 是训练集上的 x x 的值的集合,并且 E [ x ] = 1 N i = 1 N x i E[x] = \frac{1}{N}\sum_{i=1}^{N}x_i
如果梯度下降步骤忽略 E [ x ] E [x] b b 的依赖性,那么它将更新 b b + Δ b b \gets b+\Delta b ,其中$\Delta b \varpropto -\partial\ell/\partial\hat{x} 。 然后 u + (b+\Delta b)-E[u+(b+\Delta b)] = u+b-E[u+b] 。 因此,对 b 的更新和随后的归一化变化的组合导致层的输出没有变化,从而,损失也没有变化。 随着训练的继续, b$将无限增长,同时损失仍然固定。
如果归一化不仅是中心而且还可以扩展激活值,这个问题可能会变得更糟。
我们在初始实验中经验性地观察到这一点,其中当在梯度下降步骤之外计算归一化参数时,模型无法使用\emph{(blow up)}\label{sec:blowup}了。

上述方法的问题在于梯度下降优化没有考虑归一化发生的事实。
为解决此问题,我们希望确保对于任何参数值,网络始终生成具有所需分布的激活值。
这样做将允许相对于模型参数的损失梯度考虑归一化以及其对模型参数 Θ \Theta 的依赖性。
x x 是层输入,视为一个向量, χ \chi 是训练数据集上的这些输入的集合。
然后可以将标准化写为变换
\begin{equation}
\hat{x} = Norm(x,\chi)
\end{equation}
它不仅取决于给定的训练样本 x x ,而且取决于所有示例 χ \chi —— 如果 x x 是由另一层生成的,则每个示例都取决于 Θ \Theta
对于反向传播,我们需要计算雅可比行列式
\begin{equation}
\frac{\partial Norm(x,\chi)}{\partial x} \quad and \quad \frac{\partial Norm(x,\chi)}{\partial \chi}
\end{equation}
忽略后一项将导致上述爆炸\hyperref[sec:blowup]。
在此框架内,对层输入进行白化的代价是高昂的,因为它需要计算协方差矩阵 C o v [ x ] = E x χ [ x x T ] E [ x ] E [ x ] T Cov[x] = E_{x \in \chi}[xx^T] - E[x]E[x]^T 及其反平方根,以产生白化激活值 C o v [ x ] 1 / 2 ( x E [ x ] ) Cov[x]^{-1/2}(x-E[x]) ,以及这些变换的衍生物用于反向传播。
这促使我们寻求一种替代方案,以可区分的方式执行输入规范化,并且在每次参数更新之后不需要分析整个训练集。

一些先前的方法,例如使用在单个训练示例上计算的统计数据,或者在图像网络的情况下,使用在给定位置处的不同特征地图上计算的统计数据\footnote{(Lyu&Simoncelli,2008)}。
然而,这通过丢弃激活值值的绝对规模来改变网络的表示能力。
我们希望通过规范化训练示例中与整个训练数据的统计相关的激活值值来保留网络中的信息。

%\begin{equation}
%f_n®=
%\begin{cases}
%\frac{l_n}{2A_n+}\rho_n+=\frac{l_n}{2A_n^+}(r-r_+)&r\in T_n^+\
%\frac{l_n}{2A_n-}\rho_n-=\frac{l_n}{2A_n^-}(r_–r)&r\in T_n^-\
%0&\text{其它}
%\end{cases}
%\end{equation}

%其中, l n l_n 为三角形单元 T n + T_n^+ T n T_n^- 公共边的长度, A n + A_n^+ A n A_n^- 分别为三角形单元 T n + T_n^+ T n T_n^- 的面积(如图\ref{pica}所示)。

%\begin{figure}[h]
%\includegraphics{pica.pdf}
%\caption{RWG 基函数几何参数示意图}
%\label{pica}
%\end{figure}

%\begin{figure}[h]
%\subfigure[]{
%\label{picb}
%\includegraphics[width=7.3cm]{picb.pdf}}
%\subfigure[]{
%\label{picc}
%\includegraphics[width=6.41cm]{picc.pdf}}
%\caption{计算效率。}
%\label{fig1}
%\end{figure}

\chapter{通过小批量统计进行标准化}

由于每层输入的完全白化代价高昂,并且不是每个地方都可以区分,我们做了两个必要的简化。
首先,我们不是联合地对图层输入和输出中的特征进行白化,而是通过使其具有零均值和方差为1来独立地标准化每个标量特征。对于具有 d d 维输入的层 x = ( x ( 1 ) x ( d ) ) x = (x^{(1)} \cdots x^{(d)}) ,我们将标准化每个维度
\begin{equation}
\hat{x}^{(k)} = \frac{x{(k)}-E[x{(k)}]}{\sqrt{Var[x^{(k)}]}}
\end{equation}

其中,期望和方差在训练数据集计算
正如\footnote{(LeCun等人,1998b)}所示,即使特征不是去相关的,这种归一化也加速了收敛。

请注意,简单地规范化图层的每个输入可能会改变图层可以表示的内容。
例如,标准化S形的输入会将它们约束到非线性的线性状态。
为了解决这个问题,我们确保插入网络中的转换可以表示身份转换。
为此,我们为每个激活值值 x ( k ) x^{(k)} 引入一对参数 γ ( k ) \gamma^{(k)} , β ( k ) \beta^{(k)} ,它们对标准化值进行缩放和移位:
\begin{equation}
y^{(k)} = \gamma{(k)}\hat{x}{(k)} + \beta^{(k)}
\end{equation}

这些参数与原始模型参数一起学习,并恢复网络的表示能力。
实际上,通过设置 γ ( k ) = V a r [ x ( k ) ] \gamma^{(k)} = \sqrt{Var[x^{(k)}]} β ( k ) = E [ x ( k ) ] \beta^{(k)} = E[x^{(k)}] ,我们可以恢复原始激活值(如果这是最佳的事情)。

在批处理设置中,每个训练步骤都基于整个训练集,我们将使用整个集来规范化激活值。
然而,当使用随机优化时,这是不切实际的。
因此,我们进行了第二个简化:由于我们在随机梯度训练中使用小批量,每个小批量产生每次激活值的均值和方差的估计。
这样,用于归一化的统计数据可以完全参与梯度反向传播。
请注意,通过计算每维度方差而不是联合协方差来实现小批量的使用; 在联合情况下,由于小批量大小可能小于被白化的激活值的数量,因此需要正则化,从而产生奇异的协方差矩阵。

考虑一个尺寸为 m m 的小批量 B \mathcal{B} . 由于归一化被独立地应用于每个激活值,因此我们关注特定激活值 x ( k ) x^{(k)} ,并且为了清楚起见省略 k k
我们在小批量中有m个这样的激活值,
\begin{equation}
\mathcal{B} = {x_{1\dots m}}
\end{equation}

设归一化值为 x ^ 1 m \hat{x}_{1\dots m} ,它们的线性变换为 y 1 m y_{1\dots m}
我们指的是变换
\begin{equation}
BN_{\gamma,\beta}:x_{1\dots m} \to y_{1\dots m}
\end{equation}

作为批量标准化转换。
我们提出了\emph{BN Transformin}算法1。
在算法中, ϵ \epsilon 是为数值稳定性而添加到小批量方差的常数

\begin{algorithm}[H]
\label{sec:alg1}
\SetAlgoNoLine

\KwIn{小批量的$x$值:$\mathcal{B} = {x_{1\dots m}}$; 要学习的参数:$\gamma,\beta$}
\KwOut{$\{y_i = BN_{\gamma,\beta}(x_i)\}$}
$\mu \gets \frac{1}{m} \sum_{i=1}^{m}x_i $ \qquad //小批量均值   

$\sigma \gets \frac{1}{m}\sum_{i=1}^{m}(x_i- \mu_{\mathcal{B}})^2 $\qquad //小批量方差    

$\hat{x}_i \gets \frac{x_i-\mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}^2 + \epsilon}}} $\qquad //归一化    

$y_i \gets \gamma \hat{x}_i + \beta \equiv BN_{\gamma,\beta}(x_i) $\qquad //规模和偏移
\caption{Batch Normalizing Transform, 通过一个小批量应用于激活值x}

\end{algorithm}

%\begin{algorithm}[H]
% \KwData{this text}
% \KwResult{how to write algorithm with \LaTeX2e }
% initialization;
% \While{not at end of this document}{
% read current;
% \eIf{understand}{
% go to next section;
% current section becomes this one;
% }{
% go back to the beginning of current section;
% }
% }
% \caption{How to wirte an algorithm.}
%\end{algorithm}

可以将\emph{BN}变换添加到网络以操纵任何激活值。
在符号 y = B N γ , β ( x ) y = BN_{\gamma,\beta}(x) 中,我们指明要学习参数γ和β,但是应该注意,\emph{BN}变换不是在每个训练示例中独立地处理激活值。
相反, B N γ , β ( x ) BN_{\gamma,\beta}(x) 取决于训练示例和小批量中的其他示例。
缩放和移位的值y被传递到其他网络层。
标准化的激活 x ^ \hat{x} 是我们转变的内在因素,但它们的存在至关重要。
任何 x ^ \hat{x} 的值的分布都具有期望值0和方差1,只要每个小批次的元素从相同分布中采样,并且如果我们忽略 ϵ \epsilon
这可以通过观察 i = 1 m x ^ i = 0 \sum_{i=1}^{m}\hat{x}_i = 0 1 m i = 1 m x ^ 2 = 1 \frac{1}{m}\sum_{i=1}^{m}\hat{x}_2 = 1 并且取得预期来看出。
每个归一化的激活值 x ^ ) ( k ) \hat{x}){(k)} 可被视为由线性变换 y ( k ) = γ ( k ) x ^ ( k ) + β ( k ) y_{(k)} = \gamma_{(k)}\hat{x}_{(k)} + \beta_{(k)} 组成的子网络的输入,随后是由其原始网络的其他处理完成。
这些子网络输入都具有固定的均值和方差,虽然这些标准化的 x ^ ( k ) \hat{x}_{(k)} 的联合分布可以在训练过程中发生变化,但我们期望归一化输入的引入加速了子网络的训练,从而,加速整个网络。

在训练过程中,我们需要通过这种变换反向传播损失梯度 \ell ,并计算相对于BN变换参数的梯度。
我们使用链规则,如下(简化之前):

\begin{equation}
\frac{\partial \ell}{\partial \hat{x}i} = \frac{\partial \ell}{\partial y_i} \cdot \gamma
\end{equation}
\begin{equation}
\frac{\partial \ell}{\partial \sigma
{\mathcal{B}}^2} = \sum_{i = 1}^{m} \frac{\partial \ell}{\partial \hat{x}} \cdot (x_i - \mu \mathcal{B}) \cdot \frac{-1}{2}(\sigma_{\mathcal{B}}2+\epsilon){\frac{-3}{2}}
\end{equation}
\begin{equation}
\frac{\partial \ell}{\partial \mu_\mathcal{B}} =
(\sum_{i=1}^{m} \frac{\partial \ell}{\hat{x}i} \cdot \frac{-1}{\sqrt{\sigma{\mathcal{B}}^2 + \epsilon}}) +
\frac{\partial \ell}{\partial \sigma_{\mathcal{B}}^2} \cdot \frac{\sum_{i=1}^{m} -2(x_i-\mu_\mathcal{B})}{m}
\end{equation}
\begin{equation}
\frac{\partial \ell}{\partial x_i} = \frac{\partial \ell}{\partial \hat{x}i} \cdot \frac{1}{\sqrt{\sigma\mathcal{B}^2 + \epsilon}} + \frac{\partial \ell}{\partial \sigma_\mathcal{B}^2} \cdot \frac{2(x_i-\mu_\mathcal{B})}{m} + \frac{\partial \ell}{\partial \mu_\mathcal{B}} \cdot \frac{1}{m}
\end{equation}
\begin{equation}
\frac{\partial \ell}{\partial \gamma} =
\sum_{i=1}^{m} \frac{\partial \ell}{\partial y_i} \cdot \hat{x}i
\end{equation}
\begin{equation}
\frac{\partial \ell}{\partial \beta} = \sum
{i = 1}^{m} \frac{\partial \ell}{\partial y_i}
\end{equation}

%\begin{table}[h]
%\caption{计算 2 m × 2 m 2m\times 2m 理想}
%\begin{tabular}{|c|c|c|c|}
%\hline
%时间步长 & 非压缩存储方式 & 完全压缩存储方式 & 基权函数压缩存储方式 \
%\hline
%0.4ns & 5.59 MB & 6.78 MB & 6.78 MB\
%\hline
%0.5ns & 10.17 MB & 5.58 MB & 5.58 MB \
%\hline
%0.6ns & 8.38MB & 4.98 MB & 4.98 MB \
%\hline
%\end{tabular}
%\label{tablea}
%\end{table}

因此,BN变换是可区分的变换,其将归一化的激活值引入网络中。
这确保了在模型训练时,层可以继续学习输入分布,这表明内部的无变化,从而加速了训练。
此外,应用于这些规范化激活的学习后的变换允许BN变换表示身份变换并保留网络容量

%\begin{figure}[h]
%\subfigure[]{
%\label{picd}
%\includegraphics[width=6.77cm]{picd.pdf}}
%\subfigure[]{
%\label{pice}
%\includegraphics[width=7.04cm]{pice.pdf}}
%\caption{ 2 m × 2 m 2m\times 2m 的理想}
%\label{fig2}
%\end{figure}

\section{批量归一化网络的训练和推理}

根据算法1\hyperref[sec:alg1]的说法,为批量标准化网络,我们指定一个激活值子集并为每个子集插入BN变换。
1.先前接收 x x 作为输入的任何层现在接收\emph{BN(x)}。
采用批量标准化的模型可以使用批量梯度下降,或小批量(大小 m > 1 m>1 )的随机梯度下降,或其任何变体如\emph{Adagrad}\footnote{(Duchi等,2011)}进行训练。
依赖于小批量的激活的标准化允许有效的训练,但在推理期间既不必要也不可取; 我们希望输出仅依赖于输入.
为此,一旦网络被训练,我们使用群体而不是小批量统计来进行归一化
\begin{equation}
\hat{x} = \frac{x-E[x]}{\sqrt{Var[x]+\epsilon}}
\end{equation}
忽略 ϵ \epsilon ,这些标准化的激活与训练期间具有相同的均值0和方差1。
我们使用无偏方差估计$ Var[x] = \frac{m}{m-1} \cdot E_\mathcal{B}[\sigma_\mathcal{B}^2] ,其中期望超过尺寸为 m 的微小批量, \sigma_\mathcal{B}^2 使 线 线 是它们的样本方差。 使用移动平均线,我们可以在训练时跟踪模型的准确性。 由于均值和方差在推理期间是固定的,因此归一化仅仅是应用于每次激活的线性变换。 它可以进一步由缩放 \gamma 和移位 \beta$组成,以产生替换\emph{BN(x)}的单个线性变换。
算法2总结了训练批量标准化网络的过程

\begin{algorithm}[H]
\label{sec:alg2}
\SetAlgoNoLine

\KwIn{带有训练参数 $\Theta$ 的网络N; 激活值子集 ${x_{(k)}}_{k=1}^K$}
\KwOut{推理的批量标准化网络$N_{BN}^{inf}$}

$N_{BN}^{tr} \gets N$  

for k = 1 $\cdots$ K \do  

\qquad 增加变换 $y^{(k)} = BN_{\gamma^{(k)},\beta^{(k)}}(x{(k)}) to N_{BN}^{tr}$ \emph{Alg.1}  

\qquad 使用输入$x^{(k)}$替代$y^{(k)}$修正每一层$N_{BN}^{tr}$  

end for  

训练$N_{BN}^{tr}$ 来优化参数 $ \Theta \cup \{ \gamma^{(k)},\beta^{(k)} \}_{k=1}^{K} $  

$N_{BN}^{inf} \gets N_{BN}^{tr}$  

for k = 1 $\cdots$ K do  

\qquad //为了明晰,$x \equiv x^{(k)},\gamma \equiv \gamma^{(k)},\mu_{\mathcal{B}} \equiv \mu_{\mathcal{B}}^{(k)}$,等等以此类推  

\qquad 处理多个训练小批量$\mathcal{B}$,每个小批量大小为$m$,平均值为:  

\qquad	$E[x] \gets E_\mathcal{B}[\mu_{\mathcal{B}}]$  

\qquad  $Var[x] \gets \frac{m}{m-1}E_\mathcal{B}[\sigma_{\mathcal{B}^2} ]$  

\qquad 在 $N_{BN}^{inf}$中,使用$ y = \frac{\gamma}{\sqrt{Var[x]+\epsilon}} \cdots x + (\beta - \frac{\gamma E[x]}{\sqrt{Var[x]+\epsilon}}) $替换变换$ y = BN_{\gamma,\beta}(x) $  

end for	
\caption{训练一个批量标准化网络}

\end{algorithm}

%\begin{theorem}

%\end{theorem}
%\begin{proof}
%由于
%\end{proof}
%\begin{corollary}
%\end{corollary}
%\begin{lemma}
%因此
%\end{lemma}

\section{批量归一化卷积网络}

批量标准化可以应用于网络中的任何激活集。
在这里,我们专注于变换,它包括一个自然变换,然后是元素非线性:
\begin{equation}
z = g(Wu+b)
\end{equation}
其中 W W b b 是模型的学习参数, g ( ) g(\cdot) 是非线性函数,如\emph{sigmoid}或\emph{ReLU}。
这个公式涵盖完全连接和卷积层。
我们通过归一化$ x = Wu+b 线 B N ,在非线性之前立即添加BN变换。 我们也可以对层输入 u 进行归一化,但由于 u 线 可能是另一个非线性的输出,其分布的形状可能会在训练过程中改变,并且约束其第一和第二时刻不会消除协变量偏移。 相比之下, Wu+b KaTeX parse error: Expected 'EOF', got '\footnote' at position 21: …对称的非稀疏分布,即“更高斯”\̲f̲o̲o̲t̲n̲o̲t̲e̲{(Hyva¨rinen&Oj…Wu+b 标准化,因此可以忽略偏差 b 1 ,因为其效果将被随后的平均减法取消(偏差的作用由算法1中的 \beta 包含)。 因此, z = g(Wu+b) $被替换为
\begin{equation}
z = g(BN(Wu))
\end{equation}

其中BN变换独立地应用于 x = W u x = Wu 的每个维度,其中每个维度具有单独的一对学习参数$ \gamma^{(k)},\beta_{(k)} 便 1 。 对于卷积层,我们还希望归一化遵循卷积属性 - 以便在不同位置对同一特征映射的不同元素以相同方式进行归一化。 为实现这一目标,我们联合规范了一个小批量的所有激活值。 在算法1中,我们让 \mathcal{B} 成为特征映射中所有值的集合,跨越小批量和空间位置的元素 - 因此对于大小为 m 的小批量和大小为 p×q 使 的特征映射,我们使用大小为 m’ = |\mathcal{B}| = m \cdot pq 的有效小批量。 我们学习每个特征图的一对参数 \gamma_{(k)},\beta_{(k)}$,而不是每次激活。
算法2倍类似的修正,这使得在推理期间,BN变换对给定特征图中的每个激活应用相同的线性变换。

\section{批量标准化可实现更高的学习率}

在传统的深度网络中,过高的学习速度可能会导致梯度爆炸或消失,以及陷入很差的局部最小值。
批量标准化有助于解决这些问题。
通过规范整个网络的激活,它可以防止参数的微小变化放大到梯度激活的更大和次优变化; 例如,它可以防止训练陷入饱和的非线性状态。
批量标准化还使培训对参数比例更具弹性。
通常,较大的学习速率可能会增加层参数的规模,然后放大反向传播的梯度并导致模型爆炸。
但是,对于批量标准化,通过图层的反向传播不受其参数比例的影响。
实际上,对于标量 a a
\begin{equation}
BN(Wu) = BN((aW)u)
\end{equation}
我们可以证明
\begin{equation}
\frac{\partial BN((aW)u)}{\partial u} = \frac{\partial BN(Wu)}{\partial u}
\end{equation}
\begin{equation}
\frac{\partial BN((aW)u)}{\partial aW} = \frac{1}{a} \frac{\partial BN(Wu)}{\partial W}
\end{equation}
标量 a a 不影响雅可比层,也不影响梯度传播。
此外,较大的权重会导致较小的梯度,批量标准化将稳定参数增长。
我们进一步推测,批量标准化可能导致雅可比层具有接近于1的奇异值,这已知对训练是有益的\footnote{(Saxe等,2013)}。
考虑具有归一化输入的两个连续层,以及这些归一化向量之间的变换: z ^ = F ( x ^ ) \hat{z} = F(\hat{x})
如果我们假设 x ^ \hat{x} z ^ \hat{z} 是高斯和不相关的,并且$F(\hat{x}) \approx J\hat{x} 线 是给定模型参数的线性变换,则 \hat{x} \hat{z} 都具有单位协方差,并且 I = Cov[\hat{z}] = JCov[\hat{x}]J^T = JJ^T 。 因此, JJ^T = I ,因此 J$的所有奇异值都等于1,这保持了反向传播期间的梯度量值。
实际上,变换不是线性的,并且归一化值不保证是高斯的,也不是独立的,但我们仍然期望批量归一化有助于使梯度传播更好地表现。
批量标准化对梯度传播的精确影响仍然是进一步研究的领域。

\section{批量标准化使模型正规化}

在使用批量标准化进行训练时,可以结合小批量中的其他示例看到训练示例,并且训练网络不再为给定的训练示例生成确定性值。
在我们的实验中,我们发现这种效应有利于网络的泛化。
虽然\emph{Dropout}\footnote{(Srivastava等,2014)}通常用于减少过度配置,但在批量标准化网络中,我们发现它可以被移除或降低强度。

\chapter{实验}

\section{随着时间推移的激活值}

为了验证内部协变量偏移对训练的影响,以及批量归一化对抗它的能力,我们考虑了在MNIST数据集\footnote{(LeCun等,1998a)}上预测数字类的问题。
我们使用了一个非常简单的网络,输入为 28 x 28 28x28 二进制图像,

\begin{figure}[h]
\label{sec4-abc}
\includegraphics[width=14.77cm]{sec4-abc.png}
\caption{(a)使用和不使用批量标准化训练的MNIST网络的测试精度\emph{vs} 训练步数。 \to 批量标准化有助于网络更快地训练并实现更高的准确性。
(b,c)在训练过程中输入分布向典型\emph{sigmoid}演变,显示为{15,50,85}%。 \to 批量标准化使分布更稳定并减少内部协变量偏移。}
\end{figure}

图1:(a)使用和不使用批量标准化训练的MNIST网络的测试精度与训练步骤的数量。
批量标准化有助于网络更快地训练并实现更高的准确性。
(b,c)在训练过程中输入分布向典型乙状结肠的演变,显示为{15,50,85}百分位数。
批量标准化使分布更稳定并减少内部协变量偏移。

3个完全连接的隐藏层,每个层有100个激活值。
每个隐藏层计算 y = g ( W u + b ) y = g(Wu+b) 具有S形非线性,并且权重 W W 初始化为小的随机高斯值。
最后一个隐藏层后面是一个完全连接的层,有10个激活值(每个类一个)和交叉熵损失。
我们对网络进行了50000步的培训,每个小批量有60个例子。
我们将批量标准化添加到网络的每个隐藏层,如3.1所述。
我们对基线和批量标准化网络之间的比较感兴趣,而不是在MNIST(所描述的架构没有)上实现最先进的性能。
图1(a)显示了随着训练的进行,两个网络对保持测试数据的正确预测分数。
批量标准化网络具有更高的测试精度。
为了研究原因,我们在训练过程中研究了原始网络 N N 和BN网络 N B N t r N_{BN}^{tr} (算法2)中\emph{sigmoid}的输入。
在图1(b,c)中,我们展示了每个网络的最后一个隐藏层的一个典型活动,它的分布是如何演变的。
随着时间的推移,原始网络中的分布在平均值和方差方面都发生了显着变化,这使得后续层的训练变得复杂。
相比之下,随着训练的进行, B N BN 网络中的分布更加稳定,这有助于训练。

\section{ImageNet分类}

我们将批量标准化应用于\emph{Inception}网络的新变体\footnote{(Szegedy等,2014)},在\emph{ImageNet}分类任务\footnote{(Russakovsky等,2014)}上进行了训练。
该网络具有大量卷积和池化层,具有\emph{softmax}层在1000种可能性中预测图像类别。
卷积层使用\emph{ReLU}作为非线性函数。
描述的网络的主要区别在于5×5卷积层被两个连续的3×3卷积层替换\footnote{(Szegedy等,2014)},最多128个滤波器。
网络包含 13.6 1 0 6 13.6 \cdot 10^6 个参数,除顶部\emph{softmax}层外,没有完全连接的层。
更多细节见附录。
我们在本文的其余部分将此模型称为\emph{Inception}。
使用具有动量的随机梯度下降版本\footnote{(Sutskever等,2013)}训练该模型,使用大小为32的小批量化。使用大规模分布式架构进行训练(类似于\footnote{(Dean et al。,2012)})。
通过使用每个图像的单个裁剪计算验证精度,即在保持的集合上预测1000个可能性中的正确标签的概率,将所有网络评估为训练进展。
在我们的实验中,我们使用批量标准化评估了一些\emph{Inception}的修改。
在所有情况下,批量标准化以卷积方式应用于每个非线性的输入,如3.2节所述,同时保持架构的其余部分不变。

\subsection{加速BN网络}
简单地将批量标准化添加到网络并不能充分利用我们的方法。
为此,我们进一步改变了网络及其训练参数,如下所示:
\begin{enumerate}
\item 提高学习率:在批量标准化模型中,我们已经能够以更高的学习率实现训练加速,没有副作用(第3.3节)。
\item 删除\emph{Dropout}:如3.4节所述,批量标准化完成了与Dropout相同的一些目标。
从修正的\emph{BN-Inception}中删除\emph{Dropout}可加快训练速度,而不会增加过度配置。
\item 减少 L 2 L2 权重正则化:在\emph{Inception}中,模型参数上的 L 2 L2 损失控制了过滤,在修正的\emph{BN-Inception}中,这种损失的权重减少了5倍。我们发现这提高了保持验证数据的准确性。
\item 加速学习率的下降:在训练开始时,学习率呈指数衰减。
由于我们的网络训练速度比\emph{Inception}快,因此我们将学习率降低了6倍。
\item 删除本地响应规范化:虽然\emph{Inception}和其他网络\footnote{(Srivastava等,2014)}从中获益,但我们发现使用批量规范化并不是必需的。
\item 训练实例更加彻底:我们启用了训练数据的分片拖曳,这可以防止相同的示例始终一起出现在小批量中。
这导致验证准确度提高了大约1%,这与批量标准化作为正则化器的观点一致(第3.4节):当我们的方法中每个时间点不同地影响一个例子时,我们方法中固有的随机化应该是最有益的。
\item 减少光度失真。
因为 B N BN 网络训练更快,并且观察每个训练样本的次数更少,我们让训练者通过减少扭曲它们来关注更“真实”的图像。
\end{enumerate}

\begin{figure}[h]
\label{sec4-2-1}
\includegraphics[width=14.77cm]{sec4-2-1.png}
\caption{\emph{Inception}及其批量标准化变体的单一结果验证准确性 \emph{vs} 训练步数}
\end{figure}

\subsection{单网络分类}
我们评估了以下网络,所有这些网络都接受了\emph{LSVRC2012}训练数据的训练,并在验证数据上进行了测试:
\begin{itemize}

\item 开始:第4.2节开头描述的网络,初始学习率为0.0015。
\item BN-基线:与每个非线性之前的批量标准化的初始相同。
\item BN-x5:批量标准化的初始化和第4.2.1中的修改
初始学习率提高了5倍,达到0.0075。
与原始\emph{Inception}相同的学习率增加导致模型参数达到机器的无限性。
\item BN-x30:与BN-x5一样,但初始学习率为0.045(是\emph{Inception}的30倍)。
\item BN-x5-Sigmoid:与BN-x5类似,但具有\emph{sigmoid}非线性 g ( t ) = 1 1 + e x p ( x ) g(t) = \frac{1}{1+exp(-x)} 而不是\emph{ReLU}。
我们还尝试用\emph{sigmoid}训练原始的\emph{Inception},但模型仍保持相当于偶然的精度。
\end{itemize}

在图2中,我们显示了网络的验证准确性,作为训练步数的函数。
31 1 0 6 31\cdot 10^6 次训练步骤后,达到了72.2%的准确率。
表1显示了对于每个网络,达到相同72.2%准确度所需的训练步数,以及网络达到的最大验证准确度以及达到该网络所需的步数。
通过仅使用批量标准化\emph{(BN-Baseline)},我们在不到一半的训练步数中匹敌了\emph{Inception}的准确性。
通过应用第4.2.1节中的修改。
,我们显着提高了网络的训练速度。
BN-x5需要比\emph{Inception}少14倍的步骤就能达到72.2%的准确度。
有趣的是,进一步提高学习率(BN-x30)会导致模型最初训练稍慢,但可以使其达到更高的最终精度。
在$6 \cdot 10^6 $步之后它达到74.8%,即比\emph{Inception}达到72.2%所需的步数少5倍。

\begin{table}[h]
\begin{tabular}{c|c|c}
\hline
\hline
模型 & 达到72.2%所需的步数 & 最大准确率 \
\hline
Inception & 31.0 1 0 6 31.0 \cdot 10^6 & 72.2%\
BN-Baseline & 13.3 1 0 6 13.3 \cdot 10^6 & 72.2%\
BN-x5 & 2.1 1 0 6 2.1 \cdot 10^6 & 72.2%\
BN-x30 & 2.7 1 0 6 2.7 \cdot 10^6 & 72.2%\
BN-x5-Sigmoid & & 72.2%\
\hline
\hline
\end{tabular}
\caption{对于\emph{Inception}和批量标准化变体,达到初始最大准确度(72.2%)所需的训练步数,以及网络实现的最大准确度。}
\label{sec:table1}
\end{table}

我们还验证了内部协变量偏移的减少允许在使用\emph{Sigmoid}作为非线性函数时训练具有批量标准化的深度网络,尽管众所周知训练此类网络十分困难。
实际上,BN-x5-Sigmoid达到了69.8%的准确度。
在没有批量标准化的情况下,\emph{Sigmoid}从未达到超过 1 / 1000 1/1000 精度。

\subsection{分类集合}
目前报道的\emph{ImageNet}大规模视觉识别竞赛的最佳结果是由传统模型的深度图像集合和另一个集合模型\footnote{ (He et al., 2015)}得出的。
后者报告由\emph{ILSVRC}服务器评估的前5个错误4.94%。
在这里,我们报告前5个验证错误为4.9%,测试错误为4.82%(根据\emph{ILSVRC}服务器)。
这改善了先前的最佳结果,并且超过了根据\emph{(Russakovsky等人,2014)}的人类评估者的估计准确度。
对于我们的集合,我们使用了6个网络。
每个都基于BN-x30,修改了以下一些内容:
\begin{itemize}
\item 卷积层中的初始权重增加;
\item 使用\emph{Dropout}(D\emph{Dropout}概率为5%或10%,而原始\emph{Inception}为40%);
\item 使用非卷积、每次激活的批量标准化与模型的最后隐藏层。
\end{itemize}

在大约 6 1 0 6 6\cdot 10^6 个训练步骤之后,每个网络都达到了最大准确度。
集合和多重推断的细节类似于\emph{(Szegedy等,2014)}。
我们在图3中展示了批量标准化使我们能够在\emph{ImageNet}分类挑战基准上以健康的余量设置新的最新技术水平。

\begin{figure}[h]
\label{sec4-2-3}
\includegraphics[width=14.77cm]{sec4-2-3.png}
\caption{批量标准化初始化与包括50000个图像的所提供的验证集的先前技术水平的比较。 \emph{BN-Inception}集合在测试服务器报告的ImageNet测试集的100000个图像上达到了4.82%的前5个错误。}
\end{figure}

\chapter{结论}
我们提出了一种新的机制,可以大大加速深层网络的训练。
它基于协变量偏移,已知这会使机器学习系统的训练复杂化,也就是应用到子网和子层,并将其从网络的内部激活值中移除可能有助于训练。
我们提出的方法通过规范化激活值以及将此归一化结合到网络体系结构本身中来获取其功能。
这确保了通过用于训练网络的任何优化方法适当地处理标准化。
为了实现深度网络训练中常用的随机优化方法,我们对每个小批量执行标准化,并通过标准化参数反向传播梯度。
批量标准化每次激活仅添加两个额外参数,这样做可以保留网络的表示能力。
我们提出了一种使用批量规范化网络构建,训练和执行推理的算法。
由此产生的网络可以通过饱和非线性进行训练,更能容忍增加的训练速率,并且通常不需要\emph{Dropout}进行正则化。

仅仅将批量标准化添加到最先进的图像分类模式中,可以在训练中大大加速。
通过进一步提高学习率,删除\emph{Dropout},以及应用批量标准化提供的其他修改,我们只需要一小部分训练步数即可达到先前的技术水平,并且在单网络图像分类中击败现有技术水平 。
此外,通过组合使用批量标准化训练的多个模型,我们的表现优于\emph{ImageNet}上最着名的系统,具有显着的余量。

有趣的是,我们的方法与\emph{(G u ¨ \ddot{u} lc¸ehre&Bengio,2013)}的标准化层具有相似性,尽管这两种方法源于完全不同的目标,并执行不同的任务。
批量归一化的目标是在整个训练过程中实现激活值的稳定分布,在我们的实验中,我们在非线性之前应用它,因为匹配第一、二矩的位置更可能导致稳定分布。
相反,\emph{(G u ¨ \ddot{u} lc¸ehre&Bengio,2013)}将标准化层应用于非线性的输出,这导致更稀疏的激活值。
在我们的大规模图像分类实验中,我们没有观察到非线性输入是稀疏的,无论有没有批量标准化。
批量标准化的其他显着不同的开始特征包括允许 B N BN 变换表示同一性的学习规模和移位(标准化层不需要这个,因为它后面是学习的线性变换,在概念上,吸收必要的规模和移位) ,卷积层的处理,不依赖于小批量的确定性推断,也不依赖于对网络中的每个卷积层进行规范化。
在这项工作中,我们尚未探索批量标准化可能实现的全部可能性。
我们未来的工作包括将我们的方法应用于递归神经网络\footnote{(Pascanu等,2013)},其中内部协变量偏移和消失或梯度爆炸可能特别严重,这将使我们能够更彻底地测试归一化改善梯度传播(第3.3节)的假设。
我们计划研究批量标准化是否可以在传统意义上帮助域适应,即网络执行的标准化是否允许它更容易推广到新的数据分布,可能只需重新计算总体均值和方差(算法2)。
最后,我们相信对该算法的进一步理论分析将带来更多的改进和应用。
%
%\thesisacknowledgement
%在攻读博士学位期间,首先衷心感谢我的导师XXX教授

%\thesisloadbibliography[nocite]{reference}
%
%
%\thesisappendix
%
%\thesisloadachievement{publications}
%
%
%\thesistranslationoriginal
%\section{A Tight Upper Bound on Bit Error Rate}
%
%
%\thesistranslationchinese
%
%\section{基于多载波索引键控的正交频分多路复用系统模型}

\end{document}

猜你喜欢

转载自blog.csdn.net/zysps1/article/details/89113234
今日推荐