五天学会Deep Learning

五天学完deep learning。。。。。。是时候来证明chatGPT和new bing的能力了。。。。。。

DAY1

Sigmoid function

Sigmoid 函数是一种常用的激活函数,它将输入值映射到 0 和 1 之间。它的公式为 f(x) = 1 / (1 + e^-x)。Sigmoid 函数的输出值具有平滑性,因此它在深度学习中常用于分类问题。

Softplus function

Softplus 函数是一种激活函数,它将输入值映射到正实数范围内。它的公式为 f(x) = ln(1 + e^x)。Softplus 函数的输出值具有平滑性,因此它在深度学习中常用于回归问题。

KL divergence

KL 散度(Kullback-Leibler divergence)是一种用于衡量两个概率分布之间差异的方法。它的定义为 D_KL(P||Q) = ∑_i P(i) * log(P(i)/Q(i)),其中 P 和 Q 是两个概率分布。KL 散度越大,说明两个概率分布之间的差异越大。

举个例子,假设我们有两个概率分布 P 和 Q,其中 P = [0.5, 0.5],Q = [0.9, 0.1]。那么,我们可以计算它们之间的 KL 散度为 D_KL(P||Q) = 0.5 * log(0.5/0.9) + 0.5 * log(0.5/0.1) ≈ 0.36。这意味着 P 和 Q 之间存在一定的差异。

Structured Probabilistic Model

结构化概率模型使用图来表示随机变量之间的相互作用。每个节点代表一个随机变量。每条边代表一种直接相互作用。这些直接相互作用暗示了其他的间接相互作用,但只有直接相互作用需要被明确建模

Overflow and Underflow

溢出和下溢都是由于给定的位数无法表示给定的数字而发生的错误。溢出是指给定的位数无法表示给定的数字,这意味着数字需要更多的位数来表示。还有一种情况是数字太小,无法根据给定的数字模式表示。这就叫做下溢

Poor Conditioning

条件差是指函数对输入的微小变化反应迅速。舍入误差可能会迅速改变输出。考虑函数\(f(x)=A^{-1}x\),其中\(A\)是一个矩阵,它的条件数很高。\(A^{-1}\)会放大输入误差。\(x\)中的微小误差可能会迅速改变\(A^{-1}x\)的输出。其他方法,包括矩阵分解,可以替代矩阵求逆方法来避免条件差,以提高数值稳定性

Day 2

Capacity

深度学习神经网络模型的容量控制了它能够学习的映射函数类型的范围。容量过小的模型无法学习训练数据集,意味着它会欠拟合,而容量过大的模型可能会记住训练数据集,意味着它会过拟合或在优化过程中卡住或迷失

No free lunch theorem

“没有免费午餐”定理(No Free Lunch Theorem)通常用于优化和机器学习领域,它的意思是当所有优化算法的性能在所有可能的问题上平均时,它们的性能都相同。这意味着没有单一最佳的优化算法。由于优化、搜索和机器学习之间的密切关系,它也意味着对于预测建模问题(如分类和回归),没有单一最佳的机器学习算法

Frequentist and Baysian statistics

频率主义和贝叶斯统计学是两种不同的数据分析方法,它们在如何使用概率方面有所不同。贝叶斯统计学将过去的知识和证据纳入先验分布,并用当前数据更新它以产生后验分布。频率主义统计学仅使用当前实验的数据进行预测或检验假设,在频率主义中未知参数是固定但未知的。

Local Constancy and Smoothness Regularization
Manifold Learning

Day 3

Deep Feedforward Networks

Softmax == soft argmax
第一张图

更深的模型可能会更好
更深的模型可能会更好

Regularization for Deep Learning

L1 and L2 regularization

相比 L2正则化,L1正则化会产生更 稀疏(sparse)的解。

Day 4

Dataset Augmentation

数据增强是一种人为增加数据集大小的过程,通过对现有数据点应用各种变换(如旋转、平移和缩放)来添加新的数据点。最近发现,神经网络的输入层注入噪声,在噪声的幅度被细心调整后,该方法是非常高效的。

通常,普适操作(例如,向输入添加高斯噪声)被认为是机器学习算法的一部分,而特定于一个应用领域(如随机地裁剪图像)的操作被认为是独立的预处理步骤。

Noise Robustness

噪声鲁棒性是指算法在添加一些噪声到数据后,其性能的稳定性。这意味着算法能够在噪声干扰的情况下保持有效性。

另一种正则化模型的噪声使用方式是将其加到权重。这项技术主要用于循环神经网络。这可以被解释为关于权重的贝叶斯推断的随机实现。贝叶斯学习过程将权重视为不确定的,并且可以通过概率分布表示这种不确定性。向权重添加噪声是反映这种不确定性的一种实用的随机方法。

在某些假设下,施加于权重的噪声可以被解释为与更传统的正则化形式等同,鼓励要学习的函数保持稳定。

Label smoothing

标签平滑是一种正则化技术,它通过引入标签(输出)噪声来防止神经网络过拟合。这考虑到数据集中可能存在错误,因此直接最大化log p(y|x)的可能性可能是有害的。假设对于一个小常数ϵ,训练集标签y以概率1-ϵ正确,否则不正确。

Semi-Supervised Learning

半监督学习是一种机器学习方法,它介于监督学习和无监督学习之间。它是一种使用少量标记数据和大量未标记数据来训练模型的方法。这种方法的目的是利用未标记数据来帮助模型更好地理解数据分布,从而提高模型的性能。

