《机器学习导论》读书报告
**
这个暑假,我参照了米罗斯拉夫库巴特所著的《机器学习导论》和吴恩达的机器学习相关的视频,对机器学习和人工智能相关内容有了一个感性上的粗浅认识,也大致了解了机器学习的一些经典的常用的算法以及现实中对机器学习相关内容的运用,下面来总结一下个人对机器学习相关知识的粗浅认知。
首先书的开篇从爬山法开始引入,介绍了训练集和分类器的概念,所谓训练集,从数学的角度来说,就是在一个坐标体系内表示出所收集到的样例数据的一系列坐标点,再使用一系列的数学方法以及数学函数方法对这些点进行归纳和拟合,综合特征向量的个数以及正则化阶次的选择,选择最佳的拟合曲线,既不能过拟合使函数模型过于复杂导致计算量过大且难以预测数据规律和趋势,也不能欠拟合,使实际数据集和拟合曲线偏差过大使得数据集和拟合曲线所对应的数据之间误差过大,造成对数据的预测的失真,是函数模型失去实际的使用价值。所以在对数据进行拟合的时候,可以使用减少选取特征变量的数量或者正则化的方法来避免过度拟合的现象出现。
如果需要制作出一个训练集,首先需要大量的数据来支撑,其次我们需要对这些数据进行分类,由这些数据归纳出一个分类器,能将数据根据不同的属性或者其他依据将数据进行归纳分类,由数据的分类,我们能够很方便的对数据进行搜索,我们搜索的内容就类似于测试集。在一个数据集中,我们一般取其中的70%的数据进行训练,再使用剩下的30%的数据对训练出来的分类器测试其精确度,这30%的数据就是测试集,我们需要搜索的相关信息也可以算作测试集的一部分,由此我们可以引出另一个概念:搜索的概念。
在人工智能中,搜索的定义是从初态开始,找到一系列步骤,通过一组中间的搜素状态,到达预定义的终态。从一种搜索状态过渡到另一种,每一步都需要人为预设的搜索算符来完成,应用搜索算符是要遵循特定的搜索策略。书中所列举的爬山法就是一种比较流行的算法,通过搜索算符组成特定的搜索策略,以期从初始状态达到我们所希望达到的最终状态。在此期间,我们可以借助终止标准和评估函数来判断算法运行是否应该终止。当已知状态数量超过了某个某个界限或者某种十分接近终态的状态时,或者我们发现所有状态都出现过等等,这些标准都可以用来终止搜索过程,实际的终止公式能反映特定应用的决定因素,有时也需要上述两个或者多个标准。爬山搜索算法的代码编写的细节部分取决于每个人设计程序的风格,但是内容基本都包含一些经典的函数,一个是将现有状态和最终的期望状态相比较,若相同则返回真,这是程序判断是否达到终态与否的方法。第二个函数是选取一个特定的搜索状态,并将其运用到所有搜索算符中,创造一套完整的子状态。第三个函数用来检验一个状态是否已经测试过来避免无限循环。第四个函数用来计算给定状态和终态之间的距离。第五个函数根据计算出的距离分类子状态,并将它们放在列表前端,最后一个函数用来检验状态是否符合终止条件。用评估函数来衡量特定表达式在训练集中的错误率。
上文中所提到的分类器,在监督学习中非常常见。同样的,监督学习就是从给定的数据集中学习总结,或者说拟合出一个函数,当有新的数据到来时可以根据这个函数预测结果,也可以用测试集来检测这个拟合函数的准确性和可靠性。监督学习的训练集包括输入和输出,输入值既是特征值,输出值即是目标值。监督学习最常见的问题就是分类问题,通过已知数据及其对应的输出(即训练样本)去训练得到一个最优模型,然后使用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的,即此模型具有了对未知数据分类的能力,监督学习就是为了让计算机去学习我们已经创建好的分类系统模型。在训练神经网络中,监督学习是一种非常重要的技术方法,高度依赖事先确定的分类系统给出的信息,对于神经网络,分类系统利用信息判断网络的正确与否,不断调整网络参数。监督学习常用的学习算法是回归分析和统计分类。在监督学习中,每一个例子都有一一对应的输出,若将正确答案设为1,错误答案设为0,监督学习模型所对应的输出只有0和1的离散输出。比如判断肿瘤是良性肿瘤还是恶性肿瘤,可以设定一个判断标准,比如说肿瘤块的大小,大于某一个值就输出1,判定为恶性肿瘤,反之则输出0,判定为良性肿瘤。同样的,判断糖尿病也是一样的原理,若血糖长期高于某一个值,则输出1,判断为糖尿病,反之则判定为血糖正常。日常生活中,还有一个比较常用的的用途就是对垃圾邮件进行分类,有用的保留,垃圾邮件自动删除。
与监督学习相对的就是无监督学习,无监督学习是只把数据交给算法,输入数据没有被标记,也没有确定的结果,样本数据的类别也是未知的,需要根据样本间的相似性进行分类,常用的方法就是聚类算法,试图使一大类内的差距最小化,而类与类之间的差距最大化。在无监督学习的过程中,计算机没有一个特定的标准和目标去学习,不是告诉计算机怎么做,而是让计算机自己去学习怎么做。通常采用两种思路,在设计算法拟合数学模型函数时使用代价函数,当计算机做出成功的事情时,函数模型对其采取奖励机制,当计算机做出错误的行为时,可使用算法对其进行惩罚,比如我们在预测肿瘤为良性还是恶性,就可以使用对数函数,如果预测错误,代价函数值会非常大,此时就是对计算机的错误行为进行了惩罚。在日常生活中也有许多地方用到了无监督学习中的聚类算法,比如我们使用的今日头条的相关新闻推送、BiliBili中的相似视频推送,以及消费市场的细分,都是如此。
在寻找一组数据集的拟合函数的时候,我们需要有一个评判标准去判断这个拟合函数是否能最大限度反应当前的输入输出值,并且不能过拟合使得函数过于复杂导致计算量过大并且难以寻找数据的趋势和规律。此时我们就需要用到代价函数,代价函数是用于找到最优解的目的函数。在实际例子中,数据反映在坐标轴上会以很多散乱的点的形式呈现在我们面前,我们要想找寻这些点之间的关系解决回归问题,就需要将这些点拟合成一条曲线,找到最优的函数方程参数来使这条拟合曲线更能代表所有参数。而为了找到最优解,就需要使用代价函数来求解,就书中所讲的平方误差代价函数为例,平方误差代价函数主要思想是将实际数据的值和我们拟合出的线对应做差,求出我们拟合出的直线和实际的值之间的差距,但是这个值有时候会受个别极端数据的影响而产生巨大的波动,所以我们采用类似方差再取二分之一的方式来减小个别数据的影响,而最优解就是实际值和拟合函数的值的差最小的时候,即代价函数值最小的时候,此时的拟合曲线与实际数据最为贴合。
我们应该如何求代价函数的最优解呢,一般来说使用梯度下降法来迭代求解,得到最小化的代价函数和模型参数值。通俗来说,就是使用梯度下降方法使代价函数沿着下降最快的方向减少。在梯度下降的算法公式中,α代表步长或者学习率,即每一步沿着梯度负方向前进的长度,x(i)指的是特征,代表的是样本中的输入部分,y(i)代表的是样本中的输出部分,(x(i),y(i))代表样本。假设函数就是我们为了拟合样本而使用的假设函数。而代价函数(即拟合函数)就是为了评估数学模型拟合的好坏,代价函数极小化则代表着拟合程度最好,对应的模型参数即为最优参数。在使用梯度下降法的过程中,首先我们要确认优化模型的假设函数和损失函数然后我们要将算法的相关参数初始化。在使用算法的过程中,我们首先要确定当前位置损失函数的梯度,然后再用步长乘以损失函数的梯度,在确定所有的θi梯度下降的距离都小于e,如果小于e则算法终止,当前所有θi即为最终结果,否则就更新所有θ,更新完毕后从第一步在开始操作。梯度适用于数据量比较大的数据集,用于最小化任意代价函数J(θ)的值减小算法误差。
在实际处理数据的过程中有些结果不是有单一的输入变量决定的,而是由许多变量一起决定的,比如说一间房屋的价格会由面积,在楼层中的位置,我是的数量等等决定因素,会有许多变量一起来决定房屋的价格,若是想求出房屋价格的最恰当的拟合曲线,首先要写出假设函数和代价函数,然后需要使用的是多元梯度下降法,如果想要梯度下降的更快,我们需要使用特征缩放缩小范围,以期达到更快的下降速度。同时,还要找到合适的学习率α。但是梯度下降法有一个缺点,就是需要求代价函数中的每个θj的偏导数,并将它们置0,算出来的θ值就是使代价函数J(θ)最小的值,需要学习率α和许多步的迭代,这种方法太麻烦,但是变量很多的情况下也能运行的很好。正规方程适用于变量n不太大的时候,如果变量n太多,正规方程需要计算的逆矩阵计算量太大,会导致程序运行卡顿和缓慢。因此这两种方法需要结合起来在恰当的时候选择恰当的方法,一般来说,由n的大小结合实际情况来判断。
机器学习有几种比较经典的算法,神经网络算法是结合仿生学的一种算法,模仿的是人类的大脑,神经网络的模型主要由输入层、隐藏层和输出层构成,也叫前向传播,简单类比于数学上的复合函数,从数学上对神经网络进行了假设。神经网络算法可以用于表示逻辑电路的运算。如果计算多层神经网络,需要从输入层到隐藏层,再把隐藏层当输入层重复计算。若从输出层往输入层进行计算,称为反向传播算法,也称BP算法,建立在梯度下降的基础上,其输入输出的关系实质上是一种映射关系,来源于简单非线性函数的多次复合,本质上是一种监督学习算法。由于反向传播算法理解起来较为困难,理解的还不够透彻到位,需要进一步加强学习。
以上就是本人在暑假期间所学习到的内容。
【参考文献】
1.米罗斯拉夫库巴特.机器学习导论[M].北京:机械工业出版社.2017.
2.吴恩达机器学习教学视频