该文为笔者在微信公众号:吴恩达deeplearningai 所推送《机器学习训练秘籍》系列文章的学习笔记,公众号二维码如下,1到15课课程链接点
该系列文章主要是吴恩达先生在机器学习方面的经验分享和基础教程,每一章十分短小,旨在让我们能在碎片化的时间中一点点熟悉机器学习的相关知识。
想看该系列文章英文版最新章节的同学请点击这里进行邮件订阅
第1至15章 1、2、3、决策方案很重要-方案示例:
1、获取更多的数据,即收集更多猫的图片
2、收集更加多样化的训练数据集,比如处于不常见位置的猫的图片,颜色奇异的猫的图片,以及使用不同相机参数拍摄的猫的图片
3、通过增加梯度下降(gradient descent)的迭代次数,使算法训练得久一些
4、尝试一个拥有更多层(layer)/更多隐藏元(hidden units)/更多参数(parameters)的,规模更大的神经网络
5、尝试加入正则化(例如 L2 正则化)
6、改变神经网络的架构(激活函数,隐藏元数量等等)
...
选择以上合理的决策方案很重要.
4、机器学习现在发展迅速的原因-有两个主要因素推动着近期的发展:
1、数据可用性(data availability):采集数据的设备越来越多,数据量越来越大
2、计算规模(computational scale):在近些年前,我们才开始能够使用现有的海量数据集来训练规模足够大的神经网络。
-旧的学习算法似乎并不知道要如何来处理如今这个规模量级的数据。
-在小数据集条件下,传统算法是否会表现得更好,取决于人们如何进行特征工程。
-神经网络提高性能方式:
(i) 训练大型的神经网络
(ii) 拥有海量的数据
-数据集一般包含正样本和负样本
-机器学习中的普遍做法是使用 70% / 30% 的比例来随机划分出训练集和测试集
-图片质量会比较影响训练和识别结果。
-训练集(training set)用于运行你的学习算法。
-开发集(development set)用于调整参数,选择特征,以及对学习算法作出其它决定。有时也称为留出交叉验证集(hold-out cross validation set)。
-测试集(test set)用于评估算法的性能,但不会据此决定使用什么学习算法或参数。
-开发集和测试集的使命就是引导你的团队对机器学习系统做出最重要的改变。(合理地设置开发集和测试集,使之近似模拟可能的实际数据情况,并处理得到一个好的结果。)
6、开发集和测试集应该服从同一分布 7、开发集和测试集应有多大-当数据量特别特别大的时候,开发集和测试集的规模并不是越大越好。
8、使用单值评估指标进行优化-查准率(Precision,又译作精度):预测结果为某类的样本中,实际为该类的比例。
-查全率(Recall,又译作召回率):某类的样本中,被正确识别为该类的比例。
-F1 Score为上述的平均值,使用加权平均求出单值指标更方便
-准确率(accuracy)、运行时间(running time)、假正例率(false positive rate)和假反例率(false negative rate)等
10、通过开发集和度量指标加速迭代-在建立一个机器学习系统时,我往往会这样:
1、尝试一些关于系统构建的想法(idea)。
2、使用代码(code)实现想法。
3、根据实验(experiment)结果判断想法是否行得通。(第一个想到的点子一般都行不通!)在此基础上学习总结,从而产生新的想法,并保持这一迭代过程。
-拥有开发集和度量指标,可以使你更快地检测出哪些想法给系统带来了小(或大)的提升 ,从而快速确定要继续研究或者是要放弃的方向。
11、12、何时修改开发集、测试集和度量指标-开发集和测试集必须分布相同,否则有可能过拟合
-对假正例进行严重惩罚
-要对系统周期性得进行评估
-(i) 如果你在开发集上过拟合,则获取更多的开发集数据。
-(ii) 如果开发集和测试集的数据分布和实际关注的数据分布不同,则获取新的开发集和测试集。
-(iii) 如果评估指标不能够对最重要的任务目标进行度量,则需要修改评估指标。
-先快速构建一个最基础的系统,后面慢慢改,一般第一个都是有问题
14、15、误差分析:根据开发集样本评估多个想法-误差分析(Error Analysis) 指的是检查算法误分类的开发集样本的过程,以便你找到造成这些误差的原因。
-对出错的开发集样本进行一定量的收集分析