##################################### 重点总结 ##################################### 机器学习 #################################### 技术概念 ================================= 按照用途和要解决的问题,机器学习算法可以分为有监督学习,无监督学习,强化学习3种类型。 其中,有监督学习又进一步细分为分类问题与回归问题,无监督学习算法分为聚类问题和数据降维问题。 概括起来,各类算法要解决的核心问题是: 分类算法 是什么 回归算法 是多少 聚类算法 怎么分 数据降维 怎么压 强化学习 怎么做 训练集数据量大小的要求 -------------------------------------- 一个粗略的启发是,训练数据量不应小于模型可调参数数量若干倍(5或者10). 出自 PRML 第一章。 有监督学习与无监督学习 -------------------------------------- 根据样本数据是否带有标签值,可以将机器学习算法分成有监督学习和无监督学习两类。 有监督学习的样本数据带有标签值,它从训练样本中学习得到一个模型,然后用这个模型对新的样本进行预测推断。有监督学习的典型代表是分类问题和回归问题。 无监督学习对没有标签的样本进行分析,发现样本集的结构或者分布规律。无监督学习的典型代表是聚类,表示学习,和数据降维,它们处理的样本都不带有标签值。 分类问题与回归问题 -------------------------------------- 在有监督学习中,如果样本的标签是整数,则预测函数是一个向量到整数的映射,这称为分类问题。如果标签值是连续实数,则称为回归问题,此时预测函数是向量到实数的映射。 生成模型与判别模型 -------------------------------------- 分类算法可以分成判别模型和生成模型。给定特征向量x与标签值y,生成模型对联合概率p(x,y)建模,判别模型对条件概率p(y|x)进行建模。 另外,不使用概率模型的分类器也被归类为判别模型,它直接得到预测函数而不关心样本的概率分布: .. math:: y=f(x) 判别模型直接得到预测函数f(x),或者直接计算概率值p(y|x),比如SVM和logistic回归,softmax回归,判别模型只关心决策面,而不管样本的概率分布的密度。 生成模型计算p(x, y)或者p(x|y) ,通俗来说,生成模型假设每个类的样本服从某种概率分布,对这个概率分布进行建模。 机器学习中常见的生成模型有贝叶斯分类器,高斯混合模型,隐马尔可夫模型,受限玻尔兹曼机,生成对抗网络等。典型的判别模型有决策树,kNN算法,人工神经网络,支持向量机,logistic回归,AdaBoost算法等。 `理解生成模型与判别模型`_ 交叉验证 -------------------------------------- 交叉验证(cross validation)是一种统计准确率的技术。 k折交叉验证将样本随机、均匀的分成k份,轮流用其中的k-1份训练模型,1份用于测试模型的准确率,用k个准确率的均值作为最终的准确率。 过拟合与欠拟合 -------------------------------------- 欠拟合也称为欠学习,直观表现是训练得到的模型在训练集上表现差,没有学到数据的规律。引起欠拟合的原因有模型本身过于简单,例如数据本身是非线性的但使用了线性模型;特征数太少无法正确的建立映射关系。 过拟合也称为过学习,直观表现是在训练集上表现好,但在测试集上表现不好,推广泛化性能差。过拟合产生的根本原因是训练数据包含抽样误差,在训练时模型将抽样误差也进行了拟合。所谓抽样误差,是指抽样得到的样本集和整体数据集之间的偏差。引起过拟合的可能原因有: 模型本身过于复杂,拟合了训练样本集中的噪声。此时需要选用更简单的模型,或者对模型进行裁剪。训练样本太少或者缺乏代表性。此时需要增加样本数,或者增加样本的多样性。训练样本噪声的干扰,导致模型拟合了这些噪声,这时需要剔除噪声数据或者改用对噪声不敏感的模型。 偏差与方差分解 -------------------------------------- 模型的泛化误差可以分解成偏差和方差。偏差是模型本身导致的误差,即错误的模型假设所导致的误差,它是模型的预测值的数学期望和真实值之间的差距. 方差是由于对训练样本集的小波动敏感而导致的误差。它可以理解为模型预测值的变化范围,即模型预测值的波动程度。 模型的总体误差可以分解为偏差的平方与方差之和: .. math:: E \left( (y-f(x))^2 \right ) = Bias^2 \left ( f(x) \right ) + Var \left ( f(x) \right ) + \sigma^2 如果模型过于简单,一般会有大的偏差和小的方差;反之如果模型复杂则会有大的方差但偏差很小。 其他阅读 `偏差与方差 `_ 正则化 -------------------------------------- 为了防止过拟合,可以为损失函数加上一个惩罚项,对复杂的模型进行惩罚,强制让模型的参数值尽可能小以使得模型更简单,加入惩罚项之后损失函数为: .. math:: L(\theta) = \frac{1}{2l} \sum^{l}_{l=1} (f_{\theta} (x_i) -y_i)^2 + \frac{\lambda}{2} r(\theta) 正则化被广泛应用于各种机器学习算法,如岭回归,LASSO回归,logistic回归,神经网络等。除了直接加上正则化项之外,还有其他强制让模型变简单的方法,如决策树的剪枝算法,神经网络训练中的dropout技术,提前终止技术等。 维数灾难 -------------------------------------- 为了提高算法的精度,会使用越来越多的特征。当特征向量维数不高时,增加特征确实可以带来精度上的提升; 但是当特征向量的维数增加到一定值之后,继续增加特征反而会导致精度的下降,这一问题称为维数灾难。 目标函数 -------------------------------------- 最优化 -------------------------------------- `机器学习中的最优化算法总结 `_ 数学 ################################################ 概率论 ============================================ 基础概念 ------------------------------------------- :边缘概率: PRML 1.2节 P17 ------------------------------------------- ------------------------------------------- 优化算法 ============================================ 好的文章 .. [] 理解凸优化 列举常用的最优化方法 ------------------------------------------- - 梯度下降法 - 牛顿法, - 拟牛顿法 - 坐标下降法 - 梯度下降法的改进型如AdaDelta,AdaGrad,Adam,NAG等。 梯度下降法的关键点 ------------------------------------------- 梯度下降法沿着梯度的反方向进行搜索,利用了函数的一阶导数信息。梯度下降法的迭代公式为: .. math:: \theta_{t+1} = \theta_{t} - \gamma \nabla f(\theta_{t}) 根据函数的一阶泰勒展开,在负梯度方向,函数值是下降的。只要学习率设置的足够小,并且没有到达梯度为0的点处, 每次迭代时函数值一定会下降。需要设置学习率为一个非常小的正数的原因是要保证迭代之后的 :math:`\theta_{t+1}` 位于迭代之前的值 :math:`\theta_{t}` 的邻域内, 从而可以忽略泰勒展开中的高次项,保证迭代时函数值下降。 梯度下降法只能保证找到梯度为0的点,不能保证找到极小值点。迭代终止的判定依据是梯度值充分接近于0,或者达到最大指定迭代次数。 梯度下降法在机器学习中应用广泛,尤其是在深度学习中。 AdaDelta,AdaGrad,Adam,NAG等改进的梯度下降法都是用梯度构造更新项,区别在于更新项的构造方式不同。 对梯度下降法更全面的介绍可以阅读SIGAI之前的公众号文章 `“理解梯度下降法” `_ 。 牛顿法的关键点 ------------------------------------------- 牛顿法利用了函数的一阶和二阶导数信息,直接寻找梯度为0的点。牛顿法的迭代公式为: .. math:: X_{k+1} = X_k - \gamma H^{-1}_{k} g_{k} 其中H为Hessian矩阵,g为梯度向量。 牛顿法不能保证每次迭代时函数值下降,也不能保证收敛到极小值点。 在实现时,也需要设置学习率,原因和梯度下降法相同,是为了能够忽略泰勒展开中的高阶项。学习率的设置通常采用直线搜索(line search)技术。 在实现时,一般不直接求Hessian矩阵的逆矩阵,而是求解下面的线性方程组: .. math:: H_k d = - g_k 其解d称为牛顿方向。迭代终止的判定依据是梯度值充分接近于0,或者达到最大指定迭代次数。 牛顿法比梯度下降法有更快的收敛速度,但每次迭代时需要计算Hessian矩阵,并求解一个线性方程组,运算量大。 另外,如果Hessian矩阵不可逆,则这种方法失效。对牛顿法更全面的介绍可以阅读SIGAI之前的公众号文章 `“理解牛顿法” `_ 。 拉格朗日乘数法 ------------------------------------------- 拉格朗日乘数法是一个理论结果,用于求解带有等式约束的函数极值。对于如下问题: .. math:: min\ f(x) h_i(x) = 0,i=1,...,p 构造拉格朗日乘子函数: .. math:: L(x,\lambda) = f(x) + \sum^{p}_{i=1} \lambda_i h_i(x) 在最优点处对x和乘子变量的导数都必须为0: .. math:: \nabla_x f + \sum_{i=1}^{p} \lambda_i \nabla_x h_i = 0 h_i(x)=0 解这个方程即可得到最优解。对拉格朗日乘数法更详细的讲解可以阅读任何一本高等数学教材。机器学习中用到拉格朗日乘数法的地方有: - 主成分分析 - 线性判别分析 - 流形学习中的拉普拉斯特征映射 - 隐马尔科夫模型 凸优化 ------------------------------------------- 数值优化算法面临两个方面的问题:局部极值,鞍点。前者是梯度为0的点,也是极值点,但不是全局极小值; 后者连局部极值都不是,在鞍点处Hessian矩阵不定,即既非正定,也非负定。 凸优化通过对目标函数,优化变量的可行域进行限定,可以保证不会遇到上面两个问题。凸优化是一类特殊的优化问题,它要求: 1. 优化变量的可行域是一个凸集 2. 目标函数是一个凸函数 凸优化最好的一个性质是:所有局部最优解一定是全局最优解。 对于凸优化更详细的讲解可以阅读SIGAI之前的公众号文章 `“理解凸优化” `_ 。 机器学习中典型的凸优化问题有: - 线性回归 - 岭回归 - LASSO回归 - Logistic回归 - 支持向量机 - Softamx回归 拉格朗日对偶 ------------------------------------------- 对偶是最优化方法里的一种方法,它将一个最优化问题转换成另外一个问题,二者是等价的。拉格朗日对偶是其中的典型例子。对于如下带等式约束和不等式约束的优化问题: .. math:: min\ f(x) g_i (x) \le 0 \ i=1,...,m h_i(x) = 0 \ i=1,...,p 与拉格朗日乘数法类似,构造广义拉格朗日函数: .. math:: L(x,\lambda,v) = f(x) + \sum^{m}_{i=1} \lambda_i g_i(x) + \sum^{p}_{i=1} v_i h_i(x) :math:`\lambda_{i}` 必须满足 :math:`\lambda_{i}\geq 0` 的约束。原问题为: .. math:: min_x\ max_{\lambda,v,\lambda_i \ge 0} L(x,\lambda,v) 即先固定住x,调整拉格朗日乘子变量,让函数L取极大值;然后控制变量x,让目标函数取极小值。原问题与我们要优化的原始问题是等价的。 对偶问题为: .. math:: max_{\lambda,v,\lambda_i \ge 0}\ min_x L(x,\lambda,v) 和原问题相反,这里是先控制变量x,让函数L取极小值;然后控制拉格朗日乘子变量,让函数取极大值。 一般情况下,原问题的最优解大于等于对偶问题的最优解,这称为弱对偶。在某些情况下,原问题的最优解和对偶问题的最优解相等,这称为强对偶。 强对偶成立的一种条件是Slater条件: 一个凸优化问题如果存在一个候选x使得所有不等式约束都是严格满足的,即对于所有的i都有 :math:`g_{i}(x)< 0` , 不等式不取等号,则强对偶成立,原问题与对偶问题等价。注意,Slater条件是强对偶成立的充分条件而非必要条件。 拉格朗日对偶在机器学习中的典型应用是支持向量机。 KKT条件 ------------------------------------------- KKT条件是拉格朗日乘数法的推广,用于求解既带有等式约束,又带有不等式约束的函数极值。对于如下优化问题: .. math:: min\ f(x) g_i(x)\le 0 \ i=1,...,q h_i(x) = 0 \ i=1,...,p 和拉格朗日对偶的做法类似,KKT条件构如下乘子函数: .. math:: L(x,\lambda,\mu) = f(x) + \sum^p_{j=1} \lambda_j h_j(x) + \sum^q_{k=1} \mu_k g_k(x) :math:`\lambda` 和 :math:`\mu` 称为KKT乘子。在最优解处 :math:`x^{*}` 应该满足如下条件: .. math:: \nabla_x L(x^*) = 0 \mu_k \ge 0 \mu_k g_k(x^*) = 0 h_j(x^*)=0 g_k(x^*) \le 0 等式约束 :math:`h_{j}(x^{*})= 0` 和不等式约束 :math:`g_{k}(x^{*})\leq0` 是本身应该满足的约束, :math:`\nabla_{x}L(x^{*})=0` 和之前的拉格朗日乘数法一样。唯一多了关于 :math:`g_{i}(x)` 的条件: .. math:: \mu_k g_k(x^*) = 0 KKT条件只是取得极值的必要条件而不是充分条件。 特征值与特征向量 ------------------------------------------- 对于一个n阶矩阵A,如果存在一个数 :math:`\lambda` 和一个非0向量X,满足: .. math:: A X=\lambda X 则称\lambda为矩阵A的特征值,X为该特征值对应的特征向量。根据上面的定义有下面线性方程组成立: .. math:: (A - \lambda I)X=0 根据线性方程组的理论,要让齐次方程有非0解,系数矩阵的行列式必须为0,即: .. math:: |A-\lambda I| = 0 上式左边的多项式称为矩阵的特征多项式。矩阵的迹定义为主对角线元素之和: .. math:: tr(A) = \sum^n_{i=1} a_{ii} 根据韦达定理,矩阵所有特征值的和为矩阵的迹: .. math:: \sum_{i=1}^n \lambda_i = tr(A) 同样可以证明,矩阵所有特征值的积为矩阵的行列式: .. math:: \prod^n_{i=1} \lambda_i = |A| 利用特征值和特征向量,可以将矩阵对角化,即用正交变换将矩阵化为对角阵。实对称矩阵一定可以对角化,半正定矩阵的特征值都大于等于0,在机器学习中,很多矩阵都满足这些条件。特征值和特征向量在机器学习中的应用包括:正态贝叶斯分类器、主成分分析,流形学习,线性判别分析,谱聚类等。 奇异值分解 ------------------------------------------- 矩阵对角化只适用于方阵,如果不是方阵也可以进行类似的分解,这就是奇异值分解,简称SVD。假设A是一个m x n的矩阵,则存在如下分解: .. math:: A=U \Sigma V^T 其中U为m x m的正交矩阵,其列称为矩阵A的左奇异向量; :math:`\Sigma` 为m x n的对角矩阵, 除了主对角线 :math:`\sigma_{ii}` 以外,其他元素都是0;V 为n x n的正交矩阵,其行称为矩阵A的右奇异向量。 U的列为 :math:`AA^T`的特征向量,V的列为 :math:`A^T A` 的特征向量。 目标函数 =========================================== 最小平方法、均方误差、最小二乘 ------------------------------------------ .. important:: 最小平方解,对于离群点缺少鲁棒性,容易受到离群点的影响,会是得决策平面(或者回归中的拟合曲线)严重偏向离群点的方向 最小平方法在分类问题中存在很大缺陷,参照 PRML P134,结论,最小平方法不适合分类问题。 最大似然估计 ------------------------------------------- 有些应用中已知样本服从的概率分布,但是要估计分布函数的参数 :math:`\theta` ,确定这些参数常用的一种方法是最大似然估计。 最大似然估计构造一个似然函数,通过让似然函数最大化,求解出 :math:`\theta` 。 最大似然估计的直观解释是,寻求一组参数,使得给定的样本集出现的概率最大。 假设样本服从的概率密度函数为 :math:`p(x,\theta)` ,其中X为随机变量,:math:`\theta` 为要估计的参数。 给定一组样本 :math:`x_{i} ,i =1,...,l` ,它们都服从这种分布,并且相互独立。最大似然估计构造如下似然函数: .. math:: L(\theta) = \prod_{i=1}^l p(x_i;\theta) 其中 :math:`x_{i}` 是已知量,这是一个关于 :math:`\theta` 的函数,我们要让该函数的值最大化,这样做的依据是这组样本发生了, 因此应该最大化它们发生的概率,即似然函数。这就是求解如下最优化问题: .. math:: max\ \prod_{i=1}^l p(x_i;\theta) 乘积求导不易处理,因此我们对该函数取对数,得到对数似然函数: .. math:: ln\ L(\theta) = ln\ \prod_{i=1}^l p(x_i;\theta) = \sum_{i=1}^l ln\ p(x_i;\theta) 最后要求解的问题为: .. math:: arg\ max \sum_{i=1}^l ln\ p(x_i;\theta) 最大似然估计在机器学习中的典型应用包括logistic回归,贝叶斯分类器,隐马尔科夫模型等。 .. tip:: 过拟合是最大似然的一个通用属性,通过贝叶斯方法,可以避免过拟合问题。 贝叶斯方法加入的先验,相当于惩罚项。 最大似然的缺陷 bias 偏移问题 最大似然和贝叶斯估计的区别 ------------------------------------------- PRML 1.2.3节 P23 最大后验估计(MAP)仍然是点估计,就是最大化 似然*先验,也就是相当于 正则化+似然估计。 真正的贝叶斯思想,应该是求出后验概率分布,然后通过后验概率分布加权期望(积分)进行预测。 模型 #################################### 贝叶斯分类器 ======================================== 贝叶斯分类器将样本判定为后验概率最大的类,它直接用贝叶斯公式解决分类问题。假设样本的特征向量为x,类别标签为y,根据贝叶斯公式,样本属于每个类的条件概率(后验概率)为: 分母p(x)对所有类都是相同的,分类的规则是将样本归到后验概率最大的那个类,不需要计算准确的概率值,只需要知道属于哪个类的概率最大即可,这样可以忽略掉分母。分类器的判别函数为: 在实现贝叶斯分类器时,需要知道每个类的条件概率分布p(x|y)即先验概率。一般假设样本服从正态分布。训练时确定先验概率分布的参数,一般用最大似然估计,即最大化对数似然函数。 如果假设特征向量的各个分量之间相互独立,则称为朴素贝叶斯分类器,此时的分类判别函数为: 实现时可以分为特征分量是离散变量和连续变量两种情况。贝叶斯分分类器是一种生成模型,可以处理多分类问题,是一种非线性模型。 EM算法 #################################### 以上是简单的推导过程,EM算法的步骤是 - 首先,第一轮迭代t=0时,随机初始化待求参数 :math:`\pmb{\omega}^{(t)}` - E步,求解隐藏变量 :math:`\pmb{\theta}` 的后验概率分布 :math:`g(\pmb{\theta} | \mathbf{Y},\pmb{\omega}^{(t)} )` - :math:`\pmb{\theta}` 本身是连续值,这时 :math:`g(\pmb{\theta} | \mathbf{Y},\pmb{\omega}^{(t)} )` 就是概率密度函数,计算积分比较复杂。 - 所以可以把 :math:`\pmb{\theta}` 离散化,这样 :math:`g(\pmb{\theta} | \mathbf{Y},\pmb{\omega}^{(t)} )` 就是概率质量函数,只需要求出其概率分布,然后利用求和的方式计算全概率。 - M步,极大化Q函数 :math:`Q(\pmb{\omega}^{(t+1)}|\pmb{\omega}^{(t)})` 得到新的 :math:`\pmb{\omega}^{(t+1)}` .. math:: \pmb{\omega}^{(t+1)} = \mathop{\arg\max}_{\pmb{\omega} \in \pmb{\Omega}} \sum_{\pmb{\theta} \in \pmb{\Theta}} g(\pmb{\theta}|\mathbf{Y},\pmb{\omega}^{(t)}) ln L(\mathbf{Y},\pmb{\theta}|\pmb{\omega}) - 重复E步和M步直到满足收敛条件 - :math:`\pmb{\omega}` 不再变化 :math:`|\pmb{\omega}^{(t+1)} - \pmb{\omega}^{(t)}|<\epsilon` - 对数似然函数不再变化 :math:`|lnL(\mathbf{Y}|\pmb{\omega}^{(t+1)}) - lnL(\mathbf{Y}|\pmb{\omega}^{(t)})|<\epsilon` 隐马尔科夫模型(Hidden Markov Model,HMM) ################################################### HMM的参数估计算法就是EM的一个特例,前后向算法其实就是贝叶斯网络中的传播算法,求后验概率分布的。 .. _`理解梯度下降法`: https://mp.weixin.qq.com/s?__biz=MzU4MjQ3MDkwNA==&mid=2247484111&idx=1&sn=4ed4480e849298a0aff828611e18f1a8&chksm=fdb69f58cac1164e844726bd429862eb7b38d22509eb4d1826eb851036460cb7ca5a8de7b9bb&scene=21#wechat_redirect .. _`理解凸优化`: https://mp.weixin.qq.com/s?__biz=MzU4MjQ3MDkwNA==&mid=2247484439&idx=1&sn=4fa8c71ae9cb777d6e97ebd0dd8672e7&chksm=fdb69980cac110960e08c63061e0719a8dc7945606eeef460404dc2eb21b4f5bdb434fb56f92&token=1065243837&lang=zh_CN#rd .. _`理解梯度提升算法1-梯度提升算法`: https://zhuanlan.zhihu.com/p/53064510 .. _`理解XGBoost`: https://zhuanlan.zhihu.com/p/55217712 .. _`理解EM算法`: https://zhuanlan.zhihu.com/p/54899055 .. _`集成学习综述-从决策树到XGBoost`: https://zhuanlan.zhihu.com/p/50947110 .. _`理解概率密度函数`: https://zhuanlan.zhihu.com/p/48140593 .. _`机器学习与深度学习常见面试题(下)`: https://zhuanlan.zhihu.com/p/47559203 .. _`机器学习与深度学习常见面试题(上)`: https://zhuanlan.zhihu.com/p/45091568 .. _`理解生成模型与判别模型`: https://zhuanlan.zhihu.com/p/46422895 .. _`机器学习中的目标函数总结`: https://zhuanlan.zhihu.com/p/44722270 .. _`理解 logistic 回归`: https://zhuanlan.zhihu.com/p/44583106 .. _`深入浅出聚类算法`: https://zhuanlan.zhihu.com/p/43651469 .. _`理解过拟合`: https://zhuanlan.zhihu.com/p/38224147 .. _`机器学习中的最优化算法总结`: https://zhuanlan.zhihu.com/p/42689565 .. _`理解AdaBoost算法`: https://zhuanlan.zhihu.com/p/43443518 .. _`浓缩就是精华-SIGAI机器学习蓝宝书`: https://zhuanlan.zhihu.com/p/42862322 .. _`用一句话总结常用的机器学习算法`: https://zhuanlan.zhihu.com/p/38067616 .. _``: