深度学习知识卡片:最优化算法

继续之前的:

下面就是具体的最优化算法了,包括最基本的小批量随机梯度下降、带动量的随机梯度下降和 RMSProp 等适应性学习率算法。

最优化算法
最优化算法

小批量随机梯度下降(通常 SGD 指的就是这种)使用一个批量的数据更新参数,因此大大降低了一次迭代所需的计算量。这种方法降低了更新参数的方差,使得收敛过程更为稳定;它也能利用流行深度学习框架中高度优化的矩阵运算器,从而高效地求出每个小批数据的梯度。通常一个小批数据含有的样本数量在 50 至 256 之间,但对于不同的用途也会有所变化。

动量策略旨在加速 SGD 的学习过程,特别是在具有较高曲率的情况下。一般而言,动量算法利用先前梯度的指数衰减滑动平均值在该方向上进行修正,从而更好地利用历史梯度的信息。该算法引入了变量 v 作为参数在参数空间中持续移动的速度向量,速度一般可以设置为负梯度的指数衰减滑动平均值。

上图后面所述的 RMSProp 和 Adam 等适应性学习率算法是目前我们最常用的最优化方法。RMSProp 算法(Hinton,2012)修改 AdaGrad 以在非凸情况下表现更好,它改变梯度累积为指数加权的移动平均值,从而丢弃距离较远的历史梯度信息。RMSProp 是 Hinton 在公开课上提出的最优化算法,其实它可以视为 AdaDelta 的特例。但实践证明 RMSProp 有非常好的性能,它目前在深度学习中有非常广泛的应用。

Adam 算法同时获得了 AdaGrad 和 RMSProp 算法的优点。Adam 不仅如 RMSProp 算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncentered variance)。

深度学习知识卡片:最优化训练

继续之前的:

最优化是机器学习模型中非常非常重要的模块,它不仅主导了整个训练过程,同时还决定了最后模型性能的好坏和收敛需要的时长。以下两张信息图都展示了最优化方法需要关注的知识点,包括最优化的准备和具体的最优化方法。

最优化训练
最优化训练

以上展示了最优化常常出现的问题和所需要的操作。首先在执行最优化前,我们需要归一化输入数据,而且开发集与测试集归一化的常数(均值与方差)与训练集是相同的。上图也展示了归一化的原因,因为如果特征之间的量级相差太大,那么损失函数的表面就是一张狭长的椭圆形,而梯度下降或最速下降法会因为「锯齿」现象而很难收敛,因此归一化为圆形有助于减少下降方向的震荡。

后面的梯度消失与梯度爆炸问题也是十分常见的现象。「梯度消失」指的是随着网络深度增加,参数的梯度范数指数式减小的现象。梯度很小,意味着参数的变化很缓慢,从而使得学习过程停滞。梯度爆炸指神经网络训练过程中大的误差梯度不断累积,导致模型权重出现很大的更新,在极端情况下,权重的值变得非常大以至于出现 NaN 值。

梯度检验现在可能用的比较少,因为我们在 TensorFlow 或其它框架上执行最优化算法只需要调用优化器就行。梯度检验一般是使用数值的方法计算近似的导数并传播,因此它能检验我们基于解析式算出来的梯度是否正确。

深度学习知识卡片:正则化

继续之前的:

正则化是解决高方差或模型过拟合的主要手段,过去数年,研究者提出和开发了多种适合机器学习算法的正则化方法,如数据增强、L2 正则化(权重衰减)、L1 正则化、Dropout、Drop Connect、随机池化和提前终止等。

正则化
正则化

如上图左列所示,L1 和 L2 正则化也是是机器学习中使用最广泛的正则化方法。L1 正则化向目标函数添加正则化项,以减少参数的绝对值总和;而 L2 正则化中,添加正则化项的目的在于减少参数平方的总和。根据之前的研究,L1 正则化中的很多参数向量是稀疏向量,因为很多模型导致参数趋近于 0,因此它常用于特征选择设置中。此外,参数范数惩罚 L2 正则化能让深度学习算法「感知」到具有较高方差的输入 x,因此与输出目标的协方差较小(相对增加方差)的特征权重将会收缩。

