深度学习笔记:梯度与梯度衰减、滤波器
一、什么是梯度?
在深度学习中,梯度是指损失函数对模型参数的导数。梯度的大小决定了参数在反向传播过程中更新的幅度。 如果梯度大,参数更新的幅度也大;如果梯度小,参数更新的幅度也小。

二、梯度衰减是什么?
模型需要梯度衰减的原因主要在于解决训练过程中可能出现的梯度消失和梯度爆炸问题,以及优化模型的训练效果和最终性能。
(1)防止梯度消失
梯度消失(Vanishing Gradients)主要是由于在深度神经网络中,反向传播过程中梯度通过多层传递时,每层的梯度相乘导致整体梯度逐渐变小,甚至趋近于零。特别是在使用如Sigmoid或Tanh这样的激活函数时,这些函数在输入值较大或较小时其导数接近于零,因此在多层网络中,多个小梯度的连续乘积会导致最终的梯度变得非常小,从而使浅层的权重更新变得非常缓慢,影响模型的训练效果。
1)梯度消失的表现:
- 训练缓慢:模型的训练速度明显变慢,因为浅层的权重更新非常缓慢。
- 训练停滞:模型可能在训练初期表现良好,但随着训练的进行,性能不再提升,甚至恶化。
- 梯度接近零:在反向传播过程中,梯度值非常小,几乎为零。
(2)防止梯度爆炸
梯度爆炸(Exploding Gradients)是指在深度神经网络的反向传播过程中,梯度值变得非常大,导致模型参数的更新幅度过大,从而使训练过程变得不稳定。主要原因包括:
-
权重初始化不当:如果初始权重过大,前向传播中的输出值会非常大,导致反向传播中的梯度也非常大。这在深层网络中尤为明显,因为梯度需要通过多个层传递,每层的梯度都会乘以前一层的梯度,如果每一层的梯度都大于1,最终的梯度会非常大。
-
激活函数的选择:ReLU激活函数:虽然ReLU在正区间内的导数为1,但如果网络中存在大量的ReLU激活,且输入值较大,可能会导致梯度累积,尤其是在网络较深时。线性激活函数:线性激活函数的导数为常数1,不会导致梯度衰减,但在某些情况下可能导致梯度爆炸。
-
网络深度:在深层网络中,梯度需要通过多个层传递,每个层的梯度都会乘以前一层的梯度。如果每一层的梯度都大于1,最终的梯度会非常大,导致权重更新的幅度过大。
1)梯度爆炸的表现:
-
训练不稳定:模型的训练过程不稳定,损失函数的值可能突然增大或减小,导致训练过程中的震荡。
-
权重更新过大:权重更新的幅度非常大,导致模型参数发生剧烈变化,可能使模型参数超出合理范围,甚至导致数值溢出或NaN值。
-
梯度值非常大:在反向传播过程中,梯度值非常大,可能导致数值计算不稳定,甚至导致训练失败
2)解决方法
-
学习率调度:设置一个较高的初始学习率,然后根据训练进度逐渐减小学习率,可以先利用较高的学习率快速探索参数空间,然后再精细调整参数
-
权重初始化:使用合适的权重初始化方法,如Kaiming He初始化或Xavier Glorot初始化,可以确保每一层的输入方差大致相同,避免梯度过大或过小。
-
梯度剪切(Gradient Clipping):通过限制梯度的最大值,防止梯度过大,从而避免梯度爆炸问题。常见的做法是将梯度的范数限制在一个固定的阈值内。
-
批标准化(Batch Normalization):通过归一化每一层的输入,使每一层的输入分布更加稳定,有助于梯度的稳定传播。
-
使用合适的激活函数:选择合适的激活函数,如Leaky ReLU或PReLU,可以避免梯度在某些区域变得过大。
Leaky ReLU和PReLU是常用的激活函数,它们是ReLU的变种,用于解决ReLU在负值区间可能出现的问题。
Leaky ReLU在负值区间不是取0,而是取一个非0小值,例如0.01。这样可以避免出现“神经元死亡”的问题,即在训练过程中某些神经元的权重更新会变得很小甚至为0,导致该神经元对后面的计算没有贡献。
PReLU在负值区间也不是取0,而是取一个可学习的参数a,即PReLU(x) = max(0, x) + a * min(0, x)。与Leaky ReLU相比,PReLU可以学习一个更加复杂的非线性函数,在某些数据集上能够获得更好的表现
三、层次梯度衰减(HGD)
(1)梯度衰减
衰减梯度是一种优化算法,用于在机器学习和深度学习中调整权重更新的速度。在传统的梯度下降法中,每次迭代都会使用相同的步长(学习率)来更新权重。然而,这种方法可能导致在接近最优解时出现振荡现象,因为固定的步长可能太大,导致模型跳过了最小值点。
为了解决这个问题,提出了多种方法来自动调整学习率,其中一种就是衰减梯度。在这种方法中,随着迭代次数的增加,学习率会逐渐减小,从而使权重更新的步伐变得越来越慢。这样可以在开始阶段采用较大的步长来加速收敛速度,然后在后期采用较小的步长来确保找到精确的最小值点。
常见的衰减策略包括指数衰减、线性衰减和自适应衰减等。每种策略都有自己的优缺点,选择哪种策略取决于具体的问题和目标。例如,指数衰减适用于具有平滑误差曲面的问题,因为它可以更快地逼近局部极小值;而线性衰减更适合于非凸优化问题,因为它可以提供更大的灵活性来探索不同的解决方案空间。
总的来说,衰减梯度是一种有效的手段来改进传统梯度下降法的表现,使其能够在更广泛的条件下取得良好的结果。
(2)层次梯度衰减
该方法是发表在ACM MM 2022的论文《GSN:Generative Steganography Network》。用于生成器G反向传播过程。层次梯度衰减是指在生成器模型中,根据不同频率区域(低频和高频)对梯度进行不同程度的衰减。
因为隐写分析工具往往依赖于图像的低频成分来检测异常,而高频细节则更难被追踪。HGD鼓励生成器将秘密信息隐藏在图像的高频细节中,而不是影响图像的低频成分(如形状和颜色)。即在生成图像时,既保持图像的整体结构和背景不变,又能精细地嵌入秘密信息,提高隐写的隐蔽性。论文详情如下:


