正则化
正则化目的是尽量去简化假设模型。因为这些参数都接近0的时候,越简单的模型与被证明越不容易出现过拟合的问题
通常使用L1和L2范数,因为L0范数 ∣ ∣ f ( x ) ∣ ∣ 0 ||f(x)||_0 ∣∣f(x)∣∣0的结果为1求偏导之后为0无法更新参数
Dropout技术
Dropout是一类通用并且计算简洁的正则化方法。简单的说,Dropout在训练过程中,随机的丢弃一部分输入,此时丢弃部分的参数不会更新。相当于Dropout是一个集成方法,将所有子网络结果进行合并,通过随机丢弃输入可以得到各种子网络。
训练和使用的方法:
- 第一种训练好的参数乘上对应输入单元包含的概率
- 第二种训练阶段模型参数乘上概率的倒数
将使用的神经元乘以对应的系数使变成神经元完整的参数
注意:在测试和使用阶段不适用dropout
缺点:是会明显增加训练时间,因为引入dropout之后相当于每次只是训练原先网络的一个子网络,为了达到相同的精度需要的训练次数会增多。dropout的缺点就在于训练时间是没有dropout网络的2-3倍
优点:
- 相比于范数约束,该策略更有效
- 计算复杂度低,实现简单而且可以用于其他非深度学习模型
- dropout训练过程中的随机过程不是充分也不是必要条件,可以构造不变的屏蔽参数,也能够得到足够好的解
- 会让神经网络在训练的时候不会使得某一个节点权重过大,压缩权重,达到类似于L2正则化的效果
归一化
归一化的目的是因为神经网络中的参数依赖于上一层的结果,上一层的参数发生变化,结果发生变化有影响这层参数的变化,因此增加归一化后保证每一层输出的结果不变可以更快的加速参数收敛
可以有效防止梯度消失和梯度爆炸。
几种归一化的计算方法基本一致:
- 计算出均值
- 计算出方差
- 归一化处理到均值为0,方差为1
- 线性变换
归一化分为:
- 数据预处理归一化
- Batch Normalization
- 权重归一化
- 实例归一化
- 组归一化
归一化操作:
变化后的均值为0,方差为1
损失函数
定义:机器学习模型关于单个样本的预测值与真实值的差称为损失。损失越小,模型越好,如果预测值与真实值相等,就是没有损失。用于计算损失的函数称为损失函数,模型每一次预测的好坏用损失函数度量
损失函数的类别:
大致分为两大类:回归和分类
对于回归问题,常用的损失函数有:平方损失、绝对值损失和Huber损失
对于分类问题,常用的损失函数有:0-1损失、hinge损失、和Cross Entropy Loss
回归损失函数:
平方损失函数
s
q
u
a
r
e
d
_
l
o
s
s
=
(
y
−
f
(
x
)
)
2
squared\_loss = (y - f(x))^2
squared_loss=(y−f(x))2
特性,当y与f(x)的差值大于1时,会增大其误差;当y与f(x)的差值小于1时,会减小其误差。也就是说,对误差较大(>1)的情况给予更大的惩罚,相反惩罚较小。
因此如果样本中有离群点,平方损失函数会给离群的点更高的权重,但是却是牺牲其他正常数据点的预测效果为代价,降低模型的整体性能
绝对值损失函数
a
b
s
o
l
u
t
e
_
l
o
s
s
=
∣
y
−
f
(
x
)
∣
absolute\_loss = |y - f(x)|
absolute_loss=∣y−f(x)∣
该损失函数呈V字形,在
y
−
f
(
x
)
=
0
y - f(x) = 0
y−f(x)=0处不可导,而且大部分情况的导数是相等的,这意味着即使对于小的损失值,其梯度也是大的。这不利于函数的收敛和模型的学习。
但是相比于平方损失函数的优点是对离群点不那么敏感,更有包容性,因为对误差大的还是小的其惩罚力度都是一样的。
分类损失函数
:
交叉熵损失函数
单位是bits
基于梯度的优化方法
梯度的本意是一个向量,表示某一函数在该点处的方向导数沿着方向取得最大值,即函数在该点处的方向导数沿着该方向去最大值,即函数在该点处沿着梯度的方向变化最快,变化率最大
缺陷:有可能陷入局部最优
深度学习的优化算法主要包括一些基本算法
和自适应学习率算法
。
- 基本算法包括:随机梯度下降、动量、Nesterov动量的方法
- 自适应学习率算法包括:AdaGrad算法、RMSProp以及Adam算法等
基本算法
-
随机梯度下降
- 批量梯度法(Batch Gradient Descent)[BGD]:选择所有样本计算
- 小批量梯度下降:选择小批次样本计算
- 随机梯度:随机选择一个样本计算
(2,3的结合)随机梯度(Stochastic Gradient Descent) [SGD]: 随机选择小批次样本计算,每轮对样本进行打乱,然后每次按一定数量的样本送进去训练,将所有样本训练完后算一轮,然后重新打乱
通常SGD能比BGD更快地收敛到最优点,因此更适合大数据的计算。随机梯度下降最大的缺点在于每次更新可能不会按照正确的方向进行,因此可能带来优化波动(振荡)
波动的好处是,可能会使一个局部极小值点跳到另一个更好的局部极小值点,对于非凸函数,最终收敛于一个较好的局部极值点,甚至全局极值点。
-
动量
动量方法旨在加速学习,特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。动量算法积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。动量算法引入了变量v充当速度角色–他代表参数在参数空间移动的方向和速率,速度被设为负梯度的指数衰减平均。
自适应学习算法:
-
AdaGrad算法
能够独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方值总和的平方根
-
RMSProp算法
使用指数衰减平均以丢弃过去的历史,使其能够在找到凸碗状结构后快速收敛,他就像一个初始化于该碗状结构的AdaGrad算法实例。
-
Adam算法
是一种学习率自适应的优化算法。在Adam中,动量直接并入了梯度一阶矩阵(指数加权)的估计。Adam包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩的估计