登录
首页精彩阅读机器学习与深度学习核心知识点总结(二)
机器学习与深度学习核心知识点总结(二)
2019-12-03
收藏
<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

作者 | 小小挖掘机

来源 | SIGAI

主成分分析

主成分分析是一种数据降维和去除相关性的方法,它通过线性变换将向量投影到低维空间。对向量进行投影就是对向量左乘一个矩阵,得到结果向量:

y = Wx

结果向量的维数小于原始向量的维数。降维要确保的是在低维空间中的投影能很好的近似表达原始向量,即重构误差最小化:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

其中e为投影后空间的基向量,是标准正交基;a为重构系数,也是投影到低维空间后的坐标。如果定义如下的散布矩阵:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

其中m和μ为所有样本的均值向量。则上面的重构误差最小化等价于求解如下问题:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

通过拉格朗日乘数法可以证明,使得该函数取最小值的ej为散度矩阵最大的d'个特征值对应的单位长度特征向量。矩阵W的列ej是我们要求解的基向量,由它们构成投影矩阵。计算时,先计算散布矩阵(或者协方差矩阵),再对该进行进行特征值分解,找到最大的一部分特征值和对应的特征向量,构成投影矩阵。可以证明,协方差矩阵或散布矩阵是实对称半正定矩阵,因此所有特征值非负。进行降维时,先将输入向量减掉均值向量,然后左乘投影矩阵,即可得到投影后的向量。

主成分分析一种无监督学习算法,也是一种线性方法。

线性判别分析

线性判别分析向最大化类间差异、最小化类内差异的方向线性投影。其基本思想是通过线性投影来最小化同类样本间的差异,最大化不同类样本间的差异。具体做法是寻找一个向低维空间的投影矩阵W,样本的特征向量x经过投影之后得到的新向量:

y = Wx

同一类样投影后的结果向量差异尽可能小,不同类的样本差异尽可能大。简单的说,就是经过这个投影之后同一类的样本进来聚集在一起,不同类的样本尽可能离得远。这种最大化类间差异,最小化类内差异的做法,在机器学习的很多地方都有使用。

类内散布矩阵定义为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

它衡量的内类样本的发散程度。其中mi为每个类的均值向量,m为所有样本的均值向量。类间散布矩阵定义为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

它衡量的了各类样本之间的差异。训练时的优化目标是类间差异与类内差异的比值:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

上面的问题带有冗余,如果w是最优解,将其乘以一个不为0的系数之后还是最优解。为了消掉冗余,加上如下约束:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

然后使用拉格朗日乘数法,最后归结于求解矩阵的特征值与特征向量:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

LDA是有监督的学习算法,在计算过程中利用了样本标签值,是线性模型。LDA也不能直接用于分类和回归问题,要对降维后的向量进行分类还需要借助其他算法。

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

kNN算法

kNN算法将样本分到离它最相似的样本所属的类。算法本质上使用了模板匹配的思想。要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票,票数最多的那个类就是分类结果。

由于需要计算样本间的距离,因此需要依赖距离定义,常用的有欧氏距离,Mahalanobis距离,Bhattacharyya距离。另外,还可以通过学习得到距离函数,这就是距离度量学习。

kNN算法是一种判别模型,即支持分类问题,也支持回归问题,是一种非线性模型。它天然的支持多分类问题。kNN算法没有训练过程,是一种基于实例的算法。

人工神经网络

人工神经网络是一种仿生的方法,参考了动物的神经元结构。从本质上看,它是一个多层复合函数。对于多层前馈型神经网络,即权连接网络,每一层实现的变换为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

其中W为权重矩阵,b为偏置向量,f为激活函数。正向传播时反复用上上对每一层的输出值进行计算,得到最终的输出。使用激活函数是为了保证非线性,万能逼近定理保证了神经网络可以比较闭区间上任意一个连续函数。

权重和偏置通过训练得到,采用的是反向传播算法。反向传播算法从复合函数求导的链式法则导出,用于计算损失函数对权重,偏置的梯度值。算法从最外层的导数值算起,依次递推的计算更内层的导数值,这对应于从神经网络的输出层算起,反向计算每个隐含层参数的导数值。其核心是误差项的定义,定义误差项为损失函数对临时变量u的梯度:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

其中,nl神经网络的层数。最后一个层的误差项可以直接求出,其他层的误差项根据上面的递推公式进行计算。根据误差项,可以计算出损失函数对每一层权重矩阵的梯度值:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

以及对偏置向量的梯度值:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

然后用梯度下降法对它们的值进行更新。参数初始化一般采用随机数,而不是简单的初始化为0。为了加快收敛速度,还可以使用动量项,它积累了之前的梯度信息。

神经网络训练时的损失函数不是凸函数,因此有陷入局部极值,鞍点的风险。另外,随着层数的增加,会导致梯度消失问题,这是因为每次计算误差项时都需要乘以激活函数的导数值,如果其绝对值小于1,多次连乘之后导致误差项趋向于0,从而使得计算出来的参数梯度值接近于0,参数无法有效的更新。

复合函数求导 + 梯度下降法