Multitask Learning

多任务学习是一种机器学习技术,它训练模型同时执行多个任务。在深度学习中,多任务学习指通过在任务之间共享网络的一些层和参数来训练神经网络执行多个任务。这种方法可以通过利用任务之间的共性和差异来提高学习效率和预测准确性。

从深度学习的观点看,底层的先验知识如下:能解释数据变化(在与之相关联的不同任务中观察到)的因素中,某些因素是跨两个或更多任务共享的。

Early Stopping

提前终止是一种非常不显眼的正则化形式,它几乎不需要改变基本训练过程、目标函数或一组允许的参数值。这意味着,无需破坏学习动态就能很容易地使用提前终止。相对于权重衰减,必须小心不能使用太多的权重衰减,以防网络陷入不良局部极小点(对应于病态的小权重)。

提前终止需要验证集,这意味着某些训练数据不能被馈送到模型。为了更好地利用这一额外的数据,我们可以在完成提前终止的首次训练之后,进行额外的训练。在第二轮,即额外的训练步骤中,所有的训练数据都被包括在内。有两个基本的策略都可以用于第二轮训练过程。一个策略是再次初始化模型,然后使用所有数据再次训练。另一个策略是保持从第一轮训练获得的参数,然后使用全部的数据继续训练。

提前终止正则化模型的真正机制是什么呢?认为提前终止可以将优化过程的参数空间限制在初始参数值 \(\theta_0\) 的小邻域内。

Parameter Tying and Parameter Sharing

参数绑定和参数共享是一种控制深度神经网络复杂度的方法,它通过强制某些权重共享相同的值来实现。特定形式的权重共享是硬编码的,用来表达某些不变性。一个典型的例子是卷积层的平移不变性.

参数共享的一个显著优点是,只有参数(唯一一个集合)的子集需要被存储在内存中。对于某些特定模型,如卷积神经网络CNN,这可能可以显著减少模型所占用的内存。

卷积层的平移不变性是指卷积层对输入的平移具有不变性。这意味着,当输入图像发生平移时,卷积层的输出也会相应地平移,但不会发生其他变化。

然而,现代卷积网络并不是完全平移不变的。小的输入平移或转换可能会导致输出发生剧烈变化。常用的下采样方法,如最大池化、跨步卷积和平均池化,都忽略了采样定理。信号处理中众所周知的解决方案是在下采样之前通过低通滤波进行抗混叠。然而,简单地将这个模块插入深度网络会降低性能;因此,它目前很少被使用。

Dropout

Dropout的另一个重要方面是噪声是乘性的。如果是固定规模的加性噪声,那么加了噪声 ϵ 的整流线性隐藏单元可以简单地学会使 hi 变得很大(使增加的噪声 ϵ 变得不显著)。

另一种深度学习算法——批标准化,在训练时向隐藏单元引入加性和乘性噪声重新参数化模型。批标准化的主要目的是改善优化,但噪声具有正则化的效果,有时没必要再使用Dropout。

Sparse Representations

惩罚神经网络中的激活单元,稀疏化激活单元。这种策略间接地对模型参数施加了复杂惩罚。

weight scaling inference rule

权重缩放推理规则是一种在测试时使用的近似平均方法。这种方法的思想是在测试时使用一个没有dropout的单一神经网络。如果一个单元在训练期间以概率p保留,那么该单元的输出权重在测试时乘以p,如图3所示。这样可以确保对于任何隐藏单元,期望输出(在训练时用于丢弃单元的分布下)与测试时的实际输出相同。通过这种缩放,具有共享权重的2n个网络可以组合成一个用于测试时的单一神经网络。Srivastava(2014)发现,使用dropout训练网络并在测试时使用这种近似平均方法,与使用其他正则化方法进行训练相比,可以显著降低各种分类问题的泛化误差。

Adversarial Training

对抗训练是一种机器学习技术,它涉及使用对抗样本来训练神经网络,这些输入被稍微修改以欺骗网络。目标是通过使网络对某些特征或扰动不变来提高网络的鲁棒性和泛化能力。对抗训练可以通过不同的方式进行,例如使用第二个网络提供反馈,使用一些对抗样本重新训练网络,或者回收梯度信息来生成对抗样本。对抗训练是少数几种能够抵御强攻击的防御措施之一,但在大规模问题上可能代价高昂且不切实际¹。

我们可以通过 对抗训练(adversarial training)减少原有独立同分布的测试集的错误率——在对抗扰动的训练集样本上训练网络。

Tangent Distance, Tangent Prop and ManifoldTangent Classifier

Day 5

How Learning Differs from Pure Optimization

在深度模型训练中,优化算法和传统的优化算法在几个方面有所不同。机器学习通常是间接作用的。在大多数机器学习问题中,我们关注某些性能度量\(p\),其定义于测试集上并且可能是不可解的。因此,我们只是间接地优化\(p\)
纯优化是指在没有任何先验知识的情况下,仅通过数据来确定模型参数。而学习则是指通过数据来确定模型参数和超参数。

Empirical Risk Minimization

Empirical Risk Minimization(ERM)是一种优化算法,其优化目标是寻找一个 \(h^*\) 使 \(R_{emp}(h)\) 最小:\(\hat{h}=\text{argmin}_{h\in\mathcal{H}} R_{emp}(h)\)。ERM是主流深度学习算法的底层优化理论。ERM的缺点是过拟合,即在训练数据上表现良好,但在测试数据上表现不佳。为了解决这个问题,一些新的算法被提出,如结构风险最小化(SRM)和正则化方法等。
Empirical Risk Minimization(ERM)是统计学习理论中的一种原则,它定义了一族学习算法,并用于给出它们的性能理论界限.

