初识强化学习

  前言:最近需要用到强化学习,内容比较多。写个专栏来记录下学习过程。本篇文章基于王老师的B站视频(https://www.bilibili.com/video/BV1rv41167yx?p=1)。强化学习中有很复杂的数学推导,但从直接从数学出发会让人失去学习兴趣。本篇文章先介绍一些概念性的东西,以期对强化学习能有个框架性的了解。对于具体某部分的实现过程留到后面专题讨论。

  强化学习(Reinforcement Learning, RL)是机器学习下的一个分支,看起来这两年才兴起但实际上也发展了几十年了。只不过在这几年和深度学习的融合中才找到了舞台。强化学习干的事情很奇妙,简单点儿说是让机器自己学习。传统的学习方式是在提供的数据集上进行学习,数据集越庞大,学习的效果越好。传统方式具有训练集过小时的过拟合现象。同时针对于数据集之外的情况表现也不是百分百的好(因为训练数据集不可穷尽)。

  有一些关键的字眼贯穿着强化学习,我选择分层介绍的模式。逐步了解它们。

  第一层:agent(智能体)、state(状态)、action(动作)、reward(奖励)、environment(环境)、policy(策略)、goal(目标)
  强化学习做的事情是让智能体(agent)在环境(environment)下做出动作(action),再评估这个动作对于最后目标(goal)的增益(reword)。如果是好的一面,那么就在以后的动作中有倾向的增强,反之减弱。每执行完动作,进入一个状态(state)。在当前状态下根据策略(policy)选择执行的动作。策略是由价值(value)所决定。
  整个过程在学习什么呢?就是学习指导动作的规则(不同于policy)!如果我们能够知道在当前状态下,选择哪一个动作能最大化我们的受益,这样一步步积累下来,我们就能达到我们的目标。更为简单的说,当处于状态s,有一种方法能够指导做出动作a,最终能够达到很好的效果。这种方法就是我们要学习的。

  学习这种规则有两种方式:价值学习、策略学习

  第二层:value function、return、policy function(绕不开数学啦~)
  正式的情况下大写代表随机变量,小写代表观测值。但这篇文章只是为了表达意思,就不做具体的区分了。
  定义:S代表state, A代表action, R代表reward
  事件序列就是:S1 A1 R1 S2 A2 R2 … S(t) A(t) R(t)——下标代表时间序列
  使用U(t)定义return,代表从t时刻起,所有的奖励之和,
在这里插入图片描述

  return不怎么常用。为了更贴近于实际情况,认为越往后的奖励所占权重更小。于是加入折扣率定义discount return(折扣回报,基本上都用这个)
在这里插入图片描述
  对以上变量做一些数字推导(具体的请去看视频),就能够得到几个value function。我在此介绍他们的含义:

   action-value function(动作价值函数):

在这里插入图片描述
  之前的U(t)和t时刻之后的所有状态动作均有关系,求期望消除除t时刻以外的所有状态动作。动作价值函数与s(t)、a(t),以及策略Π有关。其代表的含义是状态s做出动作a的结果有多好。

  Optimal action-value function(最优动作价值函数)

在这里插入图片描述
  它的含义就是选择最佳的策略(policy),在s(t)下做出a(t)能够得到最佳的return

  state-value function(状态价值函数)

在这里插入图片描述
  状态价值函数的作用是当确定状态但没有具体动作时,可以利用状态价值函数来评判这个state所能够带来的return,以便于后面的反馈。

  policy function(策略函数)

在这里插入图片描述
  其代表的含义是在状态S下执行每个动作的概率。
  回到上文我们梦想中的那种方法,其实有两个表现形式:
    1)policy function Π,对于一状态,所有的动作形成动作集,每一动作个体都有其概率。只要使用随机抽样的方式选择一个就能确定具体动作(看上去效果未必是最佳,但这确实已经是一种方法,后面还有其他办法去修正)
    2)Optimal action-value function:从上文的定义中知道Q star是执行最好的policy,只要我们知道Q star,就能保证每轮有最好的policy,按照这个最好的policy自然会找到对应的action
  所以强化学习的主要目标就是学习策略函数Π或者最优动作价值函数Q star。二者学习到其中之一就可以,

  第三层:DQN、TD、policy gradient
  学习Q star的就叫做价值学习(value-base reinforcement learning),学习策略Π的就叫做策略学习(policy-base reinforcement learning)。下面分别介绍一下二者:

  1.value-based RL

    价值学习的方法有很多。在此介绍一种常见的方法:DQN方法(Deep Q Network),该方法的核心是使用神经网络的方式去学习Q star。定义Q star为Q(s,a,w),通过不断更新w(权重weight),来得到Q star。那w是如何进行更新的呢?这就是另一个算法——TD算法(Temporal Differencr)。基本思想是利用梯度下降的方式减少TD-Loss。
  注意:TD算法只是求解DQN的方法之一
  TD算法的具体步骤如下:
在这里插入图片描述

  2.policy-base RL

  策略学习的目标就是确定策略函数,使用的方法使用神经网络来近似策略函数。定义策略函数Π(a|s, Θ),通过不断更新Θ最终得到策略函数。更新Θ的方式是使用policy gradient(策略梯度)。对于策略梯度的计算使用蒙特卡洛去近似。针对于离散型(Form1)和连续型(Form2)两种:
在这里插入图片描述
  更新Θ的算法如下(因为希望策略的价值最大,这里是梯度上升):
在这里插入图片描述
  上述算法有一个问题还没有解决,就是第三步的Q(Π)如何确定,有两种方式:
  1.REINFORCE算法
  2.actor-critic method

  想要确定Q(Π)要从它的含义入手,它代表在s(t)下执行a(t)得到的回报。在t时刻我们是不知道的,只有t时刻过后才能知道。REINFORCE算法思想是实际获取一轮数据,以最终的结果来近似Q(Π)(不是很懂它的思想~)

  actor-critic method

  它被称为价值方法和策略方法的结合。从状态价值函数出发。
在这里插入图片描述
  利用神经网络的方法,分别确定Π(a|s)和QΠ(s|a)。按照上文所介绍的方法,用policy gradient求Π(a|s),用TD算法求QΠ(s|a)。前者叫做policy network,是actor。后者叫做value network,是critic。critic和actor之间的关系:critic用来纠正actor,使actor不断提高水平,同时critic自身水平也需要不断提高。&框架图如下:
在这里插入图片描述
  actor-critic method算法框架如下:
在这里插入图片描述
  以上就是强化学习中最最基础的内容,当然还有很多内容去不断改正性能。这在后面的学习会不断深入。

强化学习、监督学习、无监督学习(机器学习的三大主流)的关系:
  强化学习是独立于二者的另一种方式。监督和无监督的区分在于是否为数据集打标签。而强化学习的数据集来源是与环境交互,不算显式的数据集。同时强化学习的目标与监督学习的目标不一样,即强化学习看重的是行为序列下的长期收益,而监督学习往往关注的是和标签或已知输出的误差。

强化学习适于哪些问题呢?
  强化学习按照不断的reward决定action,适合序列式决策的问题。不同于监督学习的一次性。是从长远眼光考虑问题
可参考:强化学习适合解决什么样的问题_海晨威-优快云博客_强化学习能做什么

注:本文使用截图均来源于王老师视频课件,感兴趣的请去视频主页相关下载

最后留一些参考资料:
强化学习(Reinforcement Learning)知识整理 - 知乎 (zhihu.com)

因作者水平有限,如有错误之处,请在下方评论区指正,谢谢!

### 关于强化学习课程的学习资源 #### OpenAI 强化学习教育资源 为了更轻松地学习深度强化学习,OpenAI建立了专门的教育网站。该平台提供了大量有用的教学材料,涵盖了理论基础、实践指南以及前沿研究进展等内容[^1]。 #### 课程学习算法详解 有关课程学习算法的具体原理及其应用实例,在一篇深入探讨的文章中有详尽描述。这不仅有助于理解如何逐步引导智能体掌握复杂任务的方法论,还展示了实际场景下的操作流程和技术细节[^2]。 #### 结合深度学习优化RL性能 当考虑提高强化学习系统的效能时,引入深度神经网络作为功能组件成为一种有效手段。这种方法能够改善诸如搜索过程、策略评价等多个方面的工作效率,并增强整体解决方案的表现力[^3]。 #### 初步认识Reinforcement Learning概念框架 对于初次接触此领域的人来说,《初识Reinforcement Learning》系列文章提供了一个良好的起点。文中解释了基本术语定义,比如状态空间、动作集合等;同时也介绍了两种主要的学习范式——基于价值函数估计和直接制定行动方针之间的区别与联系[^4]。 ```python # Python代码示例:简单的Q-learning实现(仅作示意) import numpy as np class QLearningAgent: def __init__(self, alpha=0.1, gamma=0.9, epsilon=0.1): self.q_table = {} self.alpha = alpha # 学习率 self.gamma = gamma # 折扣因子 self.epsilon = epsilon # 探索概率 def choose_action(self, state, actions): if np.random.rand() < self.epsilon or state not in self.q_table: action = np.random.choice(actions) else: q_values = [self.q_table[state].get(a, 0) for a in actions] max_q_value = max(q_values) best_actions = [a for i, a in enumerate(actions) if q_values[i] == max_q_value] action = np.random.choice(best_actions) return action def learn(self, state, action, reward, next_state): if state not in self.q_table: self.q_table[state] = {} old_value = self.q_table[state].get(action, None) next_max = max([self.q_table.get(next_state, {}).get(a, 0) for a in range(possible_actions)]) if old_value is None: self.q_table[state][action] = reward else: self.q_table[state][action] = old_value + self.alpha * (reward + self.gamma * next_max - old_value) agent = QLearningAgent() state = 'initial' actions = ['left', 'right'] chosen_action = agent.choose_action(state, actions) print(f'Chosen Action: {chosen_action}') ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值