个人学习笔记
date:2023.1.12
参考:
一、零中心化 \color{purple}一、零中心化 一、零中心化
X -= np.mean(X,axis=0)
这是图像处理最常见的数据预处理方式。
一开始就使用整个训练集得到的经验均值去减去所有images,测试集也用训练集得到的均值来减。有两种计算均值的方式
ps. Sigmoid函数在零中心化后仅仅解决了第一层的非零均值问题,但是有很多层神经网络,所以后面的问题还是不能解决。
二、归一化 \color{purple}二、归一化 二、归一化
X /= np.std(X,axis=0)
归一化可以使得数据处在统一范围、分布,使得数据对特征的贡献一致。但图像一般不用,因为已经满足条件了。
若使用 W = 0 W=0 W=0进行初始化,会出现同样的权值在所有网络层和所有神经元之间共享的情况。这意味着所有的神经元在前向传播时将输入相同的信号,并在反向传播时获得相同的梯度。因此,每个神经元都将学习相同的权重,并且整个网络将是同构的。这意味着网络不能学习任何有用的特征,因为所有神经元都将输出相同的结果。
这种情况称为权值共享,会导致模型的欠拟合,也就是说网络的性能非常差,因为网络没有学到有效的特征。
(一)
使用np.random.randn()
来产生一个均值为0,方差为1的正态分布。
此时若神经元由n个输入,既n个独立同分布的标准正态分布输入,由概率论基础知识可知,该输出的均值为0,方差为n,则标准差为 n \sqrt n n,表示输出的离散程度变高。当我们不使用激活函数时,随着神经网络的层数增大,输出的y值将越来越大,所以再反向传播过程里,会造成梯度爆炸现象。
若此时我们使用tanh激活函数,因为输入到激活函数的y很大,所以会出现饱和问题,从而造成梯度消失现象。
(二)
使用0.01*np.random.randn()
来产生一个均值为0,方差为0.01的正态分布。
因为值很小,随着神经网络层数增大,标准差会变为0,。反向传播时,下一层的梯度与上一层的梯度和回流的值 x x x相关,因为值很小,所以参数几乎不更新。
(三)
为解决(一)的问题,2010年有了 X a v i e r 初始化 \color{red}Xavier初始化 Xavier初始化
图中,假设x的方差都是相等的,通过Xavier初始化也假设每一层输出的方差都是恒定为1的,故 y l − 1 y^{l-1} yl−1通过激活函数 f f f之后,得到 x i l x_i^l xil,此时其方差相同( y l − 1 y^{l-1} yl−1为输入, x i l x_i^l xil为输出)。
故式子 V a r ( y l ) = n V a r ( w i l ) V a r ( x i l ) = n V a r ( w i l ) V a r ( y l − 1 ) Var(y^l)=nVar(w_i^l)Var(x_i^l)=nVar(w_i^l)Var(y^{l-1}) Var(yl)=nVar(wil)Var(xil)=nVar(wil)Var(yl−1)
又因为 V a r ( y l ) = V a r ( y l − 1 ) Var(y^l)=Var(y^{l-1}) Var(yl)=Var(yl−1),所以可得 V a r ( w l ) = 1 n Var(w^l)=\frac{1}{n} Var(wl)=n1
Backward Pass 过程:
假设2中,激活函数的导数为1,故 ∂ x j l ∂ y l = 1 \frac{\partial x_j^l}{\partial y^l}=1 ∂yl∂xjl=1,又 ∂ y l ∂ x i l − 1 = w i l \frac{\partial y^l}{\partial x_i^{l-1}}=w_i^{l} ∂xil−1∂yl=wil,故式子可以写为 ∂ L ∂ x i l − 1 = ∑ j = 1 m ∂ L ∂ x j l w i l \frac{\partial L}{\partial x_i^{l-1}}=\sum_{j=1}^m\frac{\partial L}{\partial x_j^l}w_i^{l} ∂xil−1∂L=j=1∑m∂xjl∂Lwil又 V a r ( ∂ L ∂ x i l − 1 ) = m V a r ( w i l ) V a r ( ∂ L ∂ x i l ) Var(\frac{\partial L}{\partial x_i^{l-1}})=mVar(w_i^l)Var(\frac{\partial L}{\partial x_i^l}) Var(∂xil−1∂L)=mVar(wil)Var(∂xil∂L),可得 V a r ( w i l ) = 1 m Var(w_i^l)=\frac{1}{m} Var(wil)=m1
前向传播和反向传播取均值可得 V a r ( w i l ) = 2 n i n + n o u t Var(w_i^l)=\frac{2}{n_{in}+n_{out}} Var(wil)=nin+nout2
正态分布初始化 N ( 0 , 2 n i n + n o u t ) N(0,\frac{2}{n_{in}+n_{out}}) N(0,nin+nout2)
均匀分布初始化 u ( − 6 n i n + n o u t , 6 n i n + n o u t ) u(-\sqrt \frac{6}{n_{in}+n_{out}},\sqrt \frac{6}{n_{in}+n_{out}}) u(−nin+nout6,nin+nout6)
其中满足假设2的只有tanh函数,而ReLU函数并不满足
(四)
为解决不能再ReLU上使用的问题,2015年何凯明大佬提出 K a i m i n g 初始化 \color{red}Kaiming初始化 Kaiming初始化
因为非零均值函数,所以抛弃假设1的部分和假设2,则 y l y^l yl的方差可以写为
V a r ( y l ) = n [ V a r ( w i l ) V a r ( x i l − 1 ) + V a r ( w i l ) E ( x i l − 1 ) 2 ] Var(y^l)=n[Var(w_i^l)Var(x_i^{l-1})+Var(w_i^l)E(x_i^{l-1})^2] Var(yl)=n[Var(wil)Var(xil−1)+Var(wil)E(xil−1)2]
又 V a r ( x i l − 1 ) = E ( ( x i l − 1 ) 2 ) − E ( x i l − 1 ) 2 Var(x_i^{l-1})=E((x_i^{l-1})^2)-E(x_i^{l-1})^2 Var(xil−1)=E((xil−1)2)−E(xil−1)2,故式子可以写为
V a r ( y l ) = n V a r ( w i l ) E ( ( x i l − 1 ) 2 ) = n V a r ( w i l ) E ( f ( y l − 1 ) 2 ) Var(y^l)=nVar(w_i^l)E((x_i^{l-1})^2)=nVar(w_i^l)E(f(y^{l-1})^2) Var(yl)=nVar(wil)E((xil−1)2)=nVar(wil)E(f(yl−1)2)
由期望定义式可知, E ( f ( y l − 1 ) 2 ) = ∫ − ∞ ∞ f ( y l − 1 ) 2 p ( y l − 1 ) d ( y l − 1 ) = ∫ 0 ∞ ( y l − 1 ) 2 p ( y l − 1 ) d ( y l − 1 ) + ∫ − ∞ 0 α 2 ( y l − 1 ) 2 p ( y l − 1 ) d ( y l − 1 ) E(f(y^{l-1})^2)=\int_{-\infty}^{\infty}f(y^{l-1})^2p(y^{l-1})d(y^{l-1})=\\\int_{0}^{\infty}(y^{l-1})^2p(y^{l-1})d(y^{l-1})+\int_{-\infty}^{0}\alpha ^2(y^{l-1})^2p(y^{l-1})d(y^{l-1}) E(f(yl−1)2)=∫−∞∞f(yl−1)2p(yl−1)d(yl−1)=∫0∞(yl−1)2p(yl−1)d(yl−1)+∫−∞0α2(yl−1)2p(yl−1)d(yl−1)
前半部分是因为由ReLU函数可知, f ( y ) = y f(y)=y f(y)=y。后半部分只有当leaky ReLU和PReLU函数时不为0.
又左半部分 ∫ 0 ∞ ( y l − 1 ) 2 p ( y l − 1 ) d ( y l − 1 ) = 1 2 E ( ( y l − 1 ) 2 ) \int_{0}^{\infty}(y^{l-1})^2p(y^{l-1})d(y^{l-1})=\frac{1}{2}E((y^{l-1})^2) ∫0∞(yl−1)2p(yl−1)d(yl−1)=21E((yl−1)2)右半部分 ∫ − ∞ 0 α 2 ( y l − 1 ) 2 p ( y l − 1 ) d ( y l − 1 ) = 1 2 α 2 E ( ( y l − 1 ) 2 ) \int_{-\infty}^{0}\alpha ^2(y^{l-1})^2p(y^{l-1})d(y^{l-1})=\frac{1}{2}\alpha ^2E((y^{l-1})^2) ∫−∞0α2(yl−1)2p(yl−1)d(yl−1)=21α2E((yl−1)2)
故 E ( f ( y l − 1 ) 2 ) = 1 2 ( 1 + α 2 ) E ( ( y l − 1 ) 2 ) E(f(y^{l-1})^2)=\frac{1}{2}(1+\alpha ^2) E((y^{l-1})^2) E(f(yl−1)2)=21(1+α2)E((yl−1)2)则 V a r ( y l ) = n 1 2 ( 1 + α 2 ) E ( ( y l − 1 ) 2 ) V a r ( w i l ) ) Var(y^l)=n\frac{1}{2}(1+\alpha ^2) E((y^{l-1})^2)Var(w_i^l)) Var(yl)=n21(1+α2)E((yl−1)2)Var(wil))
又 E ( y l − 1 ) 2 = V a r ( y l − 1 ) + E ( y l − 1 ) 2 E(y^{l-1})^2=Var(y^{l-1})+E(y^{l-1})^2 E(yl−1)2=Var(yl−1)+E(yl−1)2,而 E ( y l − 1 ) = 0 E(y^{l-1})=0 E(yl−1)=0,最终 V a r ( y l ) = n 1 2 ( 1 + α 2 ) V a r ( y l − 1 ) V a r ( w i l ) ) Var(y^l)=n\frac{1}{2}(1+\alpha ^2) Var(y^{l-1})Var(w_i^l)) Var(yl)=n21(1+α2)Var(yl−1)Var(wil))
又假设 V a r ( y l ) = V a r ( y l − 1 ) Var(y^l)=Var(y^{l-1}) Var(yl)=Var(yl−1),故 V a r ( w i l ) = 2 n ( 1 + α 2 ) Var(w_i^l)=\frac{2}{n(1+\alpha ^2)} Var(wil)=n(1+α2)2
正态分布:
N ( 0 , 2 n ( 1 + α 2 ) ) N(0,\frac{2}{n(1+\alpha ^2)}) N(0,n(1+α2)2)
均匀分布: u ( − 6 n ( 1 + α 2 ) , 6 n ( 1 + α 2 ) ) u(-\sqrt \frac{6}{n(1+\alpha ^2)},\sqrt \frac{6}{n(1+\alpha ^2)}) u(−n(1+α2)6,n(1+α2)6)
使用tanh激活函数时,将权重矩阵初始化为
def xavier_init(n_in, n_out):
# Compute the variance
var = 1. / (n_in + n_out)
# Initialize the weights with a normal distribution
W = np.random.randn(n_in, n_out) * np.sqrt(var)
return W
使用ReLU激活函数时,将权重矩阵初始化为
def kaiming_init(n):
# Compute the variance
var = 2. / n
# Initialize the weights with a normal distribution
W = np.random.randn(n_in, n_out) * np.sqrt(var)
return W