surrogate loss function

代理损失函数作为原目标的代理,还具备一些优点。例如,正确类别的负对数似然通常用作 0 − 1 损失的替代。负对数似然允许模型估计给定样本的类别的条件概率,如果该模型效果好,那么它能够输出期望最小分类误差所对应的类别。

Batch and Minibatch Algorithms

机器学习算法和一般优化算法不同的一点是,机器学习算法的目标函数通常可以分解为训练样本上的求和。机器学习中的优化算法在计算参数的每一次更新时通常仅使用整个代价函数中一部分项来估计代价函数的期望值。
使用整个训练集的优化算法被称为 批量(batch)或 确定性(deterministic)梯度算法,因为它们会在一个大批量中同时处理所有样本。这个术语可能有点令人困惑,因为这个词 “批量’’ 也经常被用来描述小批量随机梯度下降算法中用到的小批量样本。通常,术语 “批量梯度下降’’ 指使用全部训练集,而术语 “批量’’ 单独出现时指一组样本。例如,我们普遍使用术语 “批量大小’’ 表示小批量的大小。
每次只使用单个样本的优化算法有时被称为 随机(stochastic)或者 在线(online)算法。术语 “在线’’ 通常是指从连续产生样本的数据流中抽取样本的情况,而不是从一个固定大小的训练集中遍历多次采样的情况。
大多数用于深度学习的算法介于以上两者之间,使用一个以上,而又不是全部的训练样本。传统上,这些会被称为 小批量(minibatch)或 小批量随机(minibatch stochastic)方法,现在通常将它们简单地称为 随机(stochastic)方法。
小批量的大小通常由以下几个因素决定:
• 更大的批量会计算更精确的梯度估计,但是回报却是小于线性的。
• 极小批量通常难以充分利用多核架构。这促使我们使用一些绝对最小批量,低于这个值的小批量处理不会减少计算时间。
• 如果批量处理中的所有样本可以并行地处理(通常确是如此),那么内存消耗和批量大小会正比。对于很多硬件设施,这是批量大小的限制因素。
• 在某些硬件上使用特定大小的数组时,运行时间会更少。尤其是在使用GPU 时,通常使用 2 的幂数作为批量大小可以获得更少的运行时间。一般,2 的幂数的取值范围是 32 到 256,16 有时在尝试大模型时使用。
• 可能是由于小批量在学习过程中加入了噪声,它们会有一些正则化效果 (Wilsonand Martinez, 2003)。泛化误差通常在批量大小为 1 时最好。因为梯度估计的高方差,小批量训练需要较小的学习率以保持稳定性。因为降低的学习率和消耗更多步骤来遍历整个训练集都会产生更多的步骤,所以会导致总的运行时间非常大。

很多机器学习上的优化问题都可以分解成并行地计算不同样本上单独的更新。换言之,我们在计算小批量样本 X 上最小化 J(X) 的更新时,同时可以计算其他小批量样本上的更新。
我们不难从在线学习的情况中看出随机梯度下降最小化泛化误差的原因。这时样本或者小批量都是从数据 流(stream)中抽取出来的。换言之,学习器好像是一个每次看到新样本的人,每个样本 \((x, y)\) 都来自数据生成分布 \(p_{data}(x, y)\),而不是使用大小固定的训练集。这种情况下,样本永远不会重复;每次更新的样本是从分布$p_{data} 中采样获得的无偏样本。

Batch Normalization

批量归一化(Batch Normalization)是一种常用的深度学习正则化技术,旨在通过规范化输入数据来加速神经网络的训练过程。
在深度神经网络中,每个隐藏层的输入都是前一层的输出,这意味着网络的每一层都需要适应不同的输入分布。这可能会导致某些层需要更长时间的训练才能收敛,或者导致梯度消失或爆炸的问题。批量归一化通过将每一层的输入规范化为均值为0、方差为1的标准正态分布来缓解这些问题。
具体来说,批量归一化的过程包括以下几个步骤:

  1. 对于一个批次(batch)中的所有样本,计算该批次中每个特征的均值和方差。
  2. 使用这些均值和方差来规范化该批次中每个特征的值。
  3. 使用可学习的缩放因子和平移因子对规范化后的值进行线性变换,从而允许网络自行学习更复杂的特征。
    批量归一化能够有效地加速神经网络的训练过程,并提高模型的泛化能力。它还可以减轻梯度消失和梯度爆炸的问题,并使深度网络更易于优化。
model identifiability

在深度学习中,模型可辨识性是指模型的参数可以从无限的观察值中学习到真实的值。如果一个模型是可识别的,那么它的参数可以被准确地推断出来。

weight space symmetry

在深度学习中,权重空间对称性意味着不可识别的模型对其权重层中的随机排列具有不变性。该对称性会导致神经网络的训练依赖于其初始状态,因为它会影响网络的局部极小值、鞍点、平坦高维子空间和损失障碍等结构。(模型不可辨识)

Ill-Conditioning

在优化凸函数时,会遇到一些挑战。这其中最突出的是 Hessian 矩阵 H 的病态。(就是在求导的时候误差会很大)
病态问题一般被认为存在于神经网络训练过程中。病态体现在随机梯度下降会‘‘卡’’ 在某些情况,此时即使很小的更新步长也会增加代价函数。

