这一系列,是作者阅读李沐、阿斯顿编写的《深度学习PyTorch版》所作的笔记,作者目前关于深度学习所作的思考和实现的能力都较浅,阅者见谅。
多层感知机:最简单的深度神经网络。多层感知机由多层神经元组成,每一层与它的上一层相连,从中接受输入;每一层也与下一层相连,影响当前层神经元。
介绍的概念及技术:过拟合、欠拟合和模型选择;权重衰退和暂退法等正则化技术;数值稳定性和参数初始化问题。
4.1多层感知机
4.1.1隐藏层
1.线性模型可能会不适用
(一个线性模型的小操作:数据使用前,预处理使线性变得合理)
任何像素的重要性都以复杂的方式取决于该像素的上下文。因此寻找数据的一种表示,考虑到特征之间的相关交互作用,在此基础上建立线性模型有可能是合适的。
2.在网络中加入隐藏层
加入一个或多个隐藏层突破线性模型的限制,能处理更普遍的函数关系类型
多层感知机:共 L 层,前 L-1 层看作表示,最后1层看作线性预测器。(全连接层)
3.从线性到非线性
隐藏表示:隐藏层的输出
隐藏变量:隐藏层变量(隐藏变量)
输入 + 隐藏层(线性) = 线性模型
输入 + 隐藏层(激活函数) = 非线性模型
激活函数不仅可以按行操作,还可以按元素操作。大部分激活函数皆如此。
4.通用近似定理
多层感知机通过隐藏层的神经元捕获输入之间复杂的相互作用。
使用更深的网络(而不是更广),更容易地逼近许多函数。
4.1.2激活函数
1.ReLU函数
(最受欢迎的)修正线性单元(rectified linear unit, ReLU):该元素与0的最大值。
要么让参数消失,要么让参数通过,使得优化表现更好。ReLU缓解了遗忘神经网络梯度消失的问题。
2.sigmoid函数(挤压函数)
将任意输入变换为区间(0, 1)上输出。
将输出视作二分类问题的概率时,sigmoid仍被广泛用作输出单元上的激活函数。
sigmoid在隐藏层中已经较少使用,被更易训练的ReLU函数所取代。
3.tanh函数
tanh(双曲正切)将任意输入变换到区间(-1, 1)上输出。
总结1:多层感知机在输出层和输入层之间增加了一个或多个全连接隐藏层,并通过激活函数转换隐藏层的输出。 常用的激活函数就包括ReLU函数(最常用)、sigmoid函数(分类最后一层用)、tanh函数。
4.2多层感知机的从零开始实现
4.2.1初始化模型参数
4.2.2激活函数
4.2.3模型
4.2.4损失函数
4.2.5训练
4.3多层感知机的简洁实现
4.4模型选择、欠拟合和过拟合
过拟合:模型在训练数据上拟合的 比 在潜在分布中更接近的现象。
正则化:用于对抗过拟合的技术称为正则化。
(越是在足够多神经元、层和训练轮数越可能发生)
4.4.1训练误差和泛化误差
训练误差:模型在训练数据集上得到的误差
泛化误差:模型应用在同原始样本的分布中抽取无限多数据样本时,模型期望的误差
1.统计学习理论
同名定理:训练误差收敛到泛化误差的速率。
监督学习场景中,训练数据和测试数据独立同分布(假设)。打破假设可能有:两个数据分布不同,或与时间产生依赖不独立。
许多启发式技术旨在防止过拟合。
2.模型复杂性
能轻松解释任意事实的模型是复杂的,而表达力有限但仍能很好地解释数据的模型可能更有实际用途。几个影响模型泛化的因素:①可调整参数数量(自由度不要太大)。 ②参数的取值(权重范围较大更容易过拟合)。 ③训练样本的数量。
4.4.2模型选择
①不同模型 ②不同超参数下同一模型
1.验证集
验证集:在确定所有超参数前,不希望使用测试集。除训练集与测试集,再增加一个验证集。
2.K折交叉验证
训练数据稀缺时,采用K折交叉验证法。
4.4.3欠拟合还是过拟合
欠拟合:模型简单不满足数据内容需求,无法继续减小训练误差。
过拟合:训练误差明显小于验证误差。但过拟合不总是坏事,众所周知深度学习里,最好的预测模型总是训练误差比验证误差低得多。因此通常我们更关心验证误差,而不是训练误差与验证误差间的差距。
1.模型复杂性
对多项式函数拟合,随阶数增多,训练误差减小,但泛化误差是一个先减小后增大的过程。
2.数据集大小
样本数越少,越有可能过拟合。通常更多数据不会有什么坏处。
对于固定的任务和数据分布,模型复杂度和数据集大小之间通常存在一定关系。
4.4.4多项式回归
小结:①欠拟合是指模型无法继续减小训练误差。过拟合是指训练误差远小于验证误差。②不能基于训练误差来估计泛化误差,简单的最小化训练误差并不一定意味着泛化误差的减小。③验证集可以用来模型选择,但不能过于随意的使用。④选择复杂度适当的模型,避免使用数量不足的样本。
4.5权重衰减(正则化技术)
4.5.1范数与权重衰减
权重衰减:是使用最广泛的正则化技术之一,通常称为L2正则化。将范数作为惩罚项添加到最小化损失之中。将最小化训练标签上的预测损失调整为最小化预测损失和惩罚项之和损失函数调整为下式:
通过正则化常数lambda描述这种权重,是一个非负超参数。
L1正则化线性回归称为套索回归,最终将权重集中在一小部分特征上,其余权重为0,称为特征选择,有些场景下需要。
L2正则化线性模型,构成经典的岭回归,对单个变量的观测误差更为稳定。
总结2:①正则化是处理过拟合的方法。训练集的损失函数中加入惩罚项,降低已学习模型的复杂度。②保持模型简单的一个特别选择是使用L2惩罚的算法更新步骤中的权重衰减。③同一训练代码,不同参数集可以有不同更新行为。
4.6暂退法(正则化技术)
4.6.1重新审视过拟合
偏差-方差权衡:泛化性和灵活性之间的基本权衡。(模型偏差很大,方差很小;或模型方差很大,偏差很小)
4.6.2扰动的稳健性
暂退法:计算后续层之前向网络的每一层注入噪声,当前训练一个多层的深度网络时,注入噪声只会在输入-输出映射上增加平滑性。已成为训练神经网络的常用技术。在整个训练过程的每次迭代中,标准暂退法包括在计算下一层之前将当前层中的一些节点置为0。
无偏:加入的噪声服从正态分布,每一层的期望值都等于没有噪声时的值。
在标准的暂退法正则化中,按保留(未丢弃)的节点的分数进行规范化来消除每一层偏差,h'=0或h/(1-p)。(期望E(h')不变)
4.6.3实践中的暂退法
在测试时不用暂退法,给定一个训练好的模型和一个新的样本,我们不会丢弃任何节点。
网络表现稳定:一些研究人员在测试时使用暂退法,用于估计神经网络的”不确定性",如果通过不同的暂退法遮盖后得到的预测结果都是一致的。
4.7前向传播、反向传播和计算图
4.7.1前向传播
指的是按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。
4.7.2前向传播计算图
4.7.3反向传播
依据链式法则,按相反的顺序从输出层到输入层遍历网络。
4.7.4训练神经网络
以简单网络为例:一方面,前向传播期间计算的正则化项取决于模型参数的当前值,由优化算法根据最近迭代的反向传播给出。另一方面,反向传播期间参数的梯度计算,取决于前向传播给出的隐藏变量h的当前值。
4.8数值稳定性和模型初始化
初始化方案的选择在神经网络学习中有重要作用。选择函数以及如何初始化参数可以决定优化算法的收敛速度有多快。糟糕的选择将导致梯度消失或爆炸
4.8.1梯度消失和梯度爆炸
1.梯度爆炸
参数更新过大,破坏模型的稳定收敛。
2.梯度消失
参数更新过小,每次更新几乎不会移动。sigmoid函数被ReLU函数替代的原因。
3.打破对称性
对称性:每一层的隐藏单元之间具有排列对称性,隐藏层中的行为好像只有一个隐藏单元。
小批量随机梯度下降不会打破这种对称性,但暂退法正则化可以。
4.8.2参数初始化
1.默认初始化
随机初始化权重,对于中等难度的问题,这种方法很有效。
2.Xavier初始化
没有非线性的全连接层输出,Xavier初始化从均值为0,方差的高斯分布中抽取权重,也可以将其改为从均匀分布中抽样权重时的方差。(不纯粹的线性时Xavier也被证明有效)
4.9环境和分布偏移
——之后再补(读的不是很懂)——