1 模型基础

1.1 张量

标量(scalar):一个标量就是一个单独的数,它不同于线性代数中研究的其他大部分对象(通常是多个数的数组)。
向量(vector):一个向量是一列数。这些数是有序排列的。通过次序中的索引,我们可以确定每个单独的数。
矩阵(matrix):矩阵是一个二维数组,其中的每一个元素被两个索引(而非一个)所确定。
张量(tensor):在某些情况下,我们会讨论坐标超过两维的数组。一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们称之为张量。我们使用字体 A 来表示张量“A”。张量 A 中坐标为 (i, j, k) 的元素记作 Ai,j,k

1.2 参数初始化策略

权重初始值太大或者太小,网络都将无法很好地进行学习。
初始化必要条件一:各层激活值不会出现饱和现象。
初始化必要条件二:各层激活值不为00

1.2.1 标准初始化

将参数设置为接近0的很小的随机数(有正有负),在实际中,随机参数服从高斯分布/正态分布(Gaussian distribution / normal distribution)和均匀分布(uniform distribution)都是有效的初始化方法。后续改进可以根据[-1,1]中的均匀分布来初始化权重,然后按1 /√n的比例缩放。

1.2.2 Xavier初始化

适用场景:假设激活函数关于0对称,在0附近为线性函数。适合softsign和tanh激活函数。
Xavier初始化将每层权重设置为在有界的随机均匀分布中选择的值(如下表达式所示)
image.png
其中ni是该层的传入网络连接数或该层的“fan-in”,ni+1是该层的传出网络连接数,也称为fan-out。
Xavier权重初始化将保持激活函数和反向传播梯度的方差,一直向上或向下传播到神经网络的每一层。在他们的实验中,他们观察到Xavier初始化使一个5层网络能够将每层的权重梯度维持在基本一致的方差上。相反,若不使用Xavier初始化,直接使用“标准”初始化会导致网络较低层(较高)的权值梯度与最上层(接近于零)的权值梯度之间的差异更大。

1.2.3 Kaiming初始化

适用场景:ReLU激活函数
专门用来处理这些非对称,非线性激活的深层神经网络。
步骤:
1. 使用适合给定图层的权重矩阵创建张量,并使用从标准正态分布中随机选择的数字填充它。
2. 将每个随机选择的数字乘以√2/√n,其中n是从前一层输出到指定层的连接数(也称为“fan-in”)。
3. 偏差张量初始化为零。

1.3 模型评估指标

  • precision

查准率(Precision)是指在所有系统判定的“真”的样本中,确实是真的的占比。

  • recall

查全率(Recall)是指在所有确实为真的样本中,被判为的“真”的占比。
深度模型的优化与正则化 - 图2
一般而言,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。

  • F1-score

F1-score 就是一个综合考虑precision和recall的指标,比BEP更为常用。
深度模型的优化与正则化 - 图3

  • PRC

全称就是Precision Recall Curve,它以查准率为Y轴,、查全率为X轴做的图。它是综合评价整体结果的评估指标。所以,哪总类型(正或者负)样本多,权重就大。也就是通常说的『对样本不均衡敏感』,『容易被多的样品带走』。
深度模型的优化与正则化 - 图4

  • ROC和AUC

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,ROC曲线以“真正例率”(TPR)为Y轴,以“假正例率”(FPR)为X轴,对角线对应于“随机猜测”模型,而(0,1)则对应“理想模型”。ROC形式如下图所示。
深度模型的优化与正则化 - 图5
TPR和FPR的定义如下:
深度模型的优化与正则化 - 图6
从形式上看TPR就是我们上面提到的查全率Recall,而FPR的含义就是:所有确实为“假”的样本中,被误判真的样本。
进行学习器比较时,与PR图相似,若一个学习器的ROC曲线被另一个学习器的曲线包住,那么我们可以断言后者性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性断言两者孰优孰劣。此时若要进行比较,那么可以比较ROC曲线下的面积,即AUC,面积大的曲线对应的分类器性能更好。
AUC(Area Under Curve)的值为ROC曲线下面的面积,若分类器的性能极好,则AUC为1。但现实生活中尤其是工业界不会有如此完美的模型,一般AUC均在0.5到1之间,AUC越高,模型的区分能力越好,上图AUC为0.81。若AUC=0.5,即与上图中红线重合,表示模型的区分能力与随机猜测没有差别。若AUC真的小于0.5,请检查一下是不是好坏标签标反了,或者是模型真的很差。 :::info ROC和PRC在模型性能评估上效果都差不多,但需要注意的是,在正负样本分布得极不均匀(highly skewed datasets)的情况下,PRC比ROC能更有效地反应分类器的好坏。在数据极度不平衡的情况下,譬如说1万封邮件中只有1封垃圾邮件,那么如果我挑出10封,50封,100…封垃圾邮件(假设我们每次挑出的N封邮件中都包含真正的那封垃圾邮件),Recall都是100%,但是FPR分别是9/9999, 49/9999, 99/9999(数据都比较好看:FPR越低越好),而Precision却只有1/10,1/50, 1/100 (数据很差:Precision越高越好)。所以在数据非常不均衡的情况下,看ROC的AUC可能是看不出太多好坏的,而PR curve就要敏感的多。 :::

  • IOU

