强化学习核心概念:智能体、环境、状态、动作、奖励
说实话,刚接触强化学习那会儿,我脑子里全是问号。什么智能体、环境、状态、动作、奖励……这些词听着挺玄乎的。但后来我做了几个量化交易的项目,才真正明白——这些概念说白了就是一套「试错-反馈」的闭环系统。
你想想看,我们做量化投资,本质上不就是让程序自己去市场里摸索,赚钱了给点甜头,亏钱了打一巴掌,慢慢它就学会怎么操作了。嗯,这就是强化学习的精髓。
智能体与环境:谁在决策?谁在反馈?
智能体(Agent),就是那个做决策的家伙。在量化交易里,它就是我们的交易策略程序。我习惯把智能体想象成一个交易员,只不过这个交易员不会累、不会情绪化,只会按照算法执行。
环境(Environment),就是智能体所处的世界。在量化投资中,环境就是整个金融市场——股票、期货、加密货币的价格波动,成交量变化,甚至新闻情绪。环境会响应智能体的动作,并给出反馈。
💡 我在项目中遇到过一个问题:刚开始我把整个A股市场当作环境,结果状态空间太大,模型根本学不动。后来我学乖了,只针对单一股票或ETF构建环境,效果立马好了很多。
状态与动作:你看到了什么?你能做什么?
状态(State),是智能体在某个时刻观察到的环境信息。说白了,就是「你看到了什么」。在量化交易里,状态可以是过去N天的收盘价、成交量、技术指标(如RSI、MACD),甚至是订单簿的深度数据。
动作(Action),是智能体可以采取的操作。在交易场景中,动作通常包括:买入、卖出、持有。有时候也会细分为买入多少股、卖出多少仓位。
我建议你把状态和动作的关系想成「输入-输出」:状态是输入,动作是输出。智能体根据当前状态,决定下一步做什么。
# 一个简单的状态和动作定义示例
class TradingEnvironment:
def __init__(self, price_data):
self.price_data = price_data
self.current_step = 0
def get_state(self):
# 状态:过去5天的收盘价
return self.price_data[self.current_step-5:self.current_step]
def get_actions(self):
# 动作:0=卖出, 1=持有, 2=买入
return [0, 1, 2]
奖励:赚钱的甜头,亏钱的巴掌
奖励(Reward),是环境对智能体动作的即时反馈。在量化投资中,奖励通常就是收益——你买入后涨了,奖励为正;跌了,奖励为负。
但这里有个坑。我曾经设计过一个奖励函数,直接使用每笔交易的盈亏。结果模型学会了「频繁交易」,因为短期波动能带来正奖励,但长期下来手续费把利润全吃掉了。
⚠️ 注意:奖励函数的设计直接决定了模型的行为。如果你只奖励短期收益,模型就会变成「短线客」;如果你加入夏普比率或最大回撤作为惩罚,模型会更注重风险控制。
我个人习惯在奖励函数中加入三个要素:
- 收益:交易产生的利润或亏损
- 交易成本:手续费、滑点,防止频繁交易
- 风险惩罚:比如回撤过大时给予负奖励
马尔可夫决策过程(MDP):强化学习的数学骨架
马尔可夫决策过程,听起来很高大上,其实就是一个数学框架,用来描述智能体与环境交互的过程。它由五个元素组成:(S, A, P, R, γ)。
| 符号 | 含义 | 量化投资中的例子 |
|---|---|---|
| S | 状态空间 | 所有可能的市场状态(价格、成交量等) |
| A | 动作空间 | 买入、卖出、持有 |
| P | 状态转移概率 | 从当前市场状态到下一个状态的概率 |
| R | 奖励函数 | 交易后的收益或亏损 |
| γ | 折扣因子 | 未来收益的折现率(0到1之间) |
你可能会问:为什么叫「马尔可夫」?因为MDP假设未来只取决于当前状态,与过去无关。这在量化交易里其实是个近似——市场确实有记忆效应,但为了简化问题,我们通常假设当前的价格已经包含了所有历史信息。
💡 小技巧:在构建MDP时,状态要包含足够的信息,使得「马尔可夫性」近似成立。比如,不要只用当前价格,要加入移动平均线、成交量等,让状态能反映趋势。
策略与价值函数:智能体的「大脑」
策略:智能体的行为准则
策略(Policy),就是智能体在给定状态下选择动作的规则。它有两种形式:
- 确定性策略:给定状态,直接输出一个动作。比如「当RSI低于30时买入」。
- 随机性策略:给定状态,输出每个动作的概率。比如「有70%概率买入,30%概率持有」。
我记得刚开始做策略优化时,我用了确定性策略,结果模型在震荡行情里反复被收割。后来换成随机性策略,加入了一些探索机制,模型反而更稳健了。
价值函数:评估状态或动作的好坏
价值函数(Value Function),用来评估某个状态或某个动作的「长期价值」。说白了,就是「在这个状态下,未来能赚多少钱」。
有两种常见的价值函数:
- 状态价值函数 V(s):从状态s开始,按照当前策略行动,能获得的期望累计奖励。
- 动作价值函数 Q(s, a):在状态s下执行动作a,之后按照当前策略行动,能获得的期望累计奖励。
你想想看,Q函数在量化投资里多有用——它可以直接告诉我们:在当前市场状态下,买入、卖出、持有哪个动作更有利。
# Q-learning 更新公式(伪代码)
Q[s, a] = Q[s, a] + α * (reward + γ * max(Q[s', a']) - Q[s, a])
# α: 学习率
# γ: 折扣因子
# s': 下一个状态
知识体系结构图
下面这张图,把本章的核心概念串起来了。我建议你多看几遍,理解它们之间的交互关系。
💡 我的建议:先理解智能体-环境-状态-动作-奖励这个闭环,再去看MDP的数学定义。等你能用MDP描述一个简单的交易策略后,再深入策略和价值函数。一步一步来,别急。
强化学习的核心,说白了就是让智能体在环境中通过试错学习,找到最优策略。在量化投资里,这个「最优策略」就是能稳定盈利的交易规则。嗯,概念讲完了,接下来就是动手实现了。