神经网络优化篇:机器学习基础(Basic Recipe for Machine Learning)

机器学习基础

下图就是在训练神经网络用到的基本方法:(尝试这些方法,可能有用,可能没用)

这是在训练神经网络时用到地基本方法,初始模型训练完成后,首先要知道算法的偏差高不高,如果偏差较高,试着评估训练集或训练数据的性能。如果偏差的确很高,甚至无法拟合训练集,那么要做的就是选择一个新的网络,比如含有更多隐藏层或者隐藏单元的网络,或者花费更多时间来训练网络,或者尝试更先进的优化算法。

一会儿会看到许多不同的神经网络架构,或许能找到一个更合适解决此问题的新的网络架构,加上括号,因为其中一条就是必须去尝试,可能有用,也可能没用,不过采用规模更大的网络通常都会有所帮助,延长训练时间不一定有用,但也没什么坏处。训练学习算法时,会不断尝试这些方法,直到解决掉偏差问题,这是最低标准,反复尝试,直到可以拟合数据为止,至少能够拟合训练集。

如果网络足够大,通常可以很好的拟合训练集,只要能扩大网络规模,如果图片很模糊,算法可能无法拟合该图片,但如果有人可以分辨出图片,如果觉得基本误差不是很高,那么训练一个更大的网络,就应该可以......至少可以很好地拟合训练集,至少可以拟合或者过拟合训练集。一旦偏差降低到可以接受的数值,检查一下方差有没有问题,为了评估方差,要查看验证集性能,能从一个性能理想的训练集推断出验证集的性能是否也理想,如果方差高,最好的解决办法就是采用更多数据,如果能做到,会有一定的帮助,但有时候,无法获得更多数据,也可以尝试通过正则化来减少过拟合。有时候不得不反复尝试,但是,如果能找到更合适的神经网络框架,有时它可能会一箭双雕,同时减少方差和偏差。如何实现呢?想系统地说出做法很难,总之就是不断重复尝试,直到找到一个低偏差,低方差的框架,这时就成功了。

有两点需要大家注意:

第一点,高偏差和高方差是两种不同的情况,通常会用训练验证集来诊断算法是否存在偏差或方差问题,然后根据结果选择尝试部分方法。举个例子,如果算法存在高偏差问题,准备更多训练数据其实也没什么用处,至少这不是更有效的方法,所以大家要清楚存在的问题是偏差还是方差,还是两者都有问题,明确这一点有助于选择出最有效的方法。

第二点,在机器学习的初期阶段,关于所谓的偏差方差权衡的讨论屡见不鲜,原因是能尝试的方法有很多。可以增加偏差,减少方差,也可以减少偏差,增加方差,但是在深度学习的早期阶段,没有太多工具可以做到只减少偏差或方差却不影响到另一方。但在当前的深度学习和大数据时代,只要持续训练一个更大的网络,只要准备了更多数据,那么也并非只有这两种情况,假定是这样,那么,只要正则适度,通常构建一个更大的网络便可以,在不影响方差的同时减少偏差,而采用更多数据通常可以在不过多影响偏差的同时减少方差。这两步实际要做的工作是:训练网络,选择网络或者准备更多数据,现在有工具可以做到在减少偏差或方差的同时,不对另一方产生过多不良影响。觉得这就是深度学习对监督式学习大有裨益的一个重要原因,也是不用太过关注如何平衡偏差和方差的一个重要原因,但有时有很多选择,减少偏差或方差而不增加另一方。最终,会得到一个非常规范化的网络。