欢迎光临散文网 会员登陆 & 注册

人工智能AI面试题-4.4 如何缓解梯度消失和梯度膨胀(微调、梯度截断、改良激活

2023-10-16 08:49 作者:机器爱上学习  | 我要投稿

**4.4 如何缓解梯度消失和梯度膨胀(微调、梯度截断、改良激活函数等)** 简⾔之,引起梯度消失和梯度爆炸的原因分别是: **梯度消失**:根据链式法则,如果每⼀层神经元对上⼀层的输出的偏导乘上权重结果都⼩于1的话, 那么即使这个结果是0.99,在经过⾜够多层传播之后,误差对输⼊层的偏导会趋于0。可以采⽤ReLU 激活函数有效的解决梯度消失的情况,也可以⽤Batch Normalization解决这个问题。 **梯度膨胀**:根据链式法则,如果每⼀层神经元对上⼀层的输出的偏导乘上权重结果都⼤于1的话,在经过⾜够多层传播之后,误差对输⼊层的偏导会趋于⽆穷⼤。可以通过激活函数来解决,或⽤Batch Normalization解决这个问题。 具体⽽⾔,梯度消失爆炸的解决⽅案主要包括以下⼏个部分: (1)预训练加微调 (2)梯度剪切、权重正则(针对梯度爆炸) (3)使⽤不同的激活函数 (4)使⽤BatchNorm (5)使⽤残差结构 (6)使⽤LSTM⽹络 第⼀部分:为什么要使⽤梯度更新规则 在介绍梯度消失以及爆炸之前,先简单说⼀说梯度消失的根源—深度神经⽹络和反向传播。⽬前深度学习⽅法中,深度神经⽹络的发展造就了我们可以构建更深层的⽹络完成更复杂的任务, 深层⽹络⽐如深度卷积⽹络、LSTM等等,⽽且最终结果表明,在处理复杂任务上,深度⽹络⽐浅层的 ⽹络具有更好的效果。但是,⽬前优化神经⽹络的⽅法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的⽅式,指导深度⽹络权值的更新优化。 这样做是有⼀定原因的。⾸先,深层⽹络由许多⾮线性层堆叠⽽来,每⼀层⽹络都可以视为是⼀个⾮线性多元函数。我们最终的⽬的是希望这个多元函数可以很好的完成输⼊到输出之间的映射,假设不同的输⼊, 输出的最优解是  ,那么,优化深度⽹络就是为了寻找到合适的权值,满⾜  , 取得极⼩值点,⽐如最简单的损失函数。假设损失函数的数据空间是下图这样的,我们最优的权值就是为了寻找下图中的最⼩值点,对于这种数学寻找最⼩值问题,采⽤梯 度下降法或者梯度提升法是⼀种很⼴泛的⽅法。 (这⾥的⼩⽅块就代表损失函数的⼀个极⼩值点,⽽⽐如X代表的是深度⽹络的权值,不同的权值可以求得不同的极⼩值点)。 然后,如何⽤梯度下降法来优化深度⽹络呢?⾸先,如果知道了某个点的梯度,⽽且当前位置是⼤于0的,那么根据梯度的方向,我们就可以知道下⼀步朝着梯度的⽅向⾛,⾛多远呢? 这取决于深度⽹络的步⻓,梯度下降法和梯度提升法中的步⻓的选择⼀般有两种⽅法,⼀种是固定的步⻓⽐如0.1,这种⽅法⼀般不常⽤,因为⼀旦步⻓⽐较⼤的话容易在搜索的时候错过最⼩值点,另外⼀种⽅法是动态的步⻓,即根据当前的位置和⽬标⽅向计算出合适的步⻓,这个步⻓⼀般由学习率来控制,对于梯度下降法,学习率⼀般取⼩⼀点⽐如0.01。 然后,⽬前的深度学习⽅法中的⼤部分都采⽤了⼀种变种,即带动量的随机梯度下降法。所谓的带动量的随机梯度下降法可以看成是加速梯度下降法的⼀种⽅法,具体⽽⾔,它⽤了动量的概念,即根据之前的梯度更新的⽅向和步⻓来计算当前的梯度下降的⽅向和步⻓,这样做的⽬的是为了提⾼搜索的效率,可以跳出局部极⼩值点。这⾥不详细展开,但是这⾥简单说⼀下它的数学表达式: `$\Delta w_{t}=\beta \Delta w_{t-1}-(1-\beta )\alpha \nabla f_{t}$` `$w_{t}=w_{t-1}+\Delta w_{t}$` 其中,$\Delta w_{t}$表示当前的步⻓和⽅向,$w_{t}$表示当前的权值,$w_{t-1}$表示上⼀步的权值,$\nabla f_{t}$表示当前的梯度,$\alpha$表示学习率,$\beta$表示动量的⽐重。从这个表达式中可以看出,动量的⽐重⼀般取⼩⼀点⽐如0.9,这个⼀般是通过⼈工设置的。 第⼆部分:如何⽤梯度下降法来优化深度⽹络 在了解了带动量的随机梯度下降法之后,现在可以说⼀说⽤梯度下降法来优化深度⽹络的具体步骤。 ⾸先,⽹络的输⼊,我们假设输⼊为X,其中X是⼀个多维数组,⽽且输⼊的数据需要经过预处理。然后,输⼊通过每⼀层⽹络的权值,⽹络的输出可以表示为⼀个⾮线性的多元函数,如果不考虑偏置的话。然后,通过激活函数将输出传⼊到下⼀层⽹络,可以表示为: $$Y=f(WX)$$ 其中,Y表示⽹络的输出,W表示⽹络的权值,X表示⽹络的输⼊,f表示激活函数。 然后,我们将⽹络的输⼊X和输出Y通过损失函数联系在⼀起,损失函数表示⽹络的输出Y和⽬标⽅向之间的差异,损失函数的定义⼀般是根据具体的问题来的。损失函数的定义⼀般通过⼈工设定,⽐如在分类问题中,可以选择⼀种交叉熵损失函数,⽽在回归问题中,可以选择均⽅误差损失函数,具体⼤家可以去查看⽹络优化的论⽂。 然后,损失函数表示⽹络的输出Y和⽬标⽅向之间的差异,损失函数的定义⼀般是根据具体的问题来的。损失函数的定义⼀般通过⼈工设定,⽐如在分类问题中,可以选择⼀种交叉熵损失函数,⽽在回归问题中,可以选择均⽅误差损失函数,具体⼤家可以去查看⽹络优化的论⽂。 然后,我们⽤梯度下降法来最⼩化损失函数。具体⽽⾔,我们通过损失函数计算的误差反 向传播到⽹络的每⼀层,然后根据梯度下降法来更新⽹络的权值,这样⼀步步地迭代下去,直到损失函数的值收敛或者⼤幅度减⼩。这个过程可以表示为: $$W_{t+1} = W_t - \alpha \nabla L(W_t)$$ 其中,$W_{t+1}$表示下⼀步的权值,$W_t$表示当前的权值,$\alpha$表示学习率,$\nabla L(W_t)$表示损失函数对权值的梯度。 这个过程会⼀直迭代下去,直到损失函数的值收敛或者⼤幅度减⼩。这个过程中,需要注意的是学习率的选择,⼀般来说,学习率不能太⼤,否则容易错过最⼩值点,⽽且也不能太⼩,否则收敛速度会很慢。学习率的选择⼀般需要通过试验来确定。 总结⼀下,深度学习的优化⽅法主要包括梯度下降法和梯度提升法,其中梯度下降法包括了梯度下降法和带动量的随机梯度下降法,⽽梯度提升法主要包括了⼀些集成学习⽅法。深度学习的优化⽅法是深度学习的重要组成部分,⼀个好的优化⽅法可以提⾼⽹络的性能,⽽⼀个不好的优化⽅法则可能导致⽹络难以训练。希望通过这⽯⼦的介绍,⼤家能对深度学习的优化⽅法有⼀个初步的了解。

人工智能AI面试题-4.4 如何缓解梯度消失和梯度膨胀(微调、梯度截断、改良激活的评论 (共 条)

分享到微博请遵守国家法律