把监督式学习中关于房屋价格的例子稍作更改,除了原有数据,再加入卧室数量这一数据项。
居住面积( f e e t 2 \mathrm{feet}^2 feet2) | 卧室数量 | 价格(1000$s) |
---|---|---|
2104 | 3 | 400 |
1600 | 3 | 330 |
2400 | 3 | 540 |
1416 | 2 | 232 |
3000 | 4 | 540 |
… | … | … |
现在输入变成了一个二维向量,其中 x 1 ( i ) x_1^{(i)} x1(i)表示训练集中第i个房屋的居住面积, x 2 ( i ) x_2^{(i)} x2(i)表示第i个房屋的卧室数量。为了完成监督式学习,我们首先考虑如何将假设 h h h在计算机中实现。为此我们先假设 y y y是 x x x的一个线性函数:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 hθ(x)=θ0+θ1x1+θ2x2
上式中 θ \theta θ是将 X \mathcal{X} X映射到 Y \mathcal{Y} Y的线性函数的组成参数(也叫权重)。后文中会将 h θ ( x ) h_\theta(x) hθ(x)简写为 h ( x ) h_(x) h(x),我们还可以令 x 0 = 1 x_0 = 1 x0=1(截距项的系数),则上式可简写为:
h ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 = ∑ i = 0 n θ i x i = θ T x \begin{aligned} h(x) &= \theta_0 + \theta_1 x_1 + \theta_2 x_2\\ &= \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2\\ &=\sum_{i=0}^n \theta_i x_i = \theta^T x\\ \end{aligned} h(x)=θ0+θ1x1+θ2x2=θ0x0+θ1x1+θ2x2=i=0∑nθixi=θTx
构成 h ( x ) h(x) h(x)的 θ \theta θ和 x x x都是列向量, n n n是输入属性的个数(本例中是2)。要让预测值 h ( x ) h(x) h(x)接近目标变量期望 y y y,我们该如何选择参数 θ \theta θ呢?我们引入成本函数的概念,让他表示 h ( x ) h(x) h(x)和 y y y的近似度:
J ( θ ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 . J(\theta) = \frac{1}{2} (h_\theta(x^{(i)}) - y^{(i)})^2. J(θ)=21(hθ(x(i))−y(i))2.
由上面的最小方差成本函数衍生出最小方差回归模型。
1 LMS算法
要找到合适的参数 θ \theta θ使得成本函数 J ( θ ) J(\theta) J(θ)的值最小化。我们使用搜索算法从某一随机值出发,不断地迭代更新最后收敛到成本函数最小的最优解。我们使用梯度下降算法,从初始 θ \theta θ出发,不断重复以下操作:
θ j : = θ j − α ∂ ∂ θ j J ( θ ) . \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta). θj:=θj−α∂θj∂J(θ).
其中 α \alpha α表示学习率,整个式子每次更新,就像是在 J ( θ ) J(\theta) J(θ)下降最快的方向迈一小步,因此被称为梯度下降法。
将成本函数关于某一权重 θ j \theta_j θj的偏导数展开:
∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 ( h θ ( x ) − y ) 2 = 2 ⋅ 1 2 ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( h θ ( x ) − y ) = ( h θ ( x ) − y ) ⋅ ∂ ∂ θ j ( ∑ i = 0 n θ i x i − y ) = ( h θ ( x ) − y ) x j \begin{aligned} \frac{\partial}{\partial \theta_j} J(\theta) &= \frac{\partial}{\partial \theta_j} \frac{1}{2} (h_\theta(x) - y)^2\\ &= 2 \cdot \frac{1}{2} (h_\theta (x) - y) \cdot \frac{\partial}{\partial \theta_j} (h_\theta(x) - y)\\ &= (h_\theta (x) - y) \cdot \frac{\partial}{\partial \theta_j} (\sum_{i=0}^n \theta_i x_i - y)\\ &= (h_\theta (x) - y) x_j \end{aligned} ∂θj∂J(θ)=∂θj∂21(hθ(x)−y)2=2⋅21(hθ(x)−y)⋅∂θj∂(hθ(x)−y)=(hθ(x)−y)⋅∂θj∂(i=0∑nθixi−y)=(hθ(x)−y)xj
对于单个训练样本则有:
θ j : = θ j + α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) . \theta_j := \theta_j + \alpha (y^{(i)} - h_\theta (x^{(i)})) x_j^{(i)}. θj:=θj+α(y(i)−hθ(x(i)))xj(i).
该方法被称为最小均方差更新法(Least Mean Squares),也叫Widrow-Hoff学习法。这种方法直观而自然,我们可以看到当预测值与实际值接近时,权重变化就会很小;反之,权重就会变化很大,从逻辑而言这个公式也合情合理。
上面的公式只对单个训练样本,我们有两种方法可将其推广到整个训练集的回归,其一执行以下操作:
R e p e a t u n t i l c o n v e r g e n c e { θ j : = θ j + α 1 m ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) ( f o r e v e r y j ) } \begin{aligned} & \mathrm{Repeat\ until\ convergence}\ \{\\ & \qquad \qquad \theta_j := \theta_j + \alpha \frac{1}{m} \sum_{i=1}^m(y^{(i)} - h_\theta (x^{(i)})) x_j^{(i)} \qquad (for \ every \ j)\\ &\} \end{aligned} Repeat until convergence {θj:=θj+αm1i=1∑m(y(i)−hθ(x(i)))xj(i)(for every j)}
它每次更新要遍历整个训练集,因此称为批量梯度下降法(Batch Gradient Descent, BSD)。注意到,该方法确实有可能落入局部最优解的陷阱,但我们暂时只考虑仅含一个全局最优解的优化问题,这时该方法每次都能收敛到全局最优。
成本函数是一个凸二次函数,下面我们给一个梯度下降优化二次函数的图示:
上图的椭圆代表二次函数的等高线,折现的轨迹是梯度下降的路径,而其上的每个点则表示 θ \theta θ梯度下降时的值,可以看到它从(48, 30)出发最后到达最优解(25, 25)。
如果我们使用梯度下降法求解之前仅有房屋面积的例子,可得
θ
0
=
71.27
,
θ
1
=
0.1345
\theta_0 = 71.27, \theta_1 = 0.1345
θ0=71.27,θ1=0.1345,可绘制出下图:
将卧室数量也加入特征中,则求得: θ 0 = 89.60 , θ 1 = 0.1392 , θ 2 = − 8.738 \theta_0 = 89.60, \theta_1 = 0.1392, \theta_2 = -8.738 θ0=89.60,θ1=0.1392,θ2=−8.738。
除了批量梯度下降,还有一种方法同样表现出色,它的运行步骤是这样的:
L o o p { f o r i = 1 t o m , { θ j : = θ j − α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) ( f o r e v e r y j ) } } \begin{aligned} & \mathrm{Loop}\ \{\\ & \qquad \mathrm{for}\ i=1\ \mathrm{to\ m},\ \{\\ & \qquad \qquad \theta_j := \theta_j - \alpha (y^{(i)} - h_\theta (x^{(i)})) x_j^{(i)} \qquad (for \ every \ j)\\ &\qquad \}\\ &\} \end{aligned} Loop {for i=1 to m, {θj:=θj−α(y(i)−hθ(x(i)))xj(i)(for every j)}}
这种方法每遇到一个样本就更新一次权重,它被称为随机梯度下降法(Stochastic Gradient Descent, SGD)。由于批量梯度下降每走一步都要遍历整个训练集,当样本个数很大时,训练的时间成本就很高。随机梯度下降每遇一个样本就更新一次权重,普遍来说收敛速度会快于批量梯度法(虽然有时会无法收敛到最优解,而是在最优解附近振荡,即使如此得到的近似依然很好)。当训练集很大时,随机梯度下降往往比批梯度下降更受欢迎。
注意:
梯度下降算法(如下),
α
\alpha
α前面的减号如果改成加号,就是梯度上升算法。梯度上升用于求最大值,梯度下降用于求最小值,最小均方差是要令方差最小所以用梯度下降法。
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
.
\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta).
θj:=θj−α∂θj∂J(θ).