train/dev/test sets
训练集、开发集和测试集
训练集(training set):训练算法。
开发集(development set、hold-out set):调整参数、选择特征,以及对学习算法作出其它决定。
测试集(test set):开发集中选出的最优的模型在测试集上进行评估。不会据此改变学习算法或参数。
bias/variance
偏差和方差
做偏差-方差权衡
高偏差(high bias):欠拟合 underfitting
高方差 high variance:过拟合 overfitting
train set error | 1% | 15% | 15% | 0.5% |
Dev set error | 11% | 16% | 30% | 1% |
high variance | high bias | high bias &high variance | low bias &low variance |
Basic Recipe for ML
机器学习的基本准则
高偏差high bias
solution:
表现 如果说模型有高偏差 即是模型甚至连训练集都不能良好拟合 你能尝试的一种办法是
- 挑选一个新的网络 比如带有更多隐藏层或更多隐藏单元的
- 或是延长训练时间 让梯度下降法运行更长时间
- 或换用一些更高级的优化算法
这个办法可能有效 也可能无效
高方差high variance
solution:
如果你有比较高的方差 解决高方差问题的最好方法
- 取得更多数据 (当然前提是你能获取得到 这个办法才有用 但有时你无法获得更多数据)
- 你还可以尝试正则化 可以减少过拟合
- 找到更合适的神经网络结构
依据你问题的不同 在高偏差和高方差时 你应当尝试的办法有可能很不一样 所以我通常用训练/开发集判断 问题是在高偏差 还是高方差 然后根据这个来选择一些应当尝试的办法 举例来说 如果你有高偏差问题 就算取得更多训练数据也无济于事
扩大网络几乎总是能够 减小偏差而不增大方差
只要你用恰当的方式正则化的话 而获得更多数据几乎总是能够 减小方差而不增大偏差
正则化
正则化它是用于减小方差的一个很有用的办法 在正则化中存在一点点偏差与方差间的权衡 它可能会使偏差增加一点点 虽然在你的网络足够巨大时 增加得通常不会很多
正则化,防止过拟合,降低模型复杂度。
- L1 & L2范数
首先介绍一下范数的定义,假设 是一个向量,它的 范数定义:
∥ x ∥ p = ( ∑ i ∣ x i ∣ p ) 1 p \|x\|_{p}=\left(\sum_{i}\left|x_{i}\right|^{p}\right)^{\frac{1}{p}} ∥x∥p=(i∑∣xi∣p)p1
在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。在加了正则化项之后的目标函数为:
J ˉ ( w , b ) = J ( w , b ) + λ 2 m Ω ( w ) \bar{J}(w, b)=J(w, b)+\frac{\lambda}{2 m} \Omega(w) Jˉ(w,b)=J(w,b)+2mλΩ(w)
式中,$\ {\lambda}/{2 m} $ 是一个常数, m 为样本个数, λ {\lambda} λ是一个超参数,用于控制正则化程度。
L
1
L^{1}
L1 正则化时,对应惩罚项为 L1 范数 :
Ω
(
w
)
=
∥
w
∥
1
=
∑
i
∣
w
i
∣
\Omega(w)=\|w\|_{1}=\sum_{i}\left|w_{i}\right|
Ω(w)=∥w∥1=i∑∣wi∣
L2 正则化时,对应惩罚想为L2范数
Ω
(
w
)
=
∥
w
∥
2
2
=
∑
i
w
i
2
\Omega(w)=\|w\|_{2}^{2}=\sum_{i} w_{i}^{2}
Ω(w)=∥w∥22=i∑wi2
从上式可以看出, L1正则化通过让原目标函数加上了所有特征系数绝对值的和来实现正则化,而 L2正则化通过让原目标函数加上了所有特征系数的平方和来实现正则化。
两者都是通过加上一个和项来限制参数大小,却有不同的效果:L1 正则化更适用于特征选择,而 L2正则化更适用于防止模型过拟合。