机器学习入门(三):神经网络起手式

1,150 阅读7分钟

专栏系列文章

机器学习(一):新手入门概览
机器学习入门(二):工具与框架的选择
[译]什么是蒙特卡洛树搜索

神经网络伊始——感知机 perceptron

感知机基础的机器学习模型之一,通过它来认识机器学习的基本手段最为合适。同时,它也是神经网络与支持向量机 SVM 的基础。明白了它的原理,对于神经网络的原理也就更易于理解了。

定义

假设输入空间(特征向量)为X⊆Rn,输出空间为Y={-1, +1}。输入x∈X表示实例的特征向量,对应于输入空间的点;输出y∈Y表示示例的类别。由输入空间到输出空间的函数为

f(x) = sign(w \cdot x + b)

的称为感知机。 其中,w 称为权重(weights),b为偏置(bias), w \cdot x表示 w 与 x 的点积。sign 函数为

f(x) = 
    \begin{cases}
    \begin{array}{lcl}
         +1   && if & x >= 0 \\
         -1   && if & x < 0  \\
    \end{array}
    \end{cases}

感知机的线性分类

感知机是一个可以用于二分类的线性分类模型,将样本根据 f(x)的值(+1或-1)进行分类(正样本或负样本)。如图,

损失函数 Loss Function

大部分的机器学习中,都需要损失函数(loss function)来衡量一个模型的匹配程度,同时作为优化程度的参考目标。更重要的是,机器学习的具体应用,会随着损失函数的定义不同而具有不同的作用,如人脸验证(Face Validation),人脸识别(Face Recognition),神经风格迁移(Neural Style Transfer)等都有不同的损失函数对应。
而对于感知机,使用的损失函数通常为点到直线的距离,对单个样本点来说即

\cfrac{1}{||w||}|w*x_0 + b|

所以所有点到平面的总距离为(M为误分类的集合):

L(w,b) = -\cfrac{1}{N} \sum_{x_i\in M}y_i(w*x_0 + b)

这就是感知机的损失函数,这里也称为它的经验风险(empirical risk),用 R_{emp}(f) 表示。而训练感知机的时候,所做的事情为最小化损失函数,或经验风险最小化(ERM, empirical risk minimize)。

学习/优化方法 optimization function

这里的优化方法采用的是随机梯度下降法(SGD, Stochastic Gradient Descent)。通过随机梯度下降算法,我们可以逐渐找到损失函数的最小值。让我们先来认识一下什么是梯度下降(Gradient Descent)。

梯度下降的形象解释 Gradient Descent

总体来讲,梯度下降是在函数空间中寻找一个下降路径,从高处逐步下降,最终找到空间的最低点的过程。

图片来源:https://www.cnblogs.com/pinard/p/5970503.html

以这个可视的三维空间为例,算法从起始点开始,逐步向下探索,每一步会求出当前点的导数,进而得知所处位置的“坡度”。接着,算法会选择目前向下坡度最大的一个方向,继续前进。如此以来,梯度下降算法能够找到一个极值点,得到目标函数的极小值

在这里你会发现,我们所求得的,并非一定是最小值,而是极小值。从上图可以看出,每次下降的起始点不同,到达的最终点也可能不同。除非函数本身为凸函数。

梯度下降算法的代数原理

算法运行过程中,在代数上,是对损失函数求偏积分,每个权重分别进行梯度下降,对于权重 w_i,得到梯度:

\cfrac{\delta}{\delta w_i}L(w_0,w_1, \dots,w_n)

同时乘以学习速率 \alpha 得到最终的下降梯度值

\alpha \cfrac{\delta}{\delta w_i}L(w_0,w_1, \dots,w_n)

所以对于权重 w_i ,每次更新为

w_i = w_i - \alpha \cfrac{\delta}{\delta w_i}L(w_0,w_1, \dots,w_n)

而对于偏导数求值,可得(\widehat{y}为当前函数所得结果,y为样本结果,m为训练数据组数,j指训练数据中的第j个数据实例,n为特征数量,i指的是一组数据中的第i个特征或对应的数据实例x)

\alpha \cfrac{\delta}{\delta w_i}L(w_0,w_1, \dots,w_n) = \cfrac {\alpha}{m} \sum_{j=0}^m (\widehat{y_j}-y_j)x_i^j

因此最终更新为

w_i= w_i - \cfrac {\alpha}{m} \sum_{j=0}^m (\widehat{y_j}-y_j)x_i^j

