1、什么是梯度消失和梯度爆炸
答:
- 梯度消失:是指梯度在反向传播的过程中,逐渐减小为0或者很小,导致梯度无法反向更新,或者模型的权重参数更新很慢乃至停滞。
原因:使用的激活函数不当,或者模型较早进入饱和区,例如sigmod函数 在输入正很大或者负很大是 导数接近为0.
解决方案:换用合适的激活函数 RELU;合适的参数初始化。 - 梯度爆炸:与梯度消失恰好相反,是指梯度在反向传播过程中数值十分大,甚至发生溢出,从而导致学习步长过大,模型波动较高,无法继续学习。
原因:模型层数较深,序列较长(例如RNN),导致权重不断积累,最终导致梯度越来越大从而发生梯度爆炸;初始权重设置不合理(初始化就设置的很大);选用的激活函数不恰当,列如带线性的激活函数。
解决方案:采用归一化如Batch Normalization 控制不同特征的参数压入统一度量区间;梯度裁剪,设置梯度阈值;改进权重初始化方案。
2、什么是Batch Normalization
答:
- 内容:将同一batch下的同一维度进行归一化 具体做法就是正态分布标准化 即均值为0,方差为1的标准化。
- 优点:控制数据规模,防止模型出现梯度爆炸和梯度消失;有了归一化的加持,减少了模型对数据初始化的依赖;加快模型收敛,可以使用较大的学习率;归一化的过程中引入了噪声,可一定程度上减少模型过拟合。
3、模型较早进入饱和区
答:
- 内容:例如sigmod函数,当输入数值较大时,会导致梯度接近为0,反向传播梯度的过程中,模型权重参数更新较小,甚至停止更新,即模型无法继续学习,神经元进入饱和状态,但实际上并未完全学到数据的特征。这种情况叫做过早进入饱和区。
- 解决方案:选择合适的激活函数(RELU);对模型加入归一化层;合适的权重初始化方案。