深度学习之二:神经网络的实践与优化
Posted zzulp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习之二:神经网络的实践与优化相关的知识,希望对你有一定的参考价值。
本文内容为Andrew ng深度学习课程的第二部分的笔记,本篇总结了如何神经网络的训练和学习过程的实践经验与优化方法。
1 深度学习的实践技巧
应用机器学习是一个需要不断迭代的过程,众多经验参数如层数,隐层单元数,学习率,激活函数,权重参数的初始化方法等等众多的参数需要不断尝试改进以最终的得到较高的准确率。在这个过程中,有着众多的实践技巧。
1.1 训练/开发/测试集
如果针对某一监督学习的任务,当前有一批标注数据集。数据的分类方法:
方法\\划分 | 数据集 | 训练集 | 开发集 | 测试集 |
---|---|---|---|---|
激进 | 中小数据集 | 70% | 0% | 30% |
均衡 | 中小数据集 | 60% | 20% | 20% |
现代 | 大数据集 | 98% | 1% | 1% |
在深度学习中,通常需要的数据集都很大,如百万级别的,这样只需要拿出较小比例数据用来做测试集即可。
最重要的一点是,务必保证开发集/测试集数据为来自相同的分布。保持我们训练和应用的目标一致性。
有了数据集的划分,我们可以在相同的训练集上训练不同的模型,并通过测试集进行对比以选择合适的模型。
1.2 偏差与方差
我们用训练集与开发集上的误差来说明偏差与方差的不同情况。
误差\\划分 | 例1 | 例2 | 例3 | 例4 |
---|---|---|---|---|
训练集误差 | 1% | 15% | 15% | 1% |
开发集误差 | 11% | 16% | 30% | 1.5% |
结论 | 高方差 | 高偏差 | 方差高/偏差高 | 方差低/偏差低 |
优良的分类器,其偏差与方差均偏低。
下面我们来看下机器学习过程如何解决偏差与方差问题。
A"训练结果" -->
|"高偏差"|B["上更大网络/训练更久"]
D-->A
B-->D["训练"]
A-->|"高方差"|C["增加数据/正则化"]
C-->D
1.4 正则化
正则化可以用来解决神经过拟合的问题。
1.4.1 逻辑回归的正则化
L2正则化: J(w,b)=1m∑L(yˆ,y)+λ2m||w||22 J ( w , b ) = 1 m ∑ L ( y ^ , y ) + λ 2 m | | w | | 2 2
L1正则化: J(w,b)=1m∑L(yˆ,y)+λ2m||w||1 J ( w , b ) = 1 m ∑ L ( y ^ , y ) + λ 2 m | | w | | 1
1.4.2 神经网络的正则化
对于神经网络,由于神经网络有多层,因此需要计算所有层的正则化的和,这样损失函数将有两部分构成,一部分为预测的误差,一部分为所有层权重参数的范数。
由于损失函数中增加了正则项,在各层的反向传播过程中需要加入考虑,因此在加入正则化后各层的反向传播计算公式如下:
dW[l]=1mdZ[l]A[l]+λmW[l]
d
W
[
l
]
=
1
m
d
Z
[
l
]
A
[
l
]
+
λ
m
W
[
l
]
W[l]=W[l]−αdW[l]
W
[
l
]
=
W
[
l
]
−
α
d
W
[
l
]
1.4.3 为什么正则化会有用
由于在误差中引入了新的项,当 λ λ 升高时, W W 会变小,这样会使得生成的变小。对于激活函数来说,自变量Z就会取在函数的中间近似于线性的部分,而无法利用非线性的部分。因此会使得参数的过拟合现象降低。
1.5 Dropout正则化
Droupout的作用是随机在神经网络中选择一些单元,使其在运算中不参与计算,这样神经网络的规模将变小,从而实现避免过拟合。同时为了避免不影响后续计算的数值,未被dropout的单元需要整体放大,以补充消除单元的数值。
keep-prob = 深度学习之线性回归+基础优化
深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络