Cliffs and Exploding Gradients

多层神经网络通常存在像悬崖一样的斜率较大区域。这是由于几个较大的权重相乘导致的。遇到斜率极大的悬崖结构时,梯度更新会很大程度地改变参数值,通常会完全跳过这类悬崖结构。

Long-Term Dependencies

当计算图变得极深时,神经网络优化算法会面临的另外一个难题就是长期依赖问题——由于变深的结构使模型丧失了学习到先前信息的能力,让优化变得极其困难。深层的计算图不仅存在于前馈网络,还存在于之后介绍的循环网络中(在第十章中描述)。因为循环网络要在很长时间序列的各个时刻重复应用相同操作来构建非常深的计算图,并且模型参数共享,这使问题更加凸显。

excess error

研究优化算法的收敛率,一般会衡量 额外误差(excess error)\(J(θ)−min_{θ} J(θ)\),即当前代价函数超出最低可能代价的量。

Momentum

虽然随机梯度下降仍然是非常受欢迎的优化方法,但其学习过程有时会很慢。动量方法 (Polyak, 1964) 旨在加速学习,特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。动量算法积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。

从形式上看,动量算法引入了变量 v 充当速度角色——它代表参数在参数空间移动的方向和速率。速度被设为负梯度的指数衰减平均。名称 动量(momentum)来自物理类比,根据牛顿运动定律,负梯度是移动参数空间中粒子的力。动量在物理学上定义为质量乘以速度。在动量学习算法中,我们假设是单位质量,因此速度向量 v 也可以看作是粒子的动量。

Parameter Initialization Strategies

现代的初始化策略是简单的、启发式的。设定改进的初始化策略是一项困难的任务,因为神经网络优化至今还未被很好地理解。大多数初始化策略基于在神经网络初始化时实现一些很好的性质。然而,我们并没有很好地理解这些性质中的哪些会在学习开始进行后的哪些情况下得以保持。进一步的难点是,有些初始点从优化的观点看或许是有利的,但是从泛化的观点看是不利的。我们对于初始点如何影响泛化的理解是相当原始的,几乎没有提供如何选择初始点的任何指导。
也许完全确知的唯一特性是初始参数需要在不同单元间 ‘‘破坏对称性’’。如果具有相同激活函数的两个隐藏单元连接到相同的输入,那么这些单元必须具有不同的初始参数。如果它们具有相同的初始参数,然后应用到确定性损失和模型的确定性学习算法将一直以相同的方式更新这两个单元。即使模型或训练算法能够使用随机性为不同的单元计算不同的更新(例如使用 Dropout的训练),通常来说,最好还是初始化每个单元使其和其他单元计算不同的函数。
我们几乎总是初始化模型的权重为高斯或均匀分布中随机抽取的值。高斯或均匀分布的选择似乎不会有很大的差别,但也没有被详尽地研究。然而,初始分布的大小确实对优化过程的结果和网络泛化能力都有很大的影响。
在循环网络中,很大的权重也可能导致 混沌(chaos)(对于输入中很小的扰动非常敏感,导致确定性前向传播过程表现随机)。
关于如何初始化网络,正则化和优化有着非常不同的观点。优化观点建议权重应该足够大以成功传播信息,但是正则化希望其小一点。
有些启发式方法可用于选择权重的初始大小。例如normalized initialization

Day 6

Practical Methodology

  • 确定目标——使用什么样的误差度量,并为此误差度量指定目标值。这些目标和误差度量取决于该应用旨在解决的问题。
  • 尽快建立一个端到端的工作流程,包括估计合适的性能度量。
  • 搭建系统,并确定性能瓶颈。检查哪个部分的性能差于预期,以及是否是因为过拟合、欠拟合,或者数据或软件缺陷造成的。
  • 根据具体观察反复地进行增量式的改动,如收集新数据、调整超参数或改进算法。
Performance Metrics

精度(precision)和 召回率(recall)。精度是模型报告的检测是正确的比率,而召回率则是真实事件被检测到的比率。当使用精度和召回率时,我们通常会画 PR 曲线(PR curve),y 轴表示精度,x 轴表示召回率。
在很多情况下,我们希望用一个数而不是曲线来概括分类器的性能。要做到这一点,我们可以将精度 p 和召回率 r 转换为 F 分数(F-score)\(F =\frac{2pr}{p + r}\)另一种方法是报告 PR 曲线下方的总面积。
覆盖(coverage)覆盖率是指模型能够正确预测数据集中的多少个示例。
召回率是指分类器正确识别出所有正例样本的能力,也就是真正为正例的样本被预测为正例的比例。而覆盖率是指模型预测的正例样本数占总正例样本数的比例,也就是模型预测的正例样本能够覆盖多少正例样本。
F1 分数是精确度和召回率的调和平均值。

Default Baseline Models

