《动手学深度学习笔记》3-多层感知机
| 2022-4-20
0  |  阅读时长 0 分钟
日期
Apr 19, 2022
Tags
深度学习
pytorch

基础知识

多层感知机

  • 多层感知机在输出层和输入层之间增加一个或多个全连接隐藏层,并通过激活函数转换隐藏层的输出。
  • 采用反向传播(BP)算法对参数进行更新

线性模型的问题

单调性假设:任何特征的增大都会导致模型输出的增大(如果对应的权重为正), 或者导致模型输出的减小(如果对应的权重为负)
线性并不适用于每一种情况,如图片分类不可能简单通过像素点的强度来区分类别
⇒ 我们可以通过在网络中加入一个或多个隐藏层克服线性模型的限制,使其能处理更普遍的函数关系类型
notion image

隐藏层

  • 多层感知机可以通过隐藏神经元,捕捉到输入之间复杂的相互作用, 这些神经元依赖于每个输入的值。
如图所示,假设个样本的批量输入为矩阵,其中每个样本具有个输入特征。隐藏层包含隐藏单元,表示隐藏层的输出,即隐藏表示(隐藏变量),输出层有个输出。隐藏层和输出层都是全连接的,隐藏层权重和隐藏层偏置以及输出层权重和输出层偏置
计算得到的单隐藏层多层感知机输出:
为了发挥多层架构的潜力, 添加额外的关键要素: 在仿射变换之后对每个隐藏单元应用非线性的激活函数(activation function)。激活函数的输出(例如,)被称为活性值(activations)。 一般来说,激活函数,可能避免将多层感知机退化成线性模型
隐藏层可以不断堆叠,如,构建更通用的多层感知机,从而产生更有表达能力的模型。

激活函数

激活函数通过计算加权和并加上偏置来确定神经元是否应该被激活, 它们将输入信号转换为输出的可微运算。大多数激活函数都是非线性的。
激活函数的性质:非线性、可微性、计算简单、非饱和性
  1. 连续并可导非线性函数(允许少数点上不可导)。可导的激活函数可以直接利用数值优化的方法来学习网络参数
  1. 激活函数及其导函数有尽可能的简单,有利于提高网络计算效率
  1. 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性

常见的激活函数

  1. ReLU函数(修正线性单元,Rectified linear unit)
实现简单,在各种预测活动中表现良好
notion image
notion image
ReLU函数通过将相应的活性值设为0,仅保留正元素并丢弃所有负元素。
使用情况:最常用的激活函数
优点:
  1. 求导表现特别好,要么让参数消失,要么让参数通过
  1. 对于梯度下降的收敛有巨大加速作用
  1. 减轻了神经网络的梯度消失问题
  1. 单侧抑制、相对宽阔的兴奋边界
  1. 稀疏激活性
缺点:
  1. 神经单元易死亡,导致数据多样化的丢失
