机器学习介绍

一、简介

    大家认识和学习一个新事物,往往推荐遵循 WHAT、HOW、WHY 的顺序,本文从 WHAT 的角度对机器学习进行介绍,希望大家能够喜欢。

    从本质上讲,机器学习是让机器根据数据来学习一个函数,这个函数能够从输入得到正确的输出,下面列举几个例子:

    1. 回归问题:f(房屋信息) = 房屋售价

    2. 分类问题:f(一张图片)=是否有猫

    3. 翻译问题:f(中文) = 英文

    4. 自动摘要:f(一张图片) = 图片摘要

    5. 自动问答:f(问题) = 答案


    很多机器学习算法是统计学习算法,下面对一些符号进行解释:

    1. P(E) 表示事件 E 发生的概率;

    2. P(A|E) 表示条件概率,即当事件 E 发生时,事件 A 发生的概率;


二、贝叶斯分类

    贝叶斯分类器是利用贝叶斯定理对现实进行简化建模的一类分类器,贝叶斯定理有下面所示的公式:

    P(A_i|E) = \frac{ P(A_i) P(E|A_i) }{ \sum_{j=1}^n P(A_j) P(E|A_j) },其中,E 表示最终事件,A_i 表示导致事件发生的原因。

    在基于贝叶斯定理的算法中,将 E 解释为数据样本,将 A_i 解释为分类,即由于样本属于某个分类才导致了数据具有这样的特征。根据数据特征之间的关系,又分为朴素贝叶斯、线性判别分析、逻辑斯蒂回归等方法,下面依次进行介绍。


2.1 朴素贝叶斯

    假设有这样的一个场景:我们收集了 N 片树叶,记录下每片树叶的:长度、宽度、厚度、重量这4个特征,以及每片树叶的分类:杨树叶(= 0)、柳树叶(= 1)、桉树叶(= 2)。我们希望开发一个程序,输入数据是树叶的这4个特征,输出结果是树叶的分类。

    首先我们对模型进行简化,即认为树叶的长度、宽度、厚度、重量这4个特征是相互独立的(其实并不是),用向量 X = (X_1, X_2, X_3, X_4)^T 表示树叶的特征,用 Y_i 表示树叶所属的分类,然后计算 Y_i 的后验概率,如下:

    P(Y_i|X) = \frac{ P(Y_i) P(X|Y_i) }{ P(X) } =  \frac{ P(Y_i) P(X|Y_i) }{ \sum_{j=1}^3 P(Y_j) P(X|Y_j)  } =  \frac{ P(Y_i) \prod_{k=1}^4  P(X_k|Y_i) }{ \sum_{j=1}^3 P(Y_j) \prod_{k=1}^4   P(X_k|Y_j)  }

    然后我们对 Y_i 后验概率公式中的参数进行估计,根据概率论中的强大数定理,频率以概率1收敛到概率,所以我们使用频率对 P(Y_i) 和 P(X_k|Y_i) 进行估计,即:

    P(Y_i) = \frac{ N_i }{ N }P(X_k|Y_i) = \frac{ N_{ik} }{ N_i }

    将概率的估计值代入 P(Y_i|X) 的公式中计算出 Y_i 的后验概率,我们取后验概率最大的 Y_i 作为 X 的分类。


