第02课:一些必须了解的机器学习知识

第02课:一些必须了解的机器学习知识

监督学习和非监督学习

在使用机器学习来解决问题之前,有一个很重要的事情,就是要问对问题。什么意思呢,就是说要能够定量的去描述你想用机器学习来解决的问题,比如说,“我想让计算机辅助医生来诊断癌症” 就不是一个很好的问题描述;如果换成,“我想让计算机从已知的癌症病人的历史病历和体检报告中找到某种规律,然后从一个患者的病历和体检报告来推测未来患癌症的可能性” ,这就是一个很好的问题描述。正确的描述问题可以指导你去选择合适的算法和模型。

监督学习是指存在先验知识的情况下进行训练,比如上面的例子,大量的已知癌症病人的病历和体检报告就是已知的经验,我们也称为样本数据,或者带标签的数据。通过用带标签的数据来进行训练,然后运用训练结果来推导新的样本,如新的患者的病历和体检报告,来判断是否有患癌症的可能,就是典型的监督学习。

非监督学习是指在没有带标记的样本数据下进行训练(无先验知识),比如说想从大量的服务器日志中去找到异常的的记录,但是事先我们并不知道异常记录的特征是什么样的,没有任何的带标记的数据,只有靠计算机去找到其中隐藏的某种模式。非监督学习主要是一些聚类算法,即按照数据的相似度将它们分类。

回到本课程的问题,训练计算机识别熊猫是监督学习还是非监督学习?

答案当然是:识别熊猫属于监督学习。因为我们知道熊猫是什么样子、哪些图片是熊猫。所以需要准备一些带标签的熊猫图片来进行训练。

训练集和测试集

准备好带标签的数据以后,我们还需要从这些数据中划分出训练集和测试集。训练集很好理解,就是真正用来训练模型的数据;测试集是用来检验训练效果的数据,简单来说就是用训练完的模型来推导测试集的数据,对比推导结果和测试数据的标签来评估训练效果,如准确率。

训练集和测试集的划分有很多方法,最简单的是将数据顺序打乱以后,按照一定比例进行切分,比如 70% 的数据划分到训练集,剩下 30% 的划分到测试集。

损失函数(Loss Function)

损失函数是用来衡量学习预测和现实结果差距的转换为具体数值(损失 Loss)的一方法,那么整个训练过程的就是不停的迭代优化(optimize),将损失减少到最小。比如我们用训练得到的模型来推导测试数据集里面的数据,将得到的结果和数据的真实标签进行对比,把他们的差距量化为一个数值,即损失值。然后再想办法降低这个损失值。

优化器(optimizer)

当准备好训练数据,选择好算法以后,其实还有很多工作要做。 一个算法本身还有很多配置参数需要配置,就好像安装完 MySQL 以后要配置端口和 IP,为了优化查询速度,还要调整查询缓存等参数一样。算法的这些参数都会明显的影响训练效果,而且我们并不可能事先知道针对某个具体问题,哪样的参数是最优的,只能根据训练结果调整参数,再重新训练、再评估、再修改,直到找到相对最优的参数集。

一个算法的参数可能有几十来个,对于复杂的神经网络,参数可能有成千上万个,显然用人来调整是不现实的,所以这个工作也是由计算机来完成的,即优化器(optimizer)。它的原理是先选择一个参数集作为起始的参数集,完成一次训练后,根据学习效果(损失值)按照一定算法调整参数,然后不停的迭代调整寻找最优参数集(损失值最小)。

常见的优化算法有梯度下降和其变种,Adadelta、Adagrad、RMSProp 等。

建议自行推导一下梯度下降算法,不是很难,如果要面试机器学习相关的职位,会用到的。

转移学习(transfer learning)

回想一下我们怎么学会乘法的,老师给我们一张九九乘法表,背会了就学会了乘法,并不需要我们从头推导和总结这些乘法规则。如果需要从头来做这些事情,那么学会乘法将是一件耗时很长的事情。因为直接学习了老师的知识,而不需要自己去发现,则很快就学会了乘法。整个人类文明也是建立在这样的知识积累与传递上的。知识的传递,大大加快了文明的发展。

在深度学习的世界里面,也有类似的机制,叫做转移学习。我们可以将已经训练好的模型的参数移植到新的模型上面帮助其训练,比起从零开始训练一个新模型,使用转移学习进行的训练所花的时间将大大减少。

在本课程中,我们也会使用上一门课中事先训练好的物体识别模型进行转移学习,来训练新的模型。

知识准备的差不多了,接下来撸起袖子开始干活吧!

上一篇
下一篇
目录