首先是不能从0开始初始化:因为若权重是0,那么所有神经元的输出都会相同,在反向传播的过程中学到的东西是一致的,梯度相等,权重相等,当中间隐藏层神经元的输出是相同的话,那么反向传播回来的梯度以及权重都不会更新,网络不工作
随机初始化
随机初始化是一种简单的初始化方法:比如标准高斯分布初始化方法,均值为0标准差为1,但随着网络层数的叠加,后面激活函数的输出均为0.
当选择数值比较小的高斯分布 均值为0 方差为0.01. 在后面的输出过程中,输出值迅速向0靠拢,几乎所有的输出值都很接近0,并且会出现梯度消失的情况(在小型的网络中常见)deep的网络会出现梯度消失
当均值为0,方差为1的高斯分布,在前向传播的时候,要么值为-1要么为1,被抑制或者被饱和,进行激活函数的上线sigmoid 以及tanh函数,造成梯度消失
Xavier初始化
帮助解决梯度消失的情况,是网络能够反响传播
基本思想:保持输入与输出的方差一致,(有相同的分布),避免了所有的输出趋向0
一般Xavier初始化的方法是,将权值初始化为标准高斯分布,均值为0,方差为1/N,其中N是输入的样本个数
那么在前向传播的过程中能够保持输出与输入分布的一致性
适用于tanh激活函数,不适用于relu激活函数
MSRA 何恺明的初始化方法
权值初始化的方法为 标准高斯分布。均值为0,方法为2/N,其中N是输入的样本数
并且适用于relu函数
批归一化
bn层,在隐藏层与激活层之间,将数据进行标准化,强制标准化会造成数据的丢失,比如relu的神经云死亡,因此需要将输出与输入保持一致性,带入可学习的参数,伽马与sigma ,来对输出分布进行变换到输入
降低模型参数初始化敏感度
summary:
1. 当前的主流初始化方式 Xavier,MSRA 主要是为了保持每层的输入与输出方差相等, 而参数的分布采用均匀分布或高斯分布都行。
2. 在广泛采用 Batch Normalization 的情况下,使用普通的小方差的高斯分布即可。
3. 在迁移学习的情况下,优先采用预训练的模型进行参数初始化。