我们在创建一个优秀的神经网络需要一个漫长的循环过程。
先选择一个架构,再对我们的架构进行训练,最后诊断我们的误差,再回到我们重新的循环,直到我们的神经网络足够优秀。这就是机器学习迭代的过程。
误差分析:
我们举一个例子:
我们有500个交叉验证误差集,但是我们的算法错误的分类了其中的100个,我们经过寻找,发现了下面几种错误的分法,以及他们分别的个数。
在我们的算法做的并不是这么好的时候,找到错误的案例也可以很高效的给我们提供很多的有用的数据,尽管我们的数据就增加了一点点但是效果却非常的好。
这种方法我们可以很好的通过算法中出现的错误得到一些新的改进方法,当然,对于一些比较罕见的问题可能并没有这么好的效果。
添加数据:
添加大量的数据是一个很好的训练算法模型的一个方法,但是它同时也会消耗我们大量的时间,也会非常的昂贵,而我们提供更多不同特征的数据,似乎是一个更好的方法,正如我们在误差分析中知道的通过添加不同的特征以及他们的数据可以得到一个更好的模型。
1,当然这里有一种更加好的方法,可以增加我们的训练集的数量,它的名字叫做数据增强。
如何做到数据增强呢?我们的方法就是比如有一个数字A的图像识别,我们可以旋转,放大,缩小,对比度变化,镜像,这样子我们就可以得到了A但是他们的训练集却增加了。
我们也可以把他们放在网格中,让网格子扭曲起来从而得到很多训练集的数据。
再做一个比方:我们在语音识别中,我们对我们的语音加入不同的噪音,我们就可以得到不止一个的训练集了。
所以我们如何才能完成数据加强是最后的问题。 这是我们需要通过别的方式完成的。
2,还有一个方法就是我们的数据合成(data Synthetic),它和我们的数据增强不同之处,就是它需要我们从0开始创建我们的数据而不是数据增强,通过改变原有数据集得到新的数据。
举个例子:我们需要给我们的图片,识别其中包含的文字,我们可以先去获得我们的艺术字如右边图,我们可以看到他们有各种字体,我们通过换色或者旋转的方式就可以创造出新的文字。
我们可以比较一下左边和右边的字,他们的样子也很相近,这就完成了我们的数据合成的任务
这种方法一般常用于我们的图像识别的领域。
数据增强和数据合成就是我们使用的比较多的方法,可以为我们的数据集增加更多的数据。
在过去 ,人们更加关注于搭建一个好的模型或算法,而当我们把中心转移到数据时,我们可能会得到更好的训练机会,给我们的模型性能进行训练与提升。
迁移学习:
迁移学习顾名思义就是使用其他任务中的数据作用于当下的项目。
我们会先得到一个比较大的训练集的数据去训练我们的上面一个比较新的模型,而得到它每一个神经层的数据,而我们需要做的只需要把他们的数据迁移到我们识别0到9的数字,我们在隐藏层的W和B的值不需要任何的改变,我们唯一要重新训练的只有我们的输出层的W和B。这就是我们的迁移学习。我们把这里的第一步叫做监督预训练(supervised pretraining),第二步就叫做微调(fine tuning)
在这里我们有两个方法来训练我们的模型。
第一种就是我们只训练我们输出层的W和B的参数,当然这只用于我们训啦比较小的数据集。
第二种就是当我们遇到大的数据集时我们依旧是需要从头开始我们的训练。
这里给我们一个逻辑,我们需要大量的数据,先进行一个预训练,我们再用小范围的数据进行我们的优化调节。它的优点就是,我们在网上可以直接获得一个训练好的模型,这就可以节省我们的时间,而我们只需要改进我们的输出端的参数即可。
为什么我们可以通过识别不同的物体,比如猫,狗,车什么的用来识别我们的数字呢?这就要归功于我们的神经元,他们从对猫狗等物体的识别渐渐学会了从物体的边缘到物体的角落,到最后的形状的识别,而这些就恰恰是识别数字中也十分需要的。
机器学习的完整周期:
我们机器学习主要分为4个周期。第一,先确定我们的模型使用的范围,比如是语音识别还是图像识别等等,第二我们需要收集数据,用到我们的数据增强,数据合成以及单纯的得到更多的数据,第三,我们要对他们进行数据的训练,这里我们需要通过偏差与方差以及我们的误差分析,重新在我们的数据收集和数据训练来上几个循环得到我们最佳的算法模型,最后在部署给公共使用,当然在部署的时候我们也还是需要对我们的模型进行维护等,当然同时我们也会从我们的平时部署中我们得到了更多的数据而不断的改变我们的算法。
关于部署:
我们在这里用到了Api调用算法,而我们机器学习的算法主要运行在我们的推理服务器上,我们通过手机的app发送我们的消息,从而从我们的模型中获得我们所预测的值。
对于要在几百万人使用的情况下,我们需要制造一个软件可以来收集和改进我们的模型性能的问题。
我们也把部署的部分称为我们的MLOps ,它们的职责就是构建,部署,维护机器学习系统,来确保我们的模型性能一直处于一个比较好的状态。
伦理与公平,道德:
我们在创建一个机器学习时,不应该有任何偏见的因素在里面。不要建立对社会有害的机器学习系统。
倾斜数据集的误差指标:
我们在预测班级时,会预测是与不是,而实际也是是与不是看上图我们可以知道两个新的概念,准确率(precision)与召回率(recall):
准确率就是真正阳性/预测阳性,而召回率则是真正阳性/实际阳性。
当我们的预测一致为0时,就说明我们的真正阳性为0,那我们的准确率和召回率也都为0了。
高准确率意味着模型在分类时能够更准确地识别出正样本,而高召回率意味着模型能够更全面地找到所有的正样本。
对于准确率和召回率的平衡也是非常重要的一个课题,我们在逻辑回归中会普遍把我们的0.5作为1和0的分界线,但是当我们把分界线上升到了0.7,这时我们的准确率会上升,而我们的召回率则会下降,但当我们把分界线变为0.3时,我们的召回率会上升而我们的准确率则会下降,在这之间有一个可以让他们保持平衡的值,也就是它们之间的分界线平衡点。
那我们如何权衡它们的大小关系呢?
我们在这里用到了F1分数的方法:(F1 score)
它的方法是F1 score = 2*(准确率*回归率)/(准确率+回归率),这样我们就能得到每个算法所得的F1分数了,最大的就是最好的。它也可以被叫做调和平均值。