训练集、验证集、测试集
开发机器学习系统是一个高度迭代的过程
循环上面过程的效率决定了ML系统开发的效率,利用交叉验证的方法能有效得提高系统开发效率,交叉验证能很好的避免欠拟合和过拟合。
- 小数据时代:60% / 20% / 20%
- 大数据时代:98% / 1% / 1%(甚至训练集的比例更大)
偏差和方差
机器学习的基本方法
吴恩达老师提供的训练方法:
正则化
针对模型的过拟合,一般可以通过增加训练数据和正则化的方法来解决,但是并不是什么时候都能增加训练数据,这时正则化便能起到很好的作用。以逻辑回归为例,逻辑回归的代价函数如下:
J(w,b)=1m∑i=1mL(y^(i),y(i))+λ2m||w||22
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
L
(
y
^
(
i
)
,
y
(
i
)
)
+
λ
2
m
|
|
w
|
|
2
2
- L2正则化:
||w||22=∑j=1nxw2j=wTw
|
|
w
|
|
2
2
=
∑
j
=
1
n
x
w
j
2
=
w
T
w
- L1正则化:
||w||1=∑j=1nx|wj|
|
|
w
|
|
1
=
∑
j
=
1
n
x
|
w
j
|
为什么正则化有利于防止过拟合
我们可以从两方面获得启发式理解。其一,如下图所示,当发生过拟合时,举个极端的例子,把 λ λ 设置非常大,当我们优化代价函数时第二项成了我们主要优化的项,结果自然 W W 会被设置成很小,这就相当于中间的隐层“消失了”,相当于一个逻辑单元,最后变成了第一幅图中高偏差的情形,我们可以预见的是从右图过度到左图一定会经过第二幅图。
其二,我们知道当出现了过拟合时说明拟合的模型函数有很多高次方项,而当很小时,相当于把激活函数的输入限制在原点附近,即激活函数的“线性部分”
标准化输入(Normalizing inputs)
- 零均值化: μ=1m∑i=1mx(i),x:=x−μ μ = 1 m ∑ i = 1 m x ( i ) , x := x − μ
- 归一化方差:
σ2=1m∑i=1mx(i)2,x=x/σ2
σ
2
=
1
m
∑
i
=
1
m
x
(
i
)
2
,
x
=
x
/
σ
2
为什么要标准化输入 ,因为有的特征取值的跨度比较大,而有的却比较小。如下图所示(以二维特征为例),当特征取值的范围相差比较大时,若不标准化输入则需要一个很小的学习速率才不会导致震荡(某一维度的震荡),标准化输入则可以避免这个问题。