什么是强化学习(Reinforcement Learning,RL)?

强化学习是一种通过试错机制学习如何在环境中做出决策的机器学习方法。与监督学习不同,它没有直接的正确答案,而是通过不断与环境交互,获取奖励信号,从而逐步优化策略。


强化学习的基本概念

  1. 环境(Environment)
    系统的外部世界,强化学习的智能体与其交互。
    例如,游戏中的棋盘、自动驾驶的道路等。

  2. 智能体(Agent)
    在环境中做出决策的主体。智能体通过感知环境,执行动作并根据反馈调整行为。
    例如,自动驾驶系统、机器人。

  3. 状态(State, S)
    环境在某个时刻的描述。
    例如,棋局的布局、车辆的位置和速度。

  4. 动作(Action, A)
    智能体在当前状态下可以采取的行为。
    例如,在游戏中走一步棋,在驾驶中加速或转弯。

  5. 奖励(Reward, R)
    智能体采取某一动作后环境给出的反馈信号,用于指导智能体的学习。

    • 正奖励:鼓励当前行为。
    • 负奖励:惩罚当前行为。
  6. 策略(Policy, π)
    决定智能体在每个状态下采取哪个动作的规则或函数。

    • 确定性策略:给定状态,返回固定动作。
    • 随机策略:给定状态,返回动作的概率分布。
  7. 价值函数(Value Function, V)
    衡量在某个状态下能获得的长期回报的期望值。

    • 状态价值函数:V(s)=E[R]
    • 状态-动作价值函数:Q(s,a)

强化学习的核心思想

强化学习的目标是通过不断地试错探索,找到一条策略(Policy),使得智能体在与环境交互的过程中,获得的累计奖励最大化。

  1. 探索(Exploration)
    尝试新的动作,了解环境的未知部分。
    例如,在游戏中尝试不同的策略。
  2. 利用(Exploitation)
    利用已有知识,选择当前看起来最优的动作。
    例如,选择一条已知得分最高的路径。
  3. 平衡探索与利用
    在探索未知和利用已知之间权衡是强化学习中的关键问题。

强化学习的经典算法

强化学习中的经典算法主要分为两大类:基于值函数的方法基于策略的方法,以及两者的结合(Actor-Critic)。

以下是经典算法的讲解:


1. 基于值函数的方法

这种方法主要通过学习价值函数来间接优化策略。核心思想是计算每个状态或状态-动作对的价值,从而选择最优动作。

1.1 动态规划(Dynamic Programming, DP)
  • 适用场景:需要完整的环境模型(例如状态转移概率和奖励函数已知)。

  • 方法

    • 值迭代(Value Iteration) :通过迭代更新状态的价值函数 V(s) 找到最优策略。

  • 策略迭代(Policy Iteration) :交替执行策略评估和策略改进,直到收敛。
