我想训练一个具有消失(或爆炸梯度问题,尽管主要是消失)的非线性网络。我知道(当前)标准方法是使用批量标准化1 [BN] 1或干脆放弃非线性并使用 ReLu整流器/ReLu单元。
我想要两件事:
- 坚持我的非线性,所以我不想放弃它并使用ReLu(即不允许ReLu!)。重新参数化非线性是可以的,比如在它前面放一个乘法例如。
- 理想情况下,我不想过多地依赖批量标准化(或者至少如果使用它,它必须以一种新颖的方式使用,而不是在原始论文中使用它或推广到许多非线性)。我想避免 Batch Normalize 的原因之一是它似乎只适用于特定的非线性。例如,对于 sigmoid,tanh,但不清楚它们如何用于其他非线性,比如高斯。
我有这些限制的原因是因为我想通过直接解决问题来解决梯度消失或爆炸梯度的问题,而不是破解仅适用于特定非线性的解决方案,或者只是通过推入来避免问题热卢。
我想知道,在这两个约束下,处理消失梯度问题的替代方法是什么?(另一个需要考虑的非线性是带有欧几里得范数预激活、sigmoid、tanh 等的 RBF 高斯核)
我想到的可能(模糊)的想法是:
- 进行良好的初始化,以使饱和非线性不会开始饱和(饱和非线性导致梯度接近于零)。
- 对于 RBF,类似地,良好的初始化可能很重要,因为高斯函数大多具有接近 0 的大值(即当过滤器与其激活或数据相似时)。因此,它们太大或太小都会出现类似的梯度消失问题。
- 我真的不知道这是否太受限制,但如果有一种不同的方式来使用批量标准化,而不是原始论文中的传统建议(或者可能是一些 BN 的想法,可以推广到更大的非线性,目前看来,据我所知,大多数研究都表明它适用于 sigmoid)。
- 另一个想法可能是而不是非线性我们有在哪里. 如果,则意味着非线性不会对每一层向后乘以多次,以免对较早的层“消失”。它可能会使学习规则变得不稳定,所以也许一些正则化器可能是个好主意。
- 本质上处理消失梯度(或至少以不同方式更新每个参数)的优化器。例如,如果它的一层更靠近输入,那么学习步长应该更大。学习算法最好自己考虑到这一点,以便处理消失的梯度。
如果有任何关于如何处理除批处理规范或 ReLu 之外的梯度消失的建议,我很想听听他们的消息!
似乎梯度消失主要是因为非线性具有以下性质也因为乘以多次后,它要么爆炸,要么消失。明确地说出问题可能有助于解决它。问题在于它会导致较低层不更新或阻碍通过网络的信号。在前向和后向传递期间(以及在训练期间,不仅仅是在初始化时)保持这个信号流过网络会很好。
1 : Ioffe S. 和 Szegedy C. (2015),
“批量标准化:通过减少内部协变量偏移来加速深度网络训练”,
第 32 届机器学习国际会议论文集,法国里尔,2015 年
。机器学习研究杂志: W&CP 第 37 卷