当梯度下降的距离小于 \varepsilon(一个设定的很小的数值)时,则算法终止,判定为算法收敛。

梯度下降算法的超参数(Hyperparameter)

超参数是指那些需要我们在训练过程中,结合模型的实际表现情况与问题情境,进行调整的参数。梯度下降算法的超参数含有:学习速率\alpha,每次下降使用的样本数量 x(1 \leq x \leq m),学习速率的衰减率d。

学习速率 \alpha

学习速率对于梯度下降算法来说是一个重要的超参数。它代表着算法每一次向下走时的步伐幅度。它的大小决定了算法收敛的速度:\alpha过大时,算法下降速度过快,可能略过终点,而导致在终点处来回徘徊,反而收敛较慢;\alpha过小时,算法下降速度较慢,导致最终收敛时间较长。

样本数量

根据样本选择的数量,一般分为三类梯度下降算法:
Batch Gradient Descent 批量梯度下降: 这就是普通的梯度下降算法,即整个数据集对于下降的梯度都有贡献。
Stochastic Gradient Descent 随机梯度下降: 每次仅随机地取一组数据作为样本来梯度下降,速度很快,问题在于样本数量小,下降方向不准确,容易陷入局部最优解中。
Mini-Batch Gradient Descent 小批量梯度下降: 即取一部分数据来调整梯度下降算法,它的优点是综合了批量梯度下降和随机梯度下降,既让一定量的数据保证了梯度下降的可靠性,也减小了每回合训练的数据量,加速训练速度。

学习速率衰减 Learning Rate Decay

随着算法逐渐接近终点,容易出现的情况是算法由于步幅过大,导致在终点周围来回徘徊,不易收敛。而若将学习速率调小,则前期可能面临下降速度过慢的问题,导致浪费很多时间。

图取自 Andrew Ng 在 Cousera 上的 Machine Learning,这里的J(\theta)为损失函数

所以,我们又有了学习速率的衰减,来随着算法的进行动态地调整学习速率。 一般来讲,人们通常使用的衰减公式为

\alpha = \cfrac {1} {1 + 衰减率 * 训练次数} \alpha_0

其中\alpha_0为原学习速率,衰减率则需要靠经验来设定了。

模型的选择

在训练出模型之后,我们需要通过数据来验证模型的准确率。一般来说,数据集需要分为训练集/验证集/测试集(建议比例6:2:2)或训练集/测试集(7:3)。

交叉验证 Cross Validation

当数据量不够的时候(经常出现的状况),我们会需要通过交叉验证的方法在保证训练数据量足够的同时来实现合理的验证。在《统计学习方法》中,提到了三种常见的方法:

  1. 简单交叉认证: 直接将数据集分为7:3,来进行验证
  2. S折交叉验证(S-fold Cross Validation): 随机将已给数据切分为S个互不相交的大小相同的子集,用S-1个子集做训练,1个做测试
  3. 留一测试: 第二种方法中当 S=N 时的特殊情况

泛化能力 Generalization Ability

定义:学习方法对未知数据的预测能力。 也就是说,我们希望得到的模型不仅在训练集上拥有良好的表现,更要在未知的数据集(验证集和测试集)上有良好的表现。

过度拟合(overfitting): 基于数据的训练,容易使得模型仅在本数据集中产生良好的表现,而在其它的数据集中表现极差,这被称为过拟合现象。

可以看到,一般的机器学习模型来说,随着模型复杂度的上升,测试集与训练集的误差会越来越大,所以我们需要找到一个平衡点,使得模型的误差较小的同时,两个数据集的相对误差也较少。奥卡姆剃刀原理在这里可以有很好的指导:我们需要的是一个能够很好解释已知数据同时最为简单的模型。

感知机的定理

当数据集线性可分时,则总会存在满足条件的超平面,将数据集完全分开。
当数据集线性不可分时,则算法的迭代结果发生震荡,结果无法收敛。

这两句话说明的问题是,感知机对于线性问题的能力很强,但遇到非线性问题时会成为灾难。而后来直到引入了激活函数之后,才得以解决各类非线性问题。

参考资料

  1. 机器学习-感知机,blog.csdn.net/dream_angel…
  2. 李航,《统计学习方法》
  3. 梯度下降算法,www.cnblogs.com/pinard/p/59…
  4. 随机梯度下降算法,blog.csdn.net/zbc10905498…
  5. 模型选择的一些基本思想和方法,www.cnblogs.com/zhizhan/p/5…