深入理解卷积神经网络的参数初始化、过拟合解决方案及数据增强技术

1. 参数初始化

在卷积神经网络中, 可以看到神经元之间的连接是通过权重w以及偏置b实现的。并且w和b的取值会直接影响模型的训练速度以及训练精度。

1.1 权重的初始化

建议的方法:

  • 很小的随机数(对于多层深度神经网络, 太小的值会导致回传的梯度非常小)
  • 服从均值为0, 方差比较小
  • Xavier: 服从均匀分布的随机数列

错误的方法:全部初始化为0, 全部设置为0, 在反向传播的时候是一样的梯度值, 那么这个网络的权重是没有办法差异化的,也就没有办法学习到东西。

1.2 偏置项的初始化

一般直接设置为0, 在存在ReLU激活函数的网络中, 也可以考虑设置为一个很小的数字(大于0)

1.3 常见的初始化神经网络权重的函数

import torch
import torch.nn as nn

if __name__ == '__main__':
    conv2d = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=(5, 5))
    print(conv2d.weight.shape)

    alpha = nn.Parameter(torch.ones(3, 5))
    # NOTE: alpha是必须进行初始化操作
    nn.init.ones_(alpha)
    nn.init.kaiming_uniform_(alpha, mode='fan_out', nonlinearity='sigmoid')
    nn.init.xavier_uniform_(alpha, gain=1.0)
    nn.init.uniform_(alpha, -0.3, 0.3)
    print(alpha)
nn.init.kaiming_uniform_(alpha, mode='fan_out', nonlinearity='sigmoid')
"""
这个函数采用均匀分布来初始化权重,根据 Kaiming He 等人提出的初始化方法,也被
称为 He 初始化。这个方法特别适用于适用 Rectified Linear Unit (ReLU) 或类似非
线性激活函数的网络。

alpha: 这是你的权重张量,即要初始化的张量。

mode='fan_out': 这是初始化模式。'fan_out' 模式用于权重矩阵的输出部分,适用于全连
接层的权重初始化。'fan_in' 模式用于输入部分,适用于卷积层的权重初始化。

nonlinearity='sigmoid': 这是非线性激活函数的类型,用于确定初始化范围。在这里,选择
了 'sigmoid',表示使用 sigmoid 激活函数。不同的激活函数对应不同的初始化方法,因为它
们对权重的敏感性不同。

这个初始化方法旨在使权重在前向传播时既不爆炸也不消失,对于使用 ReLU 或类似的非线性激
活函数的网络来说尤其有用。使用适当的初始化可以帮助加速神经网络的训练收敛过程。
"""

nn.init.xavier_uniform_(alpha, gain=1.0)
"""
这个函数实现了 Xavier/Glorot 初始化方法,该方法适用于使用 tanh 或 sigmoid 激活函数的网络。

alpha: 这是你的权重张量,即要初始化的张量。

gain=1.0: 这是初始化的增益(gain)参数,默认值为1.0。增益是一个用于调整初始化范围的
因子,它允许你自定义权重的缩放。在 Xavier 初始化中,增益是根据激活函数的类型进行计算的。

Xavier 初始化通过考虑前一层和后一层的神经元数量,以及激活函数的导数的平方来确定初始化
的范围。具体而言,对于均匀分布,权重的初始化范围是从一个均匀分布中随机采样,其范围是下图

其中,fan_in 是输入神经元的数量,fan_out 是输出神经元的数量。这种初始化方法的目标是在
前向传播和反向传播中都保持梯度的方差大致相等,有助于避免梯度消失或梯度爆炸问题。
"""

nn.init.uniform_(alpha, -0.3, 0.3)
"""
这个函数使用均匀分布来初始化权重。

alpha: 这是你的权重张量,即要初始化的张量。

-0.3 和 0.3: 这是均匀分布的上下限。权重将在这个范围内进行均匀随机初始化。

这种初始化方法简单地在指定的范围内随机初始化权重。相比于一些其他的初始化方法,均匀分
布的初始化通常更简单,但它可能不如一些专门为深度学习任务设计的初始化方法表现得好。

在实际应用中,选择合适的初始化方法可能会对模型的训练和性能产生影响。通常情况下,使用
一些已经被证明在特定任务中有效的初始化方法,如 Xavier/Glorot 初始化或者 Kaiming/He 初
始化,可能更有利于模型的收敛和性能。但在某些场景下,均匀分布的初始化也可能是一个合理的
选择。
"""

