CompModCogPsy
  • 全书介绍和写作计划
  • 第一章 计算认知科学导论
    • 前言
    • 1.1 交叉学科三角
    • 1.2 认知科学的特点
    • 1.3 认知科学的发展历史
    • 1.4 我们为什么需要计算认知
      • 1.4.1 认知科学的基础假设:信息处理理论
      • 1.4.2 挑战与“诞生”
      • 1.4.3 计算认知的必要性
  • 第二章 计算模型基础
    • 2.1 什么是计算模型?
    • 2.2 模型选择
    • 2.3 模型拟合
    • 2.4 模型准确度
    • 2.5 模型可信度
  • 第三章 概率推断和贝叶斯理论
    • 3.1 概率基础
    • 3.2 概率推断
      • 3.2.1 似然函数
      • 3.2.2 最大似然估计
    • 3.3 贝叶斯理论
    • 3.4 拓展阅读:p值
    • 3.5 编程练习-最大似然估计
  • 第四章 心理物理学和信号检测论
    • 心理物理学基础
    • 心理物理曲线
      • 几种常见的心理物理曲线
      • 拟合心理物理曲线
    • 信号检测论
      • dprime
      • 决策标准
      • receiver operating curve (ROC)曲线和area under curve (AUC)
      • dprime和AUC的关系
      • 2AFC的应用
      • Page
    • 展望
  • 第五章 近似推断
    • 马尔科夫链蒙特卡洛采样
      • Metropolis-Hasting算法
    • 变分推断
    • 展望
  • 第六章 知觉决策
    • 模拟一个简单知觉决策
    • 模拟决策和反应时
    • 权衡反应时和正确率
    • 6.4 经典漂移扩散模型
    • 漂移扩散模型的应用
      • 基于价值的决策
      • 精神疾病的应用
      • 社会认知
    • 展望
  • 第七章 价值决策
    • 人类决策基础
    • 前景理论
    • 风险决策
    • 展望
  • 第八章 强化学习
    • 机器学习强化学习基础
      • 动态规划
      • 时间差分学习
      • 基于模型和无模型强化学习
    • 心理学的强化学习
    • 强化学习的交叉关系
    • 强化学习模型和参数估计
    • Rescorlar-wagner模型
    • 二阶段任务
    • 展望
  • 第九章 社会决策和社会学习
    • 社会决策
    • 社会学习
    • 展望
  • 第十章 神经网络
    • 神经网络和心理学引言
    • 神经网络基础
      • 多层感知机
      • 卷积神经网络
      • 循环神经网络
    • 神经网络和人脑加工的关系
      • 感知觉的编解码
      • 工作记忆
      • 长时记忆
      • 学习和决策
    • 展望
由 GitBook 提供支持
在本页
  1. 第八章 强化学习

机器学习强化学习基础

最后更新于8个月前

理解心理学中的强化学习,我认为应该首先讲AI里面的强化学习

  1. 强化学习基本概念的定义

我们生活的世界充满了各种交互,人类通过行动影响周围的环境,而环境又反馈给我们不同的结果或奖励。在强化学习中,环境类似于我们生活中的外部世界,它是Agent(智能体)与之交互的外部系统。在每一个时间步,环境会向Agent提供当前的状态(State),Agent基于此做出相应的动作(Action),环境则根据这些动作更新状态,并可能给予一定的奖励(Reward)。这种循环式的互动就像我们生活中的决策与反馈过程,推动着Agent不断学习和改进。

因此,强化学习中通常用四元组 (S,A,P,R)(S,A,P,R)(S,A,P,R) 来形式化定义一个环境(Env)。

Env=(S,A,P,R)Env=(S,A,P,R)Env=(S,A,P,R)

