3、强化学习核心概念:智能体、环境、状态、动作、奖励,马尔可夫决策过程(MDP),策略与价值函数

好,咱们今天来啃一块硬骨头——强化学习的核心概念。说实话,我当年刚接触这些术语时,脑袋也是嗡嗡的。什么智能体、环境、状态、动作、奖励,还有那个听起来很唬人的马尔可夫决策过程(MDP)。

但别怕,这些东西说白了就是一套“怎么让程序自己学会做决定”的框架。你想想看,我们人类是怎么学会走路的?摔倒了爬起来,走对了有奖励(到达目的地),走错了有惩罚(摔疼了)。强化学习就是模仿这个过程。

3.1 核心五要素:智能体、环境、状态、动作、奖励

咱们先来拆解这五个基本概念。我习惯用一个比喻来理解:把强化学习想象成一个“游戏玩家”在玩“游戏”。

  • 智能体(Agent):就是那个做决定的“玩家”。在量化交易里,它就是我们的交易策略程序。
  • 环境(Environment):就是“游戏本身”。在交易场景中,环境就是整个市场——价格波动、成交量、新闻事件等等。
  • 状态(State):智能体在某个时刻看到的“游戏画面”。比如当前持仓、K线形态、技术指标值。
  • 动作(Action):智能体可以做的操作。比如“买入100股”、“卖出50股”、“持仓不动”。
  • 奖励(Reward):环境对智能体动作的反馈。赚钱了给正奖励,亏钱了给负奖励。

核心理解:强化学习的目标,就是让智能体学会一套“在什么状态下该做什么动作”的规则,使得长期累积的奖励最大化。

我在做第一个量化交易RL模型时,就犯过一个低级错误——把奖励函数设成了“单笔交易盈亏”。结果模型学会了频繁交易,赚点小钱就跑,亏了就死扛。后来我才意识到,奖励函数的设计直接决定了模型的行为模式。

3.2 马尔可夫决策过程(MDP)

MDP是强化学习的数学基础。说白了,它就是一个描述“决策问题”的框架。为什么叫“马尔可夫”?因为有一个重要假设:未来的状态只取决于当前状态和当前动作,与过去的历史无关

嗯,这里要注意。这个假设在真实交易中并不完全成立。比如今天的成交量异常,可能预示着未来几天的趋势。但MDP假设“当前状态已经包含了所有必要信息”。所以我们在做状态设计时,要把历史信息编码进当前状态里,比如用过去N天的价格序列作为状态。

一个MDP由五元组定义:(S, A, P, R, γ)

符号 含义 交易示例
S 状态空间 所有可能的持仓+市场指标组合
A 动作空间 {买入, 卖出, 持有}
P 状态转移概率 从“持仓+上涨”到“持仓+下跌”的概率
R 奖励函数 R(s, a) = 本次交易盈亏
γ 折扣因子 0.9~0.99,控制远见程度

个人经验:折扣因子γ的选择很关键。γ=0表示只看眼前利益,γ接近1表示很有远见。我在做高频交易时用γ=0.95,做中长线时用γ=0.99。你可以根据策略持仓周期来调。

3.3 策略与价值函数

策略和价值函数,是强化学习的两个核心概念。它们就像硬币的两面——策略决定“怎么做”,价值函数评估“这么做有多好”。

策略(Policy)

策略就是智能体的“行为准则”。它告诉智能体:在某个状态下,应该采取什么动作。策略有两种表示方式:

  • 确定性策略:π(s) = a,给定状态s,直接输出动作a。比如“当MACD金叉时买入”。
  • 随机性策略:π(a|s) = P(a|s),给定状态s,输出每个动作的概率。比如“有80%概率买入,20%概率持有”。

我刚开始做时,总喜欢用确定性策略,觉得干脆利落。后来发现随机性策略在探索阶段更好用——它不会一直重复同一个动作,能发现更好的交易模式。

价值函数(Value Function)

价值函数用来评估“某个状态有多好”或者“在某个状态下做某个动作有多好”。主要有两种:

  • 状态价值函数 V(s):从状态s开始,按照策略π行动,能获得的期望累积奖励。
  • 动作价值函数 Q(s, a):在状态s下执行动作a,之后按照策略π行动,能获得的期望累积奖励。

