第1章 课程导论与预备知识

各位同学好,我是这门课的主讲。在机器人领域摸爬滚打了十几年,我越来越觉得——强化学习可能是打通「仿真」和「真实」之间那堵墙的最有力工具。今天咱们先不急着写代码,把地基打牢。

1.1 强化学习在机器人控制中的定位

传统的机器人控制,说白了就是「建模+求解」。你给机器人建一个动力学模型,然后设计一个PID或者LQR控制器,让它按照预定轨迹走。这套方法在工厂里用了三四十年,很成熟。但有个致命问题——模型不准,控制就崩。

我记得有一次做六轴机械臂的抓取项目,理论模型算得漂漂亮亮,一上真实硬件就抖得像筛糠。后来发现是关节摩擦力没建模进去。你想想看,真实世界哪有那么完美的模型?

强化学习换了个思路:不建模,直接试。让机器人在环境里瞎跑,跑对了给奖励,跑错了给惩罚。慢慢地,它自己就学会了怎么走、怎么抓、怎么避障。这就像教小孩骑自行车——你跟他讲重心、讲力矩、讲摩擦系数,他肯定听不懂。你扶着他骑两圈,摔几次,自然就会了。

核心定位:强化学习不是要取代传统控制,而是补上「模型不确定」和「复杂接触」这两块短板。传统控制做得好好的地方(比如高速高精度轨迹跟踪),别去硬碰硬。

目前业界的主流做法是「传统控制+RL调参」或者「RL生成参考轨迹+底层PID跟踪」。说白了,强化学习负责高层决策,底层执行还是交给经典控制。这个思路我在好几个落地项目里验证过,效果比纯RL或者纯控制都好。

1.2 MuJoCo仿真环境简介

做强化学习,仿真环境就是你的「训练场」。MuJoCo(Multi-Joint dynamics with Contact)是目前机器人RL领域最主流的物理引擎之一。为什么选它?三个原因:

  • 快——它的求解器基于凸优化,比Bullet和ODE快一个数量级。我做过对比,同样一个四足机器人步态训练,MuJoCo能跑到实时速度的50倍以上。
  • 准——接触模型做得很精细,特别是摩擦锥和弹性阻尼的处理,跟真实硬件对标的误差在可接受范围内。
  • Python接口友好——直接pip install mujoco就能用,跟PyTorch、TensorFlow无缝对接。

MuJoCo的核心概念其实就几个:

概念 说明 我踩过的坑
Model 描述机器人本体和环境的XML文件 单位制容易搞混,MuJoCo默认是千克-米-弧度
Data 运行时状态,包括位置、速度、力 每次step后要手动更新,别漏了
Actuator 关节的驱动力矩/力 力矩限幅没设好,仿真直接飞了
Sensor 可观测的物理量(位置、速度、接触力) 传感器噪声要加,不然策略迁移到真机就废
小技巧:刚开始学的时候,别急着写复杂模型。先用MuJoCo自带的humanoid.xml或者ant.xml跑起来,感受一下物理引擎的「手感」。我当年就是直接上手写四足机器人模型,结果调了三天XML格式。

下面这张图展示了MuJoCo仿真环境与强化学习智能体之间的交互流程:

MuJoCo仿真环境与RL智能体交互流程 RL智能体 策略网络 π(a|s) MuJoCo环境 物理引擎 + 接触求解 奖励函数 R(s,a) 任务目标编码 状态观测 s 关节位置/速度/接触力 动作 a (力矩/位置) 下一状态 s' 奖励 r 时间步 t → t+1 循环 💡 每个时间步:智能体根据状态 s 输出动作 a → MuJoCo执行物理仿真 → 返回新状态 s' 和奖励 r 这个循环就是强化学习最基本的「交互-学习」范式

1.3 课程所需数学基础

说到数学,很多同学就头疼。我当年也一样,看到满屏的公式就想关网页。但做强化学习,你躲不开三样东西:概率论、线性代数、一点点优化理论。别怕,咱们只讲用得上的。

1.3.1 概率论——处理不确定性

强化学习的核心是「在不确定中做决策」。你给机器人一个动作指令,它能不能执行成功?环境会不会有随机扰动?这些都需要概率论来描述。

你需要掌握的核心概念:

  • 随机变量与概率分布——状态s和动作a都是随机变量,策略π(a|s)本质上是条件概率分布
  • 期望与方差——价值函数V(s)就是累积奖励的期望,策略梯度里用的就是期望的梯度
  • 马尔可夫性质——未来只取决于当前状态,跟历史无关。这个假设简化了几乎所有RL算法
  • 贝叶斯公式——在做部分可观测的RL(POMDP)时会用到,咱们课程前期用不上
注意:别一上来就啃《概率论与数理统计》整本书。你只需要知道「给定分布怎么采样」「期望怎么算」「条件概率怎么理解」就够了。其他的用到再查。我曾经见过一个同学花了两周学测度论,结果发现RL里根本用不上。

1.3.2 线性代数——描述状态与变换

机器人的状态空间是高维的。一个七轴机械臂,关节位置7维、速度7维、末端位姿6维,加起来就是20维空间。你想想看,在这个空间里做运算,没有线性代数寸步难行。

重点掌握:

概念 在RL中的用途 我的建议
向量与矩阵 状态向量、动作向量、权重矩阵 搞清楚行向量和列向量的区别,很多bug出在这
矩阵乘法 神经网络前向传播、价值函数近似 手算一次2×3乘3×2,比看十遍书都管用
特征值与特征向量 策略梯度中的自然梯度、TRPO/PPO算法 前期不要求深入,知道概念就行
范数 奖励函数设计、策略更新步长约束 L2范数用得最多,L1范数做稀疏奖励

举个例子,策略网络本质上就是一个非线性函数:a = π(s; θ)。其中s是输入向量,θ是网络参数矩阵,a是输出向量。前向传播就是一连串的矩阵乘法和激活函数。说白了,你理解了矩阵乘法,就理解了神经网络的一半。

1.3.3 一点点优化理论

强化学习归根结底是个优化问题——找到一组参数θ,让累积奖励的期望最大。所以你需要知道:

  • 梯度下降——最基本的优化方法,沿着梯度反方向更新参数
  • 学习率——步长太大容易震荡,太小收敛太慢。我一般从3e-4开始调
  • Adam优化器——自适应学习率,RL里最常用的优化器,没有之一
实用建议:数学基础不够的同学,我推荐一个「按需学习」的方法——写代码的时候遇到哪个数学概念不懂,就停下来花15分钟查清楚。别试图在开课之前把所有数学都学完,那样你永远开不了课。我自己做项目的时候,经常是「先跑通,再优化,最后才去深究理论」。