1.2 Q-Learning
  • 核心思想:使用 Q 函数 Q(s,a 表示状态 s 下采取动作 a 的长期收益,通过迭代更新找到最优 Q 函数。

  • 更新公式

  • 优点

    • 不需要环境模型。
    • 可以离线学习,适用于复杂环境。
  • 缺点

    • 在高维状态空间中效率低。
1.3 SARSA(State-Action-Reward-State-Action)
  • 与 Q-Learning 类似,但更新公式使用的是当前策略生成的动作,而非最优动作:
  • 区别

    • SARSA 是 on-policy(基于当前策略学习),Q-Learning 是 off-policy(基于最优策略学习)。

2. 基于策略的方法

这种方法直接学习策略函数 π(a∣s),而不是价值函数。

2.1 REINFORCE
  • 核心思想:通过蒙特卡洛采样,使用策略梯度方法优化策略函数。
  • 更新公式

其中,G 是累积奖励,θ 是策略参数。

  • 优点:适用于连续动作空间。
  • 缺点:高方差,收敛慢。
2.2 PPO(Proximal Policy Optimization)
  • 核心思想:限制策略更新的步长,防止大幅度更新导致的不稳定。

  • 优势

    • 收敛速度快。
    • 适用于高维连续状态和动作空间。

3. Actor-Critic 方法

  • 结合值函数和策略方法的优点,使用 Actor(策略)和 Critic(价值函数)同时学习。

  • 关键思想

    • Actor:负责生成策略 π(a∣s)。
    • Critic:负责评估策略的好坏,即计算价值函数 V(s) 或优势函数 A(s,a)。
  • 典型算法

    • A2C(Advantage Actor-Critic) :用优势函数 A(s,a)=Q(s,a)−V(s)代替价值函数,减少方差。
    • A3C(Asynchronous Advantage Actor-Critic) :通过多线程并行训练提升效率。

4. 深度强化学习

使用神经网络近似值函数或策略函数,解决高维状态空间问题。

4.1 DQN(Deep Q-Network)
  • 核心思想:用神经网络近似 Q 函数。

  • 创新点

    • 经验回放(Experience Replay) :将交互数据存储在缓冲区中,随机采样用于训练,避免样本相关性。
    • 目标网络(Target Network) :使用一个延迟更新的目标网络,稳定训练过程。
  • 不足

    • 无法处理连续动作空间。
4.2 DDPG(Deep Deterministic Policy Gradient)
  • 结合 DQN 和策略梯度方法,用于连续动作空间。

  • 创新点

    • 使用确定性策略 μ(s∣θ)。
    • 同时训练策略网络和 Q 网络。
4.3 AlphaGo / AlphaZero
  • 利用强化学习在围棋、国际象棋中实现超人类水平。

  • 方法

    • 结合深度学习和蒙特卡洛树搜索(MCTS)。
    • 策略网络指导搜索方向,价值网络评估局面。

经典算法对比

算法 类型 特点 应用场景
值迭代/策略迭代 基于值函数 模型需已知,状态空间小 小型离散问题,如迷宫
Q-Learning 基于值函数 Off-policy,适用于离散动作空间 游戏、路径规划
SARSA 基于值函数 On-policy,更注重当前策略表现 实时交互系统
REINFORCE 基于策略 直接优化策略,适合连续动作空间 机器人控制、金融优化
PPO 基于策略 收敛稳定,计算效率高 自动驾驶、复杂决策
DQN 深度强化学习 适合高维状态空间的离散动作问题 Atari 游戏、推荐系统
DDPG 深度强化学习 连续动作空间,高效利用样本 自动驾驶、机器人控制
Actor-Critic 混合方法 减少方差,收敛快 各类强化学习场景


强化学习的应用场景

  1. 游戏

    • AlphaGo、AlphaZero 等利用强化学习在围棋、国际象棋中击败人类高手。
    • 在 Atari 游戏中实现超人类表现。
  2. 机器人控制

    • 训练机器人行走、抓取物体等复杂动作。
  3. 自动驾驶

    • 通过模拟环境训练智能驾驶策略。
  4. 推荐系统

    • 动态调整推荐策略,最大化用户点击率或留存率。
  5. 金融投资

    • 强化学习用于股票交易策略优化。
  6. 医疗

    • 优化治疗方案,如动态调整用药策略。

强化学习的挑战

  1. 样本效率低

    • 需要大量的试验数据才能学习到有效的策略。
  2. 探索与利用的权衡

    • 过多探索会导致浪费资源,过多利用会陷入次优解。
  3. 奖励稀疏或延迟

    • 当奖励信号不及时或较少时,智能体难以学习有效策略。
  4. 高维状态空间

    • 当状态和动作空间非常大时,学习变得困难。

案例分析:CartPole 平衡杆

下面通过一个经典强化学习案例——CartPole 平衡杆问题,来分析强化学习的实际应用。


案例描述:CartPole 问题

在这个问题中,一个小车(Cart)在一条直线上移动,上面平衡着一根竖直的杆(Pole)。目标是通过控制小车的左右运动,使杆尽量保持竖直状态,并防止它掉下来或小车出界。

环境设置
  • 状态空间: 包括以下 4 个变量:

    1. 小车的位置(Cart Position)。
    2. 小车的速度(Cart Velocity)。
    3. 杆的角度(Pole Angle)。
    4. 杆的角速度(Pole Angular Velocity)。
  • 动作空间

    • 左移(Push Left)。
    • 右移(Push Right)。
  • 奖励: 每一步操作后,若杆未倒下且小车未出界,则奖励 +1。

  • 结束条件

    1. 杆的角度超过一定阈值(例如 ±12°)。
    2. 小车超出轨道边界。
    3. 经过 200 步仍保持平衡(成功)。

强化学习方法

我们使用 深度 Q 网络(DQN) 解决 CartPole 问题。DQN 是一种结合深度学习的强化学习方法,适用于高维状态空间的问题。


解决方案

1. 环境初始化

使用 OpenAI Gym 提供的 CartPole-v1 环境:

import gym
import numpy as np
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

# 初始化环境
env = gym.make("CartPole-v1")
state_size = env.observation_space.shape[0]  # 4维状态
action_size = env.action_space.n  # 2个动作(左移,右移)
2. 构建 Q 网络

Q 网络通过神经网络近似 Q 函数:

def build_model(state_size, action_size):
    model = Sequential([
        Dense(24, input_dim=state_size, activation="relu"),
        Dense(24, activation="relu"),
        Dense(action_size, activation="linear")  # 输出每个动作的 Q 值
    ])
    model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
                  loss="mse")
    return model