标准的神经网络是一种有监督的学习算法,它是一种非线性模型,它既可以用于分类问题,也可以用于回归问题,并且支持多分类问题。

支持向量机

支持向量机的核心思想是最大化分类间隔。简单的支持向量机就是让分类间隔最大化的线性分类器,找到多维空间中的一个超平面。它在训练是求解的问题为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

这从点到超平面的距离方程导出,通过增加一个约束条件消掉了优化变量的冗余。可以证明,这个问题是凸优化问题,并且满足Slater条件。这个问题带有太多的不等式约束,不易求解,因此通过拉格朗日对偶转换为对偶问题求解:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

同样的,这个问题也是凸优化问题。此时支持向量机并不能解决非线性分类问题,通过使用核函数,将向量变换到高维空间,使它们更可能是线性可分的。而对向量先进行映射再做内积,等价于先做内积再做映射,因此核函数并不用显式的对向量进行映射,而是对两个向量的内积进行映射,这是核函数的精髓。

加入核函数K之后的对偶问题变为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

预测函数为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

其中b通过KKT条件求出。如果使用正定核,这个问题也是凸优化问题。求解采用了SMO算法,这是一种分治法,每次挑选出两个变量进行优化,其他变量保持不动。选择优化变量的依据是KKT条件,对这两个变量的优化是一个带等式和不等式约束的二次函数极值问题,可以直接得到公式解。另外,这个子问题同样是一个凸优化问题。

标准的支持向量机只能解决二分类问题。对于多分类问题,可以用这种二分类器的组合来解决,有以下几种方案:

1对剩余方案。对于有k个类的分类问题,训练k个二分类器。训练时第i个分类器的正样本是第i类样本,负样本是除第i类之外其他类型的样本,这个分类器的作用是判断样本是否属于第i类。在进行分类时,对于待预测样本,用每个分类器计算输出值,取输出值最大那个作为预测结果。

1对1方案。如果有k个类,训练Ck2个二分类器,即这些类两两组合。训练时将第i类作为正样本,其他各个类依次作为负样本,总共有k (k − 1) / 2种组合。每个分类器的作用是判断样本是属于第i类还是第j类。对样本进行分类时采用投票的方法,依次用每个二分类器进行预测,如果判定为第m类,则m类的投票数加1,得票最多的那个类作为最终的判定结果。

除了通过二分类器的组合来构造多类分类器之外,还可以通过直接优化多类分类的目标函数得到多分类器。

SVM是一种判别模型。它既可以用于分类问题,也可以用于回归问题。标准的SVM只能支持二分类问题,使用多个分类器的组合,可以解决多分类问题。如果不使用核函数,SVM是一个线性模型,如果使用非线性核,则是非线性模型,这可以从上面的预测函数看出。

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

logistic回归

logistic回归是一种二分类算法,直接为样本估计出它属于正负样本的概率。先将向量进行线性加权,然后计算logistic函数,可以得到[0,1]之间的概率值,它表示样本x属于正样本的概率:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

正样本标签值为1,负样本为0。使用logistic函数的原因是它单调增,并且值域在(0, 1)之间,刚好符合概率的要求。训练时采用最大似然估计,求解对数似然函数的极值:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

可以证明这是一个凸优化问题,求解时可以用梯度下降法,也可以用牛顿法。如果正负样本的标签为+1和-1,则可以采用另外一种写法:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

训练时的目标同样是最大化对数似然函数:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

同样的,这也是一个凸优化问题。预测时并不需要计算logistic函数,而是直接计算:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

Logistic回归是一种二分类算法,虽然使用了概率,但它是一种判别模型!另外要注意的是,logistic回归是一种线性模型,这从它的预测函数就可以看出。它本身不能支持多分类问题,它的扩展版本softmax回归可以解决多分类问题。

K均值算法

K均值算法是一种聚类算法,把样本分配到离它最近的类中心所属的类,类中心由属于这个类的所有样本确定。

k均值算法是一种无监督的聚类算法。算法将每个样本分配到离它最近的那个类中心所代表的类,而类中心的确定又依赖于样本的分配方案。

在实现时,先随机初始化每个类的类中心,然后计算样本与每个类的中心的距离,将其分配到最近的那个类,然后根据这种分配方案重新计算每个类的中心。这也是一种分阶段优化的策略。

与k近邻算法一样,这里也依赖于样本之间的距离,因此需要定义距离的计算方式,最常用的是欧氏距离,也可以采用其他距离定义。算法在实现时要考虑下面几个问题:

1.类中心向量的初始化。一般采用随机初始化。最简单的是Forgy算法,它从样本集中随机选择k个样本作为初始类中心。第二种方案是随机划分,它将所有样本随机的分配给k个类中的一个,然后按照这种分配方案计算各个类的类中心向量。

2.参数k的设定。可以根据先验知识人工指定一个值,或者由算法自己确定。

3.迭代终止的判定规则。一般做法是计算本次迭代后的类中心和上一次迭代时的类中心之间的距离,如果小于指定阈值,则算法终止。

卷积神经网络

卷积神经网络是对全连接神经网络的发展,它使用卷积层,池化层自动学习各个尺度上的特征。卷积运算为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

