算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数

算法实习准备之三

  • 机器学习算法复习(一)
    • 深度学习的优化
      • 深度学习优化的困难和挑战
        • 梯度爆炸
        • 梯度消失
      • 梯度下降的基本方法
        • 批梯度下降BGD
        • 随机梯度下降SGD
      • 动量法Momentum
      • 自适应学习率算法
        • Adagrad
        • Adam自适应矩估计
    • 正则化
      • 过拟合overfitting与欠拟合
        • 如何判断过拟合
      • 参数范数惩罚
        • L1正则化
        • L2正则化
        • L1和L2的区别
      • Dropout
    • 神经网络的激活函数
      • sigmoid
      • tanh
      • ReLU

机器学习算法复习(一)

算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数_第1张图片

深度学习的优化

关于深度学习的优化技术,目前基本上都是基于梯度的优化方法,即通过对参数求梯度,利用梯度信息优化神经网络的参数θ,使得代价函数J(θ)最小。
优化问题大部分要转化为“凸优化”问题,其特点是取极小值的目标函数为凸函数。目标函数、约束以及定义域的凸集性质,使得优化问题中的局部极小值就是全局极小值。优化问题的目标是找到代价函数的全局极小值。反向传播算法采用梯度下降法调整整体网络的权值,而往往神经网络的代价函数都是非凸的,因而不可避免地出现局部极小值问题,使得代价函数取不到全局极小值。

深度学习优化的困难和挑战

梯度爆炸

原因:采用了较大的初始权重,加上反向传播算法链式法则中的因子相乘,一旦前面网络的权重很大,层层相乘就会使得梯度变成很大的值,此时采用梯度下降进行更新,会大幅度地改变参数值,打破之前的参数优化效果。
缓解方法:
1.梯度截断法:对较大的梯度进行截断处理,限制梯度的值,得到较小的梯度更新量。
2.LSTM结构中将因子的连乘转化为相加的形式,可以缓解梯度爆炸。
3.预训练:给网络初始化比较合适的权值。

梯度消失

原因:神经网络的长期依赖问题,某些激活函数的导数小于1,比如sigmoid的导数最大是1/4,经过链式法则的因子相乘,会导致相隔较远的神经元的梯度信息难以长时间保留,梯度越来越小,造成梯度消失,以至于停止对网络的更新。
缓解方法:
1.采用更合理的激活函数,使得导数不恒小于1,如ReLU,该函数的正数部分导数等于1,负数部分函数值始终等于0.
2.残差结构:残差结构中包含将输入连接到输出的部分,从而将梯度无损地向网络的深层结构进行传递,在一定程度上保留了梯度的信息。

梯度下降的基本方法

基本思想:对函数(代价函数)当前位置的点求梯度,然后沿着梯度的相反方向进行一定步长的搜索,因为该方向是当前位置最快的下降方向,不断迭代最终达到函数极小值点。

批梯度下降BGD

算法每次迭代使用的数据是整个数据集。即利用整个数据集计算代价函数J(θ)的梯度值,然后取平均,结合学习速率r进行调整。
g = r * 取平均(sum(求梯度(代价函数在某一个数据样本处)))
θ = θ - θ的梯度

随机梯度下降SGD

每次从数据集中随机选择一个样本数据进行梯度的计算和参数的更新。
优点:加速梯度的计算,SGD可能在处理完整个数据集之前就基本收敛;可以在线学习,不需要事先准备好全部的数据。
小批量梯度下降MBGD
每次从数据集中随机选择mini-batch个训练样本,组成“小批量”的数据,然后对小批量的数据采用批梯度下降算法进行训练,从而在更新速度和更新次数之间取得一个平衡。

动量法Momentum

