1、网络优化参数
sigmoid函数:1/(1+e^(-x))::便于求导的平滑函数,但是容易出现梯度消失问题;函数中值不是0,会导致模型训练的收敛速度变慢。。。
tanh函数:(e^x-e^(-x))/(e^x+e^(-x))::解决了zero-centered问题,但是梯度消失和幂运算的问题还在。
RELU:max{0,x}::在正区间解决了梯度消失问题,计算速度很快;但是也不是zero-centered,且存在DEAD RELU Problem(某些神经元可能永远不会参加计算,导致相应参数无法被更新)。解决方法:采用Xavier初始化方法,以及避免lr设置太大或者使用Adagrad等自动调节lr算法。
LEAKY RELU函数:max{0.01x,x}::解决DEAD RELU PROBLEM;但是理论是好,实际应用也不一定绝对比RELU好。
指数线性单元ELU函数:
α(e^x-1) , x<=0
x ,x>0 ::有较高的噪声鲁棒性,但是需要计算指数,所以计算量较大。
SELU函数:SELU(x)=λ(ELU(x)) ::自归一化神经网络中提出,只要把激活函数换程SELU就能使得输入在经过一定层数后变成固定分布。
Softmax函数:(可视作Sigmoid函数的泛化形式):本质上就是将一个K维的任意实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。一般用于多分类神经网络。
2、参数初始化方法
参数初始化条件:1、各层激活值不会出现饱和现象;2、各层激活值不为0
随机生成小的随机数:从均值为0,标准差为1的高斯分布中取样,这样参数的每个维度来自于一个多维的高斯分布。一般,参数初始值不能太小,容易出现梯度弥散(反向传播时会导致较小的梯度产生)。
标准初始化:权重参数从确定的区间均匀随机取值,
Xavier初始化:从方差来考虑,激活值的方差和层数无关,反向传播梯度的方差和层数无关,Xavier通常和ReLU一起使用。
3、最优化方法:
优化方法时深度学习中最重要的话题,通常时利用目标函数的导数通过多次迭代来求解无约束最优化问题。
常见有:梯度下降(批量梯度下降,随机梯度下降(SGD),基于动量项的SGD);牛顿法(基于二阶梯度,快,但是Hesseian矩阵不可逆就难办了)、拟牛顿法(用正定矩阵来代替Hesseian矩阵的逆)、共轭梯度法;
以上方法中堆所有参数使用同一个更新速率,但同一个速率不一定适合所有参数。
Adagrad算法(自适应维各个参数分配不同学习率的算法,其学习率是单调递减的,训练后期学习率非常小,要手工设置一个全局的厨师学习率)、Adadelta算法(不依赖全局学习率但RMSprop可算作Adadelta的一个特例仍然依赖于全局lr)、Adam算法(本质上是带有动量项的RMSprop算法)。
4、归一化方法
特征归一化:BN,LN, GN;权重归一化:WN (目的:满足数据的独立同分布要求这一基本假设)
5、正则化方法:(预测和训练效果一样好,泛化能力强)
参数惩罚:(常用的就是在损失函数上添加范数约束)
DROPOUT(训练过程中随机丢弃输入,得到子网络,显著降低过拟合:这里通过对每个层随机选择激活函数的子集设置为0)与DROP CONNECT(前者的一般化形式,区别前者的激活函数子集设为0,这里将权重设为0)
提前停止:
训练样本扩充:实际上最有效的防止过拟合的方法是增加训练样本。