在这里需要注意多通道卷积的实现,它的输入图像,卷积核都有多个通道,分别用各个通道的卷积核对输入图像的各个通道进行卷积,然后再累加。这里也使用了激活函数,原因和全连接神经网络相同。池化运算最常见的有均值池化,max池化,分别用均值和最大值代替图像的一块矩形区域。使用池化的原因是为了降维,减小图像的尺寸,另外,它还带来了一定程度的平移和旋转的不变性。Max池化是非线性操作,现在用的更多。

对于经典的网络结构,包括LeNet-5网络,AlexNet,VGG网络,GoogLeNet,残差网络等经典的网络结构,创新点,要熟记于心。

自Alex网络出现之后,各种改进的卷积网络不断被提出。这些改进主要在以下几个方面进行:卷积层,池化层,激活函数,损失函数,网络结构。对于这些典型的改进,也要深刻理解。

由于引入了卷积层和池化层,因此反向传播算法需要为这两种层进行考虑。卷积层误差项的反向传播的公式为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

根据误差项计算卷积核梯度值的公式为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

如果采用均值池化,池化层的误差项反向传播计算公式为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

如果使用max池化,则为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

注意,池化层没有需要训练得到的参数。

卷积神经网络具有迁移学习的能力,我们可以把这个网络的参数作为训练的初始值,在新的任务上继续训练,这种做法称为fine-tune,即网络微调。大量的实验结果和应用结果证明,这种微调是有效的。这说明卷积神经网络在一定程度上具有迁移学习的能力,卷积层学习到的特征具有通用性。VGG网络在ImageNet数据集上的训练结果在进行微调之后,被广泛应用于目标检测、图像分割等任务。

和全连接神经网络一样,卷积神经网络是一个判别模型,它既可以用于分类问题,也可以用用于回归问题,并且支持多分类问题。

循环神经网络

循环神经网络是一种具有记忆功能的神经网络,每次计算时,利用了上一个时刻的记忆值,特别适合序列数据分析。网络接受的是一个序列数据,即一组向量,依次把它们输入网络,计算每个时刻的输出值。记忆功能通过循环神层实现:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

它同时利用了本时刻的输入值和上一个时刻的记忆值。输出层的变换为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

这和普通神经网络没什么区别。由于引入了循环层,因此反向传播算法有所不同,称为BPTT,即时间轴上的反向传播算法。算法从最后一个时刻算起,沿着时间轴往前推。误差项的递推公式为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

递推的终点为最后一个时刻。

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

根据误差项计算对权重和偏置的梯度值的公式为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

循环神经网络同样存在梯度消失问题,因此出现了LSTM,GRU等结构。

以循环神经网络为基础,构造出了两类通用的框架,分别是连接主义时序分类(CTC),以及序列到序列学习(seq2seq)。用于解决语音识别,自然语言处理中的问题。其中,seq2seq采用了编码器-解码器结构,用两个循环神经网络组合起来完成计算,一个充当编码器,一个充当解码器。

和其他类型的神经网络一样,循环神经网络是一个判别模型,既支持分类问题,也支持回归问题,并且支持多分类问题。

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

高斯混合模型

高斯混合模型通过多个正态分布的加权和来描述一个随机变量的概率分布,概率密度函数定义为:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

其中x为随机向量,k为高斯分布的个数,wi为权重,μ为高斯分布的均值向量,∑为协方差矩阵。所有权重之和为1,即:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

任意一个样本可以看作是先从k个高斯分布中选择出一个,选择第i个高斯分布的概率为wi,再由第i个高斯分布

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

产生出这个样本数据x。高斯混合模型可以逼近任何一个连续的概率分布,因此它可以看做是连续性概率分布的万能逼近器。之所有要保证权重的和为1,是因为概率密度函数必须满足在

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

内的积分值为1。

指定高斯分布的个数,给定一组训练样本,可以通过期望最大化EM算法确定高斯混合模型的参数。每次迭代时,在E步计算期望值,在M步最大化期望值,如此循环交替。

EM算法

EM算法是一种迭代法,其目标是求解似然函数或后验概率的极值,而样本中具有无法观测的隐含变量。因为隐变量的存在,我们无法直接通过最大化似然函数来确定参数的值。可以采用一种策略,构造出对数似然函数的一个下界函数,这个函数不含有隐变量,然后优化这个下界。不断的提高这个下界,使原问题达到最优解,这就是EM算法所采用的思路。算法的构造依赖于Jensen不等式。

算法在实现时首先随机初始化参数θ的值,接下来循环迭代,每次迭代时分为两步:

E步,基于当前的参数估计值

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

,计算在给定x时对z的条件概率的数学期望:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

M步,求解如下极值问题,更新θ的值:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

实现Qi 时可以按照下面的公式计算:

<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>机器学习</a>与<a href='/map/shenduxuexi/' style='color:#000;font-size:inherit;'>深度学习</a>核心知识点总结(二)

迭代终止的判定规则是相邻两次函数值之差小于指定阈值。需要注意的是,EM算法只能保证收敛到局部极小值。

数据分析咨询请扫描二维码

客服在线
立即咨询