强化学习与机器学习的不同之处在于:
1.没有label,只有reward
2.反馈有延迟,而不是立即返回
3.相当于输入数据是序列数据
4.agent执行的动作会影响之后的数据
强化学习解决的问题是,针对一个具体的问题得到一个最优的policy,使得该policy之下程序获得的reward最大,二policy指的就是程序运行中执行的一系列action。
Reward:通常表示第i个time step的返回值reward,当做出正确的选择时获得reward,反之获得punishment,通过这种方式激励模型慢慢学习到正确的决策方法
Action:指的是agent对于每一次所处的state确定当前要执行的action,使得达到最大的reward,直到最终收敛。
State:指的是当前agent所处的状态,例如游戏中主角的位置等信息
Policy:指的是agent的行为,是从state到action的映射,分为确定策略和随机策略,确定策略是某一状态下的确定动作,而随机策略指的是以概率描述,执行某一动作的概率。
Value Function:为了防止每一步的操作仅仅是以获取到当前瞬时的reward为策略,从而导致算法退化为贪心算法,因此我们使用Value Function来确保当前reward不仅仅与当前这一步的reward相关,也与未来操作的reward相关,就构造了Value Function,表达式:
其中每一个R项需要与一个折扣系数相乘,以确保越是靠后的action,对当前动作的影响越小。
model:用于预测当前环境接下来会做什么事情,即在这一状态下执行某一动作会达到什么样的状态,这一动作的reward是什么 ,所以描述一个模型就是使用动作的转移概率和动作状态的reward,公式:
马尔科夫决策过程:
马尔科夫决策过程是状态以及某状态的转移,下图为状态转移矩阵:
MDP由以下几个部分的变量来刻画:状态空间(有限集合),动作空间(一个有限的动作集合),状态转移矩阵,奖赏函数以及折扣因子。
MDP常用的来刻画奖赏的函数:
1.return
概念较为简单,即t时刻后未来执行一组action后能够获得的reward,包括当前这一步的reward以及未来很多步预测到的可以获得的reward的和,注意要添加上折扣因子,公式如下:
2.状态值函数
定义为t时刻的状态S能获得的return的期望,表达式如下:
3.动作值函数
t时刻状态S下选择特定action后能获得的return的期望,表达式如下:
强化学习与监督式学习的区别:
监督式学习就好比你在学习的时候,有一个导师在旁边指点,他知道怎么是对的怎么是错的,但在很多实际问题中,例如 chess,go,这种有成千上万种组合方式的情况,不可能有一个导师知道所有可能的结果。
而这时,强化学习会在没有任何标签的情况下,通过先尝试做出一些行为得到一个结果,通过这个结果是对还是错的反馈,调整之前的行为,就这样不断的调整,算法能够学习到在什么样的情况下选择什么样的行为可以得到最好的结果。
就好比你有一只还没有训练好的小狗,每当它把屋子弄乱后,就减少美味食物的数量(惩罚),每次表现不错时,就加倍美味食物的数量(奖励),那么小狗最终会学到一个知识,就是把客厅弄乱是不好的行为。
两种学习方式都会学习出输入到输出的一个映射,监督式学习出的是之间的关系,可以告诉算法什么样的输入对应着什么样的输出,强化学习出的是给机器的反馈 reward function,即用来判断这个行为是好是坏。
另外强化学习的结果反馈有延时,有时候可能需要走了很多步以后才知道以前的某一步的选择是好还是坏,而监督学习做了比较坏的选择会立刻反馈给算法。
而且强化学习面对的输入总是在变化,每当算法做出一个行为,它影响下一次决策的输入,而监督学习的输入是独立同分布的。
通过强化学习,一个 agent 可以在探索和开发(exploration and exploitation)之间做权衡,并且选择一个最大的回报。
exploration 会尝试很多不同的事情,看它们是否比以前尝试过的更好。
exploitation 会尝试过去经验中最有效的行为。
一般的监督学习算法不考虑这种平衡,就只是是 exploitative。
强化学习和非监督式学习的区别:
非监督式不是学习输入到输出的映射,而是模式。例如在向用户推荐新闻文章的任务中,非监督式会找到用户先前已经阅读过类似的文章并向他们推荐其一,而强化学习将通过向用户先推荐少量的新闻,并不断获得来自用户的反馈,最后构建用户可能会喜欢的文章的“知识图”。
强化学习主要分为这几类:
- Policy based, 关注点是找到最优策略。
- Value based, 关注点是找到最优奖励总和。
- Action based, 关注点是每一步的最优行动。
使用旅行商问题作为例子:
- states ,就是节点 {A, B, C, D, E, F}
- action ,就是从一点走到下一点 {A -> B, C -> D, etc}
- reward function ,就是边上的 cost
- policy,就是完成任务的整条路径 {A -> C -> F}