目标检测任务中常用的评价指标:IOU(Intersection over Union),中文翻译为交并比。
下图表示了IOU的具体意义,即:预测框与标注框的交集与并集之比,数值越大表示该检测器的性能越好。
深度模型的优化与正则化 - 图7

1.4 归一化

归一化与标准化属于特征预处理的范畴。

1.4.1 归一化

常用的归一化方法是:极差变换法,也称为min-max方法,通过线性变换将数据映射到[0,1]之间,变换公式是:
深度模型的优化与正则化 - 图8
其中min是样本中最小值,max是样本中最大值,x为每一个特征的值.
优缺点:从归一化的公式中,可以看出最大值最小值在计算过程起到的作用很大,因此计算结果特别容易受到异常数据的影响,所以这种方法的稳定性很差,只适用于数据精确的场景,但是现实中数据难免有异常,所以归一化很少被用到,为了避免异常数据对结果的影响,可以使用另一种方法:标准化。

1.4.2 标准化

常用的标准化方法是:z-score,将数据转换到均值为0,标准差为1的范围内,公式如下:
深度模型的优化与正则化 - 图9
作用于每一列,其中mean为特征的平均值,σ为标准差
深度模型的优化与正则化 - 图10
优缺点:标准化的应用场景非常广泛,在具有一定数据量的前提下,少量异常点对于平均值的影响不大,从而对于标准差的影响不大,进而对结果的影响也不大。