在中间列中,上图展示了 Dropout 技术,即暂时丢弃一部分神经元及其连接的方法。随机丢弃神经元可以防止过拟合,同时指数级、高效地连接不同网络架构。一般使用了 Dropout 技术的神经网络会设定一个保留率 p,然后每一个神经元在一个批量的训练中以概率 1-p 随机选择是否去掉。在最后进行推断时所有神经元都需要保留,因而有更高的准确度。

Bagging 是通过结合多个模型降低泛化误差的技术,主要的做法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。而 Dropout 可以被认为是集成了大量深层神经网络的 Bagging 方法,因此它提供了一种廉价的 Bagging 集成近似方法,能够训练和评估值数据数量的神经网络。

最后,上图还描述了数据增强与提前终止等正则化方法。数据增强通过向训练数据添加转换或扰动来人工增加训练数据集。数据增强技术如水平或垂直翻转图像、裁剪、色彩变换、扩展和旋转通常应用在视觉表象和图像分类中。而提前终止通常用于防止训练中过度表达的模型泛化性能差。如果迭代次数太少,算法容易欠拟合(方差较小,偏差较大),而迭代次数太多,算法容易过拟合(方差较大,偏差较小)。因此,提前终止通过确定迭代次数解决这个问题。

深度学习知识卡片:偏差与方差

继续之前的:

那么部署你的机器学习模型需要注意些什么?下图展示了构建 ML 应用所需要的数据集分割、偏差与方差等问题。

偏差与方差
偏差与方差

如上所示,经典机器学习和深度学习模型所需要的样本数有非常大的差别,深度学习的样本数是经典 ML 的成千上万倍。因此训练集、开发集和测试集的分配也有很大的区别,当然我们假设这些不同的数据集都服从同分布。

偏差与方差问题同样是机器学习模型中常见的挑战,上图依次展示了由高偏差带来的欠拟合和由高方差带来的过拟合。一般而言,解决高偏差的问题是选择更复杂的网络或不同的神经网络架构,而解决高方差的问题可以添加正则化、减少模型冗余或使用更多的数据进行训练。

当然,机器学习模型需要注意的问题远不止这些,但在配置我们的 ML 应用中,它们是最基础和最重要的部分。其它如数据预处理、数据归一化、超参数的选择等都在后面的信息图中有所体现。

深度学习知识卡片:深度神经网络的特点

继续之前的:

深度神经网络的特点
深度神经网络的特点
  • 左上:神经网络的参数化容量随层数增加而指数式地增长,即某些深度神经网络能解决的问题,浅层神经网络需要相对的指数量级的计算才能解决。
  • 左下:CNN 的深度网络可以将底层的简单特征逐层组合成越来越复杂的特征,深度越大,其能分类的图像的复杂度和多样性就越大。RNN 的深度网络也是同样的道理,可以将语音分解为音素,再逐渐组合成字母、单词、句子,执行复杂的语音到文本任务。
  • 右边:深度网络的特点是需要大量的训练数据和计算资源,其中涉及大量的矩阵运算,可以在 GPU 上并行执行,还包含了大量的超参数,例如学习率、迭代次数、隐藏层数、激活函数选择、学习率调整方案、批尺寸大小、正则化方法等。

超越 ReLU 的激活函数:GeLU

NLP 领域里,GeLU 已经成为了众多业内最佳模型的选择。

作为决定神经网络是否传递信息的「开关」,激活函数对于神经网络而言至关重要。不过今天被人们普遍采用的 ReLU 真的是最高效的方法吗?最近在社交网络上,人们找到了一个看来更强大的激活函数:GeLU,这种方法早在 2016 年即被人提出,然而其论文迄今为止在 Google Scholar 上的被引用次数却只有 34 次。其实,GeLU 已经被很多目前最为领先的模型所采用。据不完全统计,BERT、RoBERTa、ALBERT 等目前业内顶尖的 NLP 模型都使用了这种激活函数。另外,在 OpenAI  声名远播的无监督预训练模型 GPT-2 中,研究人员在所有编码器模块中都使用了 GeLU 激活函数。