2.2 线性判别分析

    在前面的朴素贝叶斯中,我们假设了数据的特征之间是独立的。现在,我们取消这个假设,并且增加另一个假设:每个类别的特征符合协方差相同的多元正态分布。设 x 为特征向量(维度为 p \times 1),\mu_k 为第 k 个分类的特征均值向量,\pi_k 为第 k 个分类的概率,\Sigma  为公共的协方差矩阵,则特征的概率密度函数为:

    f(x|Y_k) = (2 \pi)^{-\frac{p}{2}} |\Sigma|^{-\frac{1}{2}} e^{-\frac{1}{2} (x - \mu_k)^T \Sigma^{-1} (x - \mu) }

    我们计算 x 的后验概率的比值的对数:

    ln( \frac{ \pi_k f(x|Y_k) }{ \pi_j f(x|Y_j) } ) = (x^T \Sigma^{-1} \mu_k - \frac{1}{2} \mu_k^T \Sigma^{-1}  \mu_k + ln\pi_k) -  (x^T \Sigma^{-1} \mu_j - \frac{1}{2} \mu_j^T \Sigma^{-1}  \mu_j + ln\pi_j)

    通过上面的公式,就可以得到判别函数:

    \delta(x | Y_k) =  x^T \Sigma^{-1} \mu_k - \frac{1}{2} \mu_k^T \Sigma^{-1}  \mu_k + ln\pi_k

    我们取 \delta(x | Y_k)  最大的 k 作为 x 的分类,可以看出 \delta(x | Y_k)  是特征分量的线性函数,这就是线性判别分析的名称由来。


2.3 逻辑斯蒂回归

    逻辑斯蒂回归(简称:逻辑回归)是分类方法,并不是回归方法,它适合对数据进行二分类,其中正例为1,反例为0。逻辑回归对数据的基本假设是:

    P(1|x) = \sigma(x^Tw + b),其中,\sigma(x) = (1 + e^{-x})^{-1}w 为权重向量,b为偏置

    通过计算可以可到:

    ln( \frac{ P(1|x) }{ P(0|x) } ) = x^T w + b,即对数似然比是特征分量的线性函数,这是逻辑回归的最终假设。

    我们需要从 N 个训练数据中学习到正确的(w,b) 参数,那么需要一个对正确与否的衡量标准。我们反其道而行之,使用下面的交叉商误差作为损失函数来衡量参数的正确性:

    L(w, b) = - \frac{1}{N} \sum_{i = 1}^n (y ln(\sigma(x_i^T w + b)) + (1 - y)ln(1- \sigma(x_i^T w + b)))

    请注意,在给定训练数据的情况下,L(w,b) 是 (w,b) 的函数。可以证明,L(w,b) 具有唯一的全局最小值,那么我们可以利用梯度下降的方法来寻找 (w,b) 的最优解,通过计算可以得到 L(w,b) 的梯度为:

    \nabla L(w,b) = \frac{1}{N} X^T (\sigma(X w + b) - Y)

    然后,通过迭代算法就可以通过训练数据学习到 (w,b) 的最优解。


三、线性和非线性回归

    回归问题是希望得到一个具有连续输出的函数,这个函数根据输入的特征输出正确的连续值。


3.1 线性回归

    线性回归对数据的基本假设是独立性和比例性,例如函数 y = \beta_0 + \beta_1x_1 + \beta_2x_2:当 x_1 发生变化时,对 y 的影响与 x_2 无关,这就是独立性;当 x_1 增加\Delta x_1 时,y 增加 \beta_1 \Delta x_1,这就是比例性。

    设数据有 D 个特征,线性回归使用下面的函数进行建模:

    y = \beta_0 + \sum_{j = 1}^D \beta_j x_j,如果设 x_0 = 1,则方程可以改写成向量内积的形式:

    y = x^T \beta,其中:x = (1, x^{(1)}, \dots , x^{(D)})^T, \beta = (\beta_0, \dots , \beta_D)^T

    当有 N 个数据时,线性回归可以用下面的矩阵方程(未知量为 \beta)来表示:

    y = X \beta,其中:y = (y_1, y_2, \dots , y_N)^T , X = (x_1^T, x_2^T, \dots , \x_N^T)


    上面的方程未必是有解的,所以我们寻找它的最小二乘解,即:

    \hat{\beta} = arg min_\beta |X \beta - y|^2

    可以证明以下两点:

    1. \hat{\beta} 一定是线性方程组 X^T X \beta = X^T y 的解;

    2. 线性方程组 X^T X \beta = X^T y 一定有解;


    当 X^T X 可逆时,可以直接求得 \hat{\beta} 的解析解:\hat{ \beta } = (X^T X)^{-1} X^T y

    当 X^T X 不可逆时,有两种方法求解:

    1. 求 X^T X 的广义逆矩阵,则 \hat{\beta} 具有解析解:\hat{ \beta } = (X^T X)^- X^T y

    2. 求函数 f( \beta ) = |X \beta - y|^2 的梯度,使用迭代算法求解;


    得到 \hat{\beta} 后,我们还需要对 \hat{\beta} = 0 进行显著性检验,这需要假设 y 是独立同分布的正态随机变量,具体内容请参考线性回归的相关资料。


