初始化
深度学习中的参数初始化非常重要:
初始点的选取有时候能决定算法是否收敛
当收敛时,初始点可以决定学习收敛的速度、是否收敛到一个代价高或者低的点
初始化也影响泛化
初始参数需要破坏不同神经元之间的对称性,如果初始化成一样的值,整个神经网络就会变成确定性的算法,具有相同输入的神经元前向传播和梯度更新就都变得一模一样的。
初始化的参数主要有W权重、bias偏置。
W 权重
在实践中,经常将权重初始化为高斯分布,或者均匀分布。
高斯分布或者均匀分布的选择并没有太大的区别。但是初始化分布的“大小”(scale)对优化结果和泛化能力有极大的影响。
均匀分布:uniform initialization
高斯分布:normal initialization
需要设置的参数是均值(mean)和标准差(stddev)。
一般情况下,均值设为0。标准差会有不同:
设置标准差为0.01或者0.001:会带来因标准差过小导致的前向传播时信号丢失。
Xavier Initialization:m个输入,n个输出。只要满足均值是0,标准差是sqrt(1/m)或sqrt(2/(m+n))分布的都叫做Xavier Initialization。
MSRA Initialization:属于xavier的变种,对于Relu 的激活函数而言推荐使用stddev=sqrt(2/m)。
正交初始化:orthogonal initialization
稀疏初始化:sparse initialization
使每一层初始化恰好有k个非0权重。
无监督训练初始化
使用相同的数据集,用unsupervisor的方式(比如RBM,AE)训练出来的参数初始化supervisor的模型
有监督训练初始化
在相关任务上,用supervisor的方式预训练参数。
不相关任务上,supervisor的预训练也可以得到一个比初始化更快收敛的初始值。
bias偏置
一般情况下,偏置总设为0。
当然,也有非0的情况。