【机器学习】神经网络训练技巧

文章目录

    • [1. 针对训练结果](#1. 针对训练结果)
      • [1.1 调整激活函数](#1.1 调整激活函数)
      • [1.2 调整学习率](#1.2 调整学习率)
    • [2. 针对测试结果](#2. 针对测试结果)
      • [2.1 提前结束](#2.1 提前结束)
      • [2.2 正则化](#2.2 正则化)
      • [2.3 Dropout(随机失活)](#2.3 Dropout(随机失活))
      • [2.4 Batch(分批训练)](#2.4 Batch(分批训练))
    • [3. 监督学习所涉及的损失函数](#3. 监督学习所涉及的损失函数)

1. 针对训练结果

1.1 调整激活函数

激活函数作用

  • 拟合非线性函数,能训练更复杂的模型

Sigmoid函数的缺点

  1. 梯度消失

    • Sigmoid函数: σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+e−z1:把无穷大/无穷小的值压缩到0~1之间
    • 梯度下降的数学意义:权重 w w w的变化对Loss的影响
    • 经过Sigmoid函数后,权重变化在0~1之间,随着层数的增加,梯度逐渐消失,导致靠近输入层的参数更新极慢。
  2. 梯度爆炸

    • 梯度爆炸和梯度消失相反,权重更新过快,导致训练不稳定。

ReLU(线性修正单元)

  • 工作模式

    • 输入为负数:输出为0
    • 输入为正数:输出为输入值
    • 取0的神经元相当于被去除,使神经网络变瘦
  • 优点

    • 剩下的神经元相当于线性函数,导数恒为1,能解决梯度消失问题
    • 模仿生物神经元,产生正反馈
    • 计算更快,去除了0的神经元
    • 无穷多不同bias的sigmoid函数叠加近似ReLU,突出其在非线性拟合中的优势

Leaky ReLU

  • 作用
    • 解决ReLU的缺点:当输入<0时,导数为0,无法更新参数
    • Leaky ReLU机制:当输入<0时,输出为0.01 \\cdot input

Parametric ReLU

  • 类似Leaky ReLU,但在输入<0时,输出为 p ⋅ i n p u t p \cdot input p⋅input,其中 p p p可以通过梯度下降学习得到。

Maxout(可学习激活函数)

  • 原理

    • 同一层的多个神经元一组,取其中最大的 z z z作为输出,即取一组神经元中的最大值。
    • z = ∑ w x + b z=\sum w x + b z=∑wx+b
  • 特点

    • 允许神经网络学习激活函数本身
    • 结构由同组内的 w w w和 b b b决定
    • 本质是分段函数,非线性且复杂,计算开销大
  • ReLU是Maxout的特殊情况

    • 当一组神经元中两个神经元结构,其中一个神经元有非零 w w w和 b b b,另一个为零时,Maxout避免了ReLU的死神经元问题

1.2 调整学习率

Adagrad

  • 本质:考虑了二次微分对梯度下降的影响
  • 公式:
    w t + 1 = w t − η ∑ ( g i ) 2 g t , i ∈ [ 1 , t ] w^{t + 1} = w^{t} - \frac{\eta}{\sqrt{\sum(g^i)^2}} g^t, \quad i \in [1,t] wt+1=wt−∑(gi)2 ηgt,i∈[1,t]

RMSProp

  • 自适应学习率:陡峭的地方学习率小,平缓的地方学习率大
  • 本质:RMSProp是Adagrad的改进版本,能够自适应调整当前梯度的权重
  • 公式:
    w t + 1 = w t − η t σ t g t w^{t + 1} = w^{t} - \frac{\eta^t}{\sigma^t} g^t wt+1=wt−σtηtgt
    σ t = α ( σ t − 1 ) 2 + ( 1 − α ) ( g t ) 2 \sigma^t = \sqrt{\alpha (\sigma^{t-1})^2 + (1-\alpha)(g^t)^2} σt=α(σt−1)2+(1−α)(gt)2

Momentum(冲量)

  • 原理:利用之前移动的"惯性"来帮助参数越过局部最优解

    • 移动方向 = 前一步更新时的移动方向 - 当前梯度方向
  • 公式:
    v 1 = λ v 0 − η ∇ L ( θ 0 ) v^1 = \lambda v^0 - \eta \nabla L(\theta^0) v1=λv0−η∇L(θ0)

Adam

  • 结合RMSProp和Momentum的梯度下降方法

什么是鞍点?如何脱离?

鞍点:在某些方向上是最小值,在其他方向上是最大值

脱离方法:

  • 使用冲量
  • 计算矩阵特征值,正定矩阵是最优解;若特征值有大于零和小于零的情况,则是鞍点,应朝着特征值为正的方向移动

2. 针对测试结果

2.1 提前结束

  • 原理:防止模型为了贴合训练结果而过拟合
  • 实施:划分训练集和验证集,将验证集作为测试集,观察梯度下降过程,达到最低点时停止训练

2.2 正则化

  • 原理:在Loss中加入权重约束,促使权重接近0,减少过拟合
    • 权重越小,函数越平滑,防止过拟合

L1正则化

  • Loss Function:增加所有参数的绝对值之和
  • 更新参数:通过减法进行权重衰减(sgn(w)为+1或-1)
  • 优点:产生稀疏解,适用于特征选择

L2正则化

  • Loss Function:增加所有参数的平方和
  • 更新参数:通过乘法进行权重衰减(乘上小于1的数)
  • 优点:保证特征平滑性,保持所有特征
  • 缺点:不能进行特征选择

L1与L2的区别

  • 权重较大时,L2会下降得更快,而L1只减去固定值,训练结束后权重仍较大
  • 权重较小时,L2下降较慢,而L1能产生更多接近0的权重

2.3 Dropout(随机失活)

  • 做法:

    • 训练时:每次参数更新时以概率 p p p使神经元失活,改变网络结构
    • 测试时:所有神经元都用,但每个神经元的权重乘以1-p
  • 好处:

    • 测试集效果更好,但训练集效果可能较差
    • 减少神经网络的复杂度,避免过拟合
  • 原理:

    • 使神经网络更加稳定,通过减少训练较差的神经元的影响,确保训练更为彻底

和Maxout的区别

  • Maxout是每个数据批次的不同结构,Dropout则是每次更新时改变网络结构

Dropout与ReLU、Maxout的联系

  • 如果网络接近线性,Dropout的性能较好
  • ReLU和Maxout的网络更接近线性,因此它们通常与Dropout一起使用

2.4 Batch(分批训练)

  • 做法:

    1. 将训练集分成多个小批次
    2. 每个批次用于训练,得到不同的网络结构
    3. 最终将测试集输入不同的网络结构并平均结果
  • 优点:

    • 加速训练:分批次训练可并行计算
    • 泛化能力强:避免过拟合
    • 减少内存需求
  • 实施:

    • 并没有将测试集分批,而是将每个网络结构乘以1-p,然后一起测试

小Batch与大Batch的区别

  • 小Batch:

    • 更强的泛化能力
    • 内存需求小
    • 更快的收敛
  • 大Batch:

    • 一次处理更多数据
    • 收敛慢
    • 内存需求大

3. 监督学习所涉及的损失函数

平方误差

  • 概念:预测值和真实值之间的平方差的均值
  • 特点:对异常值敏感

平方绝对误差

  • 概念:预测值与真实值的绝对差值的平均值
  • 特点:抗噪能力强

对数损失

  • 概念:常用于分类问题,衡量预测概率分布与真实标签的差异
  • 特点:对概率分布的误差敏感,越接近真实标签的预测概率,损失越小

交叉熵

  • 概念:描述两个概率分布之间的相似度
  • 特点:反映分类问题的分类准确性,对预测概率不确定性更敏感

0-1误差

  • 概念:用于二分类问题,直观刻画分类错误率
  • 特点:非凸,非光滑,难以优化
相关推荐
yuanbenshidiaos22 分钟前
【大数据】机器学习 -----关于data.csv数据集分析案例
大数据·人工智能·机器学习
deephub24 分钟前
TorchOptimizer:基于贝叶斯优化的PyTorch Lightning超参数调优框架
人工智能·pytorch·python·机器学习·超参数调优
烟波人长安吖~29 分钟前
【安全帽头盔检测】基于YOLOV11+pytorch+Flask+SpringBoot+Vue+MySQL的安全帽头盔检测识别系统
pytorch·spring boot·深度学习·yolo·vue·计算机毕业设计·头盔安全帽检测
pzx_0011 小时前
【深度学习】神经网络灾难性遗忘(Catastrophic Forgetting,CF)问题
人工智能·深度学习·神经网络·集成学习
feifeikon2 小时前
PyTorch DAY2: 搭建神经网络
人工智能·pytorch·神经网络
m0_743106462 小时前
【论文笔记】SmileSplat:稀疏视角+pose-free+泛化
论文阅读·深度学习·计算机视觉·3d·几何学
liruiqiang052 小时前
机器学习 - 如何理解几何学中的超平面 ?
机器学习·支持向量机·几何学
脚踏实地的大梦想家2 小时前
【机器学习】P1 机器学习绪论
人工智能·机器学习
驼同学.2 小时前
[Deep Learning] Anaconda+CUDA+CuDNN+Pytorch(GPU)环境配置-2025
人工智能·pytorch·深度学习
MichaelIp3 小时前
Pytorch基础教程:从零实现手写数字分类
人工智能·pytorch·python·深度学习·神经网络·机器学习·分类