强化学习核心概念:智能体、环境、状态、动作、奖励

说实话,刚接触强化学习那会儿,我脑子里全是问号。什么智能体、环境、状态、动作、奖励……这些词听着挺玄乎的。但后来我做了几个量化交易的项目,才真正明白——这些概念说白了就是一套「试错-反馈」的闭环系统。

你想想看,我们做量化投资,本质上不就是让程序自己去市场里摸索,赚钱了给点甜头,亏钱了打一巴掌,慢慢它就学会怎么操作了。嗯,这就是强化学习的精髓。

智能体与环境:谁在决策?谁在反馈?

智能体(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': 下一个状态

知识体系结构图

下面这张图,把本章的核心概念串起来了。我建议你多看几遍,理解它们之间的交互关系。

强化学习核心概念关系图 智能体 (Agent) 环境 (Environment) 状态 (State) 动作 (Action) 奖励 (Reward) MDP: (S, A, P, R, γ) 策略 π(s) → a | 价值函数 V(s), Q(s,a) 决策 执行动作 新状态 反馈

💡 我的建议:先理解智能体-环境-状态-动作-奖励这个闭环,再去看MDP的数学定义。等你能用MDP描述一个简单的交易策略后,再深入策略和价值函数。一步一步来,别急。

强化学习的核心,说白了就是让智能体在环境中通过试错学习,找到最优策略。在量化投资里,这个「最优策略」就是能稳定盈利的交易规则。嗯,概念讲完了,接下来就是动手实现了。

专注资料整理