调优
很多时候,我们的系统在搭建出来之后并不是最优的,我们需要去优化,可能会有很多想法,我们可以调整的地方也很多:比如我们增加训练的数据,使用正则化方法,使用更加大的神经网络,调整学习率,改善优化策略等。但是其实这些方法的采取是需要我们去做出一些基于结果的大致的宏观的判断的,我们需要一些基本的策略和原则,去知道我们应该在哪些部位作出修改,进而保证我们的机器学习在向着最有希望的方向前进,而不是在无用的地方浪费时间。
什么是正交化
我们在线性代数中就学习过正交化的概念是
A
,
B
A,B
A,B正交即
A
A
AT
B
=
0
B=0
B=0,隐含了一层二者各有各的层次,之间互不影响。
在结构化深度(机器)学习的过程中。我们如果想要清楚基于什么,就要去调整什么,我们就需要知道哪些操作是正交的,哪些是关联的,需要有清晰的认识。比如“提早停止”这个策略,就因为其既使得训练集没有完全拟合好,又使测试集的结果达到一定的高度(当然也是我们想要的,然而我们无法预料),这样的话情况就会变得很复杂。也就是基于这一点,吴恩达本人并不很推荐使用。
单一数字评价指标
我们在评价一个算法好不好的时候,往往会有多种指标,比如直接的precision(准确率),recall(召回率,但是我更喜欢查全率这个说法,很精确)。但是问题是,对于多组算法,这些评估结果同时陈列出来,我们往往一时间难以进行判断。比如A配置在precision上更好一点,而B配置在recall上更好一点,这种情况就比较难以一时判断。
所以我们就需要一个单一数字评价指标,也就是
F
F
F1指标,它是precision和recall的调和平均数,公式为
2
1
p
r
e
c
i
s
i
o
n
+
1
r
e
c
a
l
l
\frac{2}{\frac{1}{precision}+\frac{1}{recall}}
precision1+recall12.得到一个单一衡量数据,这样的话,评价指标单一,评价变得容易。我们就可以使用其作为评判标准,不断迭代。
满足和优化指标
很多时候,往往难以找出来一个恰当的单一数字指标。比如这个例子:
设想这是用户在使用的一个识别猫的网页。我们可以知道的是只要在100
m
s
ms
ms以内,其实时间并不重要,
1
、
5
、
50
、
98
1、5、50、98
1、5、50、98对于用户来讲没有区别,所以这并不是一个“优化指标”,而是一个限制指标。所以我们要搞清这些概念的区别,挑出来我们真正想优化的,别的满足即可。
训练/开发/测试集划分
老生常谈,一般来讲对于10000数量级的数据,我们可以采用传统的7/3划分成train和dev(development set),或者6/2/2划分成train/dev/test。但对于百万级以上的数据,我们往往不需要那么多数据用于调优和测试(也没有那么多时间),所以这时候我们可以98/1/1等进行划分,只保留少部分当作dev和test。
注意,一定一定要保证他们都来自同一分布,而且和以后的投放也是同一分布,否则没有任何意义。
什么时候该调整train/test集和指标
这部分吴恩达举了一个例子,就是在团队开发猫脸判断的机器学习算法时,A配置有更高的准确度,但是存在一些pornographic图片被选中,使用体验差;而B虽然准确度略逊于A,但是没有pornographic图片,那么我们这时候其实就应该发觉到,之前我们的优化方向(所谓的靶子),存在着问题。我们需要去修改它。那么我们这时候就需要更改靶子,重新射箭,要么就只修改评价指标,选出新指标下更合理的算法,要么就将 c o s t F u n c t i o n cost Function costFunction和评价指标都修改,重新优化。