原文来自ARM:
Noisy machines: understanding noisy neural networks and enhancing robustness to analog hardware errors using distillation
本文主要分析对于一个NN,当well trained weights 被 noise 污染之后:
- 会对原NN的表达能力有什么影响;
- 怎么训练NN使得它能抵抗noise.
背景
现在的神经网络变得越来越大,所以说对于mobile NN来说,大的NN就很难部署 (计算资源,能量消耗)。因此一个研究热点就是如何设计efficient NN来适应mobile device。现在主要的研究对象都在digital hardware上的,本文focused的是analog hardware.
[什么是analog hardware]
它指的是用analog quantities (电压,光脉冲) 来表示digital values,从而在模拟域进行加法和乘法运算。以往的研究中,feedforward DNN inference已经在 electronic (Binas et al., 2016), photonic (Shen et al., 2017) and optical (Lin et al., 2018) 系统中得到了验证。结果表明:
- 模拟运算在速度和能量效率上比数字运算高两个数量级。
- 模拟运算的缺点是器件会引入噪声,通常用AWGN建模。
[analog hardware是怎么实现的]
本文主要讨论 electronic analog DNN accelerator。 最常见的实现方式是 in-memory computing, 即使用 NVM (非易失内存) crossbar arrays 来表示NN的weights. 而NVM 本身可以用 memristive devices (如ReRAM或PCM) 来实现。
实现加法:可以用 electrical currents 电流来表示weights,那么把两根线连在一起电流就会相加 (Kirchhoff’s current law). 这样一来,latency几乎是0,energy dissipation 也几乎是0.
实现乘法:用 NVM cell conductance 电导 (resistance电阻的倒数) 来表示 weights, 用电压表示input. 这样,输出的current电流就是 weights 和 input的乘积 (Ohm’s law 电流等于电压除电阻)。同样的, throughput and energy efficiency被大大提升了。
早期文章
综上,本文主要研究的是训练NN来使它更适应硬件引入的噪声 (prediction accuracy不会损失太大)。在进入正文之前,作者强调noisy NN这个问题很久有人曾研究过,如:
John Von Neumann. Probabilistic logics and the synthesis of reliable organisms from unreliable components. Automata studies, 34:43–98, 1956.
这个早期的work是一系列的lecture notes,我还没仔细看。
Maryhelen Stevenson, Rodney Winter, and Bernard Widrow. Sensitivity of feedforward neural net- works to weight errors. IEEE Transactions on Neural Networks, 1(1):71–80, 1990.
这篇文章主要是探讨weights加入噪声后对输出的影响。他考虑的整个NN都是+1,-1,包括输入输出以及activation function。我会另写一篇博客仔细探讨这篇文章。
Related work
作者总结道,相关研究主要在三个方面
噪声到底长什么样?
Rekhi et al. (2019) 噪声被建模为AWGN, 其中噪声的variance是模拟计算输出比特个数的一个函数
Joshi et al. (2019) 噪声被建模为AWGN, 方差与PCM设备能表示的值得范围成正比。
Jain et al., (2018); Feinberg et al., (2018) 更详细的噪声模型
本文还是把噪声建模为AWGN.
Noise Injection 噪声注入
Srivastava et al., (2014); Noh et al., (2017); Li & Liu, (2016) 这些文章使用 噪声注入和 dropout 有效的减少了 overfitting.
Wager et al., (2013) 的结果说明,对于一般的线性模型, dropout 和 加性噪声 等价于 adaptive L2 regularization to a first order.
Rakin et al., (2018) 显示,在训练时加入高斯噪声可以提升系统对adversarial attacks的鲁棒性。
而且在inference的时候,这些文章也会加入噪声来模拟weight的分布。
Gal & Ghahramani (2016) 为了建模神经网络输出的不确定性,作者建立了Gaussian process and dropout 之间的 link.
Stevenson et al. (1990) 早期的结果显示,noisy NN输出出错的概率与NN层数有很大关系,与每层neuron个数或weights个数没几乎是独立。again它的网络中输入和每层输出都是+1, -1.
Distillation in Training Knowledge
Hinton et al., (2015) 提出了有名的 distillation 技术。主要思想就是用 teacher model产生的soft labels (而不是原始训练数据) 来训练一个小的 student model.
distillation在很多场景下都有广泛应用。比如 Micaelli & Storkey, (2019) 中 student model只能拿到一部分训练数据; Polino et al., (2018); Mishra & Marr, (2017) 中量化后的低精度网络; 等等。本文是第一个结合distillation和noise injection来提升模型抵抗噪声能力的。
注:为了简化模型,DL一个研究分支是 model compression 模型压缩. 主要方法有 Parameter sharing 参数共享, Network pruning 网络裁剪, Matrix decomposition 矩阵分解, Knowledge Distillation 知识蒸馏。其中,知识蒸馏是用大的NN学习到的soft label来训练小网络,这样做的原因是
- Teacher model 的输出往往带有一些额外的信息, 被称为 Dark Knowledge. 比如说输出一个分布,大模型虽然只选了其中概率最大的,但是其他的值一般也不是全是0,这种信息反映的是大模型的一些不确定性,其实就是说大模型认为其他的输入也是有一些些概率的。这种soft label就比one-hot vec这种hard label有用。
- 人工标注的训练数据可能有一些错误,但是teacher model已经纠正了一部分错误了。
Analysis of noisy neural nets
本节,作者分析在加了噪声之后对输出的影响 (衡量标准是 MSE)。
bias variance decomposition
好,第一步作者先分析了weights上噪声引入对输出MSE的影响。我们考虑一个多输入单输出的NN,其中输入是 x \bm{x} x, 输出是 y y y. 我们研究 y y y 的MSE 性能。注意,如果有多个输出,那么MSE性能就是每个输出MSE的平均。
假设训练数据满足分布 p ( x , y ) p(\bm{x},y) p(x,y). 即 x \bm{x} x 与 y y y 之间满足某种对应关系,实际上NN就是在学习到这种对应关系从而从给定的 x \bm{x} x 中 infer 出 y y y.
训练数据:
{
x
i
,
y
i
:
i
=
1
,
2
,
.
.
.
,
N
}
\{\bm{x_i},y_i:i=1,2,...,N\}
{xi,yi:i=1,2,...,N}
无噪神经网络参数:
θ
\bm{\theta}
θ
有噪神经网络参数:
W
=
θ
+
Z
\bm{W=\theta+Z}
W=θ+Z
神经网络输出:
f
(
θ
,
x
i
)
f(\bm{\theta},\bm{x_i})
f(θ,xi)
[无噪]
首先我们考虑无噪声的情况.
-
我们假设神经网络的训练的loss是MSE loss,因此参数
θ = arg min θ ′ E ( x , y ) [ ( f ( θ ′ , x ) − y ) 2 ] \theta=\arg\min_{\bm{\theta}'} \mathbb{E}_{(\bm{x},y)}\left[ (f(\bm{\theta}',\bm{x})-y)^2 \right] θ=argθ′minE(x,y)[(f(θ′,x)−y)2] -
在无噪情况下,参数 θ \bm{\theta} θ 是确定值,因此给定一个输入 x i \bm{x_i} xi 就有一个输出 f ( θ , x i ) f(\bm{\theta},\bm{x_i}) f(θ,xi). 而 θ \bm{\theta} θ 就是能让所有训练数据MSE最小的参数。这个MSE 我们记作
MSE 0 = E ( x , y ) [ ( f ( θ , x ) − y ) 2 ] \text{MSE}_0=\mathbb{E}_{(\bm{x},y)}\left[ (f(\bm{\theta},\bm{x})-y)^2 \right] MSE0=E(x,y)[(f(θ,x)−y)2]
因为他也是NN输出与label y y y 差距的variance,文中记作 ℓ ^ pretrained \hat{\ell}_\text{pretrained} ℓ^pretrained
[有噪]
那么有噪声的时候,NN的参数变成了
W
=
θ
+
Z
\bm{W=\theta+Z}
W=θ+Z, 其中
Z
\bm{Z}
Z 是一个随机变量,因此
W
\bm{W}
W 也是一个随机变量。既然 weights
W
\bm{W}
W 变成了一个分布,那么给定一个输入
x
i
\bm{x_i}
xi, NN的输出也是一个分布。下面我们分别分析,有噪声时, NN输出的 mean, variance, 以及和真实label
y
y
y 之间的偏差。
-
均值 – 给定一个输入 x i \bm{x_i} xi 时, NN的输出均值是
mean = E Z [ f ( θ + Z , x i ) ] = def f ‾ ( θ + Z , x i ) \text{mean}= \mathbb{E}_{\bm{Z}} \left[ f(\bm{\theta\!+\!Z},\bm{x_i}) \right]\overset{\text{def}}{=}\overline{f}(\bm{\theta\!+\!Z},\bm{x_i}) mean=EZ[f(θ+Z,xi)]=deff(θ+Z,xi)
那么这个输出均值和 y i y_i yi 差了多少尼?平均差了
MSE 1 = E ( x , y ) [ ( f ‾ ( θ + Z , x ) − y ) 2 ] \text{MSE}_1= \mathbb{E}_{(\bm{x},y)} \left[(\overline{f}(\bm{\theta\!+\!Z},\bm{x})-y)^2 \right] MSE1=E(x,y)[(f(θ+Z,x)−y)2]
这在文中记作 ℓ ^ bias \hat{\ell}_\text{bias} ℓ^bias, 即有噪声时,NN的平均输出与label y y y 差距的variance。显然当没噪声时, MSE 1 = MSE 0 \text{MSE}_1=\text{MSE}_0 MSE1=MSE0, 而当NN是线性模型且噪声是零均值时, f ( θ + Z , x i ) = ( θ + Z ) x i f(\bm{\theta+Z,x_i})=(\bm{\theta+Z})\bm{x_i} f(θ+Z,xi)=(θ+Z)xi, E Z [ f ( θ + Z , x i ) ] = θ x i \mathbb{E}_\bm{Z}[f(\bm{\theta+Z,x_i})]=\bm{\theta x_i} EZ[f(θ+Z,xi)]=θxi, MSE 1 = MSE 0 \text{MSE}_1=\text{MSE}_0 MSE1=MSE0. -
方差 – 再来看看神经网络自身输出的 variance. 首先,我们看给定输入 x i \bm{x_i} xi 时,NN的输出variance
var ( x i ) = E Z [ ( f ( θ + Z , x i ) − mean ) 2 ] = E Z [ ( f ( θ + Z , x i ) − f ‾ ( θ + Z , x i ) ) 2 ] \text{var}(\bm{x_i}) =\mathbb{E}_{\bm{Z}} \left[ (f(\bm{\theta\!+\!Z},\bm{x_i}) - \text{mean})^2\right]=\mathbb{E}_{\bm{Z}} \left[ (f(\bm{\theta\!+\!Z},\bm{x_i}) - \overline{f}(\bm{\theta\!+\!Z},\bm{x_i}))^2\right] var(xi)=EZ[(f(θ+Z,xi)−mean)2]=EZ[(f(θ+Z,xi)−f(θ+Z,xi))2]
那么对于所有的输入尼?
var ‾ = E x { var ( x i ) } = E x { E Z [ ( f ( θ + Z , x ) − f ‾ ( θ + Z , x ) ) 2 ] } \overline{\text{var}} =\mathbb{E}_{\bm{x}} \{ \text{var}(\bm{x_i}) \}=\mathbb{E}_{\bm{x}} \left\{\mathbb{E}_{\bm{Z}} \left[ (f(\bm{\theta\!+\!Z},\bm{x}) -\overline{f}(\bm{\theta\!+\!Z},\bm{x}) )^2\right] \right\} var=Ex{var(xi)}=Ex{EZ[(f(θ+Z,x)−f(θ+Z,x))2]}
这在原文中记作 ℓ ^ var \hat{\ell}_\text{var} ℓ^var 因为它是噪声带来的 NN 自身输出的variance,而与label无关。
[目标]
为什么要分析以上两点尼?因为我们最终想求的MSE,即引入噪声后NN输出与lable之间的MSE,可以分解为以上两点的加和。
MSE
‾
=
E
(
x
,
y
)
,
Z
[
(
f
(
θ
+
Z
,
x
)
−
y
)
2
]
\overline{\text{MSE} }= \mathbb{E}_{(\bm{x},y),\bm{Z}}\left[ (f(\bm{\theta+Z},\bm{x})-y)^2 \right]
MSE=E(x,y),Z[(f(θ+Z,x)−y)2]
= E ( x , y ) , Z [ ( f ( θ + Z , x ) − f ‾ ( θ + Z , x ) + f ‾ ( θ + Z , x ) − y ) 2 ] = \mathbb{E}_{(\bm{x},y),\bm{Z}}\left[ (f(\bm{\theta+Z},\bm{x})- \overline{f}(\bm{\theta\!+\!Z},\bm{x}) +\overline{f}(\bm{\theta\!+\!Z},\bm{x}) -y)^2 \right] =E(x,y),Z[(f(θ+Z,x)−f(θ+Z,x)+f(θ+Z,x)−y)2]
= E ( x , y ) , Z [ ( f ( θ + Z , x ) − f ‾ ( θ + Z , x ) ) 2 + ( f ‾ ( θ + Z , x ) − y ) 2 ] = \mathbb{E}_{(\bm{x},y),\bm{Z}}\big[ \left(f(\bm{\theta+Z},\bm{x})- \overline{f}(\bm{\theta\!+\!Z},\bm{x})\right)^2 +\left(\overline{f}(\bm{\theta\!+\!Z},\bm{x}) -y\right)^2 \big] =E(x,y),Z[(f(θ+Z,x)−f(θ+Z,x))2+(f(θ+Z,x)−y)2]
= var ‾ + MSE 1 = \overline{\text{var}} + \text{MSE}_1 =var+MSE1
到此,作者结束了分析。可以看到,在以上分析中,NN还是作为一个黑盒子出现的,我们仅能把MSE表示为 NN不同情况下输出的函数。
接下来,作者进行了实验观测以上两个错误项随着信噪比的变化是如何变化的。
P.S. 这种分析方法对我也是没用的,因为它无法刻画噪声 Z \bm{Z} Z 到底给MSE带来了多少变化。
loss of information
紧接着,作者又用了information theory的方法来分析。基本原理就是刻画输入
X
X
X 输出
Y
Y
Y 之间的mutual information。即通过观测输入
X
X
X, 我们获得了多少information about 输出
Y
Y
Y. 当没有噪声时,NN是一个确定的函数,因此
H
(
Y
∣
X
)
=
0
H(Y|X)=0
H(Y∣X)=0 and
I
(
X
;
Y
)
=
H
(
Y
)
−
H
(
Y
∣
X
)
=
H
(
Y
)
I(X;Y)=H(Y)-H(Y|X)=H(Y)
I(X;Y)=H(Y)−H(Y∣X)=H(Y)
但当有噪声时,这个mutual information随着feedforward passing而逐渐变小,当最终为0时,我们observe不到任何的information了。