一、自适应线性神经元和学习积聚
这一节我们会了解单层神经网络的一种形式:自适应线性神经元(Adaline)。
这个算法的有趣之处在于它阐述了定义和最小化损失函数的关键概念,这位后面许多机器学习分类算法,如逻辑回归,支持向量机和回归模型等打下了基础。
自适应线性神经元和感知机的关键差别在于权重的更新是根据线性激活函数而不是感知机里的单位阶跃函数。在Adaline中,这个线性激活函数ϕ(z)\phi(z)ϕ(z)仅仅是净输入的确认/识别函数:
ϕ(wTx)=wTx
\phi(\bm{w}^{T}\bm{x}) = \bm{w}^T\bm{x}
ϕ(wTx)=wTx
同时它也用来训练权重,我们还是会用一个阀值函数来做出最后的预测,有点像我们早先说过的单位阶跃函数那样。
Adaline和感知机的主要区别,可以用下面这张图表示:
二、通过梯度下降最小化损失函数
监督机器学习算法的核心要素之一,就是目标函数,这也是整个机器学习过程中不断被优化的。这个目标函数也就是损失函数,我们经常要使它最小化。
比如在Adaline中,我们可以定义一个损失函数JJJ来衡量预测值和真实值之间的均方误差和(SSESSESSE):
J(w)=12∑i(y(i)−ϕ(z)(i))2 ϕ(zi)=∑iwjxjiJ(\bm{w}) = \frac{1}{2} \sum_i(y^{(i)}-\phi(z)^{(i)})^2\\
~\\
\phi(z^i) = \sum_i w_jx_j^i
J(w)=21i∑(y(i)−ϕ(z)(i))2 ϕ(zi)=i∑wjxji
这个12\frac{1}{2}21加上纯属简便,这样更容易推导出梯度。用这样一个连续的线性函数相比于单位阶跃函数,最大的好处是损失函数可微分。另一大好处是函数是凸的(这里留备注)。这样我们就可以用一个简单而强大的优化算法梯度下降来找到使损失函数最小化的权重。
我们可以用下山的比喻来解释梯度下降,就像下山要达到最低点才停止一样。每次迭代,我们都往坡度的反方向前进一步,具体的步长由计算出的学习率决定,也就是梯度的斜率:
运用梯度下降,我们可以通过往梯度函数J(w)J(\bm{w})J(w)变化值∇J(w)\nabla J(\bm{w})∇J(w)的反方向前进一步,来更新权重。
w:=w+Δw\bm{w} := \bm{w} + \Delta \bm{w}w:=w+Δw
这里的权重增加值Δw\Delta \bm{w}Δw是负梯度和学习率η\etaη的乘积:
Δw=−η∇J(w)
\Delta \bm{w} = -\eta \nabla J(\bm{w})
Δw=−η∇J(w)
所以上式也可以这么写:
w:=w−η∇J(w)
\bm{w} := \bm{w} - \eta \nabla J(\bm{w})
w:=w−η∇J(w)
为了计算损失函数的梯度,我们要对其求每个权重wjw_jwj的偏导:
∂J∂wj=−∑i(y(i)−ϕ(z)(i))xj(i)
\frac{\partial J}{\partial w_j} = -\sum_i (y^{(i)} - \phi(z)^{(i)})x_j^{(i)}
∂wj∂J=−i∑(y(i)−ϕ(z)(i))xj(i)
这样我们把权重增加值写为:
Δwj=−η∂J∂wj=η∑i(y(i)−ϕ(z)(i))xj(i)
\Delta w_j = -\eta \frac{\partial J}{\partial w_j} = \eta \sum_i (y^{(i)} - \phi(z)^{(i)})x_j^{(i)}
Δwj=−η∂wj∂J=ηi∑(y(i)−ϕ(z)(i))xj(i)
这样,我们就同时更新了所有的权重,Adaline的学习规则就变成了:
w:=w+Δw
\bm{w} := \bm{w} + \Delta \bm{w}
w:=w+Δw
下面是偏导的求导过程:
∂J∂wj=∂∂wj12∑i(yi−ϕ(zi))2=12∂∂wj∑i(yi−ϕ(zi))2=12∑i2(yi−ϕ(zi))∂∂wj(yi−ϕ(zi))=∑i(yi−ϕ(zi))∂∂wj⟮yi−∑i(wjxji)⟯=∑i(yi−ϕ(zi)(−xji)=−∑i(yi−ϕ(zi))xji \frac{\partial J}{\partial w_j} = \frac{\partial}{\partial w_j} \frac{1}{2} \sum_i (y^i - \phi(z^i))^2 \\ = \frac{1}{2} \frac{\partial}{\partial w_j} \sum_i (y^i - \phi(z^i))^2 \\ = \frac{1}{2} \sum_i 2(y_i - \phi(z^i)) \frac{\partial}{\partial w_j}(y^i - \phi(z^i)) \\ = \sum_i(y^i - \phi(z^i)) \frac{\partial}{\partial w_j}\bm{\lgroup} y^i - \sum_i(w_jx_j^i) \bm{\rgroup}\\ = \sum_i (y^i - \phi(z^i)(-x_j^i)\\ = -\sum_i(y^i - \phi(z^i))x_j^i ∂wj∂J=∂wj∂21i∑(yi−ϕ(zi))2=21∂wj∂i∑(yi−ϕ(zi))2=21i∑2(yi−ϕ(zi))∂wj∂(yi−ϕ(zi))=i∑(yi−ϕ(zi))∂wj∂⟮yi−i∑(wjxji)⟯=i∑(yi−ϕ(zi)(−xji)=−i∑(yi−ϕ(zi))xji
尽管Adaline看起来很像感知机,但是要注意这里ϕ(zi)\phi(z^i)ϕ(zi)的zi=wTxiz^i=\bm{w}^T \bm{x}^izi=wTxi是实数,而不是分类标签值。而且,权重的更新是基于整个训练集的所有样本,而不是每个样本的递增,这也是这个方法被称为分批梯度下降的原因。