大模型RLHF强化学习笔记(二):强化学习基础梳理Part2

【如果笔记对你有帮助,欢迎关注&点赞&收藏,收到正反馈会加快更新!谢谢支持!】

一、强化学习基础

1.4 强化学习分类

  •  根据数据来源划分
    • Online:智能体与环境实时交互,如Q-Learning、SARSA、Actor-Critic
    • Offline:智能体使用预先收集的数据集进行学习
  • 根据策略更新划分
    • On-Policy:学习和行为策略是相同的,数据是按照当前策略生成的,如SARSA
    • Off-Policy:学习策略和行为策略可以不同,数据可以来自不同的策略,如Q-Learning、DQN
  • 根据学习方式划分
    • Model-based:假设环境的动态特性是已知的或可以通过某种方式学习到,如动态规划(DP)、基于模型的强化学习
    • Model-free:直接从与环境的交互中学习策略或价值函数,如
  • 根据策略优化方式划分:
    • Value-based:学习状态价值函数 V(s) 或状态-动作价值函数 Q(s,a) 来优化策略,如动态规划(DP)、时序差分法(TD)、蒙特卡洛方法(MC)
    • Policy-based: 直接优化策略参数,如Actor-Critic、DDPG

二、强化学习算法

2.1 DQN

  • 归属分类:model-free,off-policy,value-based
  • 结合了深度学习和 Q-Learning,使用神经网络来近似 Q(s,a) 函数
  • 优化点:
    • 经验回放(Experience Replay):将每次交互的经验(状态 s、动作 a、奖励 r、下一个状态 s′)存储在一个回放缓存(replay buffer)中,训练时从中随机抽取一批经验进行更新
    • 目标网络(Target Network):目标网络是主网络的一个副本,但更新频率较低。在计算目标值时,用来评估 Q(s′,a′)。这有助于减少目标值的波动,提高学习的稳定性。
  • 流程:
    - 初始化:主网络Q(s,a)和复制一个目标网络Q^(s,a) ,经验回放缓存D
    for 序列
        - 初始化状态s
        for 每个时间步:
            - 用ϵ-greedy根据Q选择状态s下的动作a
            - 观察到奖励r和下一个状态s‘
            - (s, a, s‘, a‘)作为经验放到缓存D中
            
            - 从缓存D随机抽一批经验
            - 目标值计算:y = r + γ*maxQ(s‘,a‘) # 类比sft中的ground truth
            - 损失函数计算 L(Q(s,a), y)
            - 更新主网络参数
    
            - 定期更新目标网络参数更新
    

2.2 REINFORCE算法

  • 一种经典策略梯度方法(Policy Gradient Method),model-freeonline
  • 通过蒙特卡洛采样估计Q值,计算策略的梯度来更新策略
  • 基线改进
    • 为什么要引进基线:
      • 直接使用 Gt​ 作为更新信号会导致策略梯度估计的方差很高,从而使得算法的更新不稳定,收敛速度缓慢,甚至可能无法收敛到最优策略
      • 减去基线相当于除掉环境随机性波动,让动作之间的好坏关系更加明确 → 减小方差
  • 流程:
    - 初始化策略参数 θ, 学习率 α
    
    
    for 序列 in 训练序列集合:
        - 初始化:状态s,轨迹 = []
        
        #【与环境交互,生成轨迹】
        for 每个时间步 t until 终止条件:    
            a = 根据策略 π(a|s; θ) 选择动作  # 根据当前策略选择动作
            s’, r = 环境.step(a)  # 执行动作,观察奖励和下一个状态
            轨迹.append((s, a, r))  # 保存轨迹   
            s = s‘  # 更新状态
        
        #【计算累积奖励】
        G = 0
        for t in reversed(range(len(轨迹))):
            s, a, r = 轨迹[t]
            G = r + γ * G  # 累积奖励
            梯度 = ∇θ log π(a|s; θ) * G  # 计算策略梯度
            θ = θ + α * 梯度  # 更新策略参数

