小问题:

sigmoid 时,消失和爆炸哪个更易发生?

因为 sigmoid 导数最大为1/4,故只有当abs(w)>4时才可能出现梯度爆炸,而最普遍发生的是梯度消失问题。

防止梯度消失

1.BN层,因为让数据集中在0附近,使得反向传播经过类似sigmod函数时,导数不会因为数据分散的离0太远而太小
2.预训练加微调
此方法来自Hinton在2006年发表的一篇论文,Hinton为了解决梯度的问题,提出采取无监督逐层训练方法,其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。Hinton在训练深度信念网络(Deep Belief Networks中,使用了这个方法,在各层预训练完成后,再利用BP算法对整个网络进行训练。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用的不是很多了。
2.使用 ReLU、LReLU、ELU、maxout 等激活函数sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。
3.LSTM
4.残差结构

防止梯度爆炸

1.BN层,第一层偏移量的梯度=激活层斜率1x权值1x激活层斜率2x…激活层斜率(n-1)x权值(n-1)x激活层斜率n,假如激活层斜率均为最大值0.25,所有层的权值为100,这样梯度就会指数增加。(使用bn层后权值的更新也不会很大)
2.预训练加微调
3.使用 ReLU、LReLU、ELU、maxout 等激活函数sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。
4.梯度截断(Gradient Clipping)
5.正则化项