如果问题属于 “AI-完全’’ 类的,如对象识别、语音识别、机器翻译等等,那么项目开始于一个合适的深度学习模型,效果会比较好。
首先,根据数据的结构选择一类合适的模型。如果项目是以固定大小的向量作为输入的监督学习,那么可以使用全连接的前馈网络。如果输入有已知的拓扑结构(例如,输入是图像),那么可以使用卷积网络。在这些情况下,刚开始可以使用某些分段线性单元(ReLU 或者其扩展,如Leaky ReLU、PReLU 和 maxout)。如果输入或输出是一个序列,可以使用门控循环网络(LSTM 或 GRU)。
具有衰减学习率以及动量的 SGD 是优化算法一个合理的选择(流行的衰减方法有,衰减到固定最低学习率的线性衰减、指数衰减,或每次发生验证错误停滞时将学习率降低 2 − 10 倍,这些衰减方法在不同问题上好坏不一)。另一个非常合理的选择是 Adam 算法。批标准化对优化性能有着显著的影响,特别是对卷积网络和具有 sigmoid 非线性函数的网络而言。虽然在最初的基准中忽略批标准化是合理的,然而当优化似乎出现问题时,应该立刻使用批标准化。
除非训练集包含数千万以及更多的样本,否则项目应该在一开始就包含一些温和的正则化。提前终止也被普遍采用。Dropout 也是一个很容易实现,且兼容很多模型和训练算法的出色正则化项。批标准化有时也能降低泛化误差,此时可以省略 Dropout 步骤,因为用于标准化变量的统计量估计本身就存在噪声。

Determining Whether to Gather More Data

怎样判断是否要收集更多的数据?首先,确定训练集上的性能是否可接受。如果模型在训练集上的性能就很差,学习算法都不能在训练集上学习出良好的模型,那么就没必要收集更多的数据。反之,可以尝试增加更多的网络层或每层增加更多的隐藏单元,以增加模型的规模。此外,也可以尝试调整学习率等超参数的措施来改进学习算法。如果更大的模型和仔细调试的优化算法效果不佳,那么问题可能源自训练数据的质量。数据可能含太多噪声,或是可能不包含预测输出所需的正确输入。这意味着我们需要重新开始,收集更干净的数据或是收集特征更丰富的数据集。
如果训练集上的性能是可接受的,那么我们开始度量测试集上的性能。如果测试集上的性能也是可以接受的,那么就顺利完成了。如果测试集上的性能比训练集的要差得多,那么收集更多的数据是最有效的解决方案之一。这时主要的考虑是收集更多数据的代价和可行性,其他方法降低测试误差的代价和可行性,和增加数据数量能否显著提升测试集性能。
在其他情况下,如医疗应用,收集更多的数据可能代价很高或者不可行。一个可以替代的简单方法是降低模型大小或是改进正则化(调整超参数,如权重衰减系数,或是加入正则化策略,如 Dropout)。如果调整正则化超参数后,训练集性能和测试集性能之间的差距还是不可接受,那么收集更多的数据是可取的。
在决定是否收集更多的数据时,也需要确定收集多少数据。如图所示,绘制曲线显示训练集规模和泛化误差之间的关系是很有帮助的。根据走势延伸曲线,可以预测还需要多少训练数据来达到一定的性能。通常,加入总数目一小部分的样本不会对泛化误差产生显著的影响。因此,建议在对数尺度上考虑训练集的大小,例如在后续的实验中倍增样本数目。

Selecting Hyperparameters

Manual Hyperparameter Tuning

手动搜索超参数的主要目标是调整模型的有效容量以匹配任务的复杂性。有效容量受限于三个因素:模型的表示容量、学习算法成功最小化训练模型代价函数的能力以及代价函数和训练过程正则化模型的程度。具有更多网络层,每层有更多隐藏单元的模型具有较高的表示能力——能够表示更复杂的函数。然而,如果训练算法不能找到某个合适的函数来最小化训练代价,或是正则化项(如权重衰减)排除了这些合适的函数,那么即使模型的表达能力较高,也不能学习出合适的函数。
并非每个超参数都能对应着完整的 U 形曲线。很多超参数是离散的,如中间层单元数目或是 maxout 单元中线性元件的数目,这种情况只能沿曲线探索一些点。有些超参数是二值的。通常这些超参数用来指定是否使用学习算法中的一些可选部分,如预处理步骤减去均值并除以标准差来标准化输入特征。这些超参数只能探索曲线上的两点。其他一些超参数可能会有最小值或最大值,限制其探索曲线的某些部分。

如果测试集错误率大于目标错误率,那么可以采取两个方法。测试误差是训练误差和测试误差之间差距与训练误差的总和。寻找最佳的测试误差需要权衡这些数值。当训练误差较小(因此容量较大),测试误差主要取决于训练误差和测试误差之间的差距时,通常神经网络效果最好。此时目标是缩小这一差距,使训练误差的增长速率不快于差距减小的速率。要减少这个差距,我们可以改变正则化超参数,以减少有效的模型容量,如添加 Dropout 或权重衰减策略。通常,最佳性能来自正则化得很好的大规模模型,比如使用 Dropout 的神经网络。

Automatic Hyperparameter Optimization Algorithms

通常,网格搜索大约会在 对数尺度(logarithmic scale)下挑选合适的值,例如,一个学习率的取值集合是 \(\{0.1, 0.01, 10^{−3}, 10^{−4}, 10^{−5}\}\),或者隐藏单元数目的取值集合 \(\{50, 100, 200, 500, 1000, 2000\}\)
通常重复进行网格搜索时,效果会最好。例如,假设我们在集合 {−1, 0, 1} 上网格搜索超参数 α。如果找到的最佳值是 1,那么说明我们低估了最优值 α 所在的范围,应该改变搜索格点,例如在集合 {1, 2, 3} 中搜索。如果最佳值是 0,那么我们不妨通过细化搜索范围以改进估计,在集合 {−0.1, 0, 0.1} 上进行网格搜索。
网格搜索带来的一个明显问题是,计算代价会随着超参数数量呈指数级增长。如果有 m 个超参数,每个最多取 n 个值,那么训练和估计所需的试验数将是 \(O(n^m)\)