2.3 Actor-Critic算法

  • 特点:结合策略梯度方法(Actor)和价值函数估计(Critic)
    • Actor:和环境交互采样轨迹【负责根据当前策略 π(a∣s;θ) 选择动作】
    • Critic:评判Actor动作和状态的好坏【负责估计状态价值函数 V(s;ϕ),帮助Actor更新策略参数】
    • 时序差分作为优势函数
  • 流程:
    # 初始化
    初始化策略网络参数 θ
    初始化价值网络参数 ω
    设置学习率 α_θ 和 α_ω
    设置折扣因子 γ
    
    
    for 对于每个训练序列:
    
        s = 初始状态 s_0
        轨迹 = []  # 存储轨迹
        
        # 与环境交互,生成轨迹
        for 每个时间步 t until 终止条件:
            a = 根据策略 π(a|s; θ) 选择动作  # Actor: 根据当前策略选择动作
            s’, r = 环境.step(a)  # 执行动作,观察奖励和下一个状态
            轨迹.append((s, a, r))  # 保存轨迹
            s = s’  # 更新状态
        
        # 计算TD误差
        G = 0
        for t in reversed(range(len(轨迹))):
            s, a, r = 轨迹[t]
            G = r + γ * G  # 累积奖励
            δ_t = r + γ * V_ω(s’; ω) - V_ω(s; ω)  # TD误差【优势函数】
            
            # 更新价值网络参数(Critic)
            ω = ω + α_ω * δ_t * ∇_ω V_ω(s; ω)
            
            # 更新策略网络参数(Actor)
            θ = θ + α_θ * δ_t * ∇_θ log π(a|s; θ)
        

2.4 PPO算法

  • TRPO(Trust Region Policy Optimization,信赖域策略优化)
    • PPO前身算法
    • 约束策略更新的幅度来保证策略优化过程的稳定性和高效性
    • 使用KL散度衡量新旧策略之间的差异,并约束KL散度不超过一个预设的阈值
  • PPO(Proximal Policy Optimization,近端策略优化)
    • 策略截断:简化TRPO的优化过程,对新旧策略比进行了截断,使其在 [1−ϵ,1+ϵ] 范围内
    • 优势函数:GAE估计
      • GAE(Generalized Advantage Estimation,广义优势估计)是一种用于估计优势函数的方法,它结合了TD(Temporal Difference)和蒙特卡洛估计的优点,能够在减少方差的同时保持较低的偏差
      • 将不同的步数的优势估计进行指数加权平均
      • 引入 λ 参数,GAE能够在TD误差和蒙特卡洛估计之间取得平衡。较大的 λ 值更接近蒙特卡洛估计,方差较小但偏差较大;较小的 λ 值更接近TD误差,偏差较小但方差较大
  • 伪代码:
    # 初始化
    初始化策略网络参数 θ
    初始化价值网络参数 ω
    设置学习率 α_θ 和 α_ω
    设置折扣因子 γ
    设置GAE参数 λ
    设置截断参数 ε
    
    for 对于每个训练序列:
        s = 初始状态 s_0
        轨迹 = []  # 存储轨迹
        动作概率 = []  # 存储旧策略下的动作概率
        优势 = []  # 存储优势估计
    
        # 与环境交互,生成轨迹
        for 每个时间步 t until 终止条件:
            π_θ(a|s) = 策略网络输出动作概率
            a = 根据策略 π(a|s; θ) 选择动作  # Actor: 根据当前策略选择动作
            s’, r = 环境.step(a)  # 执行动作,观察奖励和下一个状态
            轨迹.append((s, a, r, s’))  # 保存轨迹
            动作概率.append(π_θ(a|s))  # 保存旧策略下的动作概率
            s = s’  # 更新状态
    
        # 计算GAE优势估计
        优势 = []
        G = 0
        gae = 0
        for t in reversed(range(len(轨迹))):
            s, a, r, s’ = 轨迹[t]
            V_ω(s) = 价值网络输出状态价值
            V_ω(s’) = 价值网络输出下一个状态价值
            δ_t = r + γ * V_ω(s’) - V_ω(s)  # TD误差
            gae = δ_t + γ * λ * gae  # GAE递归计算 = TD误差 + 折扣*GAE参数*gae
            优势.append(gae)
        优势.reverse()  # 将优势列表反转,使其与轨迹对应
    
        # 更新价值网络参数 (Critic)
        for t in range(len(轨迹)):
            s, a, r, s’ = 轨迹[t]
            V_ω(s) = 价值网络输出状态价值
            G = r + γ * 价值网络输出下一个状态价值
            ω = ω + α_ω * (G - V_ω(s)) * ∇_ω V_ω(s)  # 使用TD误差更新价值网络
    
        # 更新策略网络参数 (Actor)
        for t in range(len(轨迹)):
            s, a, r, s’ = 轨迹[t]
            π_θ(a|s) = 策略网络输出动作概率
            π_θ_old(a|s) = 动作概率[t]  # 旧策略下的动作概率
            比值 = π_θ(a|s) / π_θ_old(a|s)
            剪切比值 = clip(比值, 1 - ε, 1 + ε)
            L_clip = min(比值 * 优势[t], 剪切比值 * 优势[t])
            θ = θ + α_θ * ∇_θ L_clip  # 使用截断的概率比更新策略网络

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值