zoukankan      html  css  js  c++  java
  • 吴恩达读书笔记【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 就是设计一个 损失函数,获取最优解的方式就是 优化算法,如梯度下降,这就是算法设计的核心思想

    参考资料:

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

  • 相关阅读:
    springcolud 的学习(一),架构的发展史
    shiro框架的学习
    Mybatis分页插件PageHelper简单使用
    对于解决VS2015启动界面卡在白屏的处理方法
    C# 运行流程
    转:什么是DIP、IoC、DI
    IQueryable,IEnumerable,IList区别
    easyUi——datetimebox绑定数据失效
    前后端参数传递的学习笔记
    java 多线程学习总结
  • 原文地址:https://www.cnblogs.com/yanshw/p/12180351.html
Copyright © 2011-2022 走看看