强化学习的一些概念

打印 上一主题 下一主题

主题 967|帖子 967|积分 2901

目次
  强化学习
  打个比方
  核心要素
  State
  Action
  Reward
  几个代码demo
  学习目标
  
  
    强化学习

  强化学习(Reinforcement Learning, RL)是机器学习的一个分支,旨在让智能体(Agent)通过与环境的交互学习最优计谋,以最大化恒久累积夸奖。其核心思想是 “试错 - 反馈”,智能体在环境中通过不断尝试动作,根据环境反馈的夸奖调解行为,最终学会在不同状态下选择最优动作。
  

  打个比方

  强化学习的「自主生存法则」:像玩游戏一样学本事
  想象你养了个智能体(好比扫地机器人),把它扔进环境(你家客厅),然后告诉它:「本身想办法把地扫干净,扫得好有夸奖,撞桌子就扣钱!」 这就是强化学习的核心 ——让智能体在「试错 - 反馈」中本身摸出一套生存计谋。
  对比人类小孩学走路:
  没人教婴儿「先迈左脚还是右脚」(无监督)
  摔疼了本身哭(负面反馈),站稳了家人笑(正面反馈)
  最终形成「平衡感 + 迈步节奏」的肌肉记忆(计谋)
  强化学习的智能体,就是这样一个「会哭会笑的电子小孩」。
  
  智能体的「三件套」:眼睛(状态)、手脚(动作)、奖惩(反馈)
  以扫地机器人为例拆解:
  状态(眼睛看到的世界)
  实时感知:前方有没有桌子(激光雷达数据)、哪里灰尘多(摄像头识别)、电量剩多少(传感器)
  大白话:「现在在客厅茶几旁,左边有灰尘,右边是沙发,电量 80%」
  动作(手脚的选择)
  可选操作:前进、左转、右转、吸尘、回充
  大白话:「是先吸茶几底下,还是绕到沙发后面?」
  夸奖(好坏的裁判)
  正向:每吸 1㎡灰尘 + 1 分,按时回充 + 5 分
  负向:撞桌子 - 3 分,没电关机 - 10 分
  大白话:「吸尘是赢利,撞桌是罚款,没电最亏!」
  
  自主学习的「闭环逻辑」:从乱闯到老司机
  智能体的学习过程像玩「无穷循环的闯关游戏」:
  第一阶段:乱闯期(探索)
  机器人:「反正没电就关机,先乱开试试!」(随机选动作)
  效果:撞墙 3 次,偶尔吸到灰尘(得到零星夸奖)
  第二阶段:摸规律(试错中总结)
  发现:「电量低于 20% 回充,能避免关机扣分」
  记取:「看到灰尘多的区域,先吸尘再移动更划算」
  第三阶段:老司机(计谋成型)
  最优计谋:「优先排除高灰尘区→电量 30% 时规划回充路径→避开家具密集区」
  效果:从「乱闯扣分」酿成「稳固高分」,甚至比人类指挥的服从还高
  
  为什么说「自动驾驶是强化学习的终极考场」?
  对比扫地机器人,自动驾驶的「环境复杂度」暴增:
  状态:不仅是车身传感器,还要猜测其他车辆、行人的行为(好比外卖电动车突然变道)
  动作:刹车力度、转向角度、变道机会,精度要求到厘米级
  夸奖:安全到达 + 100 分,急刹乘客难熬 - 20 分,违章 - 50 分,碰撞 - 1000 分(直接「Game Over」)
  难点:需要在 0.1 秒内完成「感知状态→计算最优动作→执行」的循环,还要顺应雨天、夜间等极度场景
  这就是为什么特斯拉、Waymo 等公司疯狂投入强化学习 ——只有让汽车本身在虚拟世界「撞坏」100 万次,才气在现实中「零事故」。
  
  一句话总结强化学习:
  「给智能体一个‘好坏’的尺度(夸奖),让它在环境里本身‘摸爬滚打’,最终学会「既能占自制,又能避坑」的生存之道。」
  (就像父母教孩子:「本身出去玩,别碰火(负反馈),帮妈妈拿东西有糖吃(正反馈)」,孩子最终学会独立生存。)
  
  核心要素

  智能体与环境:智能体是决定主体(如机器人、游戏角色),环境是智能体举措的空间。两者通过 “状态 - 动作 - 夸奖” 循环交互
  
  State

  状态(State):环境当前的观测信息,如机器人的位置、游戏画面等
  
  Action

  

  动作(Action):智能体在当前状态下的选择,如移动、跳跃
  1. 动作的本质与分类
  动作是智能体与环境交互的直接载体,其计划决定了智能体的行为能力。根据动作的特性,可分为以下两类:
  离散动作空间:动作数量有限且可数,如机器人的移动方向(上 / 下 / 左 / 右)、游戏中的按键操作等。
  连续动作空间:动作取值为连续区间,如自动驾驶中的油门深度(0-100%)、机械臂的关节角度等。
  关键挑衅:
  离散动作空间需枚举所有可能动作,适合规则明确的场景;
  连续动作空间需通过计谋网络输出概率分布或直接生成动作(如 DDPG 中的正态分布采样)。
  2. 动作空间的计划原则
  完整性:动作聚集需覆盖所有可能的有效行为,避免遗漏关键操作。
  正交性:动作间应相互独立,镌汰冗余(犹如时存在 “加速” 和 “前进” 可能导致计谋肴杂)。
  可扩展性:允许动态调解动作空间(如在训练中逐步解锁新动作)。
  3. 数学表达
  离散动作:用独热编码(One-Hot Encoding)表示,如 4 个方向的动作可表示为 [0,0,0,1](右)。
  连续动作:常用均值 - 方差模子(如正态分布)或直接通过神经网络输出动作值,如:a∼N(μ(s∣θ),σ2(s∣θ))
  此中,μ和σ由计谋网络参数θ生成。
  4. 典范应用场景
  离散动作:Atari 游戏(跳跃、开火)、围棋落子(19x19 位置)。
  连续动作:机器人控制(关节扭矩)、飞行器姿态调解(俯仰角、滚转角)。
  
  Reward

  

  夸奖(Reward):环境对动作的反馈,正数表示鼓励,负数表示处罚
  1. 夸奖的核心作用
  夸奖是环境对智能体行为的即时反馈信号,是驱动学习的核心动力。其作用包括:
  行为引导:通过正负反馈塑造智能体计谋(如夸奖 “直行”,处罚 “碰撞”)。
  目标对齐:将抽象目标转化为可量化的数值(如 “到达终点” 对应 + 100 夸奖)。
  2. 夸奖计划的关键原则
  明确性:夸奖需直接反映动尴尬刁难目标的贡献(如 “进球” 夸奖远大于 “传球”)。
  希罕性与密度平衡:希罕夸奖(如仅在成功时给予夸奖)可能导致学习痴钝;
  密集夸奖(如每步给予小夸奖)可能引入噪声,需谨慎计划。
  延迟夸奖处置惩罚:通过折扣因子\(\gamma\)(0≤γ≤1)将将来夸奖折算为现值:\(G_t = r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + \dots\)
  3. 夸奖塑形(Reward Shaping)
  通过人工计划辅助夸奖加速学习:
  中间目标夸奖:在路径规划中,每靠近目标点一步给予小额夸奖。
  内在动机夸奖:探索未知区域时给予夸奖,解决 “探索 - 利用” 困境。
  处罚计划:对危险行为(如车辆闯红灯)施加大额负夸奖。
  4. 数学公式与算法关联
  Q-learning:目标 Q 值为\(r + \gamma \max_a Q(s', a)\),夸奖直接影响更新方向。
  计谋梯度:用累积夸奖\(R(\tau)\)作为权重更新计谋网络:\(\nabla \theta \propto \sum_{t=1}^T R(\tau) \nabla \log \pi(a_t|s_t; \theta)\)
  5. 典范应用场景
  游戏:击败敌人 + 5 分,死亡 - 10 分。
  机器人:保持平衡每帧 + 1 分,跌倒 - 50 分。
  金融:红利 + 1% 夸奖,亏损 - 0.5% 处罚。
  
  几个代码demo

  离散动作空间示例:简朴的网格世界
  1. import numpy as np
  2. # 定义网格世界的大小
  3. GRID_SIZE = 4
  4. # 定义动作:上、下、左、右
  5. ACTIONS = [(-1, 0), (1, 0), (0, -1), (0, 1)]
  6. # 定义折扣因子
  7. GAMMA = 0.9
  8. # 定义学习率
  9. ALPHA = 0.1
  10. # 定义迭代次数
  11. EPISODES = 1000
  12. # 初始化 Q 表
  13. q_table = np.zeros((GRID_SIZE * GRID_SIZE, len(ACTIONS)))
  14. # 定义状态转换函数
  15. def get_state(x, y):
  16.     return x * GRID_SIZE + y
  17. # 定义奖励函数
  18. def get_reward(x, y):
  19.     if x == GRID_SIZE - 1 and y == GRID_SIZE - 1:
  20.         return 100  # 到达目标点给予奖励
  21.     elif x < 0 or x >= GRID_SIZE or y < 0 or y >= GRID_SIZE:
  22.         return -10  # 越界给予惩罚
  23.     else:
  24.         return -1  # 每走一步给予小惩罚
  25. # Q - learning 算法
  26. for episode in range(EPISODES):
  27.     # 初始化状态
  28.     x, y = 0, 0
  29.     done = False
  30.     while not done:
  31.         state = get_state(x, y)
  32.         # 选择动作(epsilon - greedy 策略)
  33.         epsilon = 0.1
  34.         if np.random.uniform(0, 1) < epsilon:
  35.             action_idx = np.random.choice(len(ACTIONS))
  36.         else:
  37.             action_idx = np.argmax(q_table[state])
  38.         action = ACTIONS[action_idx]
  39.         # 执行动作
  40.         new_x = x + action[0]
  41.         new_y = y + action[1]
  42.         new_state = get_state(new_x, new_y)
  43.         # 获取奖励
  44.         reward = get_reward(new_x, new_y)
  45.         # 更新 Q 表
  46.         q_table[state, action_idx] = (1 - ALPHA) * q_table[state, action_idx] + ALPHA * (
  47.                 reward + GAMMA * np.max(q_table[new_state]))
  48.         # 判断是否到达目标
  49.         if reward == 100:
  50.             done = True
  51.         x, y = new_x, new_y
  52. # 打印最终的 Q 表
  53. print("Final Q - table:")
  54. print(q_table)
复制代码
实现了一个简朴的网格世界,智能体需要从左上角走到右下角。动作空间是离散的(上、下、左、右),通过 Q - learning 算法学习最优计谋,有点类似于动态规划的计谋要求引导
  
  连续动作空间示例:简朴的一维移动问题(利用 DDPG 简化版)
  1. import torch
  2. import torch.nn as nn
  3. import torch.optim as optim
  4. import numpy as np
  5. # 定义状态维度和动作维度
  6. STATE_DIM = 1
  7. ACTION_DIM = 1
  8. # 定义折扣因子
  9. GAMMA = 0.9
  10. # 定义迭代次数
  11. EPISODES = 1000
  12. # 定义策略网络
  13. class PolicyNetwork(nn.Module):
  14.     def __init__(self):
  15.         super(PolicyNetwork, self).__init__()
  16.         self.fc1 = nn.Linear(STATE_DIM, 16)
  17.         self.fc2 = nn.Linear(16, ACTION_DIM)
  18.     def forward(self, state):
  19.         x = torch.relu(self.fc1(state))
  20.         action = torch.tanh(self.fc2(x))  # 动作范围在 [-1, 1]
  21.         return action
  22. # 初始化策略网络
  23. policy_network = PolicyNetwork()
  24. optimizer = optim.Adam(policy_network.parameters(), lr=0.001)
  25. # 定义奖励函数
  26. def get_reward(state, action):
  27.     target_state = 5.0
  28.     new_state = state + action.item()
  29.     reward = -np.abs(new_state - target_state)
  30.     return reward
  31. # 训练过程
  32. for episode in range(EPISODES):
  33.     state = torch.tensor([0.0], dtype=torch.float32)
  34.     done = False
  35.     while not done:
  36.         action = policy_network(state)
  37.         reward = get_reward(state, action)
  38.         # 简单的策略梯度更新
  39.         loss = -reward * action
  40.         optimizer.zero_grad()
  41.         loss.backward()
  42.         optimizer.step()
  43.         # 更新状态
  44.         state = torch.tensor([state.item() + action.item()], dtype=torch.float32)
  45.         if np.abs(state.item() - 5.0) < 0.1:
  46.             done = True
  47. # 打印最终的策略网络参数
  48. print("Final policy network parameters:")
  49. for name, param in policy_network.named_parameters():
  50.     print(name, param.data)
复制代码
实现了一个简朴的一维移动问题,智能体需要从位置 0 移动到位置 5。动作空间是连续的,通过一个简朴的计谋网络学习最优动作。
  
  夸奖塑形示例:在网格世界中添加中间目标夸奖
  1. import numpy as np
  2. # 定义网格世界的大小
  3. GRID_SIZE = 4
  4. # 定义动作:上、下、左、右
  5. ACTIONS = [(-1, 0), (1, 0), (0, -1), (0, 1)]
  6. # 定义折扣因子
  7. GAMMA = 0.9
  8. # 定义学习率
  9. ALPHA = 0.1
  10. # 定义迭代次数
  11. EPISODES = 1000
  12. # 初始化 Q 表
  13. q_table = np.zeros((GRID_SIZE * GRID_SIZE, len(ACTIONS)))
  14. # 定义状态转换函数
  15. def get_state(x, y):
  16.     return x * GRID_SIZE + y
  17. # 定义奖励函数(包含中间目标奖励)
  18. def get_reward(x, y):
  19.     if x == GRID_SIZE - 1 and y == GRID_SIZE - 1:
  20.         return 100  # 到达目标点给予奖励
  21.     elif x < 0 or x >= GRID_SIZE or y < 0 or y >= GRID_SIZE:
  22.         return -10  # 越界给予惩罚
  23.     elif x > 0 and y > 0:
  24.         return 1  # 中间目标奖励
  25.     else:
  26.         return -1  # 每走一步给予小惩罚
  27. # Q - learning 算法
  28. for episode in range(EPISODES):
  29.     # 初始化状态
  30.     x, y = 0, 0
  31.     done = False
  32.     while not done:
  33.         state = get_state(x, y)
  34.         # 选择动作(epsilon - greedy 策略)
  35.         epsilon = 0.1
  36.         if np.random.uniform(0, 1) < epsilon:
  37.             action_idx = np.random.choice(len(ACTIONS))
  38.         else:
  39.             action_idx = np.argmax(q_table[state])
  40.         action = ACTIONS[action_idx]
  41.         # 执行动作
  42.         new_x = x + action[0]
  43.         new_y = y + action[1]
  44.         new_state = get_state(new_x, new_y)
  45.         # 获取奖励
  46.         reward = get_reward(new_x, new_y)
  47.         # 更新 Q 表
  48.         q_table[state, action_idx] = (1 - ALPHA) * q_table[state, action_idx] + ALPHA * (
  49.                 reward + GAMMA * np.max(q_table[new_state]))
  50.         # 判断是否到达目标
  51.         if reward == 100:
  52.             done = True
  53.         x, y = new_x, new_y
  54. # 打印最终的 Q 表
  55. print("Final Q - table with reward shaping:")
  56. print(q_table)
复制代码
在之前的网格世界基础上添加了中间目标夸奖,当智能体到达网格的右上角区域时会给予小额夸奖,以此加速学习过程。ps:像蓝桥里面的有条件的DFS、BFS+动态规划的算法题目。
  
  学习目标

  智能体的目标是找到最优计谋(Policy),即从状态到动作的映射,使得恒久累积夸奖最大化。比方,自动驾驶汽车需学会在不同路况下选择加速、刹车或转向,以安全高效到达目标地。
  
  关键方法
  基于价值(Value-Based)Q-learning:通过 Q 表或 Q 网络评估动作价值,选择当前状态下 Q 值最大的动作。
  DQN:结合深度神经网络处置惩罚连续状态,如 Atari 游戏中直接输入像素画面
  基于计谋(Policy-Based)计谋梯度(Policy Gradient):直接学习计谋函数,通过梯度上升优化动作概率,如 REINFORCE 算法
  PPO(近端计谋优化):通过重要性采样和约束机制,平衡计谋更新幅度,提高稳固性
  结合价值与计谋(Actor-Critic)A3C:异步优势 Actor-Critic,利用多线程并行探索环境,加速学习
  DDPG:处置惩罚连续动作空间,结合确定性计谋和目标网络技术
  
  核心挑衅
  探索与利用(Exploration vs Exploitation):智能体需在已知高夸奖动作和未知动作间衡量,常用 ε-greedy 或噪声计谋。
  延迟夸奖:当前动作的影响可能在将来才显现,需通过折扣因子(γ)将将来夸奖折算为现值
  样本服从:强化学习依赖与环境的实时交互,数据生成成本高,履历回放(Replay Buffer)等技术可重复利用汗青数据
  
  应用领域
  游戏与博弈:AlphaGo 击败人类棋手、OpenAI Five 在 DOTA 2 中夺冠
  机器人控制:四足机器人行走、机械臂操作
  自动驾驶:决定规划模块
  资源管理:数据中央调度、能源分配
  
  
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

缠丝猫

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表