【cs231n Lesson6】Data Preprocessing & Weight Initialization

个人学习笔记
date:2023.1.12
参考:

  1. https://www.bilibili.com/video/BV1r94y1Q7eG/?spm_id_from=333.788&vd_source=9e9b4b6471a6e98c3e756ce7f41eb134

Data Preprocessing

一、零中心化 \color{purple}一、零中心化 一、零中心化
X -= np.mean(X,axis=0)

这是图像处理最常见的数据预处理方式。
一开始就使用整个训练集得到的经验均值去减去所有images,测试集也用训练集得到的均值来减。有两种计算均值的方式

  • 计算单个channels的均值
  • 计算三个channels的均值

ps. Sigmoid函数在零中心化后仅仅解决了第一层的非零均值问题,但是有很多层神经网络,所以后面的问题还是不能解决。

二、归一化 \color{purple}二、归一化 二、归一化
X /= np.std(X,axis=0)

归一化可以使得数据处在统一范围、分布,使得数据对特征的贡献一致。但图像一般不用,因为已经满足条件了。

Weight Initialization

一、W=0

若使用 W = 0 W=0 W=0进行初始化,会出现同样的权值在所有网络层和所有神经元之间共享的情况。这意味着所有的神经元在前向传播时将输入相同的信号,并在反向传播时获得相同的梯度。因此,每个神经元都将学习相同的权重,并且整个网络将是同构的。这意味着网络不能学习任何有用的特征,因为所有神经元都将输出相同的结果。

这种情况称为权值共享,会导致模型的欠拟合,也就是说网络的性能非常差,因为网络没有学到有效的特征。

所以一般来说我们会使用随机权重初始化来避免这种情况。
【cs231n Lesson6】Data Preprocessing & Weight Initialization_第1张图片

二、随机权重

(一)
使用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初始化

【cs231n Lesson6】Data Preprocessing & Weight Initialization_第2张图片
Forward pass过程:

图中,假设x的方差都是相等的,通过Xavier初始化也假设每一层输出的方差都是恒定为1的,故 y l − 1 y^{l-1} yl1通过激活函数 f f f之后,得到 x i l x_i^l xil,此时其方差相同( y l − 1 y^{l-1} yl1为输入, 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(yl1)
又因为 V a r ( y l ) = V a r ( y l − 1 ) Var(y^l)=Var(y^{l-1}) Var(yl)=Var(yl1),所以可得 V a r ( w l ) = 1 n Var(w^l)=\frac{1}{n} Var(wl)=n1

Backward Pass 过程:
【cs231n Lesson6】Data Preprocessing & Weight Initialization_第3张图片
假设2中,激活函数的导数为1,故 ∂ x j l ∂ y l = 1 \frac{\partial x_j^l}{\partial y^l}=1 ylxjl=1,又 ∂ y l ∂ x i l − 1 = w i l \frac{\partial y^l}{\partial x_i^{l-1}}=w_i^{l} xil1yl=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} xil1L=j=1mxjlLwil 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(xil1L)=mVar(wil)Var(xilL),可得 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初始化

【cs231n Lesson6】Data Preprocessing & Weight Initialization_第4张图片
因为非零均值函数,所以抛弃假设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(xil1)+Var(wil)E(xil1)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(xil1)=E((xil1)2)E(xil1)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((xil1)2)=nVar(wil)E(f(yl1)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(yl1)2)=f(yl1)2p(yl1)d(yl1)=0(yl1)2p(yl1)d(yl1)+0α2(yl1)2p(yl1)d(yl1)
前半部分是因为由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(yl1)2p(yl1)d(yl1)=21E((yl1)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(yl1)2p(yl1)d(yl1)=21α2E((yl1)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(yl1)2)=21(1+α2)E((yl1)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((yl1)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(yl1)2=Var(yl1)+E(yl1)2,而 E ( y l − 1 ) = 0 E(y^{l-1})=0 E(yl1)=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(yl1)Var(wil))
又假设 V a r ( y l ) = V a r ( y l − 1 ) Var(y^l)=Var(y^{l-1}) Var(yl)=Var(yl1),故 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

你可能感兴趣的:(cs231n,概率论,python)