论文阅读
记录大学期间读过的一些论文,涵盖机器人、强化学习、模仿学习、3D 视觉与世界模型等方向。
这里整理了我读过的一些论文笔记,主要集中在机器人腿足运动、模仿学习与基于高斯泼溅的视觉表示等方向。如果你也在做相关方向,欢迎交流。
每天研究怎么摸鱼的神人
Posts
记录大学期间读过的一些论文,涵盖机器人、强化学习、模仿学习、3D 视觉与世界模型等方向。
这里整理了我读过的一些论文笔记,主要集中在机器人腿足运动、模仿学习与基于高斯泼溅的视觉表示等方向。如果你也在做相关方向,欢迎交流。
为寄存器分配做准备:控制流图、定义/使用集合、活跃变量数据流方程,以及干涉图(interference graph)的构建。
Chapter 9 把 canonical IR 翻成了 abstract assembly——指令选好了,但用的还是无穷多个 temporary(t1, t2, t3, ...)。真实机器只有几十个寄存器,根本装不下。Chapter 10 接着问:
> 怎么知道哪些 temporary "正在使用",从而把它们挤进有限的寄存器里?
答案是 liveness analysis——一个典型的 dataflow analysis:
ManiGaussian 的双臂续作:分层高斯世界模型 + 领导者-跟随者范式,把任务导向的高斯泼溅推广到通用双臂操作。
> 论文标题:ManiGaussian++: General Robotic Bimanual Manipulation with Hierarchical Gaussian World Model
> 作者:Tengbo Yu, Guanxing Lu, Zaijia Yang 等(清华大学、海南大学、南洋理工)
> 预印本:arXiv:2506.19842 (2025)
RSS 2020 论文,DeepMimic 的真机续作:把动作捕捉先验从仿真特技搬到真实 Laikago 四足上,核心解决域差距与硬件磨损下的部署问题。
这是 DeepMimic 的续作,这次是 "Imitating Animals"(模仿真狗)。
上一篇论文是在完美的模拟环境里做特技,这一篇论文的核心挑战变成了:如何把这些动作部署到真实的、充满摩擦和误差的物理机器人(Laikago 机器狗)上。
可以把这篇论文看作是 “DeepMimic 2.0:从模拟走向现实”。
把 canonical IR Tree 翻译成具体目标机器的 abstract assembly:树覆盖算法(Maximal Munch / Dynamic Programming)、指令模板与开销估计。
第 8 章已经做完两件事:
把 IR 树变成规范树。
重新排列规范树,使每个 CJUMP 后面紧跟假分支标签。
AMP 的进阶版:用多个判别器分别建模不同风格(站立/行走/坐下等),让机器人按指令精确切换风格,并安全完成'坐下'这种传统 RL 难调参的高风险动作。
AMP 的单一性限制: 原版 AMP 通常一次只学一种风格。如果你把“走路”和“站立”的数据混在一起给它,它可能会学出一个不伦不类的混合动作,或者无法根据指令精确切换风格 。
“坐下”动作极难调参: 让机器人从站立状态“坐下”非常危险。如果用传统 RL(人工设计奖励),机器人往往会直接“砸”在地上,导致膝盖电机过载损坏 。
技能遗忘: 按照顺序一个接一个地学技能,机器人容易学了新的忘了旧的(灾难性遗忘)。
IROS 2022 论文 AMP:用判别器学习'是否像参考动作'的对抗信号,替代工程师手写的复杂奖励函数,让四足以自然步态学会运动。
人工调参太累: 以前要让机器狗跑得好,工程师要写几十行复杂的奖励函数(惩罚抖动、奖励抬腿高度、惩罚能耗...),稍微调错一点,狗就抽搐。
动作不自然: 如果只奖励“向前跑”,机器狗可能会学会一种极其怪异、高能耗的震动步态(Jittery behaviors),根本没法在真机上用。
作者引入了 AMP 技术,把奖励函数拆成了两部分:
ECCV 2024 论文 ManiGaussian:把动态高斯泼溅作为世界模型,用于多任务机器人操作的视觉表征与未来预测。
> 论文标题:ManiGaussian: Dynamic Gaussian Splatting for Multi-task Robotic Manipulation
> 作者:Guanxing Lu, Shiyi Zhang, Ziwei Wang 等(清华大学、CMU、南洋理工)
> 会议:ECCV
MoE-Loco 用 Mixture of Experts 架构破解强化学习'多任务负迁移'的老问题,在 Actor-Critic 中引入门控专家,让单一策略同时精通行走、跑跳、攀爬等多种任务。
这篇论文《MoE-Loco: Mixture of Experts for Multitask Locomotion》解决了一个强化学习领域的长期难题:多任务负迁移。通常一个神经网络如果同时学太多任务,各项任务表现都会下降。
MoE-Loco 通过引入 Mixture of Experts (MoE) 架构,实现了"博而精"。以下是其四个维度的详细创新点解析:
这是论文最底层的核心创新。传统的运动控制通常使用简单的多层感知机(MLP)作为策略网络,所有任务共享同一组参数,导致“有的任务想往左更新梯度,有的想往右”,互相打架。
大学课程笔记的首页,包含了编译原理课程的相关内容。
欢迎来到我的课程笔记!这里记录了我在大学期间学习的部分课程的笔记和总结,主要涉及计算机科学领域。希望这些内容能够帮助到正在学习相关课程的同学们,也欢迎大家交流和讨论。
PIE 让低成本四足(如 Lite3)仅靠不可靠深度相机就能完成跨沟跳跃、高台攀爬等高难度跑酷动作,核心在于'想象式本体感知'弥补视觉退化时的环境建模。
PIE 旨在解决 低成本四足机器人(如 Deep Robotics Lite3)在仅配备不可靠深度相机的情况下,如何实现高难度的跑酷运动(如跳跃 3倍身长的沟壑、攀爬 3倍身高的台阶) 的问题。
现有的机器人跑酷方法存在以下痛点:
感知不可靠: 跑酷需要极其精准的地形感知(特别是在边缘起跳时)。低成本深度相机存在延迟、噪声和视场限制,直接用它来显式重建地形往往不够可靠。
RSS 2021 论文 RMA:两阶段训练让四足机器人在线适应真实世界的不可预测物理(打滑、负载变化、电机磨损),实现毫秒级的快速运动自适应。
挑战:
仿真环境难以完美模拟真实世界的物理接触和软地面。
真实环境充满了不可预测性(打滑、负载变化、电机磨损)
ICRA 2023 论文 DreamWaQ:用纯本体感知信号配合上下文估计的隐式世界模型,让四足在不依赖视觉的前提下应对突发干扰与未知地形。
挑战:视觉不可靠: 相机和雷达在烟雾、强光、积雪或高草丛中容易失效。
现有方法的局限:
纯本体感知方法容易产生状态估计漂移。
在 AST 上做语义检查:类型系统、符号表的层级与作用域、变量声明与使用一致性,以及类型推导的基础。
Chapter 4 解决了“parser 之后该产出什么”——答案是 AST。Chapter 5 紧接着回答:
> 拿到 AST 之后,编译器接下来做什么?
答案是 Semantic Analysis(语义分析)。它负责判断程序是不是“语义上合法”,也就是那些 grammar / CFG 本身表达不了的约束。
把前端友好的 IR Tree 改写成对后端友好的 canonical form:消除 ESEQ、切分基本块、再用 traces 把跳转重排为顺序流,为指令选择铺路。
Chapter 7 把 typed AST 翻成了 IR Tree——ESEQ、CJUMP(o, e1, e2, t, f)、CALL(f, args) 这些节点表达力极强,前端写起来很顺手。但前端方便不等于后端方便:这些节点在真实机器上根本找不到对应物。Chapter 8 接着问:
> 怎么把"前端友好"的 IR Tree 改造成"后端友好"的 IR list,让指令选择能直接落地?
答案是三阶段规整(canonicalization):
SIGGRAPH 2018 论文 DeepMimic:把动作捕捉数据作为强约束奖励,结合 PPO + RSI + ET 训练物理仿真角色完成后空翻、回旋踢等高难度动作。
[论文链接](https://arxiv.org/abs/1804.02717)
这篇论文提出了一种通过深度强化学习 (Deep RL) 让物理仿真角色(如机器人、恐龙、人类)学会高难度动作(如后空翻、回旋踢)的方法。
纯物理仿真通常动作僵硬、不自然(像僵尸)。
Obsidian 风格提示块与折叠块的语法演示
本文演示博客支持的 Obsidian 风格 Callout 语法。它基于标准 blockquote,生态兼容 Obsidian / GitHub / Typora。
> [!note] 标题
> 内容正文
测试 Typora 扩展语法在博客中的渲染效果
[toc]
这一段测试 高亮文本、H~2~O 下标、E=mc^2^ 上标,以及 emoji :smile: :rocket: :100:。
混合:水的化学式是 H~2~O,光速是 c=3×10^8^ m/s,这是高亮。
从 parser 走向 AST:语义动作如何在归约时构建抽象语法树、AST 节点设计、Visitor 模式与多 pass 遍历框架,以及把 parser 与 frontend 其余阶段解耦。
Chapter 4 讨论的是:
Semantic Actions(语义动作)
parser 不只是判断输入串是否符合 grammar
把 typed AST 翻译成 IR Tree:ESEQ / CJUMP / CALL 等节点的设计,以及前端友好的中间表示如何为后续优化与代码生成铺路。
Chapter 6 把运行时的样子抽象好了——F_access 告诉你"变量在 frame 还是 reg",Tr_level 帮你管嵌套 scope。但 typed AST 到这里还没有变成可执行的东西。Chapter 7 接着问:
> 怎么把 typed AST 真正翻译成机器无关的 IR?
答案是 IR Tree + Translate 模块——把每个 Tiger 语法结构(变量、数组、条件、循环、函数调用)映射成一棵小小的 Tree。
编译原理课程的第三章,介绍了语法分析的基本概念、上下文无关文法以及LR(1)分析方法。语法分析器根据上下文无关文法构建解析树,检查程序的语法正确性。课程还介绍了LR(0)、SLR、LR(1)和LALR(1)等不同类型的LR分析器,以及如何处理歧义文法和错误恢复。最后,介绍了Yacc工具,用于自动生成语法分析器。
语法分析(Syntax Analysis)就是 parsing the phrase structure of the program。
它位于前端(front-end)中,位于 词法分析之后、语义分析之前。
flowchart LR
从语义合法的 typed AST 走向运行时:函数调用如何在栈上铺开、frame 与 register 如何分配、嵌套作用域与变量访问的实现。
Chapter 5 解决了"AST 是否语义合法"——我们现在有了 typed AST + symbol tables。Chapter 6 紧接着回答:
> 函数调用在机器上到底是怎么跑起来的?局部变量、参数、返回地址都放在哪?
答案是 Activation Record(活动记录),也叫 Stack Frame(栈帧)——它是编译器前端与机器层面真正接轨的第一个概念。
编译原理课程的第二章,介绍了词法分析的基本概念、正则表达式以及有限自动机。词法分析器将源代码转换为 token 流,使用正则表达式描述 token 模式,并通过 NFA 和 DFA 实现。课程还介绍了 Lex 工具,用于自动生成词法分析器,以及 DFA 最小化算法,优化状态数量。
编译器分为前端和后端:
前端(Analysis)
Lexical Analysis: breaking the input into individual words or "tokens";
编译原理课程的第一章,介绍了编译器的基本概念、模块化设计以及常用工具。编译器是将一种语言转换为另一种语言的程序,分为多个阶段,每个阶段处理不同的抽象表示形式。课程还介绍了正则表达式和上下文无关文法,以及相应的工具Lex和Yacc,用于词法分析和语法分析。
什么是编译器:编译器实际上就是一个可以将一个语言(source language)转化成另一个语言(target language)的程序(equivalent program)。
两个重要概念:
Phases:one or more modules operating on the different abstract “languages” during compiling process
编译原理课程的第一堂课,介绍了课程的分数构成、习题课安排以及实验目标。学生需要编写一个编译器,将源语言SysY编译成RISC-V 32汇编语言。实验报告需要详细描述实验思路,并且需要独立完成,禁止使用AI工具。
HW:10分 10次
Quiz 10分 理论课上测试
Lab 30分 五个实验
在五十音基础上扩展:浊音、半浊音、拗音以及长音的发音规则与书写标记。
浊音实际上就是对50音中的某几行的声调进行了变化,同时在平假名/片假名的右上方使用特殊符号进行标识。
这是一种特殊的变化,也就是半浊音。
如上图所示,前四个都是长音,最后一个则不是。
从 Model-based 走向 Model-free:用蒙特卡洛采样估计动作价值,介绍 MC Basic、Exploring Starts 与 ε-Greedy 等同策略 MC 方法。
Model 通常指“环境的运行规律”,也就是我们前面经常提到的状态转移概率 $P(s' \mid s,a)$ 以及奖励函数 $R(s,a)$。
强化学习有两种,Model-based 和 Model-free。前者先构建出 $P$ 和 $R$,再进行学习;后者则是在真实环境中不断试错。大多数经典的深度强化学习的算法,比如 Q-Learning、DQN、DDPG、PPO 等,全都是 Model-free 的。
举个例子,假如我们投掷硬币,结果记为随机变量 $X$。当硬币面朝上时,$X=+1$;当硬币面朝下时,$X=-1$。我们的目标是要计算 $\mathbb{E}[X]$。
日语高低声调的标记体系、平板型与起伏型的辨识方法,以及常见词汇的声调分类示例。
对于书上来说,只标注高音,不标注低音。
第一个音和第二个音不是同音
出现降音就不会再升回去
求解 Bellman 最优方程的两条经典路径:Value Iteration 直接迭代 Bellman 算子,Policy Iteration 在策略评估与改进之间交替,并讨论二者的等价性与收敛性。
这一节的数学基础其实就是上节课介绍过的公式:
$$
v_{k+1}=f(v_k)=\max_\pi(r_\pi+\gamma P_\pi v_k)
日语入门第一步:五十音图的元音与辅音结构、平假名与片假名的写法及常用记忆方法。
重点是第一行的“aiueo”以及第一列的“akstnhmyrw”
第一列记忆口诀:我开桑塔纳,蛤蟆也来玩
假名来源:汉字“安”
Bellman 最优方程及其压缩映射性质,Banach 不动点定理保证收敛唯一解,以及最优策略的存在性。
我们以一个例子作为引入:
于是显然有:
$$
从回报的递推性出发推导 Bellman 方程:状态价值函数的定义、矩阵形式的封闭解,以及策略评估在 MDP 上的意义。
在上一节中我们介绍过了 return,return 之所以很重要,是因为 return 可以帮助我们直观地确定哪一种策略更好。
对于上面的例子,我们可以计算出各个 return 如下:
$$
以方格世界为例,构建强化学习的基础数学框架:状态、动作、奖励、状态转移、策略、轨迹与回报,以及引入折扣率后的折扣回报,最终统一为马尔可夫决策过程(MDP)。
> 摘要:本讲义以方格世界(Grid-world)为例,系统构建了强化学习的基础数学框架。首先定义了智能体与环境交互的核心要素,包括描述环境状况的状态(State)空间、依赖于当前状态的动作(Action)空间,以及作为人机接口用于引导行为的标量奖励(Reward)。在此基础上,讲义阐述了概率性的状态转移(State transition)机制和智能体选择动作的策略(Policy),并引入轨迹(Trajectory)与回报(Return)来评估策略优劣。为了解决无限视界下的发散问题,进一步提出了引入折扣率 $\gamma$ 的折扣回报(Discount return)概念。最终,这些要素被统一形式化为马尔可夫决策过程(MDP),其核心特征在于具备无记忆性(Memoryless)的马尔可夫性质,即未来的演变仅取决于当前的状态与动作。
假设我们有一个机器人在方格中行走,要从 start 到 target。如下图所示:
其中,方块有三种类型:Accessible/forbidden/target,同时还有一个边界 boundary。
磁盘结构与调度算法(FCFS/SSTF/SCAN/C-SCAN)、磁盘管理、RAID 与 SSD,以及现代存储接口。
[咸鱼](https://xuan-insr.github.io/%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86/os/V_storage_management/11_mass_storage/)
[NoughtQ](https://note.noughtq.top/sys/os/11)
感觉现在还是NoughtQ的更适合
文件系统分层结构、磁盘上的元数据组织、目录实现、空闲空间管理、分配方法,以及效率与性能。
I/O control:
翻译高级命令为底层指令
Basic File System:
文件与目录的概念、访问方式、共享与保护、文件系统挂载,以及目录结构(单层/两层/树形/无环图/通用图)。
感觉这一章不需要花费太多的时间,就看看别人的笔记吧:[xyx的笔记](https://xuan-insr.github.io/%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86/os/VI_file_system/13_fs_interface/)
文件系统的定义如下所示:
The way that controls how data is stored and retrieved in a storage medium.
请求调页、页面置换算法(FIFO/Optimal/LRU/Clock)、帧分配策略、抖动与工作集模型。
这一章与上一章有什么区别呢?我的理解如下:
上一张强调的是 virtual address 和 physical address 的映射关系,是在内存分配好了的情况下进行的。
这一章我们的任务是在程序刚开始的时候,我们怎么将程序加载进内存中去。
内存管理基础、地址绑定、连续内存分配与分段、分页机制、TLB、共享与保护。
Program must be brought (from disk) into memory and placed within a process for it to be run
Main memory and registers are only storage CPU can access directly
Register access in one CPU clock (or less)
死锁的四个必要条件、资源分配图、死锁预防/避免(银行家算法)、检测与恢复。
A set of blocked processes each holding a resource and waiting to acquire a resource held by another process in the set.
Example
System has 2 disk drives.
临界区问题、Peterson 解、硬件原子指令、互斥锁、信号量、管程,以及经典同步问题(生产者-消费者/读者-写者/哲学家就餐)。
引入临界区问题,它的解决方案可以用于确保共享数据的一致性。
讨论临界区问题的软件与硬件解决方案。
分析进程同步的多个经典问题。
CPU 调度的基本概念、各类调度算法(FCFS/SJF/RR/优先级/多级反馈队列),以及多核与实时调度。
CPU Scheduling 不仅适用于进程调度,也适用于线程的调度。
在系统调用完成并返回用户态时能够进行 CPU 调度。
Maximum CPU utilization obtained with multiprogramming
为什么需要线程、多线程模型、Pthreads/Java/OpenMP 等线程库,以及隐式线程与线程相关问题。
首先来看几段代码:
代码1:
main(){
进程的概念、PCB 结构、进程状态转换、进程调度,以及进程间通信(IPC)。
在本课程中,我们认为 job 一词和 process 是等价的*
进程运行需要一点东西:
Code/Text section:程序代码,code
操作系统能提供哪些服务、系统调用与 shell 接口、内核结构(单体/分层/微内核/模块化)。
以下图片展示了操作系统所能提供的服务:
对于用户来说,操作系统可以提供一系列的服务:
User Interface:基本上所有的操作系统都有用户界面。
操作系统第一章:操作系统是什么、它管理哪些资源、为什么需要它,以及本课程关注的三大 Management(进程/内存/存储)。
本课程原理的部分就是三个 Management
操作系统就是一个运行在电脑用户以及电脑硬件之间的程序,这个程序我们也称为kernal
操作系统的目标:
操作系统课程的开场:主要内容总览、实验与考试评分规则、推荐教材与参考资料。
Bonus只能加到实验分上
注意“实验心得”这一块
严格的代码查重(程序比较厉害)