ReLU函数变体:
参数化ReLU(Parameterized ReLU,pReLU

  1. sigmoid函数(挤压函数,squashing function)
它将范围(-inf, inf)中的任意输入压缩到区间(0, 1)中的某个值:
notion image
notion image
sigmod函数是一个平滑的、可微的阈值单元近似。
使用情况:
  • 当我们想要将输出视作二元分类问题的概率时, sigmoid仍然被广泛用作输出单元上的激活函数 (你可以将sigmoid视为softmax的特例)。
  • sigmoid在隐藏层中已经较少使用, 它在大部分时候被更简单、更容易训练的ReLU所取代。
优点:
  1. 简单、平滑,易于求导
  1. 可以作为概率,辅助模型解释
缺点:
  1. Sigmoid函数饱和,反向传播易使梯度消失,
  1. 幂运算计算开销大
  1. 输出不是零中心,模型收敛速度较慢

  1. tanh函数(双曲正切函数)
与sigmoid函数类似,也能将其输入压缩转换到区间(-1, 1)上。
notion image
notion image
优点:解决了Sigmoid的输出是不是零中心的问题
缺点:饱和使梯度消失

补充的常见激活函数还有:
  1. Logistic函数
  1. ELU函数
  1. SoftPlus函数

机器学习的目标

发现泛化的模式(pattern),这些模式捕捉了训练集中潜在的总体性规律,且可以成功地应用到其他未使用的数据中,作出有效的预测,而不是简单地记住数据。
  • 如何发现可以泛化的模式是机器学习的根本问题。

指标

训练误差(training error):模型在训练数据集上计算得到的误差
泛化误差(generalization error):模型应用在同样从原始样本的分布中抽取的无限多数据样本时,模型误差的期望

问题:

过拟合:

训练误差小,但验证误差(泛化误差)大,训练误差明显低于验证误差
  • 使用有限的样本时,发现当收集到更多的数据时,之前找到的明显关系并不成立。将模型在训练数据上拟合的比在潜在分布中更接近的现象称为过拟合(overfitting)
表现:随着训练迭代周期的增加,或模型复杂度(层数、神经元)的增加, 模型最终可以在训练集上达到完美的精度,而在测试集的准确性却下降了
解决方法:
  • 正则化(regularization)
正则化是处理过拟合的常用方法:在训练集的损失函数中加入惩罚项,以降低学习到的模型的复杂度。
  • 增加数据集的大小
  • 使用dropout,暂退法

欠拟合:

训练误差和验证误差都很严重,但它们之间仅有一点差距
解决方法:
  • 提高模型复杂度

总结:

欠拟合是指模型无法继续减少训练误差。过拟合是指训练误差远小于验证误差。

模型复杂性

notion image
模型复杂度取决于许多因素:更多参数、更大的参数取值范围...
经验法则:够轻松解释任意事实的模型是复杂的
影响模型泛化的因素:
  • 可调整参数的数量。当可调整参数的数量(有时称为自由度)很大时,模型往往更容易过拟合。
  • 参数采用的值。当权重的取值范围较大时,模型可能更容易过拟合。
  • 训练样本的数量。即使你的模型很简单,也很容易过拟合只包含一两个样本的数据集。而过拟合一个有数百万个样本的数据集则需要一个极其灵活的模型。

模型选择

数据集

类型:训练数据集、测试数据集、验证数据集(validation dataset)
验证数据集:避免测试集的过拟合而添加的数据集,用于评估模型的效果,可以用于模型选择,但不能过于随意地使用它。

K折交叉验证

原始训练数据被分成K个不重叠的子集。 然后执行K次模型训练和验证,每次在K−1个子集上进行训练, 并在剩余的一个子集(在该轮中没有用于训练的子集)上进行验证。
通过对K次实验的结果取平均来估计训练和验证误差。

权重衰减(weight decay)

在训练参数化机器学习模型时, 权重衰减(weight decay)是最广泛使用的正则化的技术之一, 它通常也被称为L2正则化
  • 通过函数与零的距离来衡量函数的复杂度

如何衡量函数与零的距离

使用权重向量的范数来度量复杂度,例如
  • 要保证权重向量比较小, 最常用方法是将其范数作为惩罚项加到最小化损失的问题中。 将原来的训练目标最小化训练标签上的预测损失, 调整为最小化预测损失和惩罚项之和
新的损失函数方程:
这个方程可以在一定程度上平衡模型误差(模型复杂度(,通过调整(非负超参数)在两者之间进行权衡。
  • 其实也可以简单理解为模型的最优化目标是:误差和复杂度之和最小化
为什么选择平方范数?
  • 为什么平方:去掉平方根,导数容易计算:导数的和等于和的导数。
  • 为什么是范数对权重向量的大分量施加了巨大的惩罚,使得我们的学习算法偏向于在大量特征上均匀分布权重的模型。
    • 这在实践中,对于变量的观测误差更加稳定
惩罚:
  • 惩罚会导致模型将权重集中在一小部分特征上, 而将其他权重清除为零,即特征选择,适用于其他场景

线性模型的过拟合

  1. 当面对更多的特征而样本不足时,线性模型往往会过拟合。
  1. 当给出更多样本而不是特征,通常线性模型不会过拟合。
  1. 线性模型没有考虑到特征之间的交互作用。 对于每个特征,线性模型必须指定正的或负的权重,而忽略其他特征。

偏差-方差权衡(bias-variance tradeoff)

泛化性和灵活性之间的这种基本权衡被描述为偏差-方差权衡(bias-variance tradeoff)
线性模型:
  • 高偏差:只能表示一小类函数
  • 低方差:在不同的随机数据样本上可以得出相似的结果
神经网络:
  • 低偏差:并不局限于单独查看每个特征,而是学习特征之间的交互
  • 高方差:

改进深层网络的泛化性-什么是“好”的预测模型

  • 简单性:理论上认为简单的模型,可以缩小训练和测试性能之间的差距
  • 平滑性:函数不应该对输入的微小变化敏感
增强模型的平滑性:
  • 在训练过程中,在计算后续层之前向网络的每一层注入噪声。
  • 当训练一个有多层的深层网络时,注入噪声会在输入-输出映射上增强平滑性。
该想法的本质为:暂退法(Dropout)

暂退法(Dropout)

定义

暂退法在前向传播过程中,计算每一内部层的同时注入噪声,已经成为训练神经网络的常用技术。
  • 暂退法在前向传播过程中,计算每一内部层的同时丢弃一些神经元
  • 暂退法可以避免过拟合,它通常与控制权重向量的维数和大小结合使用的。
  • 暂退法将活性值替换为具有期望值的随机变量。
  • 暂退法仅在训练期间使用
缺点: 神经网络过拟合与每一层都依赖于前一层激活值相关,称这种情况为“共适应性”。 暂退法会破坏共适应性,就像有性生殖会破坏共适应的基因一样。

如何注入噪声

无偏向(unbiased)的方式注入噪声:按照暂退概率将隐藏层单元置为0,并按照设定缩放其他剩余参数,在固定住其他层时,每一层的期望值等于没有噪音时的值

前向传播(forward propagation/pass)

前向传播指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。
 
前向传播的计算图
前向传播的计算图
 

反向传播(backward propagation)

反向传播指的是:计算神经网络参数梯度的方法。
该方法根据微积分中的链式规则,按相反的顺序从输出层到输入层遍历网络。

训练神经网络

在训练神经网络时,前向传播和反向传播相互依赖。
  • 对于前向传播,我们沿着依赖的方向遍历计算图并计算其路径上的所有变量。 然后将这些用于反向传播,其中计算顺序与计算图的相反。
  • 在训练神经网络时,在初始化模型参数后, 我们交替使用前向传播和反向传播,利用反向传播给出的梯度来更新模型参数。
  • 注意,反向传播重复利用前向传播中存储的中间值,以避免重复计算。 带来的影响之一是我们需要保留中间值,直到反向传播完成。训练比预测需要更多的内存。

学习问题的分类法

批量学习(batch learning)

使用一组训练特征和标签批量训练模型,训练结束后就不再更新

在线学习(online learning)

单个“在线”地学习数据,不断通过学习循环,更新改进模型
学习循环:
  • 在线学习的实例:老虎机、控制器算法、强化学习
    • 利用环境进行学习

技巧

选择模型

我们应该选择一个复杂度适当的模型,避免使用数量不足的训练样本。

数值稳定性和模型初始化

初始化方案的选择在神经网络学习中起着举足轻重的作用, 它对保持数值稳定性至关重要。
糟糕选择可能会导致我们在训练时遇到梯度爆炸或梯度消失。梯度消失和梯度爆炸是深度网络中常见的问题。在参数初始化时需要非常小心,以确保梯度和参数可以得到很好的控制。
不稳定梯度带来的风险不止在于数值表示; 不稳定梯度也威胁到我们优化算法的稳定性。
⇒ 需要用启发式的初始化方法来确保初始梯度既不太大也不太小。

梯度爆炸(gradient exploding)

参数更新过大,破坏了模型的稳定收敛

梯度消失(gradient vanishing)

参数更新过小,在每次更新时几乎不会移动,导致模型无法学习
  • sigmod激活函数会导致梯度消失
  • ReLU激活函数缓解了梯度消失问题,这样可以加速收敛。

打破对称性

每一层的隐藏单元之间具有排列对称性。
当所有参数初始化相同且输入相同时,模型会产生相同的激活,返回的梯度也不会改变参数的值,这样的迭代永远不会打破对称性,我们可能永远也无法实现网络的表达能力
  • 小批量随机梯度下降不会打破这种对称性
  • 暂退法正则化可以打破这种对称性

参数初始化

解决(或至少减轻)上述问题的一种方法是进行参数初始化, 优化期间的注意和适当的正则化也可以进一步提高稳定性。
  1. 默认初始化:使用默认的随机初始化方法,对于中等难度的问题,这种方法通常很有效。
      • 随机初始化是保证在进行优化前打破对称性的关键
  1. Xavier初始化:在不存在非线性的全连接层输出时使用,Xavier初始化从均值为零,方差的高斯分布中采样权重。
      • Xavier初始化表明,对于每一层,输出的方差不受输入数量的影响,任何梯度的方差不受输出数量的影响。

排除环境的影响

机器学习的许多应用中都存在类似的问题: 通过将基于模型的决策引入环境,我们可能会破坏模型。

分布偏移

训练集和测试集可能并不来自同一个分布,考虑数据分布可能发生变化的各种方式,以及为挽救模型性能可能采取的措施。
  1. 协变量偏移(covariate shift):由于协变量(特征)分布的变化而产生的
      • 虽然输入的分布可能随时间而改变, 但标签函数(即条件分布)没有改变。
      • 如训练集使用真实图片,测试集中使用卡通图片
  1. 标签偏移(label shift):描述了与协变量偏移相反的问题。
      • 标签边缘概率可以改变, 但是类别条件分布在不同的领域之间保持不变。
  1. 概念偏移(concept shift): 当标签的定义发生变化时,就会出现这种问题
      • 类别概念随着时间、地理位置等不同而发生的变化

非平稳分布(nonstationary distribution)

当分布变化缓慢并且模型没有得到充分更新时,会因为检测对象的改变而失效

分布偏移纠正

经验风险(empirical risk)

经验风险用来近似真实风险(true risk)

真实风险(true risk)

真实风险是整个训练数据上的平均损失,即从其真实分布中抽取的所有数据的总体损失的期望值
这个数据总体通常是无法获得的,需要使用经验风险近似得到。
经验风险最小化是一种实用的机器学习策略,希望能近似最小化真实风险。
  • 在相应的假设条件下,可以在测试时检测并纠正协变量偏移和标签偏移。在测试时,不考虑这种偏移可能会成为问题。

协变量偏移纠正(略)

计算加权经验风险最小化

标签偏移纠正(略)

计算加权经验风险最小化

概念偏移纠正

使用新数据更新现有的网络权重
Loading...
目录