强化学习基础(一):马尔可夫决策过程(MDP)

各位同学,今天我们正式进入强化学习的核心地带。说实话,很多初学者一上来就被各种公式吓住了,觉得这东西高深莫测。其实没那么玄乎。我当年第一次接触MDP时,也觉得它像个黑盒子,后来在实盘交易中踩过几次坑,才真正理解它的价值。

咱们今天要聊的马尔可夫决策过程,说白了就是给智能体(Agent)一个清晰的“游戏规则”。你想想看,如果连规则都不清楚,智能体怎么学会做决策?

核心思想:MDP 是强化学习的数学框架,它定义了智能体如何与环境交互、如何获得反馈、以及如何优化自己的行为。

1. 马尔可夫决策过程的基本定义

MDP 由五个关键元素组成,我习惯用一个五元组来记忆:(S, A, P, R, γ)。咱们一个一个拆开讲。

元素 符号 含义 我的理解
状态空间 S 所有可能的状态集合 比如当前持仓比例、市场波动率
动作空间 A 智能体可以执行的动作集合 比如买入、卖出、持有
状态转移概率 P 从一个状态到另一个状态的概率 市场从牛市转到熊市的概率
奖励函数 R 执行动作后获得的即时反馈 赚了钱就是正奖励,亏了就是负奖励
折扣因子 γ 未来奖励的折现系数 0.9 表示更看重近期收益

这里有个关键点:马尔可夫性质。什么意思呢?就是未来的状态只取决于当前状态,跟过去的历史无关。我在做量化回测时,经常需要检查数据是否满足这个性质。如果不满足,模型就容易出问题。

小技巧:在实际项目中,如果发现状态转移不满足马尔可夫性质,可以尝试把历史信息也编码进状态中。比如用过去5天的收益率作为状态的一部分。

2. 状态、动作、奖励函数

这三个概念是MDP的基石。咱们一个一个说。

2.1 状态(State)

状态就是智能体观察到的环境信息。在资产配置中,状态可以是:

  • 当前各类资产的收益率
  • 市场波动率指标
  • 宏观经济数据(如GDP、CPI)
  • 技术指标(如RSI、MACD)

我记得有一次做CTA策略,我把状态定义得太细了,结果模型过拟合得一塌糊涂。后来我学乖了,状态设计要“够用就好”,别贪多。

2.2 动作(Action)

动作是智能体可以采取的行为。在资产配置场景下,动作就是调整投资组合的权重。

# 一个简单的动作示例:调整股票和债券的配置比例
actions = {
    '保守': [0.2, 0.8],   # 20%股票,80%债券
    '均衡': [0.5, 0.5],   # 50%股票,50%债券
    '激进': [0.8, 0.2]    # 80%股票,20%债券
}

动作空间可以是离散的(比如上面三种选择),也可以是连续的(比如直接输出权重向量)。我个人更倾向于离散动作,因为训练起来更稳定。

2.3 奖励函数(Reward Function)

奖励函数是强化学习的“指挥棒”。你设计什么样的奖励,智能体就会学出什么样的行为。

我曾经犯过一个错误:只把收益率作为奖励。结果模型学会了疯狂加杠杆,虽然收益高,但回撤也大得吓人。后来我加入了夏普比率和最大回撤惩罚,模型才变得稳健。

避坑指南:奖励函数设计要小心。如果只奖励短期收益,模型会变得短视。建议加入风险调整指标,比如:reward = return - λ * volatility

3. 策略与价值函数

有了MDP框架,接下来就是如何找到最优策略。这里有两个核心概念:策略和价值函数。

3.1 策略(Policy)

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

  • 确定性策略:给定状态,输出唯一动作。比如“当市场下跌超过5%时,清仓”。
  • 随机性策略:给定状态,输出动作的概率分布。比如“有70%概率买入,30%概率持有”。

在资产配置中,我通常先用随机性策略做探索,等模型稳定后再转为确定性策略。

3.2 价值函数(Value Function)

价值函数用来评估“某个状态有多好”或者“在某个状态下执行某个动作有多好”。

类型 符号 含义
状态价值函数 V(s) 从状态s开始,按照策略π能获得的期望累计奖励
动作价值函数 Q(s, a) 在状态s执行动作a后,按照策略π能获得的期望累计奖励

说白了,V(s) 告诉你“这个位置好不好”,Q(s, a) 告诉你“在这个位置做这个动作好不好”。

4. 知识体系框架图

下面我用一张图来总结本章的核心逻辑。这张图是我自己画的结构图,方便大家理解MDP在强化学习中的位置。

马尔可夫决策过程(MDP)核心结构 智能体 (Agent) 环境 (Environment) 状态 (State) 奖励 (Reward) 动作 (Action) 执行动作 新状态 即时奖励 观察状态 获得奖励 循环迭代:智能体根据状态选择动作 → 环境反馈新状态和奖励 → 智能体更新策略

5. 实际项目中的经验总结

最后,我想分享几点我在实际项目中积累的经验:

  1. 状态设计要简洁:别把能拿到的数据全塞进去。我试过用50维状态,结果训练慢得像蜗牛。后来精简到10维,效果反而更好。
  2. 奖励函数要平衡:既要考虑收益,也要考虑风险。我常用的公式是:reward = return - 0.5 * max_drawdown
  3. 折扣因子要调参:γ=0.9 和 γ=0.99 的结果可能天差地别。建议用网格搜索找到最优值。
  4. 先做仿真再上实盘:我吃过这个亏。在仿真环境里跑得好好的,一上实盘就崩。后来发现是仿真环境太理想化了。

核心要点回顾:

  • MDP 是强化学习的数学基础,由五元组 (S, A, P, R, γ) 定义
  • 状态、动作、奖励函数是三大核心要素
  • 策略决定行为,价值函数评估好坏
  • 实际项目中要注重状态设计和奖励函数平衡

嗯,今天就先聊到这里。MDP 是强化学习的基石,理解透彻了,后面的内容学起来就轻松多了。大家有什么问题,欢迎随时交流。

专注资料整理