在神经网络的建模过程中,模型很重要的性质就是非线性,同时为了模型泛化能力,需要加入随机正则,例如 dropout(随机置一些输出为 0,其实也是一种变相的随机非线性激活),而随机正则与非线性激活是分开的两个事情, 而其实模型的输入是由非线性激活与随机正则两者共同决定的。

GeLU 正是在激活中引入了随机正则的思想,是一种对神经元输入的概率描述,直观上更符合自然的认识,同时实验效果要比 ReLU 与 ELU 都要好。

MNIST Classification Results
MNIST Classification Results

深度学习知识卡片:浅层网络的特点

继续之前的:

浅层网络的特点
浅层网络的特点

左上:浅层网络即隐藏层数较少,如图所示,这里仅有一个隐藏层。

左下:这里介绍了不同激活函数的特点:

  • sigmoid:sigmoid 函数常用于二分分类问题,或者多分类问题的最后一层,主要是由于其归一化特性。sigmoid 函数在两侧会出现梯度趋于零的情况,会导致训练缓慢。
  • tanh:相对于 sigmoid,tanh 函数的优点是梯度值更大,可以使训练速度变快。
  • ReLU:可以理解为阈值激活(spiking model 的特例,类似生物神经的工作方式),该函数很常用,基本是默认选择的激活函数,优点是不会导致训练缓慢的问题,并且由于激活值为零的节点不会参与反向传播,该函数还有稀疏化网络的效果。
  • Leaky ReLU:避免了零激活值的结果,使得反向传播过程始终执行,但在实践中很少用。

右上:为什么要使用激活函数呢?更准确地说是,为什么要使用非线性激活函数呢?上图中的实例可以看出,没有激活函数的神经网络经过两层的传播,最终得到的结果和单层的线性运算是一样的,也就是说,没有使用非线性激活函数的话,无论多少层的神经网络都等价于单层神经网络(不包含输入层)。

右下:如何初始化参数 w、b 的值?当将所有参数初始化为零的时候,会使所有的节点变得相同,在训练过程中只能学到相同的特征,而无法学到多层级、多样化的特征。解决办法是随机初始化所有参数,但仅需少量的方差就行,因此使用 Rand(0.01)进行初始化,其中 0.01 也是超参数之一。

深度学习知识卡片:Logistic 回归

继续之前的:

Logistic 回归
Logistic 回归
  • 左上:logistic 回归主要用于二分类问题,如图中所示,logistic 回归可以求解一张图像是不是猫的问题,其中图像是输入(x),猫(1)或非猫(0)是输出。我们可以将 logistic 回归看成将两组数据点分离的问题,如果仅有线性回归(激活函数为线性),则对于非线性边界的数据点(例如,一组数据点被另一组包围)是无法有效分离的,因此在这里需要用非线性激活函数替换线性激活函数。在这个案例中,我们使用的是 sigmoid 激活函数,它是值域为(0, 1)的平滑函数,可以使神经网络的输出得到连续、归一(概率值)的结果,例如当输出节点为(0.2, 0.8)时,判定该图像是非猫(0)。
  • 左下:神经网络的训练目标是确定最合适的权重 w 和偏置项 b,那这个过程是怎么样的呢? —— 这个分类其实就是一个优化问题,优化过程的目的是使预测值 y hat 和真实值 y 之间的差距最小,形式上可以通过寻找目标函数的最小值来实现。所以我们首先确定目标函数(损失函数、代价函数)的形式,然后用梯度下降逐步更新 w、b,当损失函数达到最小值或者足够小时,我们就能获得很好的预测结果。
  • 右上:损失函数值在参数曲面上变化的简图,使用梯度可以找到最快的下降路径,学习率的大小可以决定收敛的速度和最终结果。学习率较大时,初期收敛很快,不易停留在局部极小值,但后期难以收敛到稳定的值;学习率较小时,情况刚好相反。一般而言,我们希望训练初期学习率较大,后期学习率较小,之后会介绍变化学习率的训练方法。
  • 右下:总结整个训练过程,从输入节点 x 开始,通过前向传播得到预测输出 y hat,用 y hat 和 y 得到损失函数值,开始执行反向传播,更新 w 和 b,重复迭代该过程,直到收敛。