1.4.3 归一化与标准化对比

  1. 归一化和标准化本质上都是线性变换,线性变换的性质决定了对数据转换之后不会“失效”,反而还能提高数据的表现,因为线性变化不改变原始数据的数值排序;
    2. 归一化的缩放是“拍扁”统一到区间(仅由极值决定),而标准化的缩放更加“弹性”和“动态”,与整体样本的分布有很大关系;
    3. 归一化的输出范围在0-1之间,标准化的输出范围是负无穷到正无穷;
    4. 当算法涉及到距离运算时,必须先使用归一化或标准化进行标准缩放,由于对于异常数据的反应不同,标准化的使用更广泛。

    1.5 激活函数

    概念:神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
    作用:不使用激活函数的话,神经网络的每层都只是做线性变换,多层输入叠加后也还是线性变换。因为线性模型的表达能力通常不够,所以这时候就体现了激活函数的作用了,激活函数可以引入非线性因素。
    概述:
    sigmoid和tanh是“饱和激活函数”,而ReLU及其变体则是“非饱和激活函数”。使用“非饱和激活函数”的优势在于两点:(1)”非饱和激活函数”能解决所谓的“梯度消失”问题。(2)它能加快收敛速度。
    Sigmoid函数需要一个实值输入压缩至[0,1]的范围————-σ(x) = 1 / (1 + exp(−x))
    tanh函数需要讲一个实值输入压缩至 [-1, 1]的范围————-tanh(x) = 2σ(2x) − 1
    由于使用sigmoid激活函数会造成神经网络的梯度消失和梯度爆炸问题,所以许多人提出了一些改进的激活函数,如:tanh、ReLU、Leaky ReLU、PReLU、RReLU、ELU、Maxout。

    1.5.1 Sigmoid

    Sigmoid是常用的非线性的激活函数,它的数学形式如公式4:
    深度模型的优化与正则化 - 图11
    其函数图像如图所示:
    深度模型的优化与正则化 - 图12
    缺点:
    (1)sigmoid函数饱和使梯度消失(Sigmoidsaturate and kill gradients)。
    (2)sigmoid函数输出不是“零为中心”(zero-centered)。
    (3)指数函数的计算是比较消耗计算资源的。

    1.5.2 tanh

    tanh函数跟sigmoid还是很像的,实际上,tanh是sigmoid的变形,如公式5所示。tanh的具体公式如公式6所示,其图像如下图所示:
    深度模型的优化与正则化 - 图13深度模型的优化与正则化 - 图14
    tanh与sigmoid不同的是,tanh是“零为中心”的。因此,实际应用中,tanh会比sigmoid更好一些。但是在饱和神经元的情况下,tanh还是没有解决梯度消失问题。
    优点:
    (1)tanh解决了sigmoid的输出非“零为中心”的问题
    缺点:
    (1)依然有sigmoid函数过饱和的问题。
    (2)依然进行的是指数运算

    1.5.3 ReLU

    一种线性且不饱和的激活函数。它的数学表达式如7所示
    深度模型的优化与正则化 - 图15
    函数图像如下图所示:
    深度模型的优化与正则化 - 图16
    优点:
    (1)ReLU解决了梯度消失的问题,至少x在正区间内,神经元不会饱和;
    (2)由于ReLU线性、非饱和的形式,在SGD中能够快速收敛;
    (3)算速度要快很多。ReLU函数只有线性关系,不需要指数计算,不管在前向传播还是反向传播,计算速度都比sigmoid和tanh快
    缺点:
    (1)ReLU的输出不是“零为中心”(Notzero-centered output)。
    (2)随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。这种神经元的死亡是不可逆转的死亡。

    1.5.4 Leaky ReLU

    ReLU是将所有的负值设置为0,造成神经元节点死亡情况。相反,Leaky ReLU是给所有负值赋予一个非零的斜率。Leaky ReLU激活函数是在声学模型(2013)中首次提出来的。它的数学表达式如公式8所示:
    深度模型的优化与正则化 - 图17
    其图像如下图:
    深度模型的优化与正则化 - 图18
    优点:
    (1)神经元不会出现死亡的情况。
    (2)对于所有的输入,不管是大于等于0还是小于0,神经元不会饱和。
    (3)由于Leaky ReLU线性、非饱和的形式,在SGD中能够快速收敛。
    (4)计算速度要快很多。Leaky ReLU函数只有线性关系,不需要指数计算,不管在前向传播还是反向传播,计算速度都比sigmoid和tanh快。
    缺点:
    (1)Leaky ReLU函数中的α,需要通过先验知识人工赋值。

    1.5.5 RReLU

    RReLU的英文全称是“Randomized Leaky ReLU”,中文名字叫“随机修正线性单元”。RReLU是Leaky ReLU的随机版本。它首次是在Kaggle的NDSB比赛中被提出来的,其图像和表达式如下图所示:
    深度模型的优化与正则化 - 图19
    深度模型的优化与正则化 - 图20
    特点:
    (1)RReLU是Leaky ReLU的random版本,在训练过程中,α是从一个高斯分布中随机出来的,然后再测试过程中进行修正。
    (2)数学形式与PReLU类似,但RReLU是一种非确定性激活函数,其参数是随机的。

    1.5.6 ELU

    ELU的英文全称是“Exponential Linear Units”,中文全称是“指数线性单元”。它试图将激活函数的输出均值为零,从而加快学习速度。同时,它还能通过正值的标识来避免梯度消失的问题。根据一些研究显示,ELU分类精确度是高于ReLU的。公式如12式所示。
    深度模型的优化与正则化 - 图21
    ELU与其他几种激活函数的比较图:
    深度模型的优化与正则化 - 图22
    优点:
    (1)ELU包含了ReLU的所有优点。
    (2)神经元不会出现死亡的情况。
    (3)ELU激活函数的输出均值是接于零的。
    *缺点:

    (1)计算的时候是需要计算指数的,计算效率低的问题。

    1.5.7 Maxout

    Maxout “Neuron” 是由Goodfellow等人在2013年提出的一种很有特点的神经元,它的激活函数、计算的变量、计算方式和普通的神经元完全不同,并有两组权重。先得到两个超面,再进行最大值计算。激活函数是对ReLU和Leaky ReLU的一般化归纳,没有ReLU函数的缺点,不会出现激活函数饱和神经元死亡的情况。Maxout出现在ICML2013上,作者Goodfellow将maxout和dropout结合,称在MNIST,CIFAR-10,CIFAR-100,SVHN这4个数据集上都取得了start-of-art的识别率。Maxout公式如13所示。
    深度模型的优化与正则化 - 图23
    其中深度模型的优化与正则化 - 图24,假设w是2维的,那么我们可以得出公式14。
    深度模型的优化与正则化 - 图25
    分析公式14可以注意到,ReLU和Leaky ReLU都是它的一个变形。比如的时候,就是ReLU。Maxout的拟合能力非常强,它可以拟合任意的凸函数。Goodfellow在论文中从数学的角度上也证明了这个结论,只需要2个Maxout节点就可以拟合任意的凸函数,前提是“隐含层”节点的个数足够多。
    优点:
    (1)Maxout具有ReLU的所有优点,线性、不饱和性。
    (2)同时没有ReLU的一些缺点。如:神经元的死亡。
    *缺点:

    (1)从这个激活函数的公式14中可以看出,每个neuron将有两组w,那么参数就增加了一倍。这就导致了整体参数的数量激增。

    1.5.8 如何选择合适的激活函数

    (1)通常来说,不能把各种激活函数串起来在一个网络中使用。
    (2)如果使用ReLU,那么一定要小心设置学习率(learning rate),并且要注意不要让网络中出现很多死亡神经元。如果死亡神经元过多的问题不好解决,可以试试Leaky ReLU、PReLU、或者Maxout。
    (3)尽量不要使用sigmoid激活函数,可以试试tanh,不过我还是感觉tanh的效果会比不上ReLU和Maxout。

    1.6 损失函数

    损失函数(loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子:
    深度模型的优化与正则化 - 图26

    1.6.1 LogLoss对数损失函数(逻辑回归,交叉熵损失)

    在逻辑回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数为:最小化负的似然函数(即max F(y, f(x)) —> min -F(y, f(x)))。从损失函数的视角来看,它就成了log损失函数了。
    log损失函数的标准形式
    深度模型的优化与正则化 - 图27 :::info 注意:softmax使用的即为交叉熵损失函数,binary_cossentropy为二分类交叉熵损失,categorical_crossentropy为多分类交叉熵损失,当使用多分类交叉熵损失函数时,标签应该为多分类模式,即使用one-hot编码的向量。 :::

    1.6.2 平方损失函数(最小二乘法, Ordinary Least Squares )

    最小二乘法是线性回归的一种,最小二乘法(OLS)将问题转化成了一个凸优化问题。在线性回归中,它假设样本和噪声都服从高斯分布,最后通过极大似然估计(MLE)可以推导出最小二乘式子。最小二乘的基本原则是:最优拟合直线应该是使各点到回归直线的距离和最小的直线,即平方和最小。换言之,OLS是基于距离的,而这个距离就是我们用的最多的欧几里得距离。为什么它会选择使用欧式距离作为误差度量呢(即Mean squared error, MSE),主要有以下几个原因:
  • 简单,计算方便;
  • 欧氏距离是一种很好的相似性度量标准;
  • 在不同的表示域变换后特征性质不变。

平方损失(Square loss)的标准形式如下:
深度模型的优化与正则化 - 图28
当样本个数为n时,此时的损失函数变为:
深度模型的优化与正则化 - 图29
Y-f(X)表示的是残差,整个式子表示的是残差的平方和,而我们的目的就是最小化这个目标函数值(注:该式子未加入正则项),也就是最小化残差的平方和(residual sum of squares,RSS)
而在实际应用中,通常会使用均方差(MSE)作为一项衡量指标,公式如下:
深度模型的优化与正则化 - 图30

1.6.3 指数损失函数(Adaboost)

它是前向分步加法算法的特例,是一个加和模型,损失函数就是指数函数。在Adaboost中,经过m此迭代之后,可以得到fm(x):
深度模型的优化与正则化 - 图31
Adaboost每次迭代时的目的是为了找到最小化下列式子时的参数α 和G:
深度模型的优化与正则化 - 图32
而指数损失函数(exp-loss)的标准形式如下
深度模型的优化与正则化 - 图33
可以看出,Adaboost的目标式子就是指数损失,在给定n个样本的情况下,Adaboost的损失函数为:
深度模型的优化与正则化 - 图34

1.6.4 Hinge损失函数(SVM)

在机器学习算法中,hinge损失函数和SVM是息息相关的。在线性支持向量机中,最优化问题可以等价于下列式子:
深度模型的优化与正则化 - 图35
下面来对式子做个变形,令:
深度模型的优化与正则化 - 图36
于是,原式就变成了:
深度模型的优化与正则化 - 图37
如若取λ=1/(2C),式子就可以表示成:
深度模型的优化与正则化 - 图38
可以看出,该式子与下式非常相似:
深度模型的优化与正则化 - 图39
前半部分中的 l 就是hinge损失函数,而后面相当于L2正则项。
Hinge 损失函数的标准形式
深度模型的优化与正则化 - 图40
可以看出,当|y|>=1时,L(y)=0。

1.6.5 其它损失函数

除了以上这几种损失函数,常用的还有:
0-1损失函数
深度模型的优化与正则化 - 图41
绝对值损失函数
深度模型的优化与正则化 - 图42
几种损失函数的可视化图像如下。
深度模型的优化与正则化 - 图43

1.7 反向传播算法

1.7.1 概念

反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:
(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;
(2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;
(3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。

1.7.2 推导

  1. 变量定义
    深度模型的优化与正则化 - 图44
    上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。如图,先定义一些变量:
    wljk表示第(l-1)层的第k个神经元连接到第l层的第j个神经元的权重;
    blj表示第l层的第j个神经元的偏置;
    zlj表示第l层的第j个神经元的输入,即:
    深度模型的优化与正则化 - 图45
    alj表示第l层的第j个神经元的输出,即:
    深度模型的优化与正则化 - 图46
    其中的δ表示激活函数。
    2.代价函数
    代价函数被用来计算ANN输出值与实际值之间的误差。常用的代价函数是二次代价函数(Quadratic cost function):
    深度模型的优化与正则化 - 图47
    其中,x表示输入的样本,y表示实际的分类,aL表示预测的输出,L表示神经网络的最大层数。
    3. 公式及其推导
    首先,将第l层第j个神经元中产生的错误(即实际值与预测值之间的误差)定义为:
    深度模型的优化与正则化 - 图48
    本文将以一个输入样本为例进行说明,此时代价函数表示为:
    深度模型的优化与正则化 - 图49
    公式1(计算最后一层神经网络产生的错误):
    深度模型的优化与正则化 - 图50
    其中,的⊙表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。 公式1的推导过程如下:
    深度模型的优化与正则化 - 图51
    公式2(由后往前,计算每一层神经网络产生的错误):
    深度模型的优化与正则化 - 图52
    推导过程:
    深度模型的优化与正则化 - 图53
    公式3(计算权重的梯度):
    深度模型的优化与正则化 - 图54
    推导过程:
    深度模型的优化与正则化 - 图55
    公式4(计算偏置的梯度):
    深度模型的优化与正则化 - 图56
    推导过程:
    深度模型的优化与正则化 - 图57

    1.8 过拟合、欠拟合

    一、什么是欠拟合?
    欠拟合是指模型不能在训练集上获得足够低的误差。换句换说,就是模型复杂度低,模型在训练集上就表现很差,没法学习到数据背后的规律。
    如何解决欠拟合?
    欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。但是如果真的还是存在的话,可以通过增加网络复杂度或者在模型中增加特征,这些都是很好解决欠拟合的方法。
    二、什么是过拟合?
    过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。模型对训练集”死记硬背”(记住了不适用于测试集的训练集性质或特点),没有理解数据背后的规律,泛化能力差
    为什么会出现过拟合现象?
    造成原因主要有以下几种:
    1、训练数据集样本单一,样本不足。如果训练样本只有负样本,然后那生成的模型去预测正样本,这肯定预测不准。所以训练样本要尽可能的全面,覆盖所有的数据类型。
    2、训练数据中噪声干扰过大。噪声指训练数据中的干扰数据。过多的干扰会导致记录了很多噪声特征,忽略了真实输入和输出之间的关系。
    3、模型过于复杂。模型太复杂,已经能够“死记硬背”记下了训练数据的信息,但是遇到没有见过的数据的时候不能够变通,泛化能力太差。我们希望模型对不同的模型都有稳定的输出。模型太复杂是过拟合的重要因素。
    如何防止过拟合?
    要想解决过拟合问题,就要显著减少测试误差而不过度增加训练误差,从而提高模型的泛化能力。我们可以使用正则化(Regularization)方法。

    2 模型正则化

    2.1 正则化概述

    定义:正则化是选择模型的一种方法。正则化的作用是选择经验风险与模型复杂度同时较小的模型。正则化策略有很多,从本质上看,正则化策略要做的事情其实是一样的,就是将先验信息以不同方式加入到网络中去,达到限制模型有效容量的效果,从而减小过拟合的风险
    常见的正则化策略为:
    1. 参数范数惩罚
    2. 噪声注入
    3. 多任务学习
    4. 提前终止
    5. 稀疏表示(稀疏化激活单元)
    6. Dropout

    2.2 范数

    2.3.1 L0范数惩罚

    机器学习中最常用的正则化措施是限制模型的能力,其中最著名的方法就是L1和L2范数惩罚。
    L0范数惩罚:仅仅控制参数的数目,而不是从高到低的顺序限制参数。我们将不为0的参数数量限制再c以内来达到限制模型的目的,如下式子所示:
    深度模型的优化与正则化 - 图58

    2.3.2 L1范数惩罚

    L1范数惩罚(参数稀疏性惩罚):不要求非零的参数个数控制再c以内,但要求参数绝对值数值的和控制再c以内,如下式所示:
    深度模型的优化与正则化 - 图59
    加入L1范数惩罚项的代价函数如下所示:
    深度模型的优化与正则化 - 图60
    相对于权重衰减,L1范数限制的更为严格,因此也就更加稀疏,稀疏性也就是我们最终优化所得的参数中有很多0,稀疏性一大好处就是有利于特征选择

    2.3.3 L2范数惩罚

    L2范数惩罚(权重衰减惩罚):将L1中的求绝对值和变为求平方和,如下图:
    深度模型的优化与正则化 - 图61
    我们可以通过控制c值的大小来限制模型的学习能力,c越大,模型能力就越强(过拟合),c越小,模型能力就越弱(欠拟合)。该条件极值可以通过拉格朗日乘子法来进行求解。

    2.3 dropout

    dropout:在前向传播过程中,对网络中的每个隐层,每个隐单元都以一定的概率 深度模型的优化与正则化 - 图62 被删除,最后得到一个规模更小的网络。在反向传播过程中,仅仅针对该小网络进行权重更新。
    Dropout可以比较有效的缓解过拟合的发生,在一定程度上达到正则化的效果。
    深度模型的优化与正则化 - 图63

    3 模型优化

    3.1 优化目的

    深度模型=模型结构+优化器+损失函数+超参。
    损失函数E(x)是基于模型内部参数来计算测试集中目标值Y的真实值和预测值的偏差程度的函数。而优化算法的功能,是通过改善训练方式,来最小化(或最大化)损失函数E(x)

    3.2 优化算法分类

    优化算法分为两大类,一阶优化算法和二阶优化算法。
    image.png :::info 梯度和导数之间的一个主要区别是函数的梯度形成了一个向量场。对单变量函数,使用导数来分析;而梯度是基于多变量函数而产生的。 :::

    3.3 梯度下降

    定义:梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。
    原理:目标函数 深度模型的优化与正则化 - 图65 关于参数 深度模型的优化与正则化 - 图66 的梯度将是损失函数(loss function)上升最快的方向。而我们要最小化loss,只需要将参数沿着梯度相反的方向前进一个步长,就可以实现目标函数(loss function)的下降。这个步长 深度模型的优化与正则化 - 图67 又称为学习速率。参数更新公式如下:
    深度模型的优化与正则化 - 图68
    根据计算目标函数采用数据量的不同,梯度下降算法又可以分为批量梯度下降算法(Batch Gradient Descent),随机梯度下降算法(Stochastic Gradient Descent)和小批量梯度下降算法(Mini-batch Gradient Descent)。
    批量梯度下降算法:深度模型的优化与正则化 - 图69 是在整个训练集上计算的,如果数据集比较大,可能会面临内存不足问题,而且其收敛速度一般比较慢。
    随机梯度下降算法:深度模型的优化与正则化 - 图70 是针对训练集中的一个训练样本计算的,又称为在线学习,即得到了一个样本,就可以执行一次参数更新。所以其收敛速度会快一些,但是有可能出现目标函数值震荡现象,因为高频率的参数更新导致了高方差。
    小批量梯度下降算法:折中的考虑,选取训练集中一个小批量样本(一般是2的倍数,如32,64,128等)计算,这样可以保证训练过程更稳定,而且采用批量训练方法也可以利用矩阵计算的优势。这是目前最常用的梯度下降算法。

    3.4 梯度爆炸、梯度消失

    梯度不稳定:在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或会消失,或会爆炸。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。
    产生梯度不稳定的根本原因:前面层上的梯度是来自后面层上梯度的乘积。当存在过多的层时,就会出现梯度不稳定场景,比如梯度消失和梯度爆炸。
    划重点:梯度消失和梯度爆炸属于梯度不稳定的范畴
    梯度消失:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度消失。
    梯度爆炸:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度爆炸。
    产生原因
    梯度消失:
    (1)隐藏层的层数过多;
    (2)采用了不合适的激活函数(更容易产生梯度消失,但是也有可能产生梯度爆炸)
    梯度爆炸:
    (1)隐藏层的层数过多;
    (2)权重的初始化值过大
    解决方案
    梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑一下三种方案解决:
    (1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。
    (2)用Batch Normalization。
    (3)LSTM的结构设计也可以改善RNN中的梯度消失问题。

    3.5 自适应学习率算法

    损失通常高度敏感于参数空间中的某些方向,而不敏感于其他。 动量算法可以在一定程度缓解这些问题,但这样做的代价是引入了另一个超参数。在这种情况下,自然会问有没有其他方法。如果我们相信方向敏感度在某种程度是轴对齐的,那么每个参数设置不同的学习率,在整个学习过程中自动适应这些学习率是有道理的。

    3.5.1 AdaGrad

    AdaGrad是一个基于梯度的优化算法,它的主要功能是:它对不同的参数调整学习率,具体而言,对低频出现的参数进行大的更新,对高频出现的参数进行小的更新。因此,他很适合于处理稀疏数据。
    Adagrad 对不同的训练迭代次数t,AdaGrad 对每个参数都有一个不同的学习率。这里开方、除法和乘法的运算都是按元素运算的。这些按元素运算使得目标函数自变量中每个元素都分别拥有自己的学习率。
    image.png

    3.5.2 AdaDelta

    AdaDelta法是AdaGrad 法的一个延伸,它旨在解决它学习率不断单调下降的问题。相比计算之前所有梯度值的平方和,AdaDelta法仅计算在一个大小为w的时间区间内梯度值的累积和。
    但该方法并不会存储之前梯度的平方值,而是将梯度值累积值按如下的方式递归地定义:关于过去梯度值的衰减均值,当前时间的梯度均值是基于过去梯度均值和当前梯度值平方的加权平均,其中是类似上述动量项的权值。
    image.png

    3.5.3 均方根反向传播 RMSProp

    RMSprop法要解决AdaGrad的学习率缩减问题。
    RMSprop也将学习率除以了一个指数衰减的衰减均值。为了进一步优化损失函数在更新中存在摆动幅度过大的问题,并且进一步加快函数的收敛速度,RMSProp算法对权重W和偏置b的梯度使用了微分平方加权平均数,这种做法有利于消除了摆动幅度大的方向,用来修正摆动幅度,使得各个维度的摆动幅度都较小。另一方面也使得网络函数收敛更快。
    image.png

    3.5.4 Adam - Adaptive Moment Estimation

    计算每个参数的自适应学习率,相当于RMSProp + Momentum的效果,Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均。和AdaGrad算法、RMSProp算法以及AdaDelta算法一样,目标函数自变量中每个元素都分别拥有自己的学习率。
    image.png