学习机器学习时常常会用到蒙特卡洛方法和时序差分学习,所以对它们有一个直观的理解还是很重要的。本文通过举一个实际的例子来帮助理解。
假如要训练一个预估开车从成都到北京需要耗时多久的模型(Model),那么如何训练呢?
1. 蒙特卡洛方法(Monte Carlo method)
最直观的方法,既然要预估开车从成都到北京需要耗时多久,那么可以直接记录开车从成都到北京所需要的时间。然后重复很多次,比如100次,把每次的耗时都给模型学习(至于模型具体怎么学习,又需要另外的算法了,比如:梯度下降),这样模型就能预估出一个比较准确的时间了。
上面这种方法其实就是蒙特卡洛方法。这种算法的特点如下:
优点:
- 简单直接:要预估开车从成都到北京需要耗时多久,那直接做很多次,并记录经验,然后就能比较准确的训练了。
缺点:
- 收集数据麻烦:直接尝试还是很麻烦的,代价太高。如果要训练一个预测手术成功率的模型,总不能拿人去试吧。
- 需要等到完整的一次过程后才能开始训练:开车到一半时是不能训练模型的,必须要到了目的地才能训练。如果路上车出了故障,那么之前开的路都白费了,代价也太高了。
第一个缺点不好解决,但是第二个缺点还是有办法改善的,那就是使用时序差分学习。
2. 时序差分学习(Temporal Difference Learning)
时序差分学习的概念不是那么容易解释,但是可以通过更实际的例子来理解:
开始时模型预估开车从成都到北京需要花100个小时。
实际开车从成都出发,实际花费了30个小时到西安,此时模型预估到北京还是60个小时。
所以模型在开始时更准确的预估应该是:
30小时(成都到西安的实际时间)+ 60小时(新的预估时间)= 90小时
在时序差分学习中,这个更准确的估计就叫做 TD target 。有了这个更准确预估后,就知道开始时的预估时间是多了还是少了,从而就能更新模型的参数让模型的预估越来越准确。这样就能够做到不做完整件事就开始训练模型了。
而最初的预估时间和 TD target 的差值就是 TD error:
TD error = 100小时(开始时的预估耗时) - 90小时(TD error) = 10小时
时序差分学习的目标就是让 TD error 的值接近0。