机器学习漫游(1) 基本设定

发布时间:2026/7/2 15:04:05

机器学习漫游(1) 基本设定 最近的十几年机器学习很是火热尤其是其中的一个分支深度学习在工业界取得很好应用吸引了很多眼球。不过从其历程来看机器学习的历史并不短暂~从早期的感知机到八十年代火热的神经网络再到九十年代被提出的经典算法集成学习和支持向量机而最近的十年算得上是机器学习发展的黄金年代软、硬件计算条件大幅提高尤其是现在数据量的爆发式增长让机器拥有充分“学习”的资本另一方面现在开源项目越来越多即便一些算法的实现很复杂我等小白只需要调几个接口也能完成对数据的处理在这个年代里不同的人充斥着不同的野心计算机科学家仍在探索人工智能的奥义资本、媒体都在热炒机器学习概念大数据、AI俨然成为宠儿各行程序员也在茶余饭后有了谈资。盛名之下其实难副机器学习、人工智能的发展还处在浅层特别是深度学习这些被媒体过度炒作的产物从计算智能到感知智能再到认知智能前面的路依然很远。长路漫漫不管怎样越来越多的人投入这个行业确实对行业本身有很大的发展特别是可以看出国内外很多高校的专家学者已经把研究阵地转向工业不仅仅是因为报酬丰厚更因为工业界提供了现实场景更丰富的数据而这些数据让算法拥有很好的施展空间。还记得16年在亚马逊买了一本南大周志华老师的机器学习到手之后真的超出了预期书上面的算法介绍的比较系统每一章节提到了某个领域的经典算法后面给出的附录也适合非科班同学看懂~更难得是这是一本中文的可以当成教材的书~而且从写的内容来看真的很谦虚、严谨总之比较推荐入门的同学看因为之前一直被广为人知的还是NG的斯坦福大学Machine Learning公开课讲义现在终于有本好的中文图书了。 似乎有些偏题了:)初衷只是想写一个机器学习系列笔记的开篇算是对自己的一个督促吧现在很多时候感觉脑子不动真的是要上锈了~好了不多说了下面进入正题吧~1.概念机器学习到底是什么Wiki上有Tom M. Mitchell这样一段定义A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E.我经常这样总结 “设计模型并从已观测的数据中学习出模型参数然后通过模型对未知进行分预测 。”这样说似乎还是有点抽象台大李宏毅老师ppt解释的非常形象这个图解释的含义是什么呢可以这样看机器学习的本质是进行预测比如我们想要判断一幅输入的图像是猴子猫还是狗。怎样预测呢1首先我们需要找到一个模型来表达预测的过程这个模型可能包含一个或者多个需要设定的参数因此模型是一个多个函数组成的集合2在模型确定了之后我们需要从数学上寻找一个函数来表示这个模型即从函数集合中寻找一个能够“准确”地表达模型这一步我们需要在已知的数据上进行学习即让函数能够在已知数据上获得很不错的预测效果3使用2中确定的函数对未知的数据进行预测。一个典型的机器学习系统包含输入和输出空间分别对应输入和输出所有可能取值的集合。输入值简称样本描述了样本不同特征或者属性的取值它可以是一个向量矩阵张量或者其他更为复杂的数学形式比如x(x1,x2,...xn)输出值一般是离散或者连续的值如果是离散的对应于分类问题此时描述了样本的类别标签如果是连续的则对应于回归问题描述了具体的输出值输出值通常可以用y表示。机器学习系统的目标在于利用已知数据信息设计“合理的”函数映射在给定新的未知数据时使得输出值比较符合我们的预期F{f|Yfθ(X),θ∈Rn}大写的X和Y分别对应于某个输入或者输出的集合。好的特征输入对于机器学习模型的设计尤为重要比如很多电商需要预测用户可能购买或者感兴趣的产品怎样基于用户过去的购买、浏览、收藏等行为构建行为特征把具体的用户行为数学化如果我们需要对房价进行预测我们可能会拥有已有房产的大小、地理位置、户型甚至当前房市总体行情等特征我们需要选择哪些特征并处理成模型的输入形式这对预测的最终结构非常重要像这种特征选择或者处理在数据挖掘中做的非常多我们有时叫做业务模型构建这其实并不是机器学习过度关注的问题机器学习更加关注与模型和算法本身。我把机器学习做的事情概括成任务、策略和方法其中任务描述了机器学习的最终目的而策略描述了机器学习在处理问题时使用的方案方法则是机器学习在处理实际问题中使用的具体方法。2.任务机器学习的本质在于使用已知数据的”经验“来预测未知数据从模型的输出来看我们处理实际问题的最终目的主要可以分成两种一是分类classification即预测某个输入样本对应的类别或者叫标签二是回归regression即预测输入样本对应的具体的输出值。1通俗一点的来讲分类也就是我们通常所说的“识别”比如上图中判断图像中是否包含一只猫。分类包含二元分类和多元分类即模型可能输出的标签是2个或者大于2个比如判断图像中是否存在猫判断一封邮件是不是垃圾邮件这里输出有或者无是典型的二元分类判断图像中是猫还是狗、猴子或者其他动物则是多元分类可以看出分类模型中输出的值是离散的值。2回归是指模型的输出可能是多个连续的值比如要预测明天天气的最高温度这里的温度就是一个存在于某个范围区间的值房价预测、无人驾驶方向盘输出角度预测都可以看成是回归任务。3.策略在不同的场景下我们会遇到不同类型的数据而数据的不同也会导致我们设计机器学习模型的策略不同通常情况下可以分成以下几种1有监督学习supervised learning即给定的样本是有标记的2无监督学习supervised learning即给定的样本是无标记的3半监督学习semi-supervised learning一部分样本是有标记的另一部分是无标记的。大多数现实机器学习模型都是有监督学习因为已知输出的数据训练效果对最后预测的结果影响太大了。有监督学习强调人类教“机器”进行“学习”比如小孩子可能没有见过猴子现实的或者图片但是父母会告诉他“这是一只猴子”因此孩子的大脑皮层会对此做出记忆和处理认为这种类型的东东是一只猴子并且在看到其他动物的时候大脑会将其图像和猴子的特征进行相似度比较来判断是一只猴子还是其他动物这一行为是典型的有监督学习无监督学习强调让机器自己去学习比如聚类算法机器可以自己进行归类而不需要任何标记的数据。考虑到现实场景获取有标记的数据代价较高你需要人工的方式去打标记而网络社会中包含大量没有标记的数据这些数据很好获取更为重要的是这些数据对于对于预测本身是有很大帮助的比如近些年比较热门的一个方向迁移学习如果我们要做人脸识别由于人脸头像存在角度、光照等复杂外界因素的干扰那么是否可以借助这些大量的不同场景的无标记数据实现模型本身的迁移从而使其更能适应干扰提高识别的精度呢这就是迁移学习的一个重要作用。4.方法方法就是具体的模型设计用到的方法比如线性方法或非线性方法线性方法比如早期的感知机线性回归线性的子空间投影方法如经典的降维算法主成分分析等等非线性方法比如现在火热的深度神经网络支持向量机等等这些在后面的文章中会提到。5.经验风险最小化、结构风险最小化和过拟合、欠拟合有了模型和样本之后我们需要利用这些样本即通过这些已经观测得到的数据对模型参数进行训练这个过程也就是“学习”或者“训练”然后通过学习的模型对未知数据进行预测的过程可以称之为“预测”预测的目的在于检验学习得到模型的好坏。然而一个机器学习系统的好坏不仅和模型设计有关而且和数据的特点有很大关系“No free lunch”告诉我们模型的设计必然会带来某些方面的代价或者损失因此必须综合数据的特点、算法模型、开销等等各个方面来设计比如在某些情况下样本规模大小和数据的分布完全不知道倘若在设计模型的时候过于追求精度致使模型对训练样本的预测效果很好但是在预测新的未知数据时效果很差也就是我们常说的“过拟合”问题。举一个很直观的例子小明学习的基础并不是很好在学习了一个新的知识点之后做了很多习题这些习题套路固定题型类似然后需要进行测试如果测验用的题目和题型与练习的题目变化不大那么小明在考试中很有可能取得很好的成绩然而这种测试获得的成绩“掩盖”了背后的假象一旦出题老师换一个全新的套路小明的成绩很有可能就炸了。可以看出“过拟合”意味着模型适应不同场景数据的能力我们有时候叫做“泛化能力”。过拟合问题是机器学习长期需要面对的挑战之一而现实中有很多情况掩盖了过拟合带来的问题其中之一便是数据量比如小明如果平时做的习题足够足够多那么还是很有可能应付测验的。再者我们也不能让一个模型为了过于适应复杂场景追求算法的适应能力但是过多的损失了精度这就是“欠拟合”。下面的样本分布图样本分布图通常以二维坐标的形式展示样本的分布情况给出了一个示例来展示欠拟合和过拟合。用小圈圈表示二维平面中的样本其中红色圈圈表示训练样本绿色圈圈表示真实样本然后我分别用不同的多项式曲线去拟合这些样本可以看出第一幅图中的简单直线并没有准确的对训练样本和真实样本进行拟合但是从一定程度表示出了样本的“大概趋势”这是“欠拟合”第二幅图中的曲线拟合地效果比较好尽管在个别样本稍有偏差但就预测真实样本而言是三张图中最好的这正是理想情况下需要寻找的模型相比较而言第三幅图中的曲线虽然能“完美”地反映出训练样本点的位置不过存在很大的缺陷也就是曲线过于复杂在真实的环境下会遭遇严重的过拟合问题比如横坐标9到10的这些点与预期值差别巨大。​在很多情况下大量的数据是不可多得的有时候我们尝试从模型而不是数据方面着手解决此问题因此怎样合理地控制模型使之避免过拟合呢首先在监督学习中我们需要定义一定的标准来保证学习的精度的好坏显而易见的是我们可以使用一种叫做“损失函数”的东东来衡量结果损失函数可以解释为“衡量预测值和实际值之间的一致性”。损失函数可以使用L(Y,f(X)))来表示很容易想到的一种关于L的表示是使用衡量预测值和实际值之间的偏差为了保证偏差总是大于0的可以用L(Y,f(X)))(Y−f(x))2来表示还有的模型可能会使用偏差的绝对值之和、0-1值或者其他的方式定义损失函数。实际上如偏差平方和形式的损失函数是基于最小二乘拟合的一种应用基于极大似然估计可以得到在后面博客中写到线性回归的时候提到~如果给定训练集合也就是包含多个样本的数据集模型关于样本的平均损失可以称之为经验损失或者经验风险顾名思义也就是根据已给出的数据经验式地衡量模型的好坏。比如对于训练集{(x1,y1),(x2,y2,...,(xm,ym))}对应的经验损失可以定义为Remp(f)1n∑ni1L(yi,f(xi))直观地来说如果需要机器学习的预测效果好要求经验损失最小也就是我们常说的经验风险最小化(Empirical Risk Minimization, ERM)基于此策略可以考虑如下的经验风险最小化最优化模型min1n∑ni1L(yi,f(xi))在样本数据量很大的情况下ERM往往能获得很好的预测效果但是正如前面提到的一旦数据规模较小会出现“过拟合”的情况。过拟合是很多机器学习问题都会面对的一大挑战很多方法用来避免出现过拟合。除了增大数据量以外其中一个常见的做法是对模型的复杂程度进行约束也就是添加正则化项(regularizer)或惩罚项(penalty)直观上来说模型越复杂越难以模拟真实场景。翻看很多paper不管是大牛的也好灌水的也好限制模型复杂度作为惩罚项已经是一件司空见惯的事情了~毕竟惩罚项很容易对模型进行解释了尽管有时候随意添加惩罚项的效果并不怎么好... 这种约束模型复杂程度的做法叫做“结构风险最小化”意在ERM的基础上限制模型复杂度Rsrm(f)1n∑ni1L(yi,f(xi))λJ(f)上式中J(f)即模型复杂度项系数λ为ERM和模型复杂惩罚之间的平衡因子~不过不同模型处理过拟合会使用不同的方法比如在回归分析中添加的L1L2惩罚项得到的lasso回归和岭回归在决策树中使用剪枝来降低模型复杂度在深度神经网络中使用dropout等等。6.模型评估和验证在我们训练得到一个模型之后我们需要一定的手段来对模型进行评估大多数情况我们会预留出一部分数据作为测试集使用这一部分数据进行验证工作。在模型评估环节当中我们不仅需要模型有精确地预测效果还需要很强的健壮性在算法精度和性能上都有好的表现。通常的一个做法是我们需要对样本集合做交叉验证多次选取不同或者不同规模的训练集合进行评估。另外不同的场景我们需要考虑的侧重点可能不一样比如我们做一个账号产品缺陷检测系统我们会更关注在真实的缺陷样本是否被检测出来而不是真实的无缺陷样本有没有被检测出来。我们在类似于这样的二分类问题中使用召回率、错误接受率、正类准确率、准确率和F-measure等指标来衡量分类效果用FP、FN、TN和TP定义以下行为样本的个数FP真实样本是负例被错误地预测为正例FN真实样本是正例被错误地预测为负例TN真实样本是负例被正确地预测为负例TP真实样本是正例被正确地预测为正例。召回率Recall Rate其定义为TPTPFN。召回率是一种重要的分类器性能衡量指标因为在实际应用中需要重点考虑的是正类的数据其反映了被正确判定的正类样本占总的正类样本的比重即衡量着正类样本检测的全面程度。错误接受率False positive rate其定义为FPFPTN。 其反映了分类结果中负类数据被预测为正类数据的比例。正类准确率Precision其定义为TPTPFP衡量检测到正类样本的准确率。准确率Accuracy其定义为 TPTNTPFNFPTN。其衡量着所有正确分类的样本占总样本的比例。从以上定义看出一个好的的分类器预测模型希望能满足较高的召回率、正类检测准确率以及准确率较低的错误接受率。然而实际情况中查准率和召回率之间往往难以同时都达到较高的值需要在二者之间寻求权衡因此需要折中考虑二者。通常引入F-measure值来考虑衡量准确率和召回率的调和平均数其被定义为F2∗β∗recall∗pre/(recallβ2∗pre)现如今很多模型的优劣可以通过比较有名的benchmark来度量每个benchmark的度量标准可能不一样比如在图像分类竞赛中有些度量标准还包括top5我们用最匹配的5个样本来衡量准确率因此模型评估很大程度取决于业务场景和设定的规则。7.总结

相关新闻