介绍机器学习所有算法前,首先介绍两个最基本的算法,即 Perceptron 感知机 和adaptive linear neurons 自适应线性神经元。了解这两个基本算法有助于帮助理解后续的高级算法。
机器学习发源于对神经元的模仿,即神经元的反射过程:信号输入–>信号处理–>信号输出。
而一个巨大的飞跃,就是Frank Rosenblatt在1957年提出的在上述过程中加入自动学习过程,即 [ 信号输入–>信号处理–>信号输入权重更新 ] —> 信号输出。
自动权重更新过程的概念提出及实现是里程碑式的跨越,也让机器学习算法拥有了强大的适应数据的能力,因此才能逐渐发光发热。
下面可以从两个基础的机器学习模型来见证 权重更新 的过程,即Perceptron感知机 和 adaptive linear neurons 自适应线性神经元。
Perceptron 感知机
假设你有一个二维数据,包含100个样本量,表示为x1,x2,x3。。。x100,假设每个样本包含10个特征值,表示为x1,x2,x3。。。x10
1、首先给每一个特征值加一个权重w,即w1,w2,w3。。。w10,每一个w和每一个x的特征值一一对应,另外还有一个w0作为常数项(类比于一元线性回归方程)
2、Perceptron感知机的计算函数是unit step function(单位跃阶函数)。所谓unit step function,其实理解起来很简单,就是如果f(x)<0,输出-1,如果f(x)>0,输出1,即
f
(
x
)
=
{
1
,
i
f
f
(
x
)
>
=
0
−
1
,
o
t
h
e
r
w
i
s
e
f(x) = \begin{cases} 1,\,if \ f(x)>= 0 \\ -1, \, otherwise \\ \end{cases}
f(x)={1,if f(x)>=0−1,otherwise
-1和1分别代表我们数据的标签label,,例如在预测患者是否吸烟中,1为吸烟,-1为不吸烟。
3、Perceptron感知机的权重更新是
Δ
w
=
η
(
y
i
−
y
i
^
)
x
i
\Delta w=\eta(y^i-\widehat{y^i})x^i
Δw=η(yi−yi
)xi
其中eta(
η
\eta
η)就是我们在机器学习中经常看到的专有名词:学习率。简单解释一下,首先初始权重w为非零值,然后在初始情况下,根据特征值xi乘以wi来计算
y
i
^
\widehat{y^i}
yi
,如果模型预测正确,即
y
i
^
=
y
=
1
\widehat{y^i}=y=1
yi
=y=1,则
Δ
w
=
0
\Delta w=0
Δw=0,不需要更新权重;假如我们预测错误,例如
y
i
^
=
1
,
y
=
−
1
\widehat{y^i}=1, y=-1
yi
=1,y=−1,则需要更新权重,而学习率
η
\eta
η是为了控制我们每次更新权重的大小,比如你可以选择一点一点的增加权重,也可以很多很多的更新权重。
4、不断循环更新权重这个过程,直至所有的预测都正确,然后权重更新停止,所有
Δ
w
=
0
\Delta w=0
Δw=0,就得到了最终的模型。
5、理解收敛过程(convergence)和迭代次数(epochs,iteration times)。以感知机为例,在第四点中,设想一下,假如数据是线性可分的,那么经过几次权重更新,就可以让
Δ
w
=
0
\Delta w=0
Δw=0,从而停止更新,得到最终模型。那么,假如数据是非线性不可分呢?那
Δ
w
\Delta w
Δw将会一直变化,不停止。这个时候怎么办呢?有两种方法,一个是设置epochs,即最大的迭代次数,超过这个次数我就自动停止,二个是设置允许误差和阈值,达到了能容忍的误差我就停止。因此,设置epochs就是避免模型陷入循环中导致系统崩溃,而从初始状态到达到
Δ
w
=
0
\Delta w=0
Δw=0或者允许误差的过程就是convergence收敛。
理解上述过程非常重要。
当然,感知机是最基础的模型,有很多缺陷,例如由 Δ w \Delta w Δw的计算公式可以看出,它是在一个样本计算 Δ w \Delta w Δw,并且所有w增加同样的 Δ w \Delta w Δw(w += Δ w \Delta w Δw),然后再纳入下一个样本继续更新w,然后再纳入下下一个样本继续更新w。所有w的增加都相同,不会对权重大小进行区分,很粗糙,所以感知机目前基本不用了,但是它的原理很关键,尤其是 Δ w \Delta w Δw,机器学习的魅力就在于此。
adaptive linear neurons 自适应线性神经元
Bernard Widrow和Tedd Hoff在1960年提出了adaptive linear neurons模型(adaline),他们在Perceptron模型中改变了
Δ
w
\Delta w
Δw的计算公式,加入了一个activation function,如下:
Δ
w
=
η
∑
i
(
y
i
−
ϕ
(
z
i
)
)
x
i
\Delta w=\eta \sum_{i} (y^i-\phi(z^i))x^i
Δw=ηi∑(yi−ϕ(zi))xi
其中,
z
i
=
w
T
x
i
z^i=w^Tx^i
zi=wTxi,而
ϕ
z
i
\phi z^i
ϕzi是
z
i
z^i
zi经过计算后的结果。
可以看出来,activation function是加入了一个求和公式(平均误差和,SSE),并且改变了
y
i
^
\widehat{y^i}
yi
。
1、首先给每一个特征值一个初始非零w,计算实际结果与预计结果的差值error。其中,实际结果是wixi的真实值(有小数点,不经过跃阶),预计结果是-1和1。这样会产生一个error矩阵,且数字都不同。
2、把error和所有样本的特征值进行点积,乘以学习率,就得到
Δ
w
\Delta w
Δw,这个
Δ
w
\Delta w
Δw是一个矩阵,数字都不同。
3、error是一个矩阵,计算error的平方和,作为损失值(cost)。
4、重复上述1-3过程。
由此可以看出,adaline的思想优势在于两点,(1)在每一次迭代中,所有样本和所有特征值均纳入分析,(2)在每一次迭代中,每一个特征值的权重w更新值不同。
adaline模型给领域注入了全新的活力和强大的性能,极大的扩宽了应用场景。
gradient descent 梯度下降
梯度下降,听的很高级,其实就是,通过不断的权重更新过程,让损失函数(cost funtion)变得最小 / 最优。
对于一般大小的数据集,可以用批量梯度下降法(batch gradient descent);
对于大规模的数据集,内存一次性放不下这么大的数据,则使用随机梯度下降法(stochastic gradient descent),有些时候也称为在线梯度下降法(online gradient descent);
随机梯度下降法的另一个高级方法就是在线学习(online learning);
还有一种介于 batch 和 stochastic 的gradient descent方法,就是mini-batch learning(小批量学习)
批量梯度下降法:其实就是上面描述的adaline的过程,在每次迭代中,纳入所有的样本,进行权重更新。
Δ
w
=
η
∑
i
(
y
i
−
ϕ
(
z
i
)
)
x
i
\Delta w=\eta \sum_{i} (y^i-\phi(z^i))x^i
Δw=ηi∑(yi−ϕ(zi))xi
随机梯度下降法:在整个样本中,随机抽取部分样本进行权重更新,注意,这个时候的权重更新方法不是adaline,而是类似perceptron。之所以去掉求和公式,是因为只是取整体的部分,所以不需要计算cost function(计算了也没用),所以就去掉了。当然,要理解随机梯度下降求出的结果,并不会是最小或者最优,而是在允许误差范围内的较好选择(也不排除碰巧是最小),相当于是牺牲了部分精度而追求速度。
Δ
w
=
η
(
y
i
−
ϕ
(
z
i
)
)
x
i
\Delta w=\eta (y^i-\phi(z^i))x^i
Δw=η(yi−ϕ(zi))xi