强化学习基础(一):马尔可夫决策过程(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在强化学习中的位置。
5. 实际项目中的经验总结
最后,我想分享几点我在实际项目中积累的经验:
- 状态设计要简洁:别把能拿到的数据全塞进去。我试过用50维状态,结果训练慢得像蜗牛。后来精简到10维,效果反而更好。
- 奖励函数要平衡:既要考虑收益,也要考虑风险。我常用的公式是:
reward = return - 0.5 * max_drawdown - 折扣因子要调参:γ=0.9 和 γ=0.99 的结果可能天差地别。建议用网格搜索找到最优值。
- 先做仿真再上实盘:我吃过这个亏。在仿真环境里跑得好好的,一上实盘就崩。后来发现是仿真环境太理想化了。
核心要点回顾:
- MDP 是强化学习的数学基础,由五元组 (S, A, P, R, γ) 定义
- 状态、动作、奖励函数是三大核心要素
- 策略决定行为,价值函数评估好坏
- 实际项目中要注重状态设计和奖励函数平衡
嗯,今天就先聊到这里。MDP 是强化学习的基石,理解透彻了,后面的内容学起来就轻松多了。大家有什么问题,欢迎随时交流。