深度学习知识卡片:深度学习基本概念

此前,跨象乘云™ 发布《Python 知识卡片完整中文版》,覆盖:Bokeh,Jupyter Notebook,Keras,Matplotlib 绘图,Numpy 基础,Pandas 基础,Pandas 进阶,Python 基础,Scikit-Learn,SciPy,Seaborn,Spark RDD 基础,Spark SQL 基础,导入数据等核心技术领域。覆盖了 Python 在数据科学与大数据专业建设课程体系中的绝大部分领域,作为教育资源对学生学习 Python 数据分析,数据处理,科学运算,数据可视化,机器学习等具有极大的参考复习意义。

本期,跨象乘云™ 将继续连载《深度学习知识卡片完整中文注释版》系列知识卡片,原英文手绘版本,由
Tess Ferrandez 原创,基于吴恩达在 Coursera 的《Deep Learning Specialization》课程制作。《深度学习知识卡片完整中文注释版》覆盖深度学习技术的各大方向,同时照顾到深度学习的各个技术细节,并配套中文解析,作为教育资源,为人工智能专业学生提供完整的知识复习辅导。

深度学习基本概念
深度学习基本概念

监督学习:所有输入数据都有确定的对应输出数据,在各种网络架构中,输入数据和输出数据的节点层都位于网络的两端,训练过程就是不断地调整它们之间的网络连接权重。

  • 左上:列出了各种不同网络架构的监督学习,比如标准的神经网络(NN)可用于训练房子特征和房价之间的函数,卷积神经网络(CNN)可用于训练图像和类别之间的函数,循环神经网络(RNN)可用于训练语音和文本之间的函数。
  • 左下:分别展示了 NN、CNN 和 RNN 的简化架构。这三种架构的前向过程各不相同,NN 使用的是权重矩阵(连接)和节点值相乘并陆续传播至下一层节点的方式;CNN 使用矩形卷积核在图像输入上依次进行卷积操作、滑动,得到下一层输入的方式;RNN 记忆或遗忘先前时间步的信息以为当前计算过程提供长期记忆。
  • 右上:NN 可以处理结构化数据(表格、数据库等)和非结构化数据(图像、音频等)。
  • 右下:深度学习能发展起来主要是由于大数据的出现,神经网络的训练需要大量的数据;而大数据本身也反过来促进了更大型网络的出现。深度学习研究的一大突破是新型激活函数的出现,用 ReLU 函数替换 sigmoid 函数可以在反向传播中保持快速的梯度下降过程,sigmoid 函数在正无穷处和负无穷处会出现趋于零的导数,这正是梯度消失导致训练缓慢甚至失败的主要原因。要研究深度学习,需要学会「idea — 代码 — 实验 — idea」的良性循环。

《数据竞赛白皮书上/下篇》PDF 下载

近年来,数据竞赛已经成为大数据与人工智能领域的热门话题。据不完全统计,2014 年开始,全球赛事超 1000 场,仅中国的竞赛场次年均增长达 108.8%,累计超 120 万人次参加,奖金累计达到 2.8 亿人民币。拥有这样的增长趋势,数据竞赛已经呈现出了独特的技术价值、业务价值和创新价值,等待着产业、学界、政府机构去进一步发现和运用。

日前,数据科学协同平台厂商 —— 和鲸科技联合大数据系统软件国家工程实验室、AWS 发布了《数据竞赛白皮书》。跨象乘云™ 提供全文 PDF 原文下载 —— 整个白皮书分为:《数据竞赛白皮书 – 上篇 – 1000 场竞赛的深度分析》和《数据竞赛白皮书 – 下篇 – 办好一场竞赛的实操手册》两部分,可直接点击链接下载。