动量在物理学上表示为物体的质量和速度的乘积,代表这个物体在它原来运动方向上保持运动的趋势的大小。
动量法在梯度下降的基础上累计了之前梯度方向的衰减值,并结合累计的梯度方向和新计算的梯度方向共同决定下一步的移动方向。动量法更倾向于保持在相同方向上前进。
速度值v = 衰减率α * 之前的速度值 - 学习率r * g(新计算的梯度方向)
θ = θ + 当前速度值
衰减率α一般取值为0.5。
算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数_第2张图片

自适应学习率算法

在小批量梯度下降算法MBGD的基础上,对学习速率r进行自适应调节的算法。

Adagrad

对于神经网络训练中的所有参数,不应该采用同一个学习速率,而是每个参数单独根据自己的更新状态来调整自己的学习速率。将较大的学习速率分配给那些更新幅度还很小的参数,将较小的学习速率分配给那些更新幅度已经很大的参数。
累计历史梯度:s(t+1) = s(t) + g * g
θ的梯度 = - 全局学习率r / (根号(s(t+1) ) + 参数ε) * g
算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数_第3张图片

Adam自适应矩估计

在概率论中,如果一个随机变量X服从某个分布,则X的一阶矩是E(X),即均值,X的二阶矩是E(X^2),即X平方的均值。
Adam根据参数梯度的一阶矩估计和二阶矩估计动态地调整每个参数的消息速率。
算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数_第4张图片
即每到一个新的时间步,更新目标函数在该时间步上对参数θ所求的梯度、更新有偏的一阶矩估计和有偏的二阶矩估计,再计算偏差修正的一阶矩估计和偏差修正的二阶矩估计,然后再用以上计算出来的值调整参数θ的学习速率,更新模型的参数θ。

正则化

正则化被定义为损失函数中的惩罚项,通过引入更多信息以解决不适定问题或防止过拟合问题的发生,旨在减小学习算法的测试误差(泛化误差)而非调整训练误差。
正则化方法:Dropout、参数范数惩罚(L1正则化、L2正则化)
目标函数(objective function): 度量模型拟合的最终目标
损失函数(loss function):模型预测值与真实输出值之间的差异

过拟合overfitting与欠拟合

过拟合:算法对训练集的拟合程度过高以至于在测试集上泛化能力不足的问题,主要出现在训练误差和测试误差之间差距过大的情况。过拟合使得经过训练得到的模型对训练数据的微小波动反应过度,而对新的数据样本的预测性能变弱,即在降低模型泛化能力的同时,增加了数据的波动性。
欠拟合:模型无法捕获训练集数据的基本趋势。
当选取的特征过多时,会导致模型对训练集的特征描述过于详尽而失去应有的泛化能力。
过拟合原因
数据:数据不规范,数据量少,数据穿越,统计特征用到了未来的信息或者标签信息
算法:算法过于复杂
解决:
1、将数据规范化,处理缺失值,增加数据量,采样,添加噪声数据
2、正则化,控制模型复杂程度
3、early stoping,减少迭代次数,减少树的深度
4、学习率调大/小点
5、融合几个模型

如何判断过拟合

过拟合最直观的表现就是training accuracy特别高,但是testing accuracy特别低,即两者相差特别大,如果网络在训练集和测试集的正确率相差特别大(比如20%),则说明网络过拟合了。
或者每训练一小段时间就做一次测试,如果多次发生测试精度下降,说明网络过拟合了。
用训练集去训练,然后用验证集去验证此阶段神经网络的训练情况,如果验证集上的表现持续变差,说明网络过拟合了。

参数范数惩罚

通过在损失函数中加入一个正则化项,对模型复杂度进行控制。损失函数越小模型泛化性能就越好。
通过一个有关权重的参数范数惩罚项,使得网络规避较大的权重并优先选择较小的权重。

L1正则化