你想想看,Q(s, a) 是不是更实用?因为它直接告诉我们“在某个市场状态下,买入、卖出、持有哪个更好”。这就是Q-learning算法的核心思想。

避坑指南:我曾经在实现Q-learning时,把Q表初始化为全零。结果模型花了很长时间才学会“买入”这个动作,因为一开始所有动作的价值都一样。后来我改用乐观初始值(比如+1),模型探索效率明显提升。

3.4 知识体系总览

为了让你更直观地理解这些概念之间的关系,我画了一张图。这张图展示了强化学习的核心循环:智能体观察状态,做出动作,环境反馈奖励并进入新状态。

强化学习核心循环与MDP框架 智能体 (Agent) 策略 π(a|s) 环境 (Environment) 状态转移 P(s'|s,a) 状态 S 动作 A 奖励 R(s, a) 选择动作 执行动作 新状态 S' 即时奖励 观察状态 反馈奖励 MDP五元组: (S, A, P, R, γ) | 目标: 最大化累积奖励 ΣγᵗR

这张图把整个流程串起来了。智能体观察当前状态S,根据策略π选择动作A,环境执行动作后给出奖励R并转移到新状态S'。这个循环不断重复,智能体就在这个过程中学习优化自己的策略。

3.5 代码示例:一个简单的MDP环境

光说不练假把式。咱们用Python实现一个最简单的交易MDP环境。这个环境只有两种状态(上涨、下跌),两种动作(买入、卖出)。

import numpy as np

class SimpleTradingEnv:
    """一个极简的交易MDP环境"""
    
    def __init__(self):
        # 状态空间:0=下跌,1=上涨
        self.states = [0, 1]
        # 动作空间:0=卖出,1=买入
        self.actions = [0, 1]
        # 状态转移矩阵 P[s][a] = [s'概率]
        self.P = {
            0: {0: [0.7, 0.3], 1: [0.4, 0.6]},  # 下跌时卖出/买入
            1: {0: [0.3, 0.7], 1: [0.2, 0.8]}   # 上涨时卖出/买入
        }
        # 奖励函数 R[s][a]
        self.R = {
            0: {0: 0.0, 1: -0.5},  # 下跌时买入亏钱
            1: {0: 0.5, 1: 0.0}    # 上涨时卖出赚钱
        }
        self.current_state = 0
    
    def step(self, action):
        """执行动作,返回(新状态, 奖励, 是否结束)"""
        probs = self.P[self.current_state][action]
        next_state = np.random.choice(self.states, p=probs)
        reward = self.R[self.current_state][action]
        self.current_state = next_state
        # 简单环境永不结束
        return next_state, reward, False
    
    def reset(self):
        self.current_state = 0
        return self.current_state

# 测试一下
env = SimpleTradingEnv()
state = env.reset()
print(f"初始状态: {'上涨' if state else '下跌'}")

for i in range(5):
    action = np.random.choice(env.actions)
    next_state, reward, _ = env.step(action)
    print(f"步骤{i+1}: 执行{'买入' if action else '卖出'}, "
          f"奖励={reward:.1f}, 新状态={'上涨' if next_state else '下跌'}")

运行结果示例:

初始状态: 下跌
步骤1: 执行卖出, 奖励=0.0, 新状态=下跌
步骤2: 执行买入, 奖励=-0.5, 新状态=上涨
步骤3: 执行买入, 奖励=0.0, 新状态=上涨
步骤4: 执行卖出, 奖励=0.5, 新状态=上涨
步骤5: 执行买入, 奖励=0.0, 新状态=上涨

看到没?这个环境虽然简单,但已经包含了MDP的所有要素。状态转移概率模拟了市场的随机性,奖励函数反映了不同动作的盈亏。实际交易环境会比这个复杂得多,但核心逻辑是一样的。

好了,这一章的内容就到这里。记住这几个核心概念,它们是后续所有算法的基石。下一章我们会深入探讨Q-learning和策略梯度方法,到时候这些概念会反复出现。


专注资料整理