深度学习-评估模型并改进
小白入门发一些网课笔记并整理
东西有点多
机器学习项目的完整周期
以语音识别系统为例:
1.决定项目的具体内容和你想要解决的问题
2.决定机器学习系统需要哪些数据,并进行工作以获取音频和相应的转录或标签
3.训练语音识别系统,并进行错误分析迭代改进模型
4.应用并持续监管性能
开发机器学习系统的过程,当你在自己进行开发时,希望你能在机器学习开发的多个阶段做出正确的决策。
- 决定系统的整体架构,这意味着选择你的机器学习模型。以及决定使用什么数据,可能还需要选择超参数等
- 根据这些决策实现并训练一个模型
- 下一步是实施或查看一些诊断,比如查看偏差和方差
评估模型
划分1-训练集和测试集

在这里面,把训练集的70%作为训练集,另外30%作为测试集,去验证我们的模型。
8:2的比例也比较常见。
右边符号,x,y右上角的括号数字表示第几个样本
举例1:对于线性回归

如果Jtrain很小,但是Jtest比较大,说明模型的泛化能力比较差
举例2:对于分类问题
假如你对手写数字进行识别和分类,比如0和1

对于分类问题还有一种方法
通过测量算法误分类的测试集和训练集的比例

这里通过计算结果,得到预测的类别,然后去对比预测的类别(0或者1)是否正确,而不是去计算预测值和真实值(比如0.1和0.9)的差别。
划分2-训练集,测试集,交叉验证集

这里举例说明了一个线性回归的例子,不知道如何去选择几次方,这里列出来1-10次,然后依次去计算他的Jtest,取最小,再去验证新的样本,会发现他可能过拟合了。
这个方法并不推荐
方法:不再将数据集分为训练集和测试集,而是分为3部分:训练集,交叉验证集,测试集
将60%作为训练集,20%作为交叉验证集,20%作为测试集

交叉验证:用它来检查或交叉检查不同模型的有效性或准确性。判断哪些地方可以改进
交叉验证误差,也被称为验证误差,开发集误差,或者dev误差

计算不同多次项的交叉验证误差,选择交叉验证误差较小的一个

你在选择w,b,d的时候,没有使用测试集拟合任何参数,所以在这个例子中,Jtest将是一个公平的泛化。一种更好的模型选择方式,并且适用于其他模型
偏差和方差
含义
查看你的算法在训练集和交叉验证集上面的表现
左:欠拟合 中:just right 右:过拟合

下图:横轴是多项式次数,纵轴是误差

对于Jtest,次数越高,可以表达的多项式越复杂曲线可以更多弯弯绕绕拟合更多的数据,所以通常次数越多,Jtest也随之下降
对于Jcv,在未拟合的数据上的表现,次数很低欠拟合,次数很高过拟合,所以在中间某个值刚刚好。
高偏差意味着在训练集上表现不佳,高方差意味着在交叉验证集在表现比训练集差得多。
正则化参数对其影响
关于正则化参数的选择如何影响偏差和方差,从而影响算法的整体性能
是保持参数w保持小与拟合训练数据之间权衡的正则化参数

左:过大,w趋近于0,对于f趋近于b,一条直线。
中:刚刚好
右:过小,没有起到防止过拟合的作用
尝试不同的取值,使用不同的正则化参数拟合参数,然后在交叉验证集上评估性能,你可以尝试选择最佳的正则化参数值。

建立基准性能水平
我们前面说到了一些高偏差,高方差,那什么算高,高于多少算是高?
这里是一个语音识别的例子
如果你要训练一个语音识别系统并测量训练误差,训练误差指的是算法在你的训练集中未能完全正确转录的音频片段百分比。假设这个数据集的训练误差是10.8%,这意味着它在89.2%的训练集上完美转录,但在10.8%的训练集上出现了一些错误。
基准性能水平,你合理期望你的学习算法最终达到的误差水平是什么
1.建立基准性能水平的一个常见方法是测量人类在这个任务上的表现
2.如果有某种竞争算法,如果你能测量它,就可以建立一个基准性能水平。
3.根据以前的经验进行猜测

学习曲线
学习曲线是一种帮助理解你的学习算法在训练样本数量增加时表现的方法
另外一个特点,即交叉验证误差通常会高于训练误差
训练误差反映模型在已见数据上的误差,是 “拟合程度” 的体现;
交叉验证误差反映模型在未见数据上的误差,是 “泛化能力” 的体现。
即使模型没有过拟合,由于新数据的分布与训练集不可能完全一致,模型对新数据的预测误差也会高于训练集。
欠拟合的情况:
欠拟合时增加训练集大小能让模型在有限复杂度下提升泛化能力,从而使验证集损失 J cv逐渐下降。
当训练数据很多的时候,难以拟合到的数据也越来越多,所以Jtrain训练误差也越来越大

过拟合情况:
Jtrain小于人类表现水平,得到不切实际的低误差
增加训练集大小能让模型在有限复杂度下提升泛化能力,从而使验证集损失 J cv逐渐下降
但是实际应用需要训练许多使用不同大小子集的模型,计算量比较大。

精确率和召回率,F1
误差最低的算法可能是一个不特别有用的预测。
在处理偏斜数据集的问题是,我们通常使用不同的误差指标,而不仅仅使用分类误差来判断你的学习算法的表现。
一对常见的误差指标是精确率和召回率