L1范数: 为x向量各个元素绝对值之和。L1范数可以使权值稀疏,方便特征提取。
L1正则先验服从拉普拉斯分布。
算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数_第5张图片
L1正则化减少的是一个常量,L2正则化减少的是权重的固定比例。
在ω=0时|ω|不可导,在0处不能使用L1正则化,只能应用原始的无正则化方法进行更新 :可以使用坐标轴下降法,在每步迭代中沿一个坐标轴的方向进行线性搜索(线性搜索是不需要求导数的),通过循环使用不同的坐标轴来达到目标函数的局部极小值。假设有m个特征数,坐标轴下降法求导时只对一个特征维度(坐标轴方向)进行求导,而固定其它m-1个维度,这样每次只优化一个分量。

L2正则化

L2范数: 为x向量各个元素平方和的1/2次方。L2范数可以防止过拟合,提升模型的泛化能力。
L2正则先验服从高斯分布。
偏置的更新与L2正则化项无关,不受正则化项无关;权重的更新与L2正则化项有关,引入L2正则化项将使权重减小,这也是权重衰减概念的由来。L2正则化更倾向于学习小的权重。
算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数_第6张图片

L1和L2的区别

1、L1是Lasso Regression,表示向量中每个元素绝对值的和:L1范数的解通常是稀疏性的,倾向于选择数目较少的一些非常大的值或者数目较多的insignificant的小值。
2、L2是岭回归,Ridge Regression,是欧氏距离也就是平方和的平方根。L2范数越小,可以使得w的每个元素都很小,接近于0,但L1范数不同的是他不会让它等于0而是接近于0。
3、L1正则化的w可取的值是转置的方形,L2对应的是圆形。这样损失函数l(w)的最小值更容易在L1对应的边角上取得,从而这些维度变成0了。从贝叶斯的角度来看,加入正则项相当于加入了一种先验。即当训练一个模型时,仅依靠当前的训练数据集是不够的,为了实现更好的泛化能力,往往需要加入先验项。L1范数相当于加入了一个Laplacean先验;L2范数相当于加入了一个Gaussian先验。
4、L2对大数的惩罚更大,但是L1相对来说比较均匀。

Dropout

Dropout的实现不依赖于对损失函数的修改,而是通过控制神经网络单元的工作状态直接修改神经网路结构本身。(减少神经元之间的依赖)
引入一个关于Dropout率p的控制变量δ,δ服从概率为1-p的伯努利分布,从而对神经网络的某一层随机地“删除”固定比例的神经元。在下一次迭代时,恢复“被删除”的部分,再次对该层随机地“删除”固定比例的神经单元。

神经网络的激活函数

非线性的激活函数可以将非线性的成分引入网络,使其表达能力大大加强。
要求:
1.激活函数需要是连续可微的,这样才能在更新参数的过程中得到激活函数的梯度值,完成反向传播。
2.激活函数最好是一个非线性函数,提升神经网络的表达能力。

sigmoid

取值范围[0,1],处处可导。
算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数_第7张图片
缺点:
1.sigmoid的输出不是0均值的。
2.sigmoid在取值趋近0和1时变化率会变得平坦,sigmoid的梯度趋近于 0。因此,神经网络中使用sigmoid进行反向传播时,输出接近0或1的神经元其梯度趋近于0,权重不会更新,叫做饱和神经元。此外,与此类神经元相连的神经元的权重也会更新得很慢,导致梯度消失。

tanh

取值范围[-1,1],处处可导。
在这里插入图片描述
dtanh(x) = 1 - tanh(x)^2
算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数_第8张图片
优点:tanh的输出是0均值的,使得求解梯度时的收敛速度加快。
缺点:梯度消失问题依然存在。

ReLU

取值范围[0,1]。
在这里插入图片描述
dReLU(x) = (x >= 0) 1 (x < 0) 0
算法实习准备之三:(优化方法)梯度下降/正则化(过拟合)/激活函数_第9张图片
优点:ReLU的导数在正数区间均为1,不会发生饱和,解决了梯度消失问题。
缺点:ReLU的输出不是0均值的。

你可能感兴趣的:(算法实习准备,算法,机器学习,神经网络,深度学习)