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

好,咱们今天来啃一块硬骨头——强化学习的核心概念。说实话,我当年刚接触这些术语时,脑袋也是嗡嗡的。什么智能体、环境、状态、动作……感觉像在看哲学书。但别急,这些东西说白了,就是一套让机器学会「自己拿主意」的框架。

我习惯用一个比喻来理解:想象你在教一只小狗学新把戏。小狗是智能体,你家客厅是环境,它当前蹲着还是趴着是状态,它摇尾巴或转圈是动作,你给它零食就是奖励。嗯,就这么简单。下面咱们一个个拆开讲。

智能体(Agent)与环境(Environment)

智能体就是做决策的那个家伙。在交易系统里,它就是我们的策略模型。它观察市场,然后决定买、卖还是持有。环境则是它交互的外部世界——股票行情、订单簿、成交量,一切它无法控制但必须适应的东西。

我在项目中遇到过一个问题:很多人把环境和智能体混在一起写代码,结果改一个参数,整个系统崩了。记住,智能体和环境必须严格解耦。智能体只负责「决策」,环境只负责「反馈」。这是铁律。

核心原则: 智能体改变环境,环境反馈给智能体。两者通过「状态-动作-奖励」循环通信。

状态(State)与动作(Action)

状态是环境在某个时刻的快照。比如当前股价、持仓量、账户余额。我习惯把状态想象成一张「体检报告」,智能体根据这份报告做判断。

动作就是智能体能做的操作。在交易里,动作空间可以是离散的(买、卖、持有),也可以是连续的(买入多少股、以什么价格)。

这里有个坑,我曾经踩过:状态设计太粗糙。比如只把当前价格当状态,那智能体永远学不会趋势。你想想看,它连昨天涨了还是跌了都不知道,怎么决策?所以状态必须包含足够的历史信息,比如过去N步的价格序列。

我的经验: 状态维度不是越多越好。加太多噪声特征,模型反而学不到东西。我一般先用相关性分析筛一遍。

奖励(Reward)—— 交易系统的灵魂

奖励是强化学习的「指挥棒」。智能体所有行为的最终目的,就是最大化累计奖励。在交易里,奖励通常就是盈亏。但直接拿盈亏当奖励,问题很大。

举个例子:你赚了100块,但中间回撤了50%。智能体可能觉得「反正最后赚了就行」,中间怎么折腾无所谓。这显然不是我们想要的。所以我个人习惯在奖励函数里加入惩罚项:比如夏普比率、最大回撤、交易成本。

# 一个简单的奖励函数示例
def calculate_reward(current_portfolio_value, previous_portfolio_value, trade_cost):
    pnl = current_portfolio_value - previous_portfolio_value
    # 扣除交易成本
    net_pnl = pnl - trade_cost
    # 如果回撤过大,额外惩罚
    if pnl < 0 and abs(pnl) > 0.05 * previous_portfolio_value:
        net_pnl *= 1.5  # 放大亏损惩罚
    return net_pnl
注意: 奖励函数设计不当,智能体可能会「钻空子」。比如为了获得短期高奖励,频繁交易导致手续费爆炸。我见过有人因此亏掉整个回测账户。

策略(Policy)—— 智能体的决策手册

策略就是智能体在给定状态下选择动作的规则。它可以是确定性策略(状态S下永远选动作A),也可以是随机性策略(状态S下有80%概率选A,20%选B)。

随机性策略在交易里特别有用。为什么?因为市场有噪声。如果策略是确定性的,遇到没见过的行情,它可能直接「懵了」。随机性策略给了它探索的空间。

我记得有一次做回测,确定性策略在历史数据上表现完美,但实盘一跑就崩。换成随机性策略后,虽然单次收益低一些,但稳定性好得多。这就是探索与利用的平衡。

价值函数(Value Function)—— 评估「好」与「坏」

价值函数回答一个问题:「当前这个状态,到底有多好?」它不关心你下一步做什么,而是评估长期来看,这个状态能带来多少累计奖励。

有两种常见价值函数:

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

Q函数在交易里更常用。因为它直接告诉你:「当前持仓状态下,买入这个动作值不值?」

一句话区分: V(s) 评估「状态好不好」,Q(s,a) 评估「在这个状态下做某个动作好不好」。

马尔可夫决策过程(MDP)—— 一切的基础

MDP是强化学习的数学框架。它假设:未来的状态只取决于当前状态和当前动作,与过去无关。这就是马尔可夫性质。

你可能会问:「交易市场有记忆啊,昨天的价格影响今天,这怎么符合马尔可夫性质?」

嗯,这里有个技巧:我们可以把历史信息编码到状态里。比如状态不是「当前价格」,而是「过去20天的价格序列」。这样状态本身就包含了历史,未来就只依赖于当前状态了。说白了,就是通过状态设计来「伪造」马尔可夫性质。

一个完整的MDP由五元组定义:

符号 含义 交易中的例子
S 状态空间 所有可能的持仓+行情组合
A 动作空间 买入、卖出、持有
P 状态转移概率 买入后股价上涨的概率
R 奖励函数 盈亏 + 惩罚项
γ 折扣因子 0.99,表示更看重近期收益

折扣因子γ是个有意思的东西。它决定了智能体是「短视」还是「远视」。γ接近0,智能体只看眼前利益;γ接近1,它愿意为了长期收益忍受短期亏损。在交易里,我一般设0.95到0.99之间,太低了容易追涨杀跌,太高了可能死扛亏损单。

知识体系总览

下面这张图是我自己画的,把今天讲的所有概念串起来了。你可以把它当作一张「地图」,以后遇到具体算法时,回来看看它在图中的位置。

强化学习核心概念关系图 智能体 (Agent) 环境 (Environment) 状态 (State) 动作 (Action) 奖励 (Reward) 策略 (Policy) 价值函数 (V/Q) MDP 框架 输出 遵循 评估 生成 反馈 观察 执行 接收 建模 箭头方向:数据/控制流

从这张图你能看到:智能体观察状态,依据策略输出动作;动作作用于环境,环境反馈新状态和奖励;奖励回到智能体,用于更新策略和价值函数。整个循环由MDP框架支撑。说白了,这就是一个「观察-决策-行动-反馈」的闭环。

避坑指南: 我曾经在状态更新时忘了把奖励反馈给智能体,结果模型训练了三天,一点没收敛。检查代码才发现奖励根本没传进去。所以,一定要确保闭环的每个环节都打通

好了,今天的内容就到这里。这些概念是强化学习的基石,后面所有算法——DQN、PPO、A2C——都是在这个框架上搭积木。你只要把今天这张图刻在脑子里,后面学什么都轻松。

专注资料整理