2. 过拟合问题

2.1 为什么神经网络会产生过拟合问题?

神经网络的学习能力受神经元数目以及神经网络层次的影响, 神经元数目越大,神经网络层次越高, 那么神经网络的学习能力越强, 那么就有可能出现过拟合的问题 (通俗来讲: 神经网络的空间表达能力变得更紧丰富了)

2.2 如何解决过拟合问题?

  • Regularization:正则化, 通过降低模型的复杂度, 通过在cost函数上添加一个正则项的方式来降低overfitting, 主要有L1和L2两种方式

    正则化是通过给cost函数添加正则项的方式来解决overfitting, Dropout是通过直接修改神经网络的结构来解决overfitting

  • Dropput:通过随机删除神经网络中的神经元来解决overfitting问题, 在每次迭代的时候, 只使用部分神经元训练模型获取W和d的值。分类或者回归的时候,最后一层尽量不要用Dropput。

    一般情况下, 对于同一组训练数据, 利用不同的神经网络训练之后, 求其输出的平均值可以减少overfitting。 Dropout就是利用这个原理, 每次丢掉一半左右的隐藏层神经元, 相当于在不同的神经网络上进行训练, 这样就减少了神经元之间的依赖性, 即每个神经元不能依赖于某几个其它的神经元,使神经网络更加能学习到与其它神经元之间的更加健壮robust (鲁棒性) 的特征。

3. 数据增强(特征工程)

3.1 数据增强的作用是?

数据增强有助于扩大数据集规模,从而提高神经网络模型的泛化能力和性能。但需要注意的是,过度的数据增强可能会导致训练数据与真实数据分布不一致,从而影响模型的预测性能。

3.2 数据增强的方法?

  • 图像翻转:水平或垂直翻转图像。

  • 随机裁剪:在原始图像上随机截取一个子图像,以增加样本的多样性。

  • 样本不均衡:(解决方案: 增加小众类别的图像数据)样本不均衡即有些类别图像特别多, 有些特别少。 类别不平衡数据的处理:Label shuffle
  • 旋转和缩放:对图像进行随机旋转、缩放等变换来增加样本的多样性。
  • 噪声添加:向图像中添加高斯噪声、椒盐噪声等来增加样本的多样性。

  • 31
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷积神经网络(Convolutional Neural Network,CNN)是一种常用于图像处理和计算机视觉任务的深度学模型。过拟合是指模型在训练集上表现良好,但在测试集或新数据上表现较差的现象。为了减小卷积神经网络过拟合问题,可以采取以下几种方法: 1. 数据增强(Data Augmentation):通过对训练数据进行随机变换和扩充,如旋转、平移、缩放、翻转等操作,生成更多的训练样本。这样可以增加数据的多样性,提高模型的泛化能力。 2. 正则化(Regularization):通过添加正则化项来限制模型的复杂度,防止过拟合。常用的正则化方法包括L1正则化和L2正则化。L1正则化通过添加L1范数惩罚项,使得模型参数稀疏化;L2正则化通过添加L2范数惩罚项,使得模型参数的值尽量小。 3. Dropout:在训练过程中,随机将一部分神经元的输出置为0,以一定概率丢弃这些神经元。这样可以减少神经元之间的依赖关系,强迫模型学习更加鲁棒的特征表示,从而减小过拟合。 4. 提前停止(Early Stopping):在训练过程中监控模型在验证集上的性能,当性能不再提升时停止训练,避免过拟合。可以通过设置一个阈值或者一定的训练轮数来确定停止的时机。 5. 模型集成(Model Ensemble):通过结合多个不同的卷积神经网络模型,如使用不同的初始化、不同的超参数等,来减小过拟合。常用的模型集成方法包括投票法、平均法、堆叠法等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值