3.2 非线性回归

    非线性回归是去掉了线性回归中独立性和比例性的假设,主要包括以下几种模型:

    1. 阶梯回归:通过将特征空间进行分割,将某个区间的平均值作为输出值;

    2. 多项式回归:通过引入特征的幂,或者,多个特征之间的交互项,然后再进行常规的线性回归;

    3. 决策树回归:通过创建决策树对特征空间进行二叉分割,将某结点的平均值作为输出值;

    4. 神经网络回归:使用均方误差作为损失函数,使用 \sigma 函数作为激活函数的多层神经网络,可以获得较好的回归效果,但也容易过拟合;


四、神经网络

    神经网络是端到端的机器学习方法,它通过多层感知机和非线性激活函数,实现对非线性函数的拟合,在函数逼近、计算机视觉、自然语言处理中有广泛应用。


4.1 感知机

    感知机是输入特征的仿射函数的符号函数,即特征的线性组合加上偏置大于等于零则为 1,否则为 -1:

    f(x) = sign(\sum_{j=1}^d x^{(j)} w_j + b)

    在一个线性可分数据中,存在一个分离超平面,可以通过函数 f(x) 将数据分为正例和负例。首先随机选择分离超平面,并且将所有误分类点与该平面的距离作为损失函数,对数据和损失函数执行梯度下降。根据感知机收敛定理,通过有限次迭代后,可以得到正确的分离超平面。


4.2 前馈神经网络


FNN示意图

    前馈神经网络(FNN)是在每层堆叠多个感知机,并且使用多个隐藏层。例如上图的神经网络,输入特征数是2,具有3个隐藏层,第一层有3个感知机,第二层有2个感知机,第三层有2个感知机。通过这样堆叠感知机,并对感知机的输出应用非线性激活函数后,我们可以得到一个从 x_1, x_2 到 y_1, y_2 的函数。由于数据都是从前向后传播的,所以这样的神经网络叫做前馈神经网络,又叫做全连接层。FNN 一般用在分类和回归算法最后的输出模块中。


4.3 卷积神经网络


CNN示意图

    卷积神经网络(CNN)主要应用在计算机视觉中,它的诞生是为了弥补 FNN 进行图像建模时,丢失了图像的区域信息和层次信息的问题。如上图所示,输入数据是具有 C 个通道(一般为RGB 3 通道)、尺寸为 H*W 的图片,卷积核尺寸为 FN*C*FH*FW;卷积核在每个通道上进行卷积运算(对应元素相乘后求和,类似于向量内积)后相加,最后加上偏置得到输出结果,所以卷积元算实质上还是仿射运算。通过这样对输入的处理,输出数据中保留了图片的空间信息,有利于对图片进行分类识别或进一步处理。


4.4 循环神经网络


RNN示意图

    循环神经网络(RNN)主要应用在时间序列处理中。前述的 FNN、CNN 都属于前馈神经网络,每个输入都是独立存在的,前一个输入数据不影响当前输入数据的输出。CNN 通过将前一个数据的输出状态作为当前数据的附加输入,从而实现对时间序列状态的记忆。实际中使用的 RNN 层大多是 LSTM 层,LSTM 在内部对记忆状态进行门控处理,解决了梯度消失问题。RNN主要有以下应用:

1. 文本生成:通过一个输入词(或句子),得到随机的输出文本;

2. 机器翻译:将一个输入序列转换为确定的输出序列;

3. 图片摘要:通过 CNN 将图片转换为向量,然后将输入向量转换为输出文本;

4. 多变量时间序列异常检测:研究中;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容