精确率和召回率是二分类模型的核心评价指标,均基于真实标签与预测标签的匹配情况(TP:真阳性、FP:假阳性、FN:假阴性,TN:真阴性)。
精确率(Precision)
核心是 “预测为正的结果准不准”,即模型预测为阳性的样本中,真正属于阳性的比例。
召回率(Recall)
核心是 “真实为正的样本漏没漏”,即所有真实为阳性的样本中,被模型正确预测为阳性的比例。
精确率和召回率的平衡
提高阈值会导致更高的精确度,但也有导致更低的召回率。

因为有时候不太好比较,精确率和召回率,我们选择哪个大的更好还是平均更好还是什么样的模型
F1score:一种将精确率和召回率结合成单一分数的方法

P:精确率 R:召回率
一般选择F1分数高的
改进方法
偏差与方差
神经网络之所以如此成功的原因之一是,神经网络与大数据或希望拥有大型数据集的概念相结合,为我们提供了一种新的方式来解决高偏差和高方差的问题。

方法:
- 先训练,然后计算Jtrain和人类水平作比较,如果误差远大于人类水平
- 欠拟合,训练更大的神经网络,直到Jtrain接近人类水平
- 在Jcv上面验证,如果误差较大,存在过拟合风险
- 增加数据集训练
- 然后重复上面的步骤1-4
局限:
- 训练更大的神经网络可以减少偏差,但在某些时候计算成本会变得非常高。GPU对于加速神经网络非常有用。
- 可能获取不到更多的数据
事实证明一个经过适当正则化的大型神经网络通常会表现得和较小的神经网络一样好,甚至更好。主要的伤害是它会减慢你的训练和推理过程。
错误分析
举例:假设你有MCV等于500个交叉验证样本,而你的算法错误分类了这500个交叉验证样本中的100个。错误分析过程仅仅是指手动查看这100个样本,并尝试或得算法出错的洞察。并进行分类比如:
- 单词拼写错误3
- 不正常的电子邮箱路由信息7
- 尝试窃取密码18
- 钓鱼邮件5
- 药品21
注意:
一个邮件可能有几个类别的属性。
如果数据规模过大,可以抽取其中的一个子集来进行查看
得到错误的分类之后,我们可以根据错误的数量和类别去进行针对性的处理。比如药品,增加更多的专有名词。
数据增强
尝试获取所有类型的更多数据可能会很慢且昂贵,相反,添加数据的一种替代方法可能是专注于添加-错误分析表明可能有帮助的类型-的更多数据。
一种用于图像和音频数据的技巧,可以显著增加你的训练集大小,这种技术称为数据增强,我们要做的是利用现有的训练样本创建新的训练样本。
举例1:假如你正在尝试识别OCR(光学字符识别)问题中的A-Z,0-9

将A进行旋转,变大,变小等,得到更多的样本,但是标签不变,还是字母A
对于更高级的数据增强实例,你还可以在字母A上放置网格,通过引入这个网格的随机扭曲,你可以对字母A进行扭曲,从而得到更多的样本。

举例2:假设你有一个语音搜索应用,可以在语音中加入不同的背景噪声,或者不好的手机信号下得到的语音。

数据增强的一个技巧是,你对数据所做的更改或扭曲应该代表测试集中可能出现的噪音或扭曲类型。
还有一种技术是数据合成,即从头开始创建全新的样本。你如何训练一个OCR算法来读取这样的图像中的文本,输入随机文本并使用不同的颜色,对比度和非常不同的字体进行截图,得到大量样本。这需要很多工作,但是有时可以帮助你为你的程序生成大量数据并极大提升你的平均性能。合成数据生成最常用于计算机视觉任务,较少用于其他。
迁移学习
对于数据量不大的应用,迁移学习是一种非常棒的技术,他允许你使用来自不同任务的数据来帮助你的应用。
你想识别数字0-9,但是没有很多的训练样本,可以先用汽车,人等等(相当大的样本量上面)进行训练,得到一个有很多分类(比如1000)的网络,并且得到网络每一层的参数w,b。
接下来,保留之前的网络结构,最后输出层变化只需要识别0-9(10个输出)

对于参数,你有两种选择
- 保留除了输出层以外的w,b参数,只重新训练输出层的参数。(对于较小数据集可用)
- 以之前学习到的w,b参数作为初始值,但是全部都重新进行训练。(对于较大数据集可用)
有些人会在网上发布自己训练的神经网络,在这种情况下,我们再进行训练(迁移学习)会较快的得到一个较好的结果。
为什么迁移学习有效?
如果你正在训练一个神经网络来检测图像中的不同物体,那么神经网络的第一层可能会学习检测图像的边缘,神经网络的下一层然后学习将边缘分组以检测角点。(就是每层越往后面识别的范围可能更多,前几层识别一些边缘,对于我们最后识别数字也能用上)
预训练的一个限制是,图像类型x在预训练和微调步骤中必须相同,所以如果你想解决的最终任务是一个计算机视觉任务,那么预训练步骤也必须是一个在相同类型输入上训练的神经网络。(就是说识别图片只能用图片进行训练,不能用识别语音的神经网络迁移学习给识别图片的)
更多推荐

所有评论(0)