第一周:和平之城中的鸟类识别 案例研究
本文是结构化机器学习的笔记。
1.1 为什么是ML策略?
- 快速判断那些方向比较适合继续研究,以免浪费时间。
1.2 正交化(Orthogonalization)
- 正交化的含义:各个分量互不影响。所以可以分开来考虑。
我们需要达到4个目标
- 训练集上好
- Dev集上好
- Test集上好
- 现实情况下好
因此我们的目的是为这4种情况,设计4个独立的按钮,从而可以在降低训练集准确率的前提下,提升Dev集的准确率。
1.3 单一数字评估指标
-
问题:如果一个分类器在Precision里面比较好,另一个在Recall里面比较好,该怎么选?
-
Sol:
- F1 Score: F 1 S c o r e = 2 1 P r e c i s i o n + 1 R e c a l l F1\text{ }Score=\frac{2}{\frac{1}{Precision}+\frac{1}{Recall}} F1 Score=Precision1+Recall12
-
例子2:
- 不同地区的错误率不同
-
Sol: 计算平均错误率
1.4 满足和优化指标
-
问题:准确率+时间的指标
-
设优化指标"Accuracy"(需要最值的指标),满足指标"Running Time"(不等式的指标)
-
Sol:
m a x ( A c c u r a c y ) and r u n n i n g T i m e ≤ 100 m s max(Accuracy) \text{ and } runningTime\leq100ms max(Accuracy) and runningTime≤100ms -
问题:“准确率”+“False Positive”
-
Sol:
m a x ( A c c u r a c y ) and F a l s e P o s i t i v e ≤ 1 次 / 天 max(Accuracy) \text{ and } False Positive\leq1次/天 max(Accuracy) and FalsePositive≤1次/天
1.5 训练 / 开发 / 测试集划分
如何设立Dev Set和Test Set?
-
Dev Set: hold out cross validation set
-
例子:
假设哦我们有以下地区的数据:- US
- UK
- India
- China
一种划分开发/测试数据的方法是US/UK作为开发数据,另外的两个国家作为测试集。
-
这是一个糟糕的想法,因为我们可能根据Dev Set的数据设计了一效果很好的模型,但是因为开发集和测试集并没有同样的分布,所有会有问题。
-
这就好比是一个人训练射中50m的靶,然后真正使用的时候是100m的靶。
设立Dev/Test的方法
关键⚠️ :确保开发集和训练集来自同一个分布。(在上面例子中,各个数据集里都需要有这4个地区的数据)
所以我们可以将所有数据随机洗牌,放入开发集和测试集。
1.6 开发集和测试集的大小
可以只有Train+Dev集,而没有Test集合。
1.7 ⚠️ 什么时候改变开发/测试集和指标
当没有达到预期目的的常见解决思路:
- 及时改变Metric以适应目的
- 改变Dev/Test数据集,以确保两者为相同的分布。
- 如果发现选出来的算法存在缺陷,则需要及时改变Metric的定义。
- 例子:
算法 | 错误率 | 其他 |
---|---|---|
A | 3% | 会有一定几率传递不良图片 |
B | 5% | 无 |
此时,为了避免传递不良信息这个巨大的错误,我们需要及时修改metric。
E
r
r
o
r
=
1
∑
i
w
(
i
)
∑
i
=
1
m
d
e
v
w
(
i
)
I
(
y
p
r
e
d
(
i
)
≠
y
(
i
)
)
Error=\frac{1}{\sum_iw^{(i)}}\sum_{i=1}^{m_{dev}}w^{(i)} I(y_{pred}^{(i)} \neq y^{(i)})
Error=∑iw(i)1i=1∑mdevw(i)I(ypred(i)=y(i))
其中
- m d e v m_{dev} mdev表示dev集的样本数量
- w ( i ) = { 1 如果x不是不良信息 100 如果x是不良信息 w^{(i)}=\left\{\begin{matrix} 1 \text{ 如果x不是不良信息}\\ 100 \text{ 如果x是不良信息} \end{matrix}\right. w(i)={1 如果x不是不良信息100 如果x是不良信息相当于一个乘法项目
- I ( y p r e d ( i ) ≠ y ( i ) ) = 1 I(y_{pred}^{(i)} \neq y^{(i)})=1 I(ypred(i)=y(i))=1 如果 y p r e d y_{pred} ypred预测错误
步骤:
- 确定Metric(放靶)
- 达到目标(放箭),可以通过微调Cost Function的定义。我们总是可以适时地观察我们已经训练的模型,从而根据我们的需要修改模型,从而达到我们的预期目的。
1.8 为什么是人的表现
- 贝叶斯最优误差(Bayes Optimal Error):准确率的上限。( x → y x\to y x→y映射的最优上限)
- 我们观察到当准确率超过人类时,准确率上升速率就变慢了
- 可能的解释:
- 人的表现已经贝叶斯最优误差很接近了。
- 只要Algs比人类能力强,一些方法就不再有效了。
- 当Algs不比人类强,有一些可能有效的方法:
- 获得更多有标签的数据
- 人工对算法误差进行分析
- 对Bias和Variance方差进行分析
1.9 可避免偏差
- 用人类水平的误差估计来代替贝叶斯最优误差,这在计算机视觉里面比较常见。
- Avoidable Bias= Human-level error
- Variance= Training error
- 例子:
1.10 理解人的表现
- Recap:
用人类水平的误差估计来代替贝叶斯最优误差
-
问题:怎么定义人类水平?
-
例子:医疗影响分析
-
Hyp:
我们看的是最高水平,因为人类(或者任何系统)都只能趋近于(小于等于)贝叶斯最优误差。如果能超过人类水平,则可以部署我们训练的模型了。
当算法水平很高的时候,我们不太确定是否要继续改善模型(减小Bias)还是减小方差。因为我们不知道怎么估计贝叶斯最优误差。
1.11 超过人的表现
例如:
- 人的表现 0.5%
- Train Error 0.3%
这时候我们不知道贝叶斯最优误差是否小于0.3%,因为有过拟合的风险。
目前算法比人类强的地方:
这些都是从Structed Data中得到的结果,并不是自然感知任务(如计算机视觉)。
- 开车路线的时间
- 贷款
- 广告投放
1.12 改善模型表现
- 对Train Set拟合很好 -> Bias
- 在dev/test Set上也很好 -> Variance
改进方向
- Avoidable Bias改善方法:
- 训练一个更大的模型
- 多训练一会
- 改善网络结构
- Variance改善方法:
- 输入更多的数据
- 正则化(L2,Dropout)
- 改善网络结构
第一周测试总结:
- 我们需要确定一个评估指标,否则会降低工作效率。我们可以通过优化指标和满足指标将多个指标缩小为一个指标。例如
m
a
x
(
准
确
率
)
and
内
存
≤
10
M
b
max(准确率) \text{ and } 内存\leq10Mb
max(准确率) and 内存≤10Mb
这里准确率
就是优化指标,内存就是满足指标
。 - 深度学习领域一般数据集的划分为
训练集 | 开发集 | 测试集 |
---|---|---|
95% | 2.5% | 2.5% |
- 应该用人类最高水平来估计贝叶斯最优误差。但这里有一个前提,即统计的人数足够多,这样的百分数才比较准确。
- 学习算法的性能可以优于人类表现,但它永远不会优于贝叶斯错误的基准线。