优化验证测试
假如我们正在构建一个语音识别系统,输入一段语音,输出转译的文字,算法的过程可能是这样的:
记输入语音为 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 就是设计一个 损失函数,获取最优解的方式就是 优化算法,如梯度下降,这就是算法设计的核心思想
参考资料:
吴恩达:完整翻译版《机器学习要领》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)