设置开发和测试集
- 开发集和测试集的定义
- 开发集和测试集应该服从同一分布
- 开发集和测试集应该有多大?
- 使用单值评估指标进行优化
- 优化指标和满意度指标
- 通过开发集和度量指标加速迭代
- 何时修改开发集、测试集和指标
- 小结:建立开发集和测试集
基本误差分析
- 快速构建并迭代你的第一个系统
- 误差分析:根据开发集样本评估想法
- 在误差分析时并行评估多个想法
- 清洗误标注的开发集和测试集样本
- 将大型开发集拆分为两个子集,专注其一
- Eyeball 和 Blackbox 开发集该设置多大?
- 小结:基础误差分析
偏差和方差
学习曲线
与人类水平的表现相比
不同发行版的培训和测试
调试推理算法
端到端学习
按零件进行误差分析
总结
优化验证测试
假设你正在构建一个语音识别系统,该系统通过输入一个音频片段 $A$ ,并为每一个可能的输出句子 $S$ 计算得分 $\text{Score}_A(S)$。例如,你可以试着估计 $ \text{Score}_A(S)=P(S|A) $ ,表示句子 $S$ 是正确输出的转录的概率,其中 $A$ 是给定的输入音频。
给定某种方法能够计算 $ \text {Score}_A(S) $ 后,你仍然需要找到一个英文句子 $S$ 来使之最大化:
$$ \text{Output} = \arg \max_s \text{Score}_A(S)
$$
要如何去计算上面的 $\arg \max$ 呢?假设在英文中共有 5000 个词汇,对于长度为 $N$ 的句子,则有 $50000^N$ 种搭配,多到根本无法一一列举。因此,你需要使用一种近似搜索算法,努力去找到能够优化(最大化)$ \text{Score}_A(S)$ 的那个 $S$ . 有一种叫做 “定向搜索” 的搜索算法,在搜索过程中仅保留最优的 $K$ 个候选项(在本章中你并不需要了解该算法的细节)。类似这样的算法并不足以保证能够找到满足条件的 $S$ 来最大化 $ \text{Score}_A(S)$ .
假设有一个音频片段记录着某人说的:“我爱机器学习。”但你的系统输出的却是不正确的 “我爱机器人。”,它没能够输出正确的转录。造成该误差的可能原因有两种:
- 搜索算法存在问题。 近似搜索算法没能够找到最大化 $ \text{Score}_A(S)$ 的那个 $S$ .
- 目标(得分函数)存在问题。 我们对 $\text{Score}_A (S)=P(S|A)$ 的估计并不准确。尤其在此例中,我们的得分函数没能辨认出 “我爱机器学习” 是正确的转录。
对应不同的失败原因,你需要优先考虑的工作方向也将很不一样。如果原因 1 导致了问题,你应该改进搜索算法。如果原因 2 导致了问题,你应该在评估学习算法的函数 $ \text{Score}_A(S)$ 上面多花些心思。
面对这种情况,一些研究人员将决定研究搜索算法;其他人则努力去找到更好的 $ \text{Score}_A(S)$ . 但是,除非你知道其中哪一个是造成误差的潜在原因,否则你的努力可能会被浪费掉。怎么样才能更系统地决定要做什么呢?
让我们用 $S_{out}$ 表示实际的输出 “我爱机器人”,用 $S^*$ 表示正确的输出 “我爱机器学习” 。为了搞清楚上面的 1 或 2 是否存在问题,你可以执行 优化验证测试(Optimization Verification test): 首先计算 $S_{out}$ 和 $S^*$ ,接着比较他们的大小。有两种可能:
情况1:$ \text{Score}_A {(S^*)} \gt \text{Score}_A {(S_{out})} $
在这种情况下,你的学习算法正确地给了 $S^*$ 一个比 $S_{out}$ 更高的分数。尽管如此,我们的近似搜索算法选择了 $S_{out}$ 而不是 $S^*$ . 则表示你的近似搜索算法没能够找到最大化 $ \text{Score}_A(S)$ 的那个 $S$ . 此时优化验证测试告诉你,搜索算法存在着问题,应该花时间研究。例如,你可以尝试增加定向搜索的搜索宽度。
情况2:$ \text{Score}_A (S^*) \leq \text{Score}_A (S_{out}) $
在这种情况下,计算 $\text{Score}_A (.)$ 的方式是错误的:它没有给正确的输出 $S^*$ 比实际输出 $S_{out}$ 一个相同或更高的分数。优化验证测试告诉你,目标(得分函数)存在问题。因此,你应该专注于改进你的算法对不同的句子 $S$ 学习或近似出得分 $\text{Score}_A (S)$ 的方式。
我们上面的讨论集中于某个单一的样本 $A$ 上,想要在实践中运用优化验证测试,你需要在开发集中检测这些误差样本。对于每一个误差样本,你都需要测试是否有 $\text{Score}_A (S^*) \gt \text{Score}_A (S)_{out}$ . 开发集中所有满足该不等式的样本都将被标记为优化算法自身所造成的误差,而满足不等式 $\text{Score}_A (S^*) \leq \text{Score}_A (S)_{out}$ 的样本将被记为是计算得分 $\text{Score}_A (.)$ 造成的误差。
假设你最终发现 95% 的误差是得分函数 $\text{Score}_A (.)$ 造成的,而仅有 5% 的误差是由优化算法造成的。现在你应该知道了,无论你如何改进你的优化程序, 实际上也只会消除误差中的 5% 左右。因此,你应该专注于改进你的得分函数 $\text{Score}_A (.)$ .
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论