吴恩达读书笔记【4】-调试推理算法

优化验证测试

假如我们正在构建一个语音识别系统,输入一段语音,输出转译的文字,算法的过程可能是这样的:

记输入语音为 A,它可能有多种翻译结果,我们称之为转录集,转录集中每个句子 S 有一个得分函数 SorceA(S),假设 SorceA(S)=P(S|A),表示 S 是正确翻译的概率;

给定某种方法计算 SorceA(S) 后,我们需要找到一个句子 S 使之最大化,或者说需要找到使之最大化的 S

通常这个转录集可能非常庞大, 比如英文有 5000 个单词,一个句子有 N 个单词,那么可能性为 5000N 种,从中找出一种也是很有挑战的;

假设我们设计一种搜索算法来寻找这个最优 S,但并不能保证一定能搜到最优;

如果没有找到最优,则有两种可能:

1. 搜索算法有问题,没有搜到最优

2. 得分函数有问题,最优解的得分不是最高

此时我们需要确定问题,然后针对性的寻找策略,那么如何确定是哪种问题呢,方法就叫优化验证测试

我们假设 S* 为实际最优解,Sout 为搜索到的最优解,我们可以计算 SorceA(S*) 和 SorceA(Sout),

如果 SorceA(S*) > SorceA(Sout),说明得分函数没有问题,需要改进搜索算法;

如果 SorceA(S*) < SorceA(Sout),说明得分函数有问题,需要改进;

在实际的项目中,我们需要进行误差分析,对每一个错分类样本,都计算 SorceA(S*) 和 SorceA(Sout),然后统计 SorceA(S*) > SorceA(Sout) 和 SorceA(S*) < SorceA(Sout) 的占比,

假如 SorceA(S*) < SorceA(Sout) 占比为 95%,那说明得分函数存在问题,需要优化;

强化学习举例

假设你正在用机器学习教飞行器执行复杂动作;

下面是一张延时照片,照片上是一台电脑控制的飞行器在引擎关闭的情况下执行着陆; 

 

这在飞行领域叫做“自旋”策略,即使引擎坏了,依然能够保证安全着陆;

我们的目标是使用一种学习算法,使飞行器按照一个轨迹 T 安全着陆; 

如果使用强化学习,必须有一个 奖励函数,它会给出每一个可能的轨迹 T 的得分,这个奖励函数一般是人为选择的,它可能需要考虑降落的平稳程度、落点位置、乘客体验等因素,设计一个好的奖励函数并非易事;

假设我们有了一个奖励函数,最终通过强化学习,得到一个最优轨迹 T,但是这个轨迹 与 人类飞行员选择的轨迹并不一致,看起来人类的会好很多,那我们如何优化算法呢?

关键点在于计算 R(Thuman) 和 R(Tout) ,

如果 R(Thuman) > R(Tout) ,优化强化学习算法;否则优化奖励函数

总结

推广到普通算法,Sorce 就是设计一个 损失函数,获取最优解的方式就是 优化算法,如梯度下降,这就是算法设计的核心思想

参考资料:

吴恩达:完整翻译版《机器学习要领》

原文地址:https://www.cnblogs.com/yanshw/p/12180351.html