随机搜索过程如下。首先,我们为每个超参数定义一个marginal(边缘)分布,例如,Bernoulli分布或范畴分布(分别对应着二元超参数或离散超参数),或者对数尺度上的均匀分布(对应着正实值超参数)。
与网格搜索不同,我们不需要离散化超参数的值。这允许我们在一个更大的集合上进行搜索,而不产生额外的计算代价。实际上,当有几个超参数对性能度量没有显著影响时,随机搜索相比于网格搜索指数级地高效。

Model-Based Hyperparameter Optimization

超参数搜索问题可以转化为一个优化问题。决策变量是超参数。优化的代价是超参数训练出来的模型在验证集上的误差。在简化的设定下,可以计算验证集上可导误差函数关于超参数的梯度,然后我们遵循这个梯度更新 。令人遗憾的是,在大多数实际设定中,这个梯度是不可用的。这可能是因为其高额的计算代价和存储成本,也可能是因为验证集误差在超参数上本质上不可导,例如超参数是离散值的情况。
为了弥补梯度的缺失,我们可以对验证集误差建模,然后通过优化该模型来提出新的超参数猜想。大部分基于模型的超参数搜索算法,都是使用贝叶斯回归模型来估计每个超参数的验证集误差期望和该期望的不确定性。因此,优化涉及到探索(探索高度不确定的超参数,可能带来显著的效果提升,也可能效果很差)和使用(使用已经确信效果不错的超参数——通常是先前见过的非常熟悉的超参数)之间的权衡。关于超参数优化的最前沿方法还包括 Spearmint (Snoek et al., 2012),TPE (Bergstra et al., 2011) 和 SMAC (Hutter et al., 2011)。

Debugging Strategies

可视化计算中模型的行为:在训练语音生成模型时,试听一些生成的语音样本。
可视化最严重的错误:大多数模型能够输出运行任务时的某种置信度量。例如,基于 softmax 函数 输出层的分类器给每个类分配一个概率。
利用训练和测试误差检测:我们往往很难确定底层算法是否正确实现。训练和测试误差能够提供一些线索。如果训练误差较低,但是测试误差较高,那么很有可能训练过程是在正常运行,但模型由于算法原因过拟合了。另一种可能是,测试误差没有被正确地度量,可能是由于训练后保存模型再重载去度量测试集时出现问题,或者是因为测试数据和训练数据预处理的方式不同。
拟合极小的数据集:当训练集上有很大的误差时,我们需要确定问题是真正的欠拟合,还是算法没有正确实现。通常,即使是小模型也可以保证很好地拟合一个足够小的数据集。
比较反向传播导数和数值导数:如果读者正在使用一个需要实现梯度计算的软件框架,或者在添加一个新操作到求导库中,必须定义它的 bprop 方法,那么常见的错误原因是没能正确地实现梯度表达。验证这些求导正确性的一种方法是比较实现的自动求导和通过 有限差分(finite difference)计算的导数。我们可以使用小的、有限的 ϵ 近似导数,也可以使用 中心差分(centered difference)提高近似的准确率。
监控激活函数值和梯度的直方图:可视化神经网络在大量训练迭代后(也许是一轮)收集到的激活函数值和梯度的统计量往往是有用的。隐藏单元的预激活值可以告诉我们该单元是否饱和,或者它们饱和的频率如何。例如,对于整流器,它们多久关一次?是否有单元一直关闭?对于双曲正切单元而言,预激活绝对值的平均值可以告诉我们该单元的饱和程度。

data parallelism

在训练过程中,数据并行某种程度上来说更加困难。对于随机梯度下降的单步来说,我们可以增加小批量的大小,但是从优化性能的角度来说,我们得到的回报通常并不会线性增长。使用多个机器并行地计算多个梯度下降步骤是一个更好的选择。不幸的是,梯度下降的标准定义完全是一个串行的过程:第 \(t\) 步的梯度是第 \(t − 1\) 步所得参数的函数。
异步随机梯度下降。在这个方法中,几个处理器的核共用存有参数的内存。每一个核在无锁情况下读取这些参数并计算对应的梯度,然后在无锁状态下更新这些参数。由于一些核把其他的核所更新的参数覆盖了,因此这种方法减少了每一步梯度下降所获得的平均提升。但因为更新步数的速率增加,总体上还是加快了学习过程。

model parallelism

其中多个机器共同运行一个数据点,每一个机器负责模型的一个部分。

Model Compression

模型压缩的基本思想是用一个更小的模型取代原始耗时的模型,从而使得用来存储与评估所需的内存与运行时间更少。
当原始模型的规模很大,且我们需要防止过拟合时,模型压缩就可以起到作用。在许多情况下,拥有最小泛化误差的模型往往是多个独立训练而成的模型的集成。评估所有 n 个集成成员的成本很高。有时候,当单个模型很大(例如,如果它使用 Dropout 正则化)时,其泛化能力也会很好。
这些巨大的模型能够学习到某个函数 f(x),但选用的参数数量超过了任务所需的参数数量。只是因为训练样本数是有限的,所以模型的规模才变得必要。只要我们拟合了这个函数 f(x),我们就可以通过将 f 作用于随机采样点 x 来生成有无穷多训练样本的训练集。然后,我们使用这些样本训练一个新的更小的模型,使其能够在这些点上拟合 f(x)。为了更加充分地利用了这个新的小模型的容量,最好从类似于真实测试数据(之后将提供给模型)的分布中采样 x。这个过程可以通过损坏训练样本或者从原始训练数据训练的生成模型中采样完成。

