结构化机器学习项目
第二周
1.1进行误差分析
在误差分析时,有时导致误差的原因会有很多种,这时你应该统计不同错误的错误数量,得到导致错误的原因(如图片过于模糊,标注有错等等)的具体比例之后,你就可以得到启发,去选择出最有效的方向去做出改变。
1.2清楚标注错误的数据
1.标注错误分随机错误和系统错误,随机错误或许不会影响系统的最终效果,但如果你犯了一直把白色的狗标成猫的系统性错误,影响将是非常大的。
2.标注错误的比率要看在总体中占有错误的比率有多少,如果偏大,最好优先解决它。
3.开发集和测试集必须来自同一分布,训练集可以来自稍微不同的分布,(这个应用在系统移植上是否是个启发呢?)。
1.3快速搭建你的系统,然后进行迭代
步骤:
1.确定你的系统所要达到的目标
2.搭建一个机器系统,找到训练集,开始训练
3.根据得到的训练效果,结合之前所说的偏差,方差分析方法,确定下一步改往哪个方向改(甚至可以帮助你改变思路,得到新的研究方向)
4.重新得到改进后的效果,如此迭代,直到效果满意。
1.4如何对你收集到的数据进行划分?
按老师的例子,你的训练集可以是爬虫爬来的,即便跟的目标对象的数据有所不同,也没关系,这个数量可以很大。但你的开发集和测试集必须是来自目标对象的,从目标对象上取得的数据集来自这同一分布的就可以。这数量无需很大,足够便可。下面1.5会讲数据不匹配时应该如何分析误差和方差。
我觉得这用于对自己模型的交通标志识别是一个很大的指导。
1.5数据不匹配时偏差和方差的分析
上面说过你的训练集(称L1)和开发(称L2),测试集不一定需要来自同一分布,这时候你分析偏差和方差的方法就要有所改变:
我们要建立一个训练-开发集(称L3),它是在打散训练集之后从训练集取出的一部分。我们训练依旧训练旧有的训练集。
分析偏差的方法依旧:训练集误差 — 贝叶斯误差(人类水平误差)
方差:训练-开发集误差 — 训练集误差
数据不匹配:开发集误差 — 训练-开发集误差 = x,如果x过大,说明就是数据不匹配的问题了。1.6节将讲解这个问题的解决方法。
1.6数据不匹配问题的尝试解决
首先你最好人工分析一下,训练集和开发集的具体误差在什么地方,如开发集的太过模糊,或者噪声很大?等等,之后你可以采用:
1.让训练集更像开发集一点,或者收集更类似你开发集的数据,比如你可以刻意将训练集的图片也变得模糊,你可以收集一些模糊的照片进入训练集。。。等等方法。
2.你可以用人工合成数据的技术去合
成数据集,但你要注意,不要在总体数据的一个子集里折腾来折腾去,这样往往会导致你的神经网络认识的东西太少,还是过拟合了。
1.7迁移学习
你可以用一个训练好的神经网络(A)如猫的分类器,去应用到其他邻域,做一个类似的工作(B):如X射线照片的病灶识别,往往效果不错,也能节省很多时间。但什么时候迁移学习是有效的呢?
1.输入是类似的东西:你之前输入是图片,迁移之后的也应该是图片
2.A的任务比B更多,迁移的效果更好
3.A的底层次学习之后对B的学习是有帮助的,那么迁移学习也是有意义的。
比如说你没法取得那么多的放射科X射线照片,去从头到尾训练一个很大的神经网络,你就可以用其他图像识别但经过了大量学习的神经网络,它学过了很多关于图像识别的底层次特征,你可能只需要更改最好一层并甲乙训练就可以达到预想的效果。高效,有力的解决方案。
1.8多任务学习
我们的ssd ,fast-rcnn都是多任务学习,就是让一个足够大的神经网络同时做几个很相似的任务:让一个神经网络同时识别车,交通标志,行人,路障几个任务,因为都是对图像的识别,所以神经网路之前的学习对所有之后的任务都是有帮助的,它的效果往往比一个一个搭建网络去发别识别几个物体效果都要更好。
总结:
1.这一组任务能够公用底层次特征。
2.每个任务的数据量非常的接近,按老师的例子,100个任务就算每个只有1000个例子,前面的99个任务都会大大帮助之后一个例子的学习,这就是一种互帮互助的过程。
3.你要有一个足够大的神经网络去去完成所有任务。
1.9端到端的深度学习
就是跳过传统学习的中间步骤,直学到从输入(x)到输出(y)的映射,但端对端必须有大量的数据,否则效果会远远不如传统学习方法。(当然,你也可以试试一些适中的方法,减少一定的步骤再试试)。
从林元庆的例子,他的裁剪图片之后进行相似度判断的方法就比直接输入拍到图片端对端要好。
而从语言翻译的例子,现在已经有了足够的英文对法文 的直接映射,所以端对端效果会很好。
而骨骼判断的例子中,也是同样没有足够多的数据,端对端也是不现实的
而我们做的无人小车系统而言,得到图片(x)和此图片该如何走(y)定义端对端完全是没问题的,但明显是采集的数据不足,导致了行车如此不稳。并且也缺乏对稍微出错时该如何走的分支(y1)的映射,所以系统是不稳定的.
2.0是否要用端对端学习
其实最主要的就是数据足不足够,关于(x)直接到(y)的数据是不是足够多让网络学到足够复杂的函数。
网友评论