其中,每个元素的定义如下:

  • S (States): 状态集合,表示环境中所有可能的状态。

  • A (Actions): 动作集合,表示在每个状态下Agent可以执行的所有可能动作。

  • P (Transition Probabilities): 状态转移概率函数,描述在执行某个动作后从一个状态转移到另一个状态的概率。通常表示为 P(s′∣s,a)P(s'|s,a)P(s′∣s,a) 。

  • R (Rewards): 奖励函数,描述在执行某个动作后从一个状态转移到另一个状态时得到的即时奖励。通常表示为 R(s,a,s′)R(s, a, s')R(s,a,s′) 。

马尔可夫决策过程(Markov Decision Process, MDP)是一个数学模型,用于描述一个决策问题,在该问题中,决策者(Agent)在不同状态之间进行选择(行动),以最大化其长期回报。当我们说“环境是一个MDP”时,意思是我们可以用MDP的形式化描述来定义环境的动态行为。MDP为我们提供了一个结构化的方式来描述Agent与环境的交互,这包括状态、动作、状态转移和奖励。这种描述方式使我们能够利用动态规划和强化学习算法来求解最优策略,从而在给定环境中实现目标。

  1. Frozen Lake

Frozen Lake 是一个经典的强化学习问题,AI相关专业中通常使用该问题解释和演示动态规划和强化学习中的基本概念。我们将通过这个例子介绍以下几个重要概念:Agent、State、Transmission Function 和 Reward。

  1. Agent

在强化学习中,Agent 是指在环境中进行决策和行动的智能体。它观察环境状态,选择行动,并根据行动的结果更新其策略。

在 Frozen Lake 例子中,Agent 是一个在冰湖上移动的角色(例如,一个小人)。它的目标是从起点(Start)移动到目标(Goal)而不掉进冰窟窿(Hole)。

  1. State

State(状态)是描述当前环境的情况或配置。在 Frozen Lake 中,状态$$(s)$$可以表示 Agent 在网格中的位置。

Frozen Lake 可以被表示为一个 8 × 8 的网格,包含以下几种状态:

  • S: Start(起点)

  • F: Frozen(冰面,可安全行走,图中白色部分)

  • H: Hole(冰窟窿,掉进去就失败,图中蓝色部分)

  • G: Goal(目标)

每个状态都是网格中的一个单元格,Agent 从一个单元格移动到另一个单元格。我们用如下代码构建环境中的状态空间:

class frozen_lake:
    n_row = 8
    n_col = 8
    
    def _init_(self, eps=.2, seed=1234):
        
        # get occupancy
        self.rng = np.random.RandomState(seed)
        self.layout = layout
        self.get_occupancy()
        # define MDP
        self._init_S()
        self._init_A()
        self._init_P()
        self._init_R()
    def _init_S(self):
        '''Define the state space
        '''
        # all possible state
        self.nS = frozen_lake.n_row*frozen_lake.n_col
        self.S  = list(range(self.nS))
        self.state = self.cell2state(self.curr_cell)
        # define the terminal states: goal, holes
        self.goal_state = self.cell2state(self.goal)
        self.hole_states = [self.cell2state(h) for h in self.hole_cells]
        self.s_termination = self.hole_states+[self.goal_state]

其中 SSS 为状态集合,在代码中用env.S来表示, AAA 为动作集合,在代码中用env.A来表示。

  1. Action

Action(行动)是 Agent 可以在每个状态下执行的操作。在 Frozen Lake 中,Agent 有四种可能的行动:

  • 上 (Up)

  • 下 (Down)

  • 左 (Left)

  • 右 (Right)

这些行动会导致 Agent 从当前状态移动到相邻的状态(如果没有超出网格边界)。

    def _init_A(self,)
        '''Define the action space 
        '''
        self.directs = [
            np.array([-1, 0]), # up
            np.array([ 1, 0]), # down
            np.array([ 0,-1]), # left
            np.array([ 0, 1]), # right
        ]
        self.nA = len(self.directs)
        self.A  = list((range(self.nA)))
  1. Transmission Function (P)

Transmission Function(状态转移函数)定义了在执行某个行动后,环境如何从一个状态转移到另一个状态,以及每个转移的概率。 在 Frozen Lake 中,状态转移函数可以表示为 P(s′∣s,a)P(s' | s, a)P(s′∣s,a),即在状态 sss 执行动作 aaa 后转移到状态 s′s's′ 的概率。例如,Agent从 (0,0)(0,0)(0,0) 点出发, (0,0)(0,0)(0,0) 为当前的状态 sss,在执行向下移动的动作后,到达 (1,0)(1,0)(1,0),为新的状态 s′s's′ 。

    def _init_P(self):
        '''Define the transition function, P(s'|s,a)

            P(s'|s,a) is a probability distribution that
            maps s and a to a distribution of s'. 
        '''

        def p_s_next(s, a):
            p_next = np.zeros([self.nS])
            cell = self.state2cell(s)
            # if the current state is terminal state
            # state in the current state 
            if s in self.s_termination:
                p_next[s] = 1 
            else:
                for j in self.A:
                    s_next = self.cell2state(
                        np.clip(cell + self.directs[j],
                        0, frozen_lake.n_row-1))
                    # the agent is walking on a surface of frozen ice, they cannot always
                    # successfully perform the intended action. For example, attempting to move "left"
                    # may result in the agent moving to the left with a probability of 1-ε.
                    # With probability ε, the agent will randomly move in one of the 
                    # other possible directions.
                    if j == a:
                        p_next[s_next] += 1-self.eps
                    else:
                        p_next[s_next] += self.eps / (self.nA-1)
                
            return p_next
        
        self.p_s_next = p_s_next
  1. Reward

Reward(奖励)是 Agent 执行动作后从环境中获得的反馈。奖励用于指导 Agent 学习最佳策略,以实现其目标。 在 Frozen Lake 中,奖励机制通常如下:

  • 到达目标状态(G):+1 分

  • 掉入冰窟窿(H):-1 分

  • 其余情况:0 分

    def _init_R(self):
        '''Define the reward function, R(s')

        return:
            r: reward
            done: if terminated 
        '''
        def R(s_next):
            if s_next == self.goal_state:
                return 1, True
            elif s_next in self.hole_states:
                return -1, True
            else:
                return 0, False
        self.r = R
  1. 强化学习的目标

在强化学习中,目标是让智能体(Agent)学习一个策略(Policy),以最大化其在给定环境中的长期累积奖励。具体来说,智能体通过与环境交互,根据获得的奖励,不断调整其行为策略,使得在每一步行动中,智能体能够选择最优的行动来实现这一目标。

  1. 策略(Policy)

策略 π\pi π 是一个映射,定义了Agent在每个状态 sss 应该选择的动作 aaa。策略可以是确定的,即 π(s)=a\pi(s)=aπ(s)=a,或者是随机的,即 π(s∣a)=P(s∣a)\pi(s|a)=P(s|a)π(s∣a)=P(s∣a)。

  1. 预期累计奖励(Expected cumulative reward)

计算预期累计奖励是强化学习的核心目标之一,它涉及估计在给定策略下从当前状态开始的长期回报。 首先计算累计奖励。初始化状态 s1s_1s1​,选择一个初始动作 a1a_1a1​,随机获得奖励 r1r_1r1​,同时进入新状态。重复步骤,在状态 st−1s_{t-1}st−1​ 执行动作 at−1a_{t-1}at−1​,观察到新的状态 sts_tst​ 和即时奖励 rtr_trt​。根据当前策略在新状态 sts_tst​ 选择下一个动作 ata_tat​。以此类推,得到即时奖励 rt+1r_{t+1}rt+1​,进入新状态 st+1s_{t+1}st+1​。

由此得到,从初始状态开始得到累计奖励 G1=r1+γr2+γ2r3+γ3r4+…G_1=r_1+\gamma{r_2}+\gamma^2{r_3}+\gamma^3{r_4}+…G1​=r1​+γr2​+γ2r3​+γ3r4​+…,其中 γ\gammaγ 是折扣因子(discount factor),用于权衡未来奖励的重要性, 0≤γ≤10\leq\gamma\leq10≤γ≤1。以此类推, Gt=rt+γrt+1+γ2rt+2+γ3rt+3+…G_t=r_{t}+\gamma{r_{t+1}}+\gamma^2{r_{t+2}}+\gamma^3{r_{t+3}}+…Gt​=rt​+γrt+1​+γ2rt+2​+γ3rt+3​+…, GtG_tGt​ 是从时间 t 开始的累计奖励。 价值函数 V(s)V(s)V(s) 表示在状态 sss 下按照某策略 π\piπ 选择动作是的预期累计奖励。它的定义是:

Vπ(s)=E[Gt∣st=s]=E[rt+γrt+1+…∣st=s](1)V^\pi(s)=\mathbb{E}[G_t|s_t=s] =\mathbb{E}[r_{t}+\gamma{r_{t+1}}+…|s_t=s]\tag{1}Vπ(s)=E[Gt​∣st​=s]=E[rt​+γrt+1​+…∣st​=s](1)

在给定状态 st=ss_t=sst​=s 和策略 π\piπ 的情况下,我们可以把期望分解为对所有可能动作 aaa 的加权期望,权重是按照策略 π\piπ 在状态 sss 下选择动作 aaa 的概率 π(a∣s)\pi(a|s)π(a∣s):

Vπ(s)=∑aπ(a∣s)E[rt+γrt+1+…∣st=s,at=a](2)V^\pi(s)=\sum_a\pi(a|s)\mathbb{E}[r_{t}+\gamma{r_{t+1}}+…|s_t=s,a_t=a]\tag{2}Vπ(s)=a∑​π(a∣s)E[rt​+γrt+1​+…∣st​=s,at​=a](2)

已知 Gt=rt+γGt+1G_t=r_t+\gamma{G_{t+1}}Gt​=rt​+γGt+1​,因此 E[Gt∣st=s,at=a]=E[rt+γGt+1∣st=s,at=a]\mathbb{E}[G_t|s_t=s,a_t=a]=\mathbb{E}[r_t+\gamma{G_{t+1}}|s_t=s,a_t=a]E[Gt​∣st​=s,at​=a]=E[rt​+γGt+1​∣st​=s,at​=a]。可以进一步分 Gt+1G_{t+1}Gt+1​,得到:

Vπ(s)=∑aπ(a∣s)∑s′p(s′∣s,a)[rt+E[γrt+1+γ2rt+2+…∣st+1=s′]∣st=s,at=a](3)V^\pi(s)=\sum_a\pi(a|s)\sum_{s'}p(s'|s,a)[r_t+\mathbb{E}[\gamma{r_{t+1}}+\gamma^2{r_{t+2}}+…|s_{t+1}=s']|s_t=s,a_t=a]\tag{3}Vπ(s)=a∑​π(a∣s)s′∑​p(s′∣s,a)[rt​+E[γrt+1​+γ2rt+2​+…∣st+1​=s′]∣st​=s,at​=a](3)

由于马尔可夫性质,未来的奖励只依赖于当前状态和动作,并与过去的状态和动作无关。由价值函数定义可得, Vπ(s′)=E[rt+1+γrt+2+…∣st+1=s′]V^\pi(s')=\mathbb{E}[r_{t+1}+\gamma{r_{t+2}}+…|s_{t+1}=s']Vπ(s′)=E[rt+1​+γrt+2​+…∣st+1​=s′],简化(3)可得:

Vπ(s)=∑aπ(a∣s)∑s′p(s′∣s,a)[rt+γVπ(s′)∣st+1=s′]∣st=s,at=a,st+1=s′](4)V^\pi(s)=\sum_a\pi(a|s)\sum_{s'}p(s'|s,a)[r_t+\gamma{V^\pi(s')}|s_{t+1}=s']|s_t=s,a_t=a,s_{t+1}=s']\tag{4}Vπ(s)=a∑​π(a∣s)s′∑​p(s′∣s,a)[rt​+γVπ(s′)∣st+1​=s′]∣st​=s,at​=a,st+1​=s′](4)
Vπ(s)=∑aπ(a∣s)∑s′p(s′∣s,a)[rt+γVπ(s′)∣st+1=s′]](5)V^\pi(s)=\sum_a\pi(a|s)\sum_{s'}p(s'|s,a)[r_t+\gamma{V^\pi(s')}|s_{t+1}=s']]\tag{5}Vπ(s)=a∑​π(a∣s)s′∑​p(s′∣s,a)[rt​+γVπ(s′)∣st+1​=s′]](5)

因此得到,状态价值函数的贝尔曼方程(Bellman equation):

Vπ(s)=∑aπ(a∣s)∑s′p(s′∣s,a)[rt+γVπ(s′)](6)V^\pi(s)=\sum_a\pi(a|s)\sum_{s'}p(s'|s,a)[r_t+\gamma{V^\pi(s')}]\tag{6}Vπ(s)=a∑​π(a∣s)s′∑​p(s′∣s,a)[rt​+γVπ(s′)](6)

Bellman Equation 是强化学习和动态规划中的核心方程,用于描述在给定策略下的价值函数的递归关系。使用 Bellman Equation,我们可以估计给定策略的每个任意状态的值。

  1. 价值函数(Value Function)与状态-动作价值函数(State-Action Q value Function)

根据同上方法,可以推得状态-动作价值函数的Bellman Equation为:

Qπ(s,a)=∑s′p(s′∣s,a)[rt+γQπ(s′,a′)](7)Q^\pi(s,a)=\sum_{s'}p(s'|s,a)[r_t+\gamma{Q^\pi(s',a')}]\tag{7}Qπ(s,a)=s′∑​p(s′∣s,a)[rt​+γQπ(s′,a′)](7)

价值函数 V(s)V(s)V(s) 是在状态 sss 下的预期累计奖励,用于评估状态的好坏,对于策略 π\piπ 定义为:

Vπ(s)=∑aπ(a∣s)E[rt+γrt+1+γ2rt+2…∣st=s,at=a]V^\pi(s)=\sum_a\pi(a|s)\mathbb{E}[r_{t}+\gamma{r_{t+1}}+\gamma^2{r_{t+2}}…|s_t=s,a_t=a]Vπ(s)=a∑​π(a∣s)E[rt​+γrt+1​+γ2rt+2​…∣st​=s,at​=a]

状态-动作价值函数 Q(s,a)Q(s,a)Q(s,a) 是在状态 sss 执行动作 aaa 后的预期累计奖励,对于策略 π\piπ 定义为:

Qπ(s,a)=E[rt+γrt+1+γ2rt+2…∣st=s,at=a]Q^\pi(s,a)=\mathbb{E}[r_{t}+\gamma{r_{t+1}}+\gamma^2{r_{t+2}}…|s_t=s,a_t=a]Qπ(s,a)=E[rt​+γrt+1​+γ2rt+2​…∣st​=s,at​=a]

由上可得,两者的关系是:

Vπ(s)=∑aπ(a∣s)Qπ(s,a)V^\pi(s)=\sum_a\pi(a|s)Q^\pi(s,a)Vπ(s)=a∑​π(a∣s)Qπ(s,a)

因此,强化学习的最终目标是找到一个最优策略最大化价值:

π∗=argmax⁡πVπ(s)\pi^*=arg\max_\pi{V^\pi(s)}π∗=argπmax​Vπ(s)
图1 智能体与环境的交互关系
图2 冰湖游戏的状态