Dynamic Structure

一般来说,加速数据处理系统的一种策略是构造一个系统,这个系统用 动态结构(dynamic structure)描述图中处理输入的所需计算过程。在给定一个输入的情况中,数据处理系统可以动态地决定运行神经网络系统的哪一部分。单个神经网络内部同样也存在动态结构,给定输入信息,决定特征(隐藏单元)哪一部分用于计算。这种神经网络中的动态结构有时被称为 条件计算
在分类器中加速推断的可行策略是使用 级联(cascade)的分类器。当目标是检测罕见对象(或事件)是否存在时,可以应用级联策略。要确定对象是否存在,我们必须使用具有高容量、运行成本高的复杂分类器。然而,因为对象是罕见的,我们通常可以使用更少的计算拒绝不包含对象的输入。在这些情况下,我们可以训练一序列分类器。序列中的第一个分类器具有低容量,训练为具有高召回率。换句话说,他们被训练为确保对象存在时,我们不会错误地拒绝输入。最后一个分类器被训练为具有高精度。
另一种动态结构是开关,其中隐藏单元可以根据具体情况从不同单元接收输入。这种动态路由方法可以理解为 注意力机制(attention mechanism).

Preprocessing

CV - Preprocessing

将图像格式化为具有相同的比例严格上说是唯一一种必要的预处理。
数据集增强可以被看作是一种只对训练集做预处理的方式。数据集增强是减少大多数计算机视觉模型泛化误差的一种极好方法。在测试时可用的一个相关想法是将同一输入的许多不同版本传给模型(例如,在稍微不同的位置处裁剪的相同图像),并且在模型的不同实例上决定模型的输出。后一个想法可以被理解为集成方法,并且有助于减少泛化误差。
当使用大型数据集和大型模型训练时,这种预处理通常是不必要的,并且最好只是让模型学习哪些变化性应该保留。例如,用于分类 ImageNet 的 AlexNet 系统仅具有一个预处理步骤:对每个像素减去训练样本的平均值 (Krizhevsky et al., 2012b)。

Contrast Normalization

对比度是能够安全移除的最为明显的变化源之一。简单地说,对比度指的是图像中亮像素和暗像素之间差异的大小。
全局对比度归一化(Global contrast normalization, GCN)旨在通过从每个图像中减去其平均值,然后重新缩放其使得其像素上的标准差等于某个常数 s 来防止图像具有变化的对比度。这种方法非常复杂,因为没有缩放因子可以改变零对比度图像(所有像素都具有相等强度的图像)的对比度。具有非常低但非零对比度的图像通常几乎没有信息内容。在这种情况下除以真实标准差通常仅能放大传感器噪声或压缩伪像。
全局对比度归一化常常不能突出我们想要突出的图像特征,例如边缘和角。如果我们有一个场景,包含了一个大的黑暗区域和一个大的明亮的区域(例如一个城市广场有一半的区域处于建筑物的阴影之中),则全局对比度归一化将确保暗区域的亮度与亮区域的亮度之间存在大的差异。然而,它不能确保暗区内的边缘突出。
局部对比度归一化(local contrast normalization, LCN)。局部对比度归一化确保对比度在每个小窗口上被归一化,而不是作为整体在图像上被归一化。

Dataset Augmentation

对象识别这个分类任务特别适合于这种形式的数据集增强,因为类别信息对于许多变换是不变的,而我们可以简单地对输入应用诸多几何变换。如前所述,分类器可以受益于随机转换或者旋转,某些情况下输入的翻转可以增强数据集。在专门的计算机视觉应用中,存在很多更高级的用以数据集增强的变换。这些方案包括图像中颜色的随机扰动 (Krizhevsky et al., 2012b),以及对输入的非线性几何变形 (LeCun et al., 1998c)。

Speech Recognition

emm,这部分应该和活儿没啥关系,先把坑埋在这。

NLP

同上。可能这部分BERT的project会用得到。

Representation Learning

representation, 说白了有点类似于数据结构。什么样的表示更适合这种学习呢?
表示学习特别有趣,因为它提供了进行无监督学习和半监督学习的一种方法。我们通常会有巨量的未标注训练数据和相对较少的标注训练数据。在非常有限的标注数据集上监督学习通常会导致严重的过拟合。半监督学习通过进一步学习未标注数据,来解决过拟合的问题。具体地,我们可以从未标注数据上学习出很好的表示,然后用这些表示来解决监督学习问题。
人类和动物能够从非常少的标注样本中学习。我们至今仍不知道这是如何做到的。有许多假说解释人类的卓越学习能力——例如,大脑可能使用了大量的分类器或者贝叶斯推断技术的集成。一种流行的假说是,大脑能够利用无监督学习和半监督学习。利用未标注数据有多种方式。在本章中,我们主要使用的假说是未标注数据可以学习出良好的表示。

Greedy Layer-Wise Unsupervised Pretraining