# 创建主网络和目标网络
model = build_model(state_size, action_size)
target_model = build_model(state_size, action_size)
3. 经验回放与目标网络

经验回放用于打破样本相关性,提高训练效率:

from collections import deque

memory = deque(maxlen=2000)  # 存储交互数据
gamma = 0.95                 # 折扣因子
epsilon = 1.0                # 探索率
epsilon_min = 0.01
epsilon_decay = 0.995

# 存储交互数据
def remember(state, action, reward, next_state, done):
    memory.append((state, action, reward, next_state, done))

# 经验回放
def replay(batch_size):
    minibatch = np.random.choice(memory, batch_size, replace=False)
    for state, action, reward, next_state, done in minibatch:
        target = reward
        if not done:
            target += gamma * np.amax(target_model.predict(next_state)[0])
        target_f = model.predict(state)
        target_f[0][action] = target
        model.fit(state, target_f, epochs=1, verbose=0)

# 更新目标网络
def update_target_model():
    target_model.set_weights(model.get_weights())
4. 训练主循环

强化学习通过多次回合训练优化策略:

episodes = 1000
batch_size = 32

for e in range(episodes):
    state = env.reset()
    state = np.reshape(state, [1, state_size])
    for time in range(200):
        # ε-贪心策略
        if np.random.rand() <= epsilon:
            action = np.random.choice(action_size)
        else:
            q_values = model.predict(state)
            action = np.argmax(q_values[0])

        # 与环境交互
        next_state, reward, done, _ = env.step(action)
        next_state = np.reshape(next_state, [1, state_size])
        remember(state, action, reward, next_state, done)
        state = next_state

        # 检查是否结束
        if done:
            print(f"Episode: {e+1}/{episodes}, Score: {time}")
            break

        # 回放并更新网络
        if len(memory) > batch_size:
            replay(batch_size)
    
    # 减少探索率
    if epsilon > epsilon_min:
        epsilon *= epsilon_decay
    
    # 定期更新目标网络
    if e % 10 == 0:
        update_target_model()

案例输出分析

  • 训练初期

    • 智能体随机探索,杆很快倒下。
    • 平均得分(即杆保持平衡的时间步数)低于 20。
  • 训练中期

    • 随着策略的优化,杆保持平衡的时间逐渐延长。
    • ε-贪心策略使智能体逐步减少随机探索,更多利用已有策略。
  • 训练结束

    • 智能体学会保持杆的平衡,平均得分接近或达到 200,完成任务。

结果与应用

  1. 得分趋势: 随着训练轮次增加,智能体的得分从初期的随机表现逐渐提升到接近满分。
  2. 实际意义: CartPole 问题是强化学习中的“Hello World”,类似的技术可扩展到复杂系统,如自动驾驶、机器人平衡控制等。

总结

  • CartPole 问题演示了强化学习如何通过试错和奖励机制优化策略。
  • DQN 算法成功解决了高维状态空间的问题,通过经验回放和目标网络提升了训练稳定性。

 零基础入门AI大模型

今天贴心为大家准备好了一系列AI大模型资源,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

 

 

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。

 

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

5.免费获取(扫下方二v码即可100%领取)

更多推荐