示意图解释:(HGD示意图参考文章:HGD)




四、滤波器
-
均值滤波器(Mean Filter):通过计算像素邻域内所有像素值的平均值来替换中心像素值,从而实现平滑效果。这种方法简单且计算效率高,但可能会导致边缘模糊,因为它对邻域内的所有像素赋予相同的权重。
-
高斯滤波器(Gaussian Filter):使用高斯函数作为权重,对邻域内的像素进行加权平均。高斯滤波器在平滑图像的同时,能够较好地保留边缘信息,因为它对中心像素赋予更高的权重。然而,高斯滤波器的计算复杂度较高,尤其是在实时处理或资源受限的应用中。【高通滤波器适用于去除低频成分和强调高频细节】
-
中值滤波器(Median Filter):通过将像素邻域内的值排序并用中值替换中心像素值来去除噪声。中值滤波器对椒盐噪声特别有效,因为它不受极端值的影响。此外,它在保留边缘信息方面表现良好,但可能会影响图像的细节。【中值滤波器则特别适用于去除随机噪声同时保持边缘信息。】
-
双边滤波器(Bilateral Filter):结合了像素值的强度差异和空间距离来加权邻域像素。双边滤波器能够在保留边缘和细节的同时实现平滑效果,这使得它在图像去噪和细节增强方面非常有效。然而,双边滤波器的计算开销较大,因为它需要对每个像素的邻域进行复杂的计算。
-
低通滤波器(Low Pass Filter, LPF):低通滤波器允许低频信号通过,同时阻止高频信号。在图像处理中,低通滤波器用于去除图像中的高频噪声或实现图像的平滑处理。低通滤波器的选择取决于所需的平滑度和细节保留程度。【在GSN中,应用到低通滤波器,用于平滑经过卷积层处理的特征图。采用简单的卷积核,[1,3,3,1]并进行归一化处理,以实现滤波效果】

Ping Wei, Sheng Li, Xinpeng Zhang, Ge Luo, Zhenxing Qian, and Qing Zhou. 2022. Generative Steganography Network. In Proceedings of the 30th ACM International Conference on Multimedia (MM '22). Association for Computing Machinery, New York, NY, USA, 1621–1629. https://doi.org/10.1145/3503161.3548217
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)