无监督学习在深度神经网络的复兴上起到了关键的、历史性的作用,它使研究者首次可以训练不含诸如卷积或者循环这类特殊结构的深度监督网络。我们将这一过程称为 无监督预训练(unsupervised pretraining),或者更精确地,贪心逐层无监督预训练(greedy layer-wise unsupervised pretraining)。此过程是一个任务(无监督学习,尝试获取输入分布的形状)的表示如何有助于另一个任务(具有相同输入域的监督学习)的典型示例。

Transfer Learning and Domain Adaptation

在 迁移学习(transfer learning)中,学习器必须执行两个或更多个不同的任务,但是我们假设能够解释 \(P_1\) 变化的许多因素和学习 \(P_2\) 需要抓住的变化相关。
在 领域自适应(domain adaption)的相关情况下,在每个情景之间任务(和最优的输入到输出的映射)都是相同的,但是输入分布稍有不同。例如,考虑情感分析的任务,如判断一条评论是表达积极的还是消极的情绪。网上的评论有许多类别。在书、视频和音乐等媒体内容上训练的顾客评论情感预测器,被用于分析诸如电视机或智能电话的消费电子产品的评论时,领域自适应情景可能会出现。可以想象,存在一个潜在的函数可以判断任何语句是正面的、中性的还是负面的,但是词汇和风格可能会因领域而有差异,使得跨域的泛化训练变得更加困难。简单的无监督预训练(去噪自编码器)已经能够非常成功地用于领域自适应的情感分析。
一个相关的问题是 概念漂移(concept drift),我们可以将其视为一种迁移学习,因为数据分布随时间而逐渐变化。概念漂移和迁移学习都可以被视为多任务学习的特定形式。“多任务学习’’ 这个术语通常指监督学习任务,而更广义的迁移学习的概念也适用于无监督学习和强化学习。
在所有这些情况下,我们的目标是利用第一个情景下的数据,提取那些在第二种情景中学习时或直接进行预测时可能有用的信息。表示学习的核心思想是相同的表示可能在两种情景中都是有用的。两个情景使用相同的表示,使得表示可以受益于两个任务的训练数据。
迁移学习的两种极端形式是 一次学习(one-shot learning)和 零次学习(zeroshot learning),有时也被称为 零数据学习(zero-data learning)。只有一个标注样本的迁移任务被称为一次学习;没有标注样本的迁移任务被称为零次学习。
零次学习是迁移学习的一种特殊形式。同样的原理可以解释如何能执行 多模态学习(multimodal learning),学习两种模态的表示,和一种模态中的观察结果 x与另一种模态中的观察结果 \(y\) 组成的对 \((x, y)\) 之间的关系(通常是一个联合分布)(Srivastava and Salakhutdinov, 2012)。

Semi-Supervised Disentangling of Causal Factors

半监督因果要素分离(Semi-Supervised Disentangling of Causal Factors,简称SSDCF)是一种机器学习技术,旨在分离和识别贡献给给定数据集的因果要素。
具体来说,这个方法通过在深度神经网络中引入一个因素分离模块来实现。这个模块通过最小化重构误差和最大化独立性来学习各种因素的表示。

生成对抗网络(GAN)是一种无监督学习模型,其基本思想是通过训练两个神经网络模型来实现生成新数据的目的。一个模型称为“生成器”,用于生成伪造的数据样本,另一个模型称为“判别器”,用于区分真实数据和伪造数据。
变分自编码器(VAE)是一种用于学习数据的潜在空间表示的无监督学习模型,其基本思想是将输入数据编码成潜在向量,然后通过解码器将潜在向量重新生成出来。与传统自编码器不同的是,VAE不仅可以学习到数据的潜在表示,还可以生成全新的数据样本。
具体来说,VAE的训练过程分为两个阶段,分别是编码器的训练和解码器的训练。在编码器的训练阶段,我们将输入数据通过编码器映射为潜在向量,并计算出潜在向量的均值和方差。然后,我们使用这些均值和方差来计算一个随机潜在向量,并通过解码器将这个随机潜在向量重新生成出来。

Distributed representations

“概念的分布式表示”指的是将概念表示成由多个元素组成的表示,这些元素可以独立地进行设置。这种表示方法允许我们用一个向量来表示一个概念,并且可以通过改变向量中不同的元素来改变概念的含义。这种表示方法已经被广泛应用于自然语言处理、计算机视觉、推荐系统等领域。
以自然语言处理为例,分布式表示方法将单词表示为向量,其中每个元素代表一个语义特征。例如,向量的一个元素可能表示单词的情感极性,另一个元素则表示单词的主题类别。这种表示方法可以更好地捕捉单词之间的关系,例如近义词的向量在空间中的距离应该比其他词更近。
分布式表示方法有很多种实现方式,例如通过神经网络来学习单词向量,或者使用主成分分析等技术来减少向量的维度。

Exponential Gains from Depth

“深度带来指数级的增益(Exponential Gains from Depth)”是指在深度神经网络中增加层数能够极大地提升神经网络的性能,这种性能提升呈指数级增长。
具体来说,增加深度可以提高网络的表达能力,使其能够学习到更复杂的特征和关系,从而提高其性能。另外,随着层数的增加,网络可以学习到更加抽象和高级别的特征,使得网络在处理复杂任务时更加有效。
但是,增加深度也会带来一些问题,例如梯度消失和梯度爆炸等,这些问题需要采用一些特殊的技术来解决。

现在看来老师让看的章节都看完了,虽然非常的囫囵吞枣。。。。。但是好歹也是看完了。

posted @ 2023-04-17 17:37  爱吃番茄的玛丽亚  阅读(89)  评论(0编辑  收藏  举报