大一下自学日记

Section 3

2026.1.26

  • 宋浩高数下 P76~83

待在家里的第一天。和 ccl,gym,sy,yjc 小聚了,去吃了火锅自助然后又唱了会歌。

下午和晚上的空闲时间听了不少课,听的速度还是比较快的,但感觉这些课里也没涉及到太多比较困难的东西,学起来还算轻松。最后还忙了会 WOC 出题的事情,姑且把出题任务完成了。

2026.1.27

  • 宋浩高数下 P84~85
  • 一高数高数下 P13~15

因为出分的原因,今天学习欲望不是很强,而且宋浩方向导数和梯度这一课时间实在太长了,听的断断续续的,不是很舒服。把宋浩的这一大章听完了之后,准备再听一遍一高数的课。宋浩的课还是偏基础和书本的,但一高数的课比较贴合题目用来巩固很合适。我学两遍。

2026.1.28

  • 一高数高数下 P16~23

今天在做算法组 WOC 的Day1,晚起正好跟榜做了。按顺序把 ABEF 做了,鉴定为剩下都是不可做题。晚上继续听一高数,把多元函数微分学都巩固了一遍,又听到了宋浩没讲的拉格朗日乘数法,依然清晰记得我第一次听说这个是在什么时候。感觉其实可以直接只听一高数的,不听宋浩的了。

因为还没有被导师布置任务,所以暂时也不知道去学些啥,课内知识姑且也不太想继续学下去,烧烤了一会之后决定先去试试 py 组的 WOC ,于是就和 Gemini 扯了半天多任务学习方向的 Task2 ,明天学下 CNN 然后看看能学到多少,做出多少东西来。

2026.1.29

今天作息直接混乱了,上午去看了牙,然后睡了一整个下午。睡醒发现导师发了两篇论文让我熟悉一下背景知识。 py 组的 WOC 弃之,先读论文先。晚上打了场 cf div2 ,打着打着 ch 的号被封了,何意啊。第一篇论文是一篇 Nature 子刊《Discovery of the reward function for embodied reinforcement learning agents》,把除了 Methods 的内容都全好好读了一遍。感觉是先介绍了一下 RL 是啥,接着大概地介绍他们的方法的思想,然后讲他们的 Result 在各种各种领域比传统的 DQN,PPO 更好,更稳定,更快收敛,能耗更低等等,后面 Discussion 又吹了一波。感觉 RL 对数学功底要求还是很高的。

让 AI 切分了一下这篇文章

根据这份文件的结构,这篇发表在《自然-通讯》(Nature Communications)上的学术论文主要由以下几个核心部分组成:

摘要(Abstract):简要概括研究背景、核心科学问题(即具身智能体奖励函数设计的难题)、提出的双层优化框架以及主要的实验成果。

引言(Introduction):详细阐述具身强化学习的重要性,指出传统手动设计奖励函数的局限性(如成本高、效率低、易失败),并引出本文的研究动机。

结果(Results):

奖励发现框架(Reward discovery framework):展示论文提出的核心机制。

在不同任务中的表现:包括在 MuJoCo 环境下的高维控制任务、稀疏奖励任务,以及在现实世界中的无人机(UAV)跟踪任务。

讨论(Discussion):分析该方法的通用性、对通用人工智能(AGI)的潜在贡献,以及研究的局限与未来方向。

方法(Methods):详细解释双层优化框架的数学原理、悔恨最小化(Regret Minimization)的算法实现,以及实验的具体设置。

辅助材料:包括数据可用性说明(Data availability)、参考文献(References)、致谢(Acknowledgements)以及作者贡献声明。

2026.1.30

  • PenicillinLP RL Chapter 1,2-1~2-2

我错了。原来昨天就没看懂这篇文章。 srt 指导了我以下看文章的方法,看看引言和 Related Work 再去看 Method 。 Experiment 看消融, Method 关键看和别人的 RL 有什么区别。这篇文章的创新点在于提出了新的奖励机制,是方法上创新,那么如果把这个奖励机制放在其他地方,比如边缘设备上,就是情景上的创新。今天把 Method 读完了,完全忽略了公式的推导,我也就看看结论了。虽然其实结论有些也看的很简略。读下来觉得这整篇文章还是很顺理成章的,感觉日后还会反复看。

让 AI 概要了一下这篇文章

引言与相关工作模块:从“人工设计”到“自动发现”

这一部分确立了研究的必要性,解析了为什么传统的强化学习(RL)在具身智能中遇到了瓶颈。

  • 问题核心:具身智能体(如机器人、无人机)的任务环境极其复杂,手动设计一个既能引导学习又不产生“奖励黑客行为”的奖励函数几乎不可能。
  • 相关工作对比:
    • 人工工程:依赖专家,费时费力,泛化性差。
    • 逆强化学习 (IRL):虽然能学奖励,但严重依赖昂贵的高质量专家演示。
    • RLHF (人类反馈):虽然精准,但在大规模自动化训练中,人类标注的速度跟不上机器迭代。
  • 本文切入点:提出一种无需外部干预(无专家、无人类反馈)的自动奖励发现框架。它不把奖励看作死板的规则,而是看作一种可以通过悔恨最小化(Regret Minimization)来不断优化的引导信号。

核心方法模块:双层优化与交替优化流程

这是论文最精华的部分。它将奖励函数的寻找过程转变为一个动态的、双层互动的优化问题。

  • 双层架构定义:
    • 下层问题(学生视角):在当前奖励函数 \(R_\omega\) 的指导下,通过标准 RL 算法(如 PPO/SAC)优化策略参数 \(\theta\),目标是最大化累积奖励。
    • 上层问题(教练视角):通过观察智能体的表现,调整奖励函数参数 \(\omega\)。其目标是让智能体在最终任务目标下的“悔恨值”降到最低。
  • 交替优化方法(Alternating Optimization):
    • 步骤 1 (固定奖励更新策略):智能体在当前 \(R_\omega\) 下与环境交互,并将经验存入 Buffer。利用这些经验更新策略 \(\pi_\theta\)。
    • 步骤 2 (固定策略更新奖励):锁定当前策略,计算奖励函数的元梯度(Meta-gradient)。通过梯度下降更新 \(\omega\),即通过改变“考试题目”来让学生学得更快更好。
  • 与传统 RL 的区别:传统 RL 的奖励函数是“死的”,策略必须迁就奖励;而本方法中奖励是“活的”,它会根据策略的学习进度,动态生成最能促进提升的稠密信号。

理论推导逻辑:从理论到公式 (21) 的跨越

这部分解释了如何通过数学手段让上层优化变得“可计算”。

  • 定理 1:元梯度推导。推导出奖励函数参数 \(\omega\) 对最终目标函数的梯度公式,确立了优化的方向。
  • 定理 2:优势函数扩展。将梯度公式与优势函数(Advantage Function)结合。这意味着无论底层用的是 DQN(基于价值)还是 PPO(基于策略),这个框架都能通用。
  • 引理 2:重要性采样。解决了“分步更新”带来的分布偏移问题。它允许我们利用旧的策略数据来估计新策略下的奖励梯度,极大提升了样本效率。
  • 假设 3:平稳性假设。这是一个关键的工程简化,假设在微小的奖励更新过程中,环境的平稳分布变化不大。
  • 公式 (21):最终更新规则。这是论文的核心公式。它将复杂的元学习梯度简化为一个可以直接在代码中实现的更新项,使得自动发现奖励在计算上变得可行且高效。

实验与消融模块:验证“为什么有效”

实验不仅证明了它“比别人强”,更通过消融实验解释了“强在哪里”。

  • 消融 1:悔恨目标 vs 原始性能。

    • 实验发现:如果只优化原始性能指标,奖励函数容易变得激进且不稳定;而使用“悔恨最小化”目标,奖励函数会更加关注策略的长期提升潜力,收敛更稳。
  • 消融 2:动态奖励 vs 固定设计奖励。

    • 在 MuJoCo 高维控制实验中,消融证明了动态发现的奖励会在智能体遇到瓶颈(如即将摔倒)时提供极强的纠正信号,而人工奖励在这些临界点往往信号模糊。
  • 通用性验证:

    • 通过在不同的底层算法(DQN, PPO, SAC)上挂载该框架,消融结果一致显示出性能的阶跃式提升,证明了该方法是一个“即插即用”的通用增强模块。
  • 现实世界落地:

    • 在无人机飞行和数据中心节能任务中,实验结果显示该方法发现的奖励函数能自动适应复杂的物理约束,比人类设计的复杂规则更能节省能源。

因为第二篇论文貌似是以 Multi-Armed Bandit 为背景的,为了大概了解一下这个讲的是什么问题,就去搜了搜视频。结果搜到了 PenicillinLP 的教学视频,听了一下发现很好。很快地听完了他的第一章,还有现场手写代码环节,这么牛啊,又一次感觉自己的代码能力十分差劲,日后打算跟着他视频练习一下。听他的课既是复习,又听懂了一些之前没听懂的问题,比如走迷宫的时候怎么迭代出状态最优价值,然后用状态最优价值再迭代出状态行动最优价值,弥补了之前听 CS188 没听懂这块的缺憾。

2026.1.31

  • PenicillinLP RL Chapter 2

今天和 mpl,gyc,hyz 他们一起出去玩了几乎没咋学,但还是把 PenicillinLP 的已有的视频看完了,虽然没看他手写代码,然后整理了一下他的视频里的笔记。浅看了一眼第二篇论文,但是感觉全都不知道在说些啥啊。但往好处想就是不懂的越多,学到的越多,精神胜利了,计划在三天之内尽力啃下来。

强化学习入门笔记

我们记 \(Q_t(a)\) 代表在 \(t\) 时刻对 \(a\) 这个行动的价值的估计, \(A_t=\mathop{\mathrm{argmax}}\limits_{a}Q_t(a)\) 代表应该选择的行动。那么 Greedy 的策略就是每次选取 \(A_t\) 来移动。但这不一定能探索到每一个行动,和实际可能存在较大的偏差。于是,我们可以考虑采用 \(\varepsilon-\)Greedy 的策略,即每次会以一定的概率 \(\varepsilon\) 做出随机的选择。

我们记 \(Q_t(S_t)\) 代表状态 \(S_t\) 的状态价值, \(Q_t(S_t,A_t)\) 代表在状态 \(S_t\) 下采取行动 \(A_t\) 的状态行动价值。于是我们有: \(Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha(\sum\limits^T_{i=t}R_i-Q(S_t,A_t))\) ,这代表 New Estimate 是用 Old Estimate \(+\) Learning Rate \(\times\) Error 更新来的。

而 \(\sum\limits^T_{i=t}R_i=R_t+\sum\limits^T_{i=t+1}R_i \approx R_t+Q(S_{t+1},A_{t+1})\) ,那么就有: \(Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha(R_t+Q(S_{t+1},A_{t+1})-Q(S_t,A_t))\) ,这样我们不需要等到游戏结束就可以计算 \(Q(S_t,A_t)\) 的新估计值。实际上,前者是 Monte Carlo Methods 蒙特卡洛方法的雏形,而后者则是 Temporal-Difference Learning 时序差分学习法的雏形。

等价地,我们还可以很容易地写出: \(Q(S_t)\leftarrow Q(S_t)+\alpha(\sum\limits^T_{i=t}R_i-Q(S_t))\) , \(Q(S_t)\leftarrow Q(S_t)+\alpha(R_t+Q(S_{t+1})-Q(S_t))\) 。

特别地,在一些情景中,如井字棋,可能还存在行动的直接后果 Afterstate ,通过后果我们可能可以简化计算。

我们记 \(v_*(s)\) 代表状态最优价值,那么就有 \(v_*(s)=\max\limits_a[r+v_*(s')]\) ,即对于每一个行动 \(a\) ,我们可以用即时奖励 \(r\) 以及下一个状态 \(s'\) 的状态最优价值来计算出当前状态 \(s\) 的状态最优价值,这就是 Bellman
Optimality Equation
贝尔曼最优方程。

简化起见,我们记 \(q_*(s,a)=r+v_*(s')\) 表示状态行动最优价值。所以,这一方程也写作 \(v_*(s)=\max\limits_a q_*(s,a)\) 。显然,一个状态的状态最优价值等于状态行动价值当中最大的那一个。

因此我们认识到,状态最优价值就是解决强化学习问题的关键所在。在不知道状态最优价值的情况下,我们可以将估计值代入贝尔曼方程,以贝尔曼最优方程作为一个迭代规则: \(\hat{v}_*(s) \leftarrow \max\limits[r+\hat{v}_*(s')]\) ,我们称这是(Optimal) Value Iteration (最优)价值迭代。

我们也可以对未来的价值进行折扣,记折扣率为 \(\gamma\) ,于是上面的式子就可以改写为 \(v_*(s)=\max\limits_a[r+\gamma v_*(s')]\) , \(\hat{v}_*(s) \leftarrow \max\limits_a[r+\gamma \hat{v}_*(s')]\) 。在绝大多数情况下,只要我们确保对每一个状态的估计值都不断地进行迭代,那么这些估计值最终就会收敛到真实的状态最优价值。这也是我们研究有限马尔可夫决策过程的原因之一,因为只有在状态空间有限的情况下,我们才能保证这个价值估计的收敛。

我们用概率分布 \(p(r,s'|s,a)\) 表示状态 \(s\) 、行动为 \(a\) 的情况下得到的奖励为某个值 \(r\) ,并且下一个时刻的状态为 \(s'\) 所对应的概率。现在我们将确定情况下的贝尔曼最优方程推广到随机的情况,也就有 \(v_*(s)=\max\limits_a\sum\limits_{r,s'}p(r,s'|s,a)[r+\gamma v_*(s')]=\max\limits_a \mathbb{E}_p[r+\gamma v_*(s')]\) 。价值迭代也可以推广到随机状态下 \(\hat{v}_*(s) \leftarrow \max\limits_a \mathbb{E}_p[r+\gamma \hat{v}_*(s')]\) 。

我们用 \(\pi\) 表示策略函数,记 \(\pi_*=\mathop{\mathrm{argmax}}\limits_{a} q_*(s,a)\) 代表最优策略。现在让我们将贝尔曼最优方程推广到一半的贝尔曼方程。对于一般的策略,我们用一个概率分布 \(\pi(a|s)\) 来表示在一个状态 \(s\) 下选择行动 \(a\) 的概率,我们只需要将贝尔曼最优方程改写为 \(v_{\pi}(s)=\mathbb{E}_{\pi}\mathbb{E}_p[r+\gamma v_{\pi}(s')]\) ,我们称 \(\hat{v}_{\pi}(s) \leftarrow \mathbb{E}_{\pi} \mathbb{E}_p[r+\gamma \hat{v}_{\pi}(s')]\) 为 Policy Evaluation 策略评估 。

我们对它进行策略评估,直到收敛,从而得到这个策略下的状态价值,然后我们在策略 \(\pi\) 的基础上进行改进,得到新的策略 \(\pi'\) 。我们让策略 \(\pi'\) 去选择策略 \(\pi\) 对应的状态行动价值最大的行动,如果有多个行动的状态行动价值都是最大的,那就平均分配一个概率,于是我们就有 \(\pi'(s)=\mathop{\mathrm{argmax}}\limits_{a}\mathbb{E}_p[r+\gamma \hat{v}_{\pi}(s')]\) ,\(\hat{v}_{\pi'}(s) \leftarrow \mathbb{E}_{\pi'} \mathbb{E}_p[r+\gamma \hat{v}_{\pi'}(s')]\) 。通过不断评估策略、改进策略的算法称为 Policy Iteration 策略迭代 。

现在,我们将离散的强化学习当中的动态规划推广到连续的最优控制当中。在最优控制当中,我们通常研究这样的一个问题:一个机械系统处于某种状态 \(s(t)\) ,通常表示位置和速度等,我们给这个系统一个控制信号 \(a(t)\) ,例如施加一定的力,使得这个系统的状态从初始时刻的 \(s(t_0)\) 变化为终止时刻的 \(s(T)\) ,这个控制信号 \(a(t)\) 就相当于强化学习中的行动。

在强化学习当中,行动导致状态发生变化,在最优控制当中也是一样,只不过此时的状态变化由我们研究的机械系统的动力学特性所决定,它是状态 \(s(t)\) 、行动 \(a(t)\) 、在一般情况下还显含时间 \(t\) 的函数, $\frac{\mathrm{d} s(t)}{\mathrm{d} t}=f(s(t),a(t),t) $ 。

在强化学习当中,行动还会带来一个奖励,在最优控制当中,每一个时刻也都对应一定的奖励 \(r\) , \(r(s(t),a(t),t)\) 。我们的目的就是求出最优的行动 \(a(t)\) ,使得整个过程中的总奖励最大,这里的总奖励也就是奖励 \(r\) 对时间的积分 \(\int_{t_0}^{T} r( s(\tau),a(\tau),\tau )\mathrm{d}\tau\) 。

不难看出,这其实就是离散的强化学习问题在连续情况下的推广。在离散情况下,我们最大化的是奖励之和,在连续情况下便是奖励的积分,只不过在最优控制当中,通常的表述是最小化“损失”。这里既然是强化学习的背景,那么我们还是表述成最大化“奖励”,两者没有本质区别。

接下来,让我们利用离散的强化学习当中的贝尔曼最优方程推导出连续的最优控制当中的哈密顿-雅可比-贝尔曼方程。我们首先定义一个状态最优价值,也就是在最优的“策略”下,从任意时刻 \(t\) 开始,未来的奖励的积分。因为是对所有行动取最优,所以状态最优价值只是状态和时间的函数 \(v_*(s(t),t)=\int_{t}^{T} r( s(\tau),a_*(\tau),\tau )\mathrm{d}\tau\)。

接着我们写出离散的贝尔曼最优方程,既然是离散的,那么我们考虑一个很小的时间变化 \(\Delta t\) ,从时刻 \(t\) 到时刻 \(t+\Delta t\) ,我们用贝尔曼最优方程写出这两个时刻的状态最有价值之间的关系。在离散情况下,贝尔曼最优方程告诉我们, \(v_*(s)=\max\limits_a[r+v_*(s')]\) ,即一个时刻的状态最优价值等于【即时奖励和下一个时刻的状态最优价值之和】对所有行动取最大值。在连续情况下同理,只不过即时奖励现在是一小段时间 \(\Delta t\) 当中的积分 \(v_*(s(t),t)=\max\limits_{a(\tau)}\int_{t}^{t+\Delta t} r( s(\tau),a(\tau),\tau )\mathrm{d}\tau+v_*(s(t+\Delta t),t+\Delta t)\) 。在 \(\Delta t\) 充分小的情况下,我们认为即时奖励在这段时间内几乎不变,那么就有 \(\int_{t}^{t+\Delta t} r( s(\tau),a(\tau),\tau )\mathrm{d}\tau \approx r(s(t),a(t),t)\Delta t\) 。而我们对下一时刻的状态最优价值进行泰勒展开保留一阶项 \(v_*(s(t+\Delta t),t+\Delta t) \approx v_*(s(t),t)+\frac{\partial v_*}{\partial t} \Delta t+\frac{\partial v_*^T}{\partial s}(s(t +\Delta t)-s(t))\) ,也就是 \(t\) 时刻的状态最优价值,加上对时间的偏导乘以时间的变化量 \(\Delta t\) ,再加上对状态的偏导乘以状态的变化量。因为状态往往是含有多个变量的向量,所以这里写成偏导的转置和状态的变化量这两个向量的内积。而状态的变化量则可以写作动力学函数 \(f\) 乘以时间的变化量 \(\Delta t\) ,也就有 \(v_*(s(t+\Delta t),t+\Delta t) \approx v_*(s(t),t)+\frac{\partial v_*}{\partial t} \Delta t+\frac{\partial v_*^T}{\partial s}f(s(t),a(t),t)\Delta t\)。

将这两个式子代入原等式,我们约掉时刻 \(t\) 的状态最优价值,再约掉 \(\Delta t\) ,那么我们就得到了这个方程: \(0=\max\limits_{a(\tau)}[r(s(t),a(t),t)+\frac{\partial v_*}{\partial t} +\frac{\partial v_*^T}{\partial s}f(s(t),a(t),t)]\) 。因为状态最优价值和行动无关,所以我们可以把它提到对行动取最大值的外面,那么这个方程最终可以写成这个样子: \(-\frac{\partial v_*}{\partial t}=\max\limits_{a}[r+\frac{\partial v_*^T}{\partial s}f]\) ,这就是哈密顿-雅可比-贝尔曼方程。

2026.2.1

今天一直在读论文《Competitive Multi-Armed Bandit Games for Resource Sharing》,计划读 \(3\) 天的,今天就读了文章的前一半,可喜可贺。看 Abstract 其实没怎么看懂,Introduction 更为具体、详细介绍了一下这篇论文讲的啥,稍稍有点理解了。然后是 SYSTEM MODEL AND PROBLEM FORMULATIONS ,感觉就是在推导各种结论去支持自己的模型,里面各种字母上下标看的眼花缭乱的,但感觉基本都看懂了,知道在说些啥。这篇文章还涉及到了一些纳什均衡这种博弈论的知识, 属实没想到 2021 的回旋镖又回到了我身上。彼时对哈佛的《博弈论》这门课非常感兴趣,把课全听完了,课堂内容整理也都看了一遍,虽然没做作业之类的,但现在看来也是非常认真了。对现在的学习还是有一定的帮助的吧,虽然不多。

2026.2.2

今天继续读论文,把这篇文章读完了,和导师说了之后,导师又发了 \(5\) 篇 UAV 相关的论文过来,额,要看不完了。 srt 建议我趁寒假比较自由,多培养培养 taste ,看看偏理论的论文,不急着看这种偏落地的论文,感觉很有道理。除此之外我还打算好好学下理论的入门的,比如 DQN 之类的,这些也需要再系统性地学一下,要做的事情真不少啊。本来还打算看会高数的,结果看着看着看睡着了,就摆了。

让 AI 概要了一下这篇文章

引言与背景 (Introduction)

  • 研究背景:在现代资源共享系统(如无线网络、物联网)中,多个玩家需要在未知且随机变化的资源(即“手臂”)中进行选择以完成任务 。
  • 核心挑战:当多个玩家同时选择同一资源时会发生碰撞,导致奖励降低 。以往研究多假设玩家是利他的,但现实中玩家往往是自私的(追求自身利益最大化)且具有远见(非短视),这会导致系统效率大幅下降 。
  • 主要贡献:本文首次分析了非短视玩家下的 CMAB 博弈,证明了自私行为会导致无限的“无序代价”(Price of Anarchy, PoA),并提出了一种结合信息推荐和侧向支付(CISP)的新机制来解决此问题 。

系统模型与问题表述 (System Model and Problem Formulations)

  • 博弈模型:设定 \(N\) 个玩家和 \(K\) 个资源(\(K > N\)),每个资源的奖励服从伯努利分布,其均值 \(\mu_k\) 对玩家来说是未知的,需要通过探索来学习 。
  • 碰撞机制:如果多个玩家选择同一资源,系统随机选择其中一人获得奖励,其余人观察到碰撞且获得零奖励 。
  • 策略对比:
    • 自私策略 (Selfish Policy):每个玩家独立决策,旨在最大化其个人的长期折扣奖励 。
    • 社会最优策略 (Socially Optimal Policy):由中心决策者协调,旨在最大化所有玩家的总长期奖励 。

策略分析与无序代价 (Analysis of Policies and PoA)

  • 结构化分析:论文证明了自私策略和社会最优策略都具有基于“阈值”的结构,即玩家根据探索次数和预期收益的阈值来决定是否切换资源 。
  • 效率对比:分析表明,自私策略会导致探索过程极度缓慢,其收敛时间远长于社会最优策略 。
  • PoA 结论:由于自私玩家倾向于竞争最好的资源而忽视对他人的碰撞干扰,研究证明其产生的 PoA 是无穷大的,意味着效率损失可能达到任意大的程度 。

机制设计 (CISP Mechanism Design)

  • 信息机制的局限性:论文证明单纯的信息披露(如贝叶斯说服)无法降低无穷大的 PoA,因为自私且非近视的玩家可能会通过策略性地误报其私有观测信息来获利 。
  • CISP 机制:作者提出了一种“组合信息与侧向支付”(Combined Informational and Side-Payment)机制 。
    • 核心功能:该机制根据玩家多样化且随时间变化的私有信念,提供最优的资源推荐,并通过合理的货币奖惩来激励玩家报告真实信息并遵循推荐 。
    • 效果:该机制能实现预算平衡,保证玩家说实话,并将 PoA 降低至 1(即达到社会最优),同时使收敛时间与社会最优策略一致 。

实验验证与结论 (Experiments and Conclusion)

  • 实验:通过仿真模拟验证了理论分析的准确性,展示了 CISP 机制在提高总奖励和降低碰撞方面的显著优越性 。
  • 结论:总结了在资源共享背景下,协调竞争性、自私性玩家进行学习和分享的重要性 。

2026.2.3

  • MathFoundationRL Lecture 0~3

今天下午在打牛客寒假算法基础集训营1,真区完了,前几题都狂错,后面强行追回来,做了 \(8\) 题就下班写不动了。今天终于可以开始学赵世钰的《MathFoundationRL》了,买了他的书但明天才到,小问题。今天听了前面的 Fundamental tools 部分,因为最近一直在接触而且前几天刚刚又看了 PenicillinLP 的强化学习入门,所以看的还是很轻松的。不过在这门课程里可以更系统性地学习相关知识,十分强调数学理论的构建,也是很符合课程名字了。也学到了很多,比如贝尔曼公式还可以写成矩阵的形式直接求逆求出来,虽然不是很实用,但也给我提供了新的观点。说起来,发现赵世钰老师的组也是做的无人机相关的。

2026.2.4

  • MathFoundationRL Lecture 4~5

虽然书到了,但今天比较摆。今天听课才更清晰地弄懂了值迭代和策略迭代的一些区别,比如值迭代是迭代一次就拿去继续用了,但策略迭代是要先迭代无穷次得到最优的值再继续迭代,而且这俩原来只是截断策略迭代的极端情况。又学了蒙特卡洛方法,这是一个 model-free 的方法, model 在 RL 里指概率分布,不同于有模型的算法,蒙特卡洛方法更依赖于迭代,这里就衍生出了 MC Exploring Starts 算法和 MC \(\varepsilon-\) greedy 算法。前者可以从后往前回溯来维护奖励的后缀和,且每次更新值后立即更新策略,后者则是在每次探索时都保有 \(\varepsilon\) 的变量,存在一定概率探索非当前最优行动,同样也要在每次更新值后立即更新策略。

2026.2.5

  • MathFoundationRL Lecture 6~7

早起写 WOC,发现大家做题怎么做得不是很多啊,明明感觉之前的强度更高。今天在去随州的路上硬生生看完了这两个 Lecture ,讲的东西其实很多很复杂。当然很好玩的是,感觉很多算法存在一个极端、另一个极端、两者折中的形式。Lecture 6 里梯度下降那么多数学公式直接把我看晕了,没想到 Lecture 7 里代入强化学习的量的时候更是看都看不懂,太复杂了,不过总体来说就是对不同表现方式的贝尔曼公式和贝尔曼最优公式做 model-free 的推广。

2026.2.6

今天比较摆,看《Dynamic Caching Dependency Aware Task Offloading in Mobile EdgenbspComputing》。看了 Abstract 和 INTRODUCTION ,大概知道在说啥,看 RELATED WORK 没怎么看懂,之后再看一眼。

2026.2.7

  • MathFoundationRL Lecture 8~9

今天吃喜酒还和保研清深的一个姐姐聊了一下,感觉也是又听到了更多的观点。今天看了 Lecture 8 ,前半部分主要在讲值函数近似,坦白说,没看懂这部分和原本的算法有什么太大的区别,就是把函数在原本参数的基础上加了 \(w\) 进去,这样的拟合效果就变得更好了,总之还是 TD 方法的延续。后半部分介绍了 DQN 算法,把神经网络应用到了 RL 里,感觉相较于普通的 Q-Learning 强大了很多啊。而且还讲了一些比较 tricky 的东西,无论是 experience replay 还是用两个神经网络来训练都是很创新的思想,不过我也同样没怎么懂 experience replay 就是了,大概就是打破了时间对神经网络采样概率的影响。睡前又看了 Lecture 9 ,从这里开始课程从优化价值转向了优化策略,这节课的前半部分主要介绍了几种 metrics ,大概来说就是各种指标,我们可以对指标取梯度来优化。后半部分介绍了对 \(\theta\) 梯度上升来优化 \(J(\theta)\) 和 REINFORCE 算法,讲了一些对式子的理解和含义,额,太高妙了。感觉这门课,甚至说 RL 是一环扣一环的,Bellman ,MC ,TD ,SGD 等等都是不断地出现,不断地应用于更新的方法里,自始至终讨论的都是优化问题,太神奇了。

2026.2.8

  • MathFoundationRL Lecture 10

今天总算是把《MathFoundationRL》听完了,挺唏嘘的,回顾了一下这几天的日记不难发现,最初是觉得很简单很轻松,后面觉得有点吃力但也还好,结果从梯度下降开始就一发不可收拾地感觉有些难以理解了,再之后的课程是更加学的囫囵吞枣。不过感觉就是得反反复复地学很多遍啊,这就作为最草率的第一遍吧。从今天开始还在听 东川路第一可爱猫猫虫 的 RL 课程。他的课感觉也有一定程度上参考了 MathFoundationRL ,但多了代码的视线以及一些对原始论文的解读,挺好的,不断地回滚学习了,他还有一个ppt的仓库(传送门)也挺不错。听了他的第一课 Q-Learning ,这一课的理论部分和《MathFoundationRL》差不多,但确实也是讲的飞快。第二课是 DQN ,以 Space Invaders 为例提到了预处理的四个方法,但我确实没看懂这些和 RL 有啥关系,后面讲的相对有点快。但提到了一些《MathFoundationRL》里没提到的,比如如果始终用同一个网络更新的话,即使最终能收敛,最终也会有一个很奇怪的路径。总之感觉有此前学到的知识基础,再来看这个课也能补充新的观点,太好了。

2026.2.9

今天回家,车上没网络可以相对专心地学。看到一句话说的很对,就是 RL 是不断地用新的方法解决旧方法中的问题,然后再产生新的问题。因为基于值函数的方法存在一定的局限性,所以引入了基于策略函数的方法,那这也需要我们用梯度上升的方式来优化。中文视频的好处是更好地看懂了之前学的一知半解的地方,总算又搞懂了一些概念。而 REINFORCE 算法也同样存在一定的局限性,于是就有了 AC 算法,更进一步有了 A2C 算法。 Actor 负责选动作,是一个由 \(\theta\) 参数化的策略函数。 Critic 负责评价动作的好坏,学习 Q 值来逼近真实值,A2C 则引入了优势函数,评估当前策略动作与平均动作的差值。下一课是 TRPO ,这一块真是天书,梦到哪句说哪句,对数理基础要求太高了。PPO 是 TRPO 进一步改进来的。课程的第一部分在讲 PPO 里的 CLIP 部分,这都啥公式,看不懂。然后讲到了 GAE ,这个还看得懂一点,这是估计优势函数的做法,同时也存在了一定折中的性质。 PPO 的第二部分也没看懂,在讲式子里的其他部分以及代码实现,数学推导看不懂,代码看不懂,就先这样了。感觉最近几天学理论学下来,前面的 MC ,TD 什么的都是小儿科了,本来觉得梯度下降有点难,但看多了也大概看懂了,但 TRPO,PPO 这种真看不懂不知道在说点什么,感觉对数理基础要求还是挺高的。

之后想学一下《动手学强化学习》,感觉讲的也很系统很深刻,这门课居然没啥人看,我是没想到的。又刷到了一个很牛的up主 蒋一讲AI ,看了他讲 DDPG 的视频,他的视频以对算法的详细文字阐释为基础,看得比较懂一点,不错。然后又看了一个相对简略地讲 DDPG 的自用视频,也看懂了。总得来说近期学的还是太快了,之后几天先把论文继续读完吧,毕竟本来这些天的目标也是好好补一下理论知识,也算圆满完成了,读完论文之后再做下一步打算。

srt 又教了我一堆焚诀。

先看一堆论文的时候,把觉得好的图自己重画一遍。论文四要素:idea,图,写作(讲故事能力),代码。idea靠多看论文,图靠上面这招,代码没啥特别难的,写作就比较阴间。实验是这样,首先你要想清楚,你的idea需要配套哪些实验,如果是加模块就要做消融,然后把整个方法和你这个任务的其他顶会论文的量化指标对比。然后是你的量化指标该怎么可视化呈现(这步一般比较无所谓,但是论文一定会有可视化指标这一块)。实验的写作非常简单,比如你做的是那篇nature子刊的另一个场景,你就把你这个场景的实验和nature子刊那篇的实验的写作拼一下,直接照抄。写作的难点在摘要,引言,方法。

2026.2.10

今天摆了,一整天都没学。中午回校玩了玩,吃完晚饭回来处理了一下院科协算法组WOC出题的问题,为了键盘。

2026.2.11

今天下午在打牛客的寒假集训 \(5\) ,晚上打了一下 AtCoder Weekday Contest 0003 Beta ,被 AI 58s 速通没绷住。晚上开播学习了一下,读了一下论文《Dynamic Caching Dependency Aware Task Offloading in Mobile EdgenbspComputing》。读了一个半小时把这篇读完了,感觉整体算上之前读的时间应该在两个多小时就读完了,其实也没有花很长时间。这篇文章的 method 里感觉都是比较熟悉的, 0/1 背包和刚学的 DDPG ,大概都知道是啥所以看起来也不累。又回过头再看了看当时 CS188 都讲了些啥,发现还是讲了一些 RL 基础的东西的,可惜其实印象不是很深。也可能是这块内容过于基础,所以再重学的时候一下就懂了,不过 CS188 还涉及到了一些收敛性的证明来着,当初可能也没咋听懂。

2026.2.17

  • HRL Chapter 1~3

今天开始读《Hands-on Reinforcement Learning》。

读书笔记

第 \(1\) 章介绍了一些基本的概念,引入了有监督学习作为对比。

第 \(2\) 章介绍了 MAB 的概念,该问题与强化学习的一大区别在于其与环境的交互并不会改变环境,即 MAB 的每次交互的结果和以往的动作无关,所以可看作无状态的强化学习。并介绍了 \(O(1)\) 的增量式的期望更新,以及 \(\varepsilon-\) greedy 算法、 UCB 算法和汤普森采样算法。 UCB 算法是用估计值和不确定性度量加和作为上置信界,选取最大的作为当前策略。而汤普森采样算法则是用 Beta 分布对当前每个动作的奖励概率分布进行建模,然后先对每个动作的奖励进行采样,然后选择样本中奖励最大的动作,这是一种计算所有拉杆的最高奖励概率的蒙特卡洛采样方法。这些算法都是在做 exploration 和 exploitation 的平衡。

第 \(3\) 章是承上启下的一章,介绍了马尔可夫决策过程、蒙特卡洛方法、占用度量和贝尔曼最优方程等内容。值得一提的是占用度量 \(\rho_{\pi}(s,a)\) ,它是一个联合概率分布,指在整个交互过程中,从全局来看,智能体处在状态 \(s\) 并且同时执行动作 \(a\) 这种情况,占所有情况的比例。于是有 \(\sum\limits_{s,a}\rho_{\pi}(s,a)=1\) 。

2026.2.19

  • HRL Chapter 4~6

继续读《HRL》,感觉现在这么好好细读补理论基础也不错,反正之后马上看论文又要看一些比较小领域的东西了,额。

读书笔记

第 \(4\) 章在讲动态规划算法。首先介绍了策略迭代算法,该算法的流程是:\(\pi^{0}\xrightarrow{\text{策略评估}}V^{\pi^{0}}\xrightarrow{\text{策略提升}}\pi^{1}\xrightarrow{\text{策略评估}}V^{\pi^{1}}\xrightarrow{\text{策略提升}}\pi^{2}\xrightarrow{\text{策略评估}}\cdots\xrightarrow{\text{策略提升}}\pi^{*}\) 。然后讲到了价值迭代算法,它可以被认为是一种策略评估只进行了一轮更新的策略迭代算法。需要注意的是,价值迭代中不存在显式的策略,我们只维护一个状态价值函数。文中还引用了 Gym 的 FrozenLake-v0 环境,用 agent 帮我下载了一下这个库,结果这个环境已经被弃用了,又更新到了 v1 ,也算是浅配了一下环境吧。

第 \(5\) 章在讲时序差分算法。首先介绍了 Sarsa 算法,然后进一步推广到了 n-step Sarsa 算法。接着提出了 Q-learning 算法,并指出了其与前者的不同。引入一组概念:在线策略学习和离线策略学习。通常来说,在线策略学习要求使用在当前策略下采样得到的样本进行学习,一旦策略被更新,当前的样本就被放弃了;而离线策略学习使用经验回放池将之前采样得到的样本收集起来再次利用。Sarsa 是 on-policy 算法,它使用 \(\varepsilon-\) greedy 策略采样得到 \((s,a,r,s',a')\) ,然后用该五元组更新策略。而 Q-learning 是 off-policy 算法,它在给定 \(s\) 的情况下用 \(\varepsilon-\) greedy 策略选择 \(a\) ,并采样得到 \(r,s'\) ,然后用另一个策略更新,比如选取所有 \(a'\) 中满足最大 \(Q\) 值的 \(a'\) 。值得注意的是,尽管离线策略学习可以让智能体基于经验回放池中的样本来学习,但需要保证智能体在学习的过程中可以不断和环境进行交互,将采样得到的最新的经验样本加入经验回放池中,从而使经验回放池中有一定数量的样本和当前智能体策略对应的数据分布保持很近的距离。如果不允许智能体在学习过程中和环境进行持续交互,而是完全基于一个给定的样本集来直接训练一个策略,这样的学习范式被称为离线强化学习(offline reinforcement learning)。另外,与前一章不同的是,动态规划算法一般用于 model-base 的情况,而时序差分算法则是应用于 model-free 的情况。

第 \(6\) 章便顺理成章地讲到了 Dyna-Q 算法,这也是基于模型的强化学习算法,不过它的环境模型是通过采样数据估计得到的。Dyna-Q 是一个 Planning + Learning 的混合算法。具体地说, Dyna-Q 使用一种叫做 Q-planning 的方法来基于模型生成一些模拟数据,然后用模拟数据和真实数据一起改进策略。Q-planning 每次选取一个曾经访问过的状态 \(s\) ,采取一个曾经在该状态下执行过的动作 \(a\) ,通过模型得到转移后的状态 \(s'\) 以及奖励 \(r\) ,并根据这个模拟数据 \((s,a,r,s')\) ,用 Q-learning 的更新方式来更新动作价值函数。在每次与环境进行交互执行一次 Q-learning 之后,Dyna-Q 会做 \(n\) 次 Q-planning。其中 Q-planning 的次数 \(n\) 是一个事先可以选择的超参数,当其为 \(0\) 时就是普通的 Q-learning。值得注意的是,上述 Dyna-Q 算法是执行在一个离散并且确定的环境中,所以当看到一条经验数据 \((s,a,r,s')\) 时,可以直接对模型做出更新,即 \(M(s,a)\gets r,s'\) 。Q-learning 本身就是梯度下降的迭代,而 Planning 就是进一步迭代,只不过用的是所有已有数据,而不是只用新数据,这可以让 Q 值的学习更彻底。

2026.2.20

  • HRL Chapter 7~8

继续读《HRL》,今天是第一次学到 DQN 的改进算法,有种终于又学到新东西的感觉了,这些改进也很贴合深度强化学习的性质,毕竟深度学习的相关性质也应该有所体现,而不是单单的强化学习。感觉近期的学习总算是对各种理论基础有了一个相对更巩固的了解吧,挺好的。神经网络感觉还是很神奇啊,之后应该会再好好学一下的。除此之外,昨天晚上刷 xhs 读到一段话感觉也挺有道理的的,那个人认为对强化学习的基础而言,各类方法都是围绕贝尔曼方程的一种最优近似。

读书笔记

第 \(7\) 章是 DQN 算法。

我们先来回顾一下 Q-learning 的更新规则:\(Q(s,a)\leftarrow Q(s,a)+\alpha\left[r+\gamma\max_{a' \in \mathcal{A}}Q(s',a')-Q(s,a)\right]\) 。上述公式用 TD Target \(r+\gamma\max_{a' \in \mathcal{A}}Q(s',a')\) 来增量式更新 \(Q(s,a)\),也就是说要使 \(Q(s,a)\) 和 TD Target靠近。于是,对于一组数据 \(\{(s_i,a_i,r_i,s'_i)\}\),我们可以很自然地将 Q 网络的损失函数构造为均方误差的形式:\(\omega^*=\arg\min_{\omega}\frac{1}{2N}\sum_{i=1}^{N} \left[ Q_{\omega}(s_i,a_i)-\left(r_i+\gamma\max_{a'}Q_{\omega}(s'_i,a')\right) \right]^2\) 。至此,我们就可以将 Q-learning 扩展到神经网络形式——深度 Q 网络(deep Q network,DQN)算法。由于 DQN 是离线策略算法,因此我们在收集数据的时候可以使用一个-贪婪策略来平衡探索与利用,将收集到的数据存储起来,在后续的训练中使用。DQN 中还有两个非常重要的模块——经验回放和目标网络,它们能够帮助 DQN 取得稳定、出色的性能。

在一般的有监督学习中,假设训练数据是独立同分布的,我们每次训练神经网络的时候从训练数据中随机采样一个或若干个数据来进行梯度下降,随着学习的不断进行,每一个训练数据会被使用多次。在原来的 Q-learning 算法中,每一个数据只会用来更新一次 \(Q\) 值。为了更好地将 Q-learning 和深度神经网络结合,DQN 算法采用了经验回放(experience replay)方法,具体做法为维护一个回放缓冲区,将每次从环境中采样得到的四元组数据(状态、动作、奖励、下一状态)存储到回放缓冲区中,训练 Q 网络的时候再从回放缓冲区中随机采样若干数据来进行训练。这么做可以起到以下两个作用。

  1. 使样本满足独立假设。在 MDP 中交互采样得到的数据本身不满足独立假设,因为这一时刻的状态和上一时刻的状态有关。非独立同分布的数据对训练神经网络有很大的影响,会使神经网络拟合到最近训练的数据上。采用经验回放可以打破样本之间的相关性,让其满足独立假设。

  2. 提高样本效率。每一个样本可以被使用多次,十分适合深度神经网络的梯度学习。

DQN 算法最终更新的目标是让 \(Q_{\omega}(s,a)\)逼近 \(r+\gamma\max_{a'}Q_{\omega}(s',a')\) ,由于 TD 误差目标本身就包含神经网络的输出,因此在更新网络参数的同时目标也在不断地改变,这非常容易造成神经网络训练的不稳定性。为了解决这一问题,DQN 便使用了目标网络(target network)的思想:既然训练过程中 Q 网络的不断更新会导致目标不断发生改变,不如暂时先将 TD 目标中的 Q 网络固定住。为了实现这一思想,我们需要利用两套 Q 网络。

  1. 原来的训练网络 \(Q_{\omega}(s,a)\),用于计算原来的损失函数 \(\frac{1}{2}\left[Q_{\omega}(s,a)-\left(r+\gamma\max_{a'}Q_{\omega^-}(s',a')\right)\right]^2\) 中的 \(Q_{\omega}(s,a)\) 项,并且使用正常梯度下降方法来进行更新。

  2. 目标网络 \(Q_{\omega^-}(s,a)\),用于计算原先损失函数 \(\frac{1}{2}\left[Q_{\omega}(s,a)-\left(r+\gamma\max_{a'}Q_{\omega^-}(s',a')\right)\right]^2\) 中的 \(\left(r+\gamma\max_{a'}Q_{\omega^-}(s',a')\right)\) 项,其中 \(\omega^-\) 表示目标网络中的参数。如果两套网络的参数随时保持一致,则仍为原先不够稳定的算法。为了让更新目标更稳定,目标网络并不会每一步都更新。具体而言,目标网络使用训练网络的一套较旧的参数,训练网络 \(Q_{\omega}(s,a)\) 在训练中的每一步都会更新,而目标网络的参数每隔 \(C\) 步才会与训练网络同步一次,即 \(\omega^- \leftarrow \omega\) 。这样做使得目标网络相对于训练网络更加稳定。

第 \(8\) 章是对 DQN 算法的改进,文中介绍了 Double DQN 算法和 Dueling DQN 算法。

DQN 算法存在会过高估计的问题,因为通过神经网络估算的 \(Q\) 值本身在某些时候会产生正向或负向的误差,在 DQN 的更新方式下神经网络会将正向误差累积。而 Double DQN 算法提出利用两个独立训练的神经网络估算 \(\max_{a'} Q_*(s', a')\) 。具体做法是将原有 \(\max_{a'} Q_{\omega^-}(s', a')\) 更改为 \(Q_{\omega^-}\!\left(s', \arg\max_{a'} Q_{\omega}(s', a')\right)\) ,即利用一套神经网络 \(Q_{\omega}\) 的输出选取价值最大的动作,但在使用该动作的价值时,用另一套神经网络 \(Q_{\omega^-}\) 计算该动作的价值。这样,即使其中一套神经网络的某个动作存在比较严重的过高估计问题,由于另一套神经网络的存在,这个动作最终使用的 \(Q\) 值不会存在很大的过高估计问题。

在传统的 DQN 算法中,本来就存在两套 \(Q\) 函数的神经网络——目标网络和训练网络,只不过 \(\max_{a'} Q_{\omega^-}(s', a')\) 的计算只用到了其中的目标网络,那么我们恰好可以直接将训练网络作为 Double DQN 算法中的第一套神经网络来选取动作,将目标网络作为第二套神经网络计算 \(Q\) 值,这便是 Double DQN 的主要思想。由于在 DQN 算法中将训练网络的参数记为 \(\omega\),将目标网络的参数记为 \(\omega^-\),这与本节中 Double DQN 的两套神经网络的参数是统一的,因此,我们可以直接写出如下 Double DQN 的优化目标:\(r + \gamma Q_{\omega^-}\!\left(s', \arg\max_{a'} Q_{\omega}(s', a')\right)\) 。总而言之,DQN 与 Double DQN 的差别只是在于计算状态 \(s'\) 下 \(Q\) 值时如何选取动作:

  • DQN 的优化目标可以写为 \(r + \gamma Q_{\omega^-}\!\left(s', \arg\max_{a'} Q_{\omega^-}(s', a')\right)\) ,动作的选取依靠目标网络 \(Q_{\omega^-}\);

  • Double DQN 的优化目标为 \(r + \gamma Q_{\omega^-}\!\left(s', \arg\max_{a'} Q_{\omega}(s', a')\right)\) ,动作的选取依靠训练网络 \(Q_{\omega}\)。

Dueling DQN 是 DQN 另一种的改进算法,它在传统 DQN 的基础上只进行了微小的改动,但却能大幅提升 DQN 的表现。在强化学习中,我们将状态动作价值函数 \(Q\) 减去状态价值函数 \(V\) 的结果定义为优势函数 \(A\),即 \(A(s,a)=Q(s,a)-V(s)\) 。在同一个状态下,所有动作的优势值之和为 \(0\) ,因为所有动作的动作价值的期望就是这个状态的状态价值。据此,在 Dueling DQN 中,\(Q\) 网络被建模为:\(Q_{\eta,\alpha,\beta}(s,a)=V_{\eta,\alpha}(s)+A_{\eta,\beta}(s,a)\) 。其中,\(V_{\eta,\alpha}(s)\) 为状态价值函数,而 \(A_{\eta,\beta}(s,a)\) 则为该状态下采取不同动作的优势函数,表示采取不同动作的差异性;\(\eta\) 是状态价值函数和优势函数共享的网络参数,一般用在神经网络中,用来提取特征的前几层;而 \(\alpha\) 和 \(\beta\) 分别为状态价值函数和优势函数的参数。在这样的模型下,我们不再让神经网络直接输出 \(Q\) 值,而是训练神经网络的最后几层的两个分支,分别输出状态价值函数和优势函数,再求和得到 \(Q\) 值。

对于 Dueling DQN 中的公式 \(Q_{\eta,\alpha,\beta}(s,a)=V_{\eta,\alpha}(s)+A_{\eta,\beta}(s,a)\) ,它存在对于 \(V\) 值和 \(A\) 值建模不唯一性的问题。例如,对于同样的 \(Q\) 值,如果将 \(V\) 值加上任意大小的常数 \(C\) ,再将所有 \(A\) 值减去 \(C\) ,则得到的 \(Q\) 值依然不变,这就导致了训练的不稳定性。为了避免这一问题,Dueling DQN 强制最优动作的优势函数的实际输出为 \(0\) ,即:\(Q_{\eta,\alpha,\beta}(s,a)=V_{\eta,\alpha}(s)+A_{\eta,\beta}(s,a)-\max_{a'}A_{\eta,\beta}(s,a')\) ,此时 \(V(s)=\max_a Q(s,a)\) ,可以确保 \(V\) 值建模的唯一性。在实现过程中,我们还可以用平均代替最大化操作,即: \(Q_{\eta,\alpha,\beta}(s,a)=V_{\eta,\alpha}(s)+A_{\eta,\beta}(s,a)-\frac{1}{|\mathcal{A}|}\sum_{a'}A_{\eta,\beta}(s,a')\) ,此时 \(V(s)=\frac{1}{|\mathcal{A}|}\sum_{a'}Q(s,a')\) 。

我们可以把 DQN 系列理解成三件事:

  1. 怎么算目标值(target)
  2. 怎么抽训练样本(replay)
  3. 怎么做探索(exploration)

除此以外,还有若干种 DQN 的改进算法,接下来将改进分别优化不同环节:

  1. PER(Prioritized Experience Replay,优先经验回放):普通经验回放是“均匀抽样”,但很多样本已经学会了,继续反复学价值不大,PER 的想法是更常抽“学得不好的样本”(TD 误差大)。
  2. Noisy DQN(参数噪声探索):\(\varepsilon-\) greedy 是“动作层面乱试”,比较粗糙。Noisy DQN 改成 参数层面加噪声,让策略本身带探索性。
  3. C51(Distributional DQN,分布式价值):DQN 学的是期望值 \(Q\) ,但同一期望可能对应完全不同风险分布,C51 学的是回报分布 \(Z(s,a)\),再由分布求期望。
  4. Rainbow(把多个改进合体):Rainbow 不是单一新技巧,而是把以下组件整合,综合各算法优势,达到 SOTA 性能:
    1. Double DQN(减小过估计)
    2. Dueling(拆 (V) 和 (A))
    3. PER(更高效回放)
    4. NoisyNet(更优探索)
    5. C51(分布式价值)
    6. (n)-step return(更快传播奖励)

2026.2.21

  • HRL Chapter 9~10

先看了一个 UP 主 飞天闪客 的视频《一小时从函数到 Transformer》,额,大概把一些神经网络的概念过了一遍。然后继续读《HRL》,稳定一天两章,明天就到斩杀线了。题外话,今天发现原来之前看的那个 UP 主 蒋一讲ai,他应该也是基于《HRL》讲的,那感觉也可以先直接看他的视频,然后再看文字,不知道这样会不会好理解一点。

读书笔记

第 \(9\) 章是策略梯度算法,介绍了 REINFORCE 算法。

基于策略的方法首先需要将策略参数化。假设目标策略是一个随机性策略,并且处处可微,其中参数对应策略的参数。我们可以用一个线性模型或者神经网络模型来为这样一个策略函数建模:输入某个状态,然后输出一个动作的概率分布。我们的目标是要寻找一个最优策略,并最大化这个策略在环境中的期望回报。我们将策略学习的目标函数定义为 \(J(\theta)=\mathbb{E}_{s_0}\left[V^{\pi_\theta}(s_0)\right]\) ,其中,\(s_0\) 表示初始状态。现在有了目标函数,我们将目标函数对策略求导,得到导数后,就可以用梯度上升方法来最大化这个目标函数,从而得到最优策略。然后我们对目标函数求梯度,通过推导可以得到:\(\nabla_\theta J(\theta) \propto \mathbb{E}_{\pi_\theta}\!\left[ Q^{\pi_\theta}(s,a)\,\nabla_\theta \log \pi_\theta(a\mid s) \right]\) 。这个梯度可以用来更新策略。需要注意的是,因为上式中期望的下标是 \(\pi_\theta\),所以策略梯度算法为在线策略(on-policy)算法,即必须使用当前策略 \(\pi_\theta\) 采样得到的数据来计算梯度。直观理解一下策略梯度这个公式,可以发现:在每一个状态下,梯度的修改是让策略更多地去采样到带来较高 \(Q\) 值的动作,更少地去采样到带来较低 \(Q\) 值的动作。

在计算策略梯度的公式中,我们需要用到 \(Q^{\pi_\theta}(s,a)\),可以用多种方式对它进行估计。而 REINFORCE 算法便是采用了蒙特卡洛方法来估计 \(Q^{\pi_\theta}(s,a)\),对于一个有限步数的环境来说,REINFORCE 算法中的策略梯度为:\(\nabla_\theta J(\theta)=\mathbb{E}_{\pi_\theta}\left[\sum_{t=0}^{T}\left(\sum_{t'=t}^{T}\gamma^{\,t'-t}r_{t'}\right)\nabla_\theta \log \pi_\theta(a_t\mid s_t)\right]\) ,其中,\(T\) 是和环境交互的最大步数。REINFORCE 算法理论上是能保证局部最优的,它实际上是借助蒙特卡洛方法采样轨迹来估计动作价值,这种做法的一大优点是可以得到无偏的梯度。但是,正是因为使用了蒙特卡洛方法,REINFORCE 算法的梯度估计的方差很大,可能会造成一定程度上的不稳定。

第 \(10\) 章是 Actor-Critic 算法。

回顾一下,在 REINFORCE 算法中,目标函数的梯度中有一项轨迹回报,用于指导策略的更新。REINFORCE 算法用蒙特卡洛方法来估计 \(Q(s,a)\),能不能考虑拟合一个值函数来指导策略进行学习?这正是 Actor-Critic 算法所做的。在策略梯度中,可以把梯度写成下面这个更加一般的形式:\(g=\mathbb{E}\left[\sum_{t=0}^{T}\psi_t \,\nabla_\theta \log \pi_\theta(a_t\mid s_t)\right]\) ,其中,\(\psi_t\) 可以有很多种形式:

  1. \(\psi_t=\sum_{t'=0}^{T}\gamma^{t'}r_{t'}\)(整条轨迹总回报)
  • 每个时间步都用同一个总分。
  • 优点:无偏、最直接。
  • 缺点:方差很大,早期动作会被很多不相关后续噪声污染。
  • 这是最原始 REINFORCE 形式。
  1. \(\psi_t=\sum_{t'=t}^{T}\gamma^{t'-t}r_{t'}\)(reward-to-go)
  • 第 \(t\) 步只看“从现在往后”的回报。
  • 仍无偏,但方差比(1)小(去掉了“过去奖励”的干扰)。
  • 这是常用 REINFORCE 版本。
  1. \(\psi_t=\sum_{t'=t}^{T}\gamma^{t'-t}r_{t'}-b(s_t)\)(加 baseline)
  • 在(2)基础上减去状态基线 \(b(s_t)\)。
  • 若 \(b(s_t)\) 与动作无关,则不改变期望梯度(仍无偏),但显著降方差。
  • 常取 \(b(s_t)=V(s_t)\),于是变成“比预期好多少”的信号。
  1. \(\psi_t=Q^\pi(s_t,a_t)\)(动作价值)
  • 直接用“在 \(s_t\) 选 \(a_t\) 的长期价值”做权重。
  • 通常来自 critic 估计,不再纯蒙特卡洛。
  • 方差更低,但若 critic 不准会有偏差(偏差-方差权衡)。
  1. \(\psi_t=A^\pi(s_t,a_t)\)(优势函数)
  • \(A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s)\)。
  • 含义:这个动作比“该状态平均水平”好多少。
  • 比纯 \(Q\) 更聚焦于“相对好坏”,训练常更稳。
  1. \(\psi_t=r_t+\gamma V^\pi(s_{t+1})-V^\pi(s_t)\)(TD 残差 \(\delta_t\))
  • 一步优势近似(one-step advantage)。
  • 计算便宜、方差低,但有 bootstrap 带来的偏差。
  • 是很多 Actor-Critic 的基础信号。

文章着重了介绍形式(6),即通过时序差分残差 \(\psi_t = r_t + \gamma V^\pi(s_{t+1}) - V^\pi(s_t)\) 来指导策略梯度进行学习。事实上,用Q值或者V值本质上也是用奖励来进行指导,但是用神经网络进行估计的方法可以减小方差、提高鲁棒性。除此之外,REINFORCE 算法基于蒙特卡洛采样,只能在序列结束后进行更新,这同时也要求任务具有有限的步数,而 Actor-Critic 算法则可以在每一步之后都进行更新,并且不对任务的步数做限制。

我们将 Actor-Critic 分为两个部分:Actor(策略网络)和 Critic(价值网络):

  • Actor 要做的是与环境交互,并在 Critic 价值函数的指导下用策略梯度学习一个更好的策略。
  • Critic 要做的是通过 Actor 与环境交互收集的数据学习一个价值函数,这个价值函数会用于判断在当前状态什么动作是好的,什么动作不是好的,进而帮助 Actor 进行策略更新。

Actor 的更新采用策略梯度的原则,那 Critic 如何更新呢?我们将 Critic 价值网络表示为 \(V_\omega\),参数为 \(\omega\)。于是,我们可以采取时序差分残差的学习方式,对于单个数据定义如下价值函数的损失函数:\(\mathcal{L}(\omega)=\frac{1}{2}\left(r+\gamma V_\omega(s_{t+1})-V_\omega(s_t)\right)^2\) 。与 DQN 中一样,我们采取类似于目标网络的方法,将上式中 \(r+\gamma V_\omega(s_{t+1})\) 作为时序差分目标,不会产生梯度来更新价值函数。因此,价值函数的梯度为:\(\nabla_\omega \mathcal{L}(\omega)=- \left(r+\gamma V_\omega(s_{t+1})-V_\omega(s_t)\right)\nabla_\omega V_\omega(s_t)\) 。然后使用梯度下降方法来更新 Critic 价值网络参数即可。

2026.2.22

  • HRL Chapter 11

继续读《HRL》,今天看 蒋一讲ai 的视频稍微复习了一下前几天学的,然后把 TRPO 啃了下来,感觉是第一次真正看懂。

读书笔记

第 \(11\) 章是 TRPO 算法。

信任区域策略优化(trust region policy optimization,TRPO)算法是在 Actor-Critic 框架下运行的算法。我们考虑在更新时找到一块信任区域(trust region),在这个区域上更新策略时能够得到某种策略性能的安全性保证,这就是 TRPO 的主要思想,它在理论上能够保证策略学习的性能单调性,并在实际应用中取得了比策略梯度算法更好的效果。

这一章的数学推导很多,且不乏一些 tricky 的处理方式,这里就略过了。 TRPO 的算法流程是我们用 GAE 来估计优势值 \(A(s,a)\) ,然后用共轭梯度法计算 \(x=H^{-1}g\) ,接着通过线性搜索的方式在 KL 散度的约束内做梯度上升。值得注意的是,策略函数 Actor 是 TRPO 算法的核心;而 Critic 的更新仍然是用最传统的梯度下降。

2026.2.23

  • HRL Chapter 12~14

继续读《HRL》,不知道为什么《HRL》的 PPO 这么简短,因为看的是伯禹的版本,可能之后买本书才知道怎么回事了。因为之前大概看过一次 DDPG 了,所以今天学起来相对轻松一点,但也是越学越懂。然后还学了 SAC ,感觉很牛啊,而且在这个算法里还看到了 PPO-Penalty 和 DDPG 的影子,果然是不断进步的过程。现在也算是把《HRL》的进阶篇看完了,后面的前沿篇就再说了。回过头来看,真的是把这些基础的理论反反复复地学,感觉还是挺有进步的吧,从以前的看不懂到现在大概懂了,还是挺高兴的。

读书笔记

第 \(12\) 章是 PPO 算法。

TRPO 使用泰勒展开近似、共轭梯度、线性搜索等方法直接求解,我们回忆一下 TRPO 的优化目标:\(\begin{aligned} \max_{\theta} \quad & \mathbb{E}_{s \sim \nu^{\pi_{\theta_k}}} \mathbb{E}_{a \sim \pi_{\theta_k}(\cdot|s)} \left[ \frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)} A^{\pi_{\theta_k}}(s,a) \right] \\ \text{s.t.} \quad & \mathbb{E}_{s \sim \nu^{\pi_{\theta_k}}} [D_{KL}(\pi_{\theta_k}(\cdot|s), \pi_\theta(\cdot|s))] \le \delta \end{aligned}\) 。

PPO 的优化目标与 TRPO 相同,但 PPO 用了一些相对简单的方法来求解。具体来说,PPO 有两种形式,一是 PPO-Penalty ,二是 PPO-Clip ,我们接下来对这两种形式进行介绍。

PPO-惩罚(PPO-Penalty)使用拉格朗日乘数法,将 KL 散度的约束转化为目标函数中的惩罚项,变成了一个无约束优化问题,即: \(\arg\max_\theta\mathbb{E}_{s\sim\nu^{\pi_{\theta_k}}}\mathbb{E}_{a\sim\pi_{\theta_k}(\cdot|s)}\left[\frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)}A^{\pi_{\theta_k}}(s,a)-\beta D_{KL}[\pi_{\theta_k}(\cdot|s),\pi_\theta(\cdot|s)]\right]\) 。

在目标函数中加入 KL 散度惩罚项后,算法会在迭代过程中动态调整惩罚系数(KL 散度前的系数),以控制策略更新幅度。如果 KL 散度过大,增大惩罚系数,从而限制更新幅度;如果 KL 散度过小,则减小惩罚系数,允许更积极地更新。这样既保留了 PPO 的更新稳定性,又显著简化了优化过程。直观的理解,惩罚系数β越大,相当于给 KL 散度设置了更高的“代价”,为了使目标函数最大化,算法会尽量降低KL散度值,表现出来的行为就像是“更害怕”偏离旧策略,因此策略变化更小。

PPO-截断(PPO-Clip)则直接在目标函数中进行限制,确保新旧策略差距不会过大,其核心思想是通过裁剪(clipping)的方式限制策略更新的幅度,从而在提高性能的同时,避免策略更新过度导致的不稳定性,具体方式如下: \(\arg\max_\theta \mathbb{E}_{s \sim \nu^{\pi_{\theta_k}}} \mathbb{E}_{a \sim \pi_{\theta_k}(\cdot|s)} \left[ \min \left( \frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)} A^{\pi_{\theta_k}}(s, a), \text{clip} \left( \frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)}, 1 - \epsilon, 1 + \epsilon \right) A^{\pi_{\theta_k}}(s, a) \right) \right]\) ,其中 \(clip(x,l,r)\) 可以把 \(x\) 限制在 \([l,r]\) 内。

裁剪操作限制了重要性采样因子的变化,保证策略更新幅度不会过大,从而提高了训练的稳定性。目标函数通过比较裁剪后的值和未裁剪值,确保策略在优化的过程中既能提升性能,又不会因更新过度而崩溃。这种设计是 PPO 的核心改进之一,使其在实践中比 TRPO 更简单、更高效。

相比于 PPO-Penalty ,PPO-Clip 不需要动态调整 KL 散度的惩罚系数 \(\beta\) ,而是直接通过裁剪实现对策略更新幅度的控制,所以其计算效率更高,仅需简单的比较运算,而 PPO-Penalty 需要动态监控 KL 散度并调整惩罚系数。

第 \(13\) 章是 DDPG 算法。

之前我们学习的 DQN 算法通过遍历所有可选动作并选取 Q 值最大的动作(\(\arg\max_a Q(s,a)\))来进行决策。但在连续动作空间(如机器人控制、自动驾驶)中,动作的数量是无限的,我们根本无法通过遍历来求最大值。为了解决这一痛点,DDPG(Deep Deterministic Policy Gradient,深度确定性策略梯度)应运而生。DDPG 放弃了输出动作概率分布的随机策略,转而采用确定性策略,记为 \(a = \mu_\theta(s)\),即由策略网络直接输出一个确定的动作值。为了实现这一目标,DDPG 采用了经典的 Actor-Critic 框架。

Actor 网络接收环境状态 \(s\) 并直接输出动作,而 Critic 网络接收状态 \(s\) 和动作 \(a\),并输出对该动作的价值评估(Q 值)。Actor 的优化目标是在每一个状态下,最大化其输出动作所对应的期望 Q 值:\(J(\pi_\theta) = \mathbb{E}_{s \sim \nu^{\pi_\beta}} [Q^\mu(s, \mu_\theta(s))]\) ,其中 \(\nu^{\pi_\beta}\) 是从经验回放池中采样的状态分布,这种机制保证了样本的多样性,并使得 DDPG 支持离线训练(Off-policy)。

为了最大化这个目标函数,DDPG 依据确定性策略梯度定理,利用 Critic 网络的反馈来指导 Actor 进行优化。梯度的计算利用了微积分的链式法则:\(\nabla_\theta J(\pi_\theta) = \mathbb{E}_{s \sim \nu^{\pi_\beta}} \left[ \nabla_\theta \mu_\theta(s) \nabla_a Q^\mu_\omega(s, a)|_{a=\mu_\theta(s)} \right]\) 。该式的直观理解是Critic 首先对动作 \(a\) 求梯度,指明“动作该往哪个方向微调才能让 Q 值更高”;随后 Actor 接收到这个方向指引,对自身的参数 \(\theta\) 求梯度进行更新,最终使网络能够输出使 Q 值最大的动作。

在 Critic 的训练中,如果使用不断剧烈变化的主网络来计算目标 Q 值,会导致训练极度不稳定并引发 Q 值的系统性偏高估计。借鉴 Double DQN 的思想,DDPG 为 Actor 和 Critic 各自配备了一个独立的目标网络(Target Network)。

DDPG 计算目标 Q 值的公式为:\(y = r + \gamma Q_{\omega'}(s_{t+1}, \mu_{\theta'}(s_{t+1}))\) ,其中, \(\omega'\) 和 \(\theta'\) 分别是目标 Critic 和目标 Actor 的参数。之所以 Actor 也必须配备目标网络,是因为计算目标 Q 值所需的“下一个动作”是由 Actor 生成的;如果主 Actor 频繁更新,动作就会抖动,导致 Critic 的目标值依然无法稳定。通过分离动作选择与 Q 值估算,目标网络为训练提供了平稳的“锚点”,大幅降低了训练的不稳定性和过拟合风险。

为了进一步保证稳定,DDPG 抛弃了 DQN 中每隔固定步数直接复制参数的“硬更新”,转而采用软更新方式: \(\omega' \leftarrow \tau\omega + (1 - \tau)\omega'\) ,其中, \(\tau\) 通常是一个极小的数值。在每个时间步,目标网络的参数只会吸收主网络极少部分的新变化,以一种平滑、渐进的方式逐步调整,这特别适合连续动作空间任务的要求。

由于确定性策略在给定状态下总是输出固定的动作,这导致模型在环境中的探索能力非常有限。为了引导策略进行有效的环境探索,DDPG 在 Actor 输出的动作上叠加了一个随机噪声 \(\mathcal{N}= \mu + \sigma \cdot Z\) ,随着训练的深入,噪声的幅度(\(\sigma\))会逐渐减小,促使策略从初期的广泛探索平滑过渡到后期的充分利用。

第 \(14\) 章是 SAC 算法。

之前我们学习的 DDPG 算法采用了确定性策略,虽然解决了连续动作空间中无法穷举动作的最大化问题,但也导致模型在环境中的探索能力非常有限。为了极大增强探索能力并减少策略陷入较差的局部最优的可能性,SAC(Soft Actor-Critic)算法引入了最大熵强化学习(Maximum Entropy RL)的思想。在最大熵强化学习中,除了要最大化累积奖励,还要使得策略 \(\pi\) 更加随机,即将度量随机程度的熵 \(H(\pi(\cdot|s))\) 加入到目标中。因此,强化学习的目标函数中加入了一项由系数 \(\alpha\) 控制的熵正则项,定义为 \(\pi^* = \arg\max_\pi \mathbb{E}_\pi \left[ \sum_t r(s_t, a_t) + \alpha H(\pi(\cdot|s_t)) \right]\)。

由于目标函数发生了变化,SAC 在理论基础上映入了 Soft 策略迭代。在 Soft 贝尔曼方程中,状态价值函数被重新定义为包含熵的形式:\(V(s_t) = \mathbb{E}_{a_t \sim \pi}[Q(s_t, a_t) - \alpha \log \pi(a_t|s_t)]\)。基于此,策略提升的过程转变为寻找一个新策略 \(\pi_{\text{new}}\),使其最小化与基于 Soft Q 函数构建的目标指数分布之间的 KL 散度:\(\pi_{\text{new}} = \arg\min_{\pi'} D_{KL} \left( \pi'(\cdot|s), \frac{\exp(\frac{1}{\alpha} Q^{\pi_{\text{old}}}(s, \cdot))}{Z^{\pi_{\text{old}}}(s, \cdot)} \right)\)。由于在连续空间下无法精确计算这种迭代,我们需要通过参数化函数 \(Q\) 和策略 \(\pi\) 来近似迭代过程。

为了落地到深度网络中,SAC 为两个动作价值函数 \(Q\)(参数分别为 \(\omega_1\) 和 \(\omega_2\))和一个策略函数 \(\pi\)(参数为 \(\theta\))建模。基于 Double DQN 的思想,SAC 使用两个 Q 网络,并且在每次计算目标 Q 值时会挑选其中较小的一个,从而有效缓解 Q 值过高估计的问题。对于经验回放池 \(R\) 中的转移数据,Critic 的损失函数旨在最小化预测 Q 值与目标值之间的均方误差:\(L_Q(\omega) = \mathbb{E}_{(s_t,a_t,r_t,s_{t+1}) \sim R, a_{t+1} \sim \pi_\theta} \left[ \frac{1}{2} \left( Q_\omega(s_t, a_t) - \left(r_t + \gamma (\min_{j=1,2} Q_{\omega_j^-}(s_{t+1}, a_{t+1}) - \alpha \log \pi(a_{t+1}|s_{t+1}))\right) \right)^2 \right]\)。值得注意的是,这里计算未来状态的目标 Q 值时,动作 \(a_{t+1}\) 是由当前的最新策略网络实时采样的。

Actor 的优化目标被转化为最大化状态价值函数 \(V\),其损失函数经由 KL 散度化简后为:\(L_\pi(\theta) = \mathbb{E}_{s_t \sim R, a_t \sim \pi_\theta} [\alpha \log(\pi_\theta(a_t|s_t)) - Q_\omega(s_t, a_t)]\)。然而在连续动作空间中,策略网络输出的是高斯分布的均值和标准差,而从分布中直接采样动作的过程是不可导的,会导致梯度断裂。为了解决这一计算图阻断问题,SAC 使用了重参数化技巧(reparameterization trick)。该做法是先从一个单位高斯分布 \(\mathcal{N}\) 中采样出一个噪声随机变量 \(\epsilon_t\),再将其乘以标准差并加上均值来获得确定的动作:\(a_t = f_\theta(\epsilon_t; s_t)\)。应用该技巧并结合悲观估计原则后,策略的损失函数被重写为完全可导的形式:\(L_\pi(\theta) = \mathbb{E}_{s_t \sim R, \epsilon_t \sim \mathcal{N}} \left[ \alpha \log(\pi_\theta(f_\theta(\epsilon_t; s_t)|s_t)) - \min_{j=1,2} Q_{\omega_j}(s_t, f_\theta(\epsilon_t; s_t)) \right]\)。

最后,因为在不同状态下对“探索”的诉求是不一样的(最优动作确定的状态需要小熵,不确定的状态需要大熵),固定熵正则项系数 \(\alpha\) 往往效果不佳。SAC 将目标巧妙地改写为一个带约束的优化问题:在最大化期望回报的同时,约束策略熵的均值大于设定的目标下限 \(\mathcal{H}_0\)。通过数学化简,\(\alpha\) 变成了一个可以通过梯度下降自动调整的参数,其损失函数为:\(L(\alpha) = \mathbb{E}_{s_t \sim R, a_t \sim \pi(\cdot|s_t)} [-\alpha \log \pi(a_t|s_t) - \alpha \mathcal{H}_0]\)。在整个网络更新循环中,为了保证训练目标的平稳,SAC 同样采用了软更新机制来处理两个目标 Q 网络:\(\omega_1^- \leftarrow \tau \omega_1 + (1 - \tau)\omega_1^-\),以及 \(\omega_2^- \leftarrow \tau \omega_2 + (1 - \tau)\omega_2^-\)。

题外话:SAC 中使用的截断双 Q 学习(Clipped Double Q-Learning)机制,其前身正是 TD3 (Twin Delayed Deep Deterministic Policy Gradient)算法为解决 DDPG 缺陷而引入的核心技术。在连续高维空间中,DDPG 的 Actor 极易迎合 Critic 的正向误差,导致 Q 值的高估偏差随着自举过程不断膨胀,最终引发策略崩溃。TD3 创新性地引入了双胞胎 Critic 架构,在计算目标 Q 值时强制取两者中的较小值。SAC 继承了这一“悲观估计”思想,有效挤出了价值评估中虚高的水分,从而为 Actor 追求高价值与高熵提供了更客观、稳定的评判标尺。

此外,SAC 的自动熵调整机制与 PPO-Penalty 在底层数学思想上异曲同工,两者皆是拉格朗日乘子法在带约束优化问题中的经典应用。PPO 为了保证训练稳定,要求新旧策略的 KL 散度不能过大;SAC 为了保证充分探索,则约束策略的熵不能低于 \(\mathcal{H}_0\)。不过在具体实现上,PPO 通常依赖硬编码的启发式逻辑(如基于 if-else 粗糙地翻倍或减半惩罚系数),而 SAC 则将温度系数 \(\alpha\) 转化为可学习的网络参数,利用对偶梯度下降自动寻找最优解。

2026.2.25

  • d2l Chapter 1~2

打算补一下深度学习基础,于是开始看《d2l》。今天看的相对比较草率,大致把第 \(1\) 章和第 \(2\) 章读了一遍。

Section 4

2026.3.2

  • d2l Chapter 3

开学第一天。背了 \(80\) 个六级单词,离散大概学了一下集合论,感觉离散难度好大啊,大物看了 \(2\) 集。课内大概学了学之后就草草看了一章《d2l》,代码实现几乎略过了,其他的理论部分感觉还是有点懵懵懂懂的。大概思想肯定都知道,但里面的数学推导跳了不少步骤,还有些概念也不是很明白。

第 \(3\) 章的标题是线性神经网络,具体地说,介绍了线性回归和 softmax 回归。

2026.3.3

  • d2l Chapter 4

背了 \(100\) 个六级单词,又预习了一下大物。又看了一章《d2l》,依旧忽略代码,大部分都看懂了,感觉本来也会。不过分布偏移和纠正那一块内容看得感觉有点跳脱,可能是翻译的问题吧。还不知道为什么在我已经有 pro 会员的情况下把我的 pro 模型干限额了,而且还有时出现一些莫名其妙的错误,我不懂啊,希望之后没这个问题。

第 \(4\) 章的标题是多层感知机,但这才是真正开始介绍神经网络的章节,介绍了网络的基本结构和训练方式,指出了可能存在的欠拟合和过拟合的问题,然后给出了权重衰减、Dropout 的优化方式;指出了可能存在的梯度消失和梯度爆炸的问题,然后给出了参数初始化的方法,指出了;指出了可能存在的分布偏移的问题,然后给出了纠正的方法。

2026.3.4

背了 \(110\) 个单词,除此以外就没学了。今天忙于各种事情,找导师沟通了一下,也听了校队内的会议,然后还运动了一会。

2026.3.5

背了 \(90\) 个单词。今天被各种课堆满了,甚至在物理实验课上睡落枕了,好难受。课余时间尝试对论文做了一个初步的定方向。

2026.3.6

背了 \(100\) 个单词。今天的课更多了,实在太夸张了,一整天都上满了。晚上回宿舍之后怒 vibe 了近 \(6\) 个小时,给 idea 写了一个初步的 demo 。

2026.3.7

今天没背单词,歇。下午把明天算法组woc讲题要用的题解写好了,还整理了一下论文代码的仓库,稍微 vibe 了一下,就等着接入数据集开始训练了。晚上和 gym 出去吃了个晚饭,回来之后也没咋学,但把 idea 又过了一遍。

2026.3.8

今天没背单词,歇。上午一早起来 vp 了一场其他地区的区域赛总决赛,看似 \(5\) 个小时,实则打到中午之后就是 trash time 。下午有校科协woc的讲题环节,去了 \(2\) 个小时出头,结束之后去稍微慢跑了一下。晚上打 cf div1+2 ,什么逆天场次,服了。今天还正式开始接入数据集开始训练了,又好好整理了一下项目仓库,打算之后再把整个 method 完善一下,然后去调参做消融看看能不能 SOTA ,呃呃,走一步看一步。

2026.3.9

今天复习了一会单词,额,甚至没完成复习计划。体育课练正手,总算对正手有点点感觉了,不容易啊。晚上训了会论文,给模型再完善了一下,基本做到了 method 的预期,之后应该就要调参,然后再之后做做消融看看了。目前这个仓库的体量越来越大了,草,跑起来越来越容易出锅了,今晚一直在修各种问题。

2026.3.10

今天终于把欠的单词复习完了,可喜可贺。学了一下大物的相对运动,学了一下离散的二元关系,辛苦我了。约了导师明天聊聊,所以今天回去把项目又整理了整理,准备了一下明天汇报要用的,但其实也就是把method和具体实现的情况准备了一下。今天按理说大训但也就做了两题,哎,有做题就行吧。

2026.3.11

今天背了 \(25\) 个单词。因为就一节早八,所以下课了就回宿舍准备去找导师的汇报。额,汇报完了感觉自己确实弄得一塌糊涂啊。现在的想法就像是把四个各自出色的模块都拼在了一起,但是看不出一个故事线来,哎,感觉差得好远啊。下午去颓废了,打了会三麻,爽赢,又开了我的第一把火星改造,可惜没玩多久我就润了。晚上去训天梯赛了,额,有点没劲,权当复健了。训完回宿舍摆了会又写了点天梯赛的题,一周 \(45\) 题的指标真夸张,呃呃,我板刷一遍得了。

反思

得明确好研究的问题是什么?文章的主旨是什么?把定义先定义清楚,损失函数是电量、能耗、吞吐量?还是把多个量考虑在一起?为什么要设计动态的奖励函数呢?是因为多个量简单加权放在一起会使得在环境改变的情况下要重新进行训练吗?数据集里包含了什么量、什么情况?我加入这个模块是为了解决什么问题才加的?是对什么情况提出的改进、创新?这是否符合故事线主体的内容呢?除此之外,实验也挺重要的,做 RL 起码得先把奖励和损失跑到收敛,然后再考虑消融,选择好 Baseline ,去看实验效果。可以先想好故事再去做实验验证,然后再根据实验的情况来判断故事能否继续进行下去。也要学会画各个模块的架构图,写算法的核心伪代码。

2026.3.12

今天依旧一直在复习单词,没背新的。离散继续学习了一下二元关系。今天还运动了一下,然后摆摆摆。晚上就写了三题把进度条推到了 12/45 ,额,闹麻啊,今天就当休息日了。凌晨被通知要准备第二天的蓝桥杯集训,我呃呃。

2026.3.13

今天有点死了。今天背了 \(75\) 个单词。一整天满课,适当复习了一下高数的多元函数微分求导啥的,离散稍微又看了点二元关系,呃呃,看不懂,还刷了点科研的帖子。晚上去打 hdu 春季联赛的热身赛,哎,好狼狈,背着个书包就去了 308 ,电脑还放在宿舍里,蠢飞了。感觉今天热身赛没想象中的那么难,做上去感觉训练效果还行,额,就这样吧,之后有机会写一下补题记录。晚上听 za 讲了点爆的事情,绷,直接没来得及洗头。回宿舍之后农了会,然后又跑了跑论文,按之前的反思改进了一下故事性,又尝试着把 reward 和 loss 跑收敛了。除此之外还补了道周练,目前进度 13/45 ,想死。加油,慢慢来吧。说起来,充电宝还不见了,哎,之后找吧。

2026.3.14

复习了一下单词。今天下午先是去打了天梯赛普及赛,额额,都感觉能满分了,最终出分 147/150 。打完比赛就摆了,享受周六假期,去了水游城。晚上回宿舍拿 ttdr 给的 api 接了 codex ,感觉效果很差啊,怎么感觉 copilot 天差地别。继续调论文,调代码,有点迷茫了,加了点新的 Baseline ,继续把代码往论文上对齐,感觉现在故事讲的确实不好,但也不知道怎么办了有点。

2026.3.15

没背单词,摆。昨晚诋毁 codex 了,今天下午一把上下文调整了一下,就非常好用,很赞,让 codex 接管仓库了。又调了调论文,调了调代码,有点迷茫了,不知道进一步该咋办。把现在弄的 demo 发老板看了,老板转手甩了我一篇论文,我大概看了眼,感觉啥都没看进去,明天再看看吧。晚上 vp 了 23年山东省赛,额,不算打星就是赛时 rk4 ,这么夸张???我躺好了。 vp 完彻底放弃抵抗了,拿 gemini 写了不少周练,直接给我的 pro 干限额了,何意味呢。周练进度 37/45 ,其中一道题 pro 还是会 T ,这么难吗,我评估在2200+ ,反正我是做不出。

2026.3.16

没背单词,摆。高数课上学完了这一节课的内容,但作业来不及。体育课又练正手,感觉又会了点,但我不会发球,打懵了。和 yc 玩了两局宝石宝可梦,第二局惜败。晚上找 zy 学长聊了聊,感觉也是挺受启发,对保研相关的了解更多了。感觉当下要干嘛越来越清晰,但以后要干嘛越来越模糊,哎哎。回宿舍之后又跑了跑消融实验什么的,整理了一下项目仓库,今天没咋学,就这样吧。

2026.3.17

今天满课,累晕。把压了两天的单词复习完了,又背了 \(50\) 个。课上把大物往后学了点,但没跟上进度,高数依旧保持进度,离散试图往下学,又睡着了,有道理吗。晚上把周练解决了。没约上老板明天见面,说下周再约,于是也没啥压力,就把现在的 demo 给 gemini review 了一下,感觉给了很有道理的建议。使劲改啊改,照这个进度,感觉都可以在下次见到老板之前把初稿赶出来了。不过坏消息是 ai 在这个周末要过期了,哎,抓紧这几天用了。

2026.3.18

今天没啥课,背了 \(20\) 个单词。回宿舍跑了跑论文,今天依旧给 gemini review 了一下,然后继续大改。晚上去打了天梯赛的排位赛,哎,挂分了又被赛制坑了,哎,算了。晚上回寝室之后,继续跑论文,这玩意咋一直在跑,完全跑不到头啊,考虑了一下,干脆多布置点任务让 codex 就这么跑着吧,我美美 hide 了。

2026.3.19

今天满课,没背单词就复习了一下。物理实验一下就弄好了,从未如此喜欢做实验。实验课刷小红书刷了一些科研 skills ,下午回去配置了一下,还没看懂怎么用,但晚上吃完饭回来大概搞明白了,感觉很好用啊,不赖。明天看看能不能和飞书联动一下,这样应该会更方便一点。另外,今天用 ARIS 还基于以往的科研进度大幅改动了之前的 idea ,初步实现了这份代码。

2026.3.20

今天满课,感觉真的要燃尽了,背了 \(40\) 个单词,几乎是给我干没神了。晚上去打 hdu 春季联赛第一场,训练时间是到 \(10:30\) ,但其实后面也有不少时间是 trash time ,但总体来说也是彻底没力气了。晚上在尝试配置 ARIS 的飞书集成,弄了很几个小时才弄好。验收了一下拿 ARIS 跑出来的前两个 demo ,感觉都一塌糊涂啊,干脆推倒重来吧。还是应该慢慢做,拿 plan mode 先做 workflow 1 ,我最担心的就是在我睡觉的时候干到上限了,我还不能开新的对话框,很难受,如果用 Claude Code 的话应该没这个问题,唯一的缺点是我穷。不过 Codex 也有 Automations 来着,之后什么时候也尝试一下。另外,原来飞书的集成是不支持我对 bot 下指令,让 bot 去做操作的,有点想之后改进一下。总体来说感觉今天的空余时间是一直在实践 autoresearch ,说实话看结果其实没昨天那么兴奋了,但还是挺期待用 plan mode 把需求都讲清楚,而且打算慢慢训练之后,情况会不会有所好转。

2026.3.21

今日无事,没背单词。额,今天一整个白天都在尝试用 ARIS 帮我头脑风暴一下好的 idea ,确实让我看到了一些创新性比较高的 idea ,有点意思,但是跑了些实验完全不通过,呃呃,只好放弃了,感觉标志着近 \(3\) 天的工作白费。为什么呢?评估了一下我最初的 idea ,发现在原来的版本反倒是当前所有版本里实验表现最好的一个,有点夸张了,因为这个实验数据也是一坨,只能说是在一堆负指标里强行找了一个接近 \(0\) 的出来。然后就又继续对着原来的继续迭代下去了,先做着看看效果吧。

2026.3.22

今天没背单词。谁懂一觉睡醒发现 Codex 还在给我跑实验,神了。感觉今天一整个下午依旧和之前一样,属于是几乎没什么效果的优化。中途去跑了 \(30\) min,表的定位坏了,实际上应该没跑满 \(5\) km,但也大差不差。晚上训了 23 年广东省赛,感觉也打得很好啊,都太强了,磕头了。今天意识到实验效果那么差,不能局限于调参,得开始进行结构性调整,只不过收效甚微。好消息是对当前定位到的问题进行了解决,在 smoke 里是解决了,但还没来得及跑 full 就睡了。哎,每天就感觉像是在玩桌游,到我的轮次了就动一下,有懂的吗。睡前部署了 Karpathy 的 autoresearch ,写了好久的提示词,确认大概没问题了就安心睡觉了,希望明天早上睡醒能看到有效果吧,哎。

2026.3.23

课上把周末积压的单词复习完了。今天拿 autoresearch 调了挺久的参数,找到了一定的问题然后针对性改了一下,不过后面发现好像也只是回到了和之前类似的水平?我不明白,但我姑且认为是在进步吧,反正至少在这一天内数据是大大进步了,距离门槛还有不少距离。今天还拿 gemini 画了画流程图,好不容易抽奖抽出一张好看的,结果是把我要的三张图画一张上去了,而且还有幻觉,我服了吧,以后手绘一下。今天部署了一堆类 autoresearch 的 repo ,但也没用,再说。今天还有一个无敌了的事情是把 codex 用超了 \(90\) 刀,真狠啊,用 token 量化的话确实是干最多事的一天。

2026.3.24

今天背了 \(60\) 个单词,还行。今天继续调参,改问题,改叙事,改配图,改各种乱七八糟的。最后发现数值提不上去,但可以用 autoresearch 混合 ARIS 用,我真神了。然后就这么在数据好转,快要到下一个阶段的时候,Codex 崩溃了???哎,不懂怎么回事,弄了半天让 copilot 调,然后又把 vsc 里的 Codex 修好了,让它帮我调,哎。啥阴,弄了我一个多小时,可能修好了,但版本可能还回退了,而且还把我环境删光了。我真不行了。难以想象古人是咋做到在没有 ai ,没有 agent 的情况下修电脑,debug 的。

2026.3.25

没背单词。天塌了,今天想删 Codex 里的一个虚拟环境,直接把我的 D 盘删光了,哎,碎了。尝试修了好久,勉强找回一些数据,哎,对话框上下文里的是最后留存的信息。去找老板发现自己啥都不知道,感觉无论是自己还是自己的demo相对于半个月前都没有什么本质提升,我决心先好好写作。总之就是,加油吧,慢慢来,不破不立。晚上去训练室睡了一觉,也没干啥,感觉现在对这种不是很感兴趣了。晚上写了写优秀团员的申请材料,然后又尝试去从头开始写一下论文的叙事。

2026.3.26

没背单词。今天试图继续在原来的基础上跑实验,但发现给内存和磁盘跑爆炸了,研究了一下发现还蓝屏了,甚至之前某天也是,哎,于是有些放弃在本地跑实验了。今天一直在研究怎么改论文的叙事,把各种定义好好想了想,明天继续吧。其实发现自己的 idea 改来改去,还是差不多,感觉就是几个模块拼起来了,哎哎,明天再努力吧。

2026.3.27

今天没背单词。今天一整天白天都挺痛苦的,感觉好累啊,想学一会课内的结果又学不进去,最终也只好刷刷 xhs ,看看有没有什么资讯了。白天也把论文又读了读,感觉也确实挺多地方不太对的,哎,也挺迷茫的。周五就是很累的一天,晚上去训练打 hdu 春季联赛 Contest 2 ,额,前面手速题,后面就被区分得不会做了,绷。回到宿舍之后,本来今天在课上对论文也 review 了挺多次的,想接着改一改的。改着改着,又想想能不能干脆从 A+B+C 砍成 A+B ,毕竟现在确实就应该大改一下。评估了一下还真行,就着手去砍了,把 C 的权重越降越低,几乎砍成 A+B 了,突然有种豁然开朗的感觉。之前的实验数据也没有明显表明 C 很有优势啊,其实,没绷住。虽然现在的版本还是没数据支撑的,但还是先把文章弄弄好,规划好之后再去想怎么写代码跑实验吧。当然要做的事情还很多,慢慢来吧,希望能在暑假左右投出去。

2026.3.28

今天没背单词。呃呃了, jyx 的电话直接让我少睡 \(2\) 小时,干脆起来 work 了。下午在学校里赏了赏花、拍了拍照,算 wlb 了吧。回宿舍之后继续 work 。晚上一边 work ,一边整理宿舍,直到打 cf 。这 cf 也是真神了吧,没话说,硬控。 trash time 之后就继续 work 了,今天也是 work 了挺多,感觉做的效果也还是可以的,满意。 23:55 的时候和 za 把 codex \(135\) 刀的额度用完了,没绷住,休息 \(5\) 分钟说是。今天给现在版本的论文重新开始跑实验了,居然效果还可以,而且也在电脑的接受范围内,感觉真是好起来了。

2026.3.29

今天没背单词。今天爸妈来学校了,依旧 wlb 。到晚上打 cf 和昨晚拿了一样的剧本,没话说。以为 Codex 坏了,因为一直 502 用不了。零点之后试验了一下发现是用不了 xhigh , high 依旧可以用,所以又开始 work 了,绷。总之今天算是久违的休息日。

2026.3.30

今天没背单词。今天有点累,高数课上学了下,感觉又跟上进度了,体育课依旧练乒乓,越来越不会的感觉,把 xsy 整不会了。回宿舍 work 了一会,珍惜可以用 xhigh 的时候。晚上太困了, 8:30 就想睡觉了,于是睡。结果闹钟也定的是 8:30 ,本来还想在 10:30 起床洗澡的,哎。不知道为什么 11:30 醒了,于是也洗不了头了,继续 work 。沉浸式 work 到了 3:30 ,现在的情况是基本把下限框定了,之后就慢慢做改进,慢慢去调吧,要做的工作还挺多的,加油,感觉还是挺光明的,总觉得比半个月前进步了不少,希望不是错觉。

2026.3.31

今天没背单词。 3 月最后一天,有点摆了,洛克王国真好玩。不过因为凌晨 work 太久了,直接烧了 \(100\) 刀,所以晚上有点顾忌没用太多,当然最后还是用了另一个 \(90\) 刀的额度。睡前研究了一下 automations ,打算试验一下,感觉又要猛烧 token 了。

2026.4.1

今天没背单词。起床看了看 automations ,感觉这个功能不赖,但我的实验是切切实实地原地踏步了十几轮,算了,就当试错了。下午发现 codex 就炸了,何意味呢,我美好的休息就这么跟我开愚人节玩笑吗?我不行了。晚上训练的时候突然想到 copilot 额度刷新了,尝试用了一下 5.3-codex xhigh ,现在感觉好笨啊,尝试性地跑了跑,感觉也没干点什么成果出来,反而又陷在了之前的死胡同里,而且现在烧的有点多,已经烧了 \(30\%\) 了。 codex 间歇性地好了一会会,抓住这个机会重新思考了一下计划,之后应该怎么做。睡前又用 copilot 按着这个计划继续往下做,额,也就 auto 一下吧,我估计一觉醒来额度就要烧没了。

2026.4.2

今天没背单词,好像有很多天没背单词了,不妙。·今天满课,挺累的,下课了想去吃 kfc 的香骨鸡,特意挑了一家有的店,结果到了发现没有了,我不行了。今天晚上终于可以用 codex 了,抓紧时间 work ,连着 review 了几轮,然后尝试去改。今天有点时间太短了,要做的事情很多,所以还不知道应该咋办,等假期弄清楚应该咋办。睡前设置了一个 automations ,期待验收。

2026.4.3

今天没背单词。终于要放假了。吃完晚饭就回宿舍 work ,今天月卡彻底没了,在多个 apikey 里来回用,最终决定都转成 codex plus ,哎,先烧着吧。工作做了不少,感觉自己每过一段时间就要重复这个流程:改写作、跑实验。呃呃了,反正实验跑出来效果一直不好,我也不是不懂了。

2026.4.4

今天也是在外面爽玩了一天。晚上回宿舍,先配好了 Claude Code ,然后再把 ARIS 接了下来。体验了一下,感觉这效果是真的好啊,总算让我体验上完全体了,愉快地工作了 \(3\) 个小时。

2026.4.5

今天好混乱啊。今天下午用 gpt5.4 指挥 cc 操作,结果后来被我查出来今天凌晨和现在操作的是两个文件夹下的同名文件。今天下午误用了我以前留存的历史文件,呃呃了,只好修修修修修。期间还发现这个 gpt 甚至回答我此前的问题,降智得也太夸张了吧。好不容易修好了就去再 review 了一下,从昨天晚上的 \(4\) 分最后改到了 \(6.5\) 分,在语言方面不会才有提升了,得补实验了。这一通又用完了一个 api ,就打算换一个,结果换了之后不知道为什么发现有问题,很懵。修了半天修好了,又试了半天,结果发现还是不能读到 repo 里内容,只能读到历史的上下文,一直都在原地打转,我真的要崩溃了。今天还感冒了,挺不舒服的,就这样吧,哎哎。

2026.4.6

今天身体恢复了一点,但修这个 Claude Code 依旧很心塞,感觉试了各种方式,也删了又装,终于在晚上修好了,然后又出了点新 bug ,又修了一会,呃呃,这啥效率。说实话主要还是中转的原因,如果是官方直连的话就可以直接用了也不至于是现在的情况。今天整体没干什么太多的工作,挺摆的就当休息了,从明天开始好好努力。睡前设置了一下 ARIS ,明天早上验收一下。

2026.4.7

假期结束之后上课的第一天,额,上课的时候学了一下物理,也复习了很多单词,虽然还有好多好多要继续背就是了。昨晚的 ARIS 压根就没跑起来,闹麻了,反正一直都是在修 Claude Code ,哈哈,修的时间比用的时间长。但不得不说,修好了之后真的好爽啊,总感觉还是更厉害一点,说不清楚,但和 Codex 交叉用真的很好用,目前论文的完成度感觉比较高了,也大概定了一下目标的 venue ,之后再继续慢慢优化吧。晚上打 cf ,依旧手速场。

2026.4.8

被老板约去谈谈了,其实本来还沾沾自喜想下周再找老板汇报的。结果老板越看感觉越不对,说我跑偏了。其实确实承认和老板说的有挺大差距,但之前几次他也没看那么细,哎,所以这次才打回重做。这一个月的工作就当作废了,感觉也是很 trash 的 A+B ,不管了。不过确实感觉老板看问题的点是和之前的 review 都不一样的点,哎,还是得多和老板沟通,又上一课。之后近期的工作应该是好好读读 paper ,然后想想怎么建模, idea 算是有了。

Section 5

2026.4.9

今天又复习了一点单词,呃呃。满课,额,但总体感觉今天比较休息,调整下状态。课上学了会物理,慢慢看吧。太无聊了又看了会综述,其实就看了 \(5\) 页,感觉也挺无聊的,不过一共有 \(35\) 页来着,也慢慢看吧。晚上看了看以往 sua 的题,收拾了一下行李,摆摆的。

2026.4.10

旅游的第一天。一早先起来跑操,然后去 416 拿板子,结果出发的时候忘记带了导致晚上去打印,哎哎。等飞机的过程中复习了一会单词,预计再复习个 \(2\) 天就能把没复习的单词复习完了,还债这一块。飞机途中把想看的视频看了,挺好挺好,飞机降落的过程因为耳压挺难受的,下飞机了还有点头疼。去酒店的路上实在有点无聊就看了 \(6\) 页论文,其实还有心思继续看下去的,但因为地铁到站了就作罢,我就说这种环境下学习效率高。晚上就吃了个饭休息休息,就到睡觉的点了。

2026.4.11

早起,比赛的赛程挺赶的。最终还是没做到,哎,一度待在金牌区,可惜后半场没过题了,哎,不然应该就金了,可惜。今天就没学习了,参观了一下港中深,真美丽啊。

2026.4.12

今天在愉快地深圳自由行,去深圳湾的路上看了 \(7\) 页论文,之后就没心思看了光顾着玩了。

2026.4.13

从深圳回校了,今天的大部分时间都在赶路,赶路的途中把这个综述看完了,慢慢来吧,作为现在新读第一篇文章。计划了一下之后要干嘛,感觉得努力一下子了。

2026.4.14

复课第一天,物理课学了一下圆周运动,其实就学了一课,效率有点低。据称在五一前后会考期中,哎,慢慢补吧,来不及了再赶进度。中午摆了摆,离散课写了一下高数作业,英语课复习了 \(100\) 个单词。晚上严肃自习了一会,对天梯赛能否满 \(175\) 有些存疑。睡前又摆了摆。今天开新坑了,准备写今年的训练日记了。

2026.4.15

数学课学了一下曲线积分,一知半解。下午做了一题,晚上训练赛,睡前又做了一题,算了算发现时间来不及了,哎哎。晚上补物理实验报告,补得死去活来。今天没读论文也没背单词,再说吧。

2026.4.16

满课,好累啊。今天课上主要都在学物理,学到了相对运动,这么一看好像也没学多少。晚上做 L2 复健,哎哎,总有种复习不完的感觉。

2026.4.17

周五了,好累啊。今天高数课上写了一下作业,额,效率好低的感觉。下课了之后回宿舍继续写天梯赛的题,晚上去打 hdu 了,但其实感觉不会做啊,我好笨啊,妈的。回宿舍了以后又继续复习复习,哎,真不懂啊,明天到底会咋样。今天还被老板问有没有空,但我能说我还没什么产出吗,哎,等天梯赛打完就好好干干科研吧,除此以外还有课内作业和备战六级和日常训练和想要锻炼身体,妈呀。

2026.4.20

上个周末摆了。绝赞复习大物中。

2026.4.21

和老板聊了聊,看样子要打工了,感觉也还可以接受吧。继续复习大物。

2026.4.22

浅浅复习了一下高数,看了微分方程、偏导数、方向导数与梯度。

2026.4.23

文盲正在歹毒地学物理中,学到转动惯量了,预计明天就可以学完了。

2026.4.24

满课+晚上训练,我要燃尽了。今天总算把物理学完了。

2026.4.25

真正学习的人是没空记录的。没绷住。今天忙了各种杂事,最后一通努力终于把物理练习册板刷了。

2026.4.26

哎哎,今天最终板刷了高数练习册的《多元函数微分学》章节,重积分比较相对粗略地过了一遍,二阶常系数线性微分方程也是又复习了一遍。本来其实还有一个小时的复习时间,结果突然发现自己有若干材料没有填,填到最后也还有好多没填,鉴定为明天高数课上再填了。今天还跑了一次 2km , 9:24 还行。

2026.4.27

今天好忙啊。我真的好累。今天跑了一次 2km 考试, 8:52 ,不错,还七分配顺了一个 1600 。数学感觉还行吧,但考得没那么好,我的问题。物理复习了一下,感觉应该来得及了。补,晚上失眠了,呃呃,哎,其实这几天压力挺大的。

2026.4.28

今天属于是满课中的满课。物理考试又是一个轻松的拿下,感觉做得比数学好多了,也确实比数学复习到位,哎,期末要引以为鉴啊。感觉定了计划以后要确保完成是有必要的。考完了以后整体挺摆的,也当休息了。晚上完成了 C++ 的实验报告。下课了之后去大活听了听 Soc 的大致规划,确实是挺感兴趣的方向吧,就是得花时间,要花时间的事情怎么那么多啊。回宿舍急头白脸打一场 div2 ,感觉又要掉分了,不会做啊。稍微阅读了一下当前手头的论文,明天再细细读一下吧。

Section 6

2026.5.3

今天陪伴 pc 和唐老师,送他们湖北后,终于抽空把现在手头的论文大概地读了一遍,然后在慢慢开始重新配环境配工作区。

2026.5.4

今天深度参与了一天婚礼,有点累了,晚上回来把环境什么的都彻底配好了,也是补上了之前删盘的窟窿,哎。

2026.5.5

把论文又重新读了一遍。

2026.5.6

上午在忙程序设计实习周的事情,晚上训练。今天决心开始写六级,最终写了一份前卷,加油。

2026.5.7

今天一整天都挺累的,状态不太好。今天白天是电装实习,额,上午拉电线感觉我还可以跟着教程一步一步来做,但下午焊板子,我真跟不上啊,神了,可能我是最慢的一个,而且我拉的还丑,有点担心明天的考试了,虽然我都还不知道要考什么。晚上回宿舍摆了会,摆累了就睡觉了,睡醒了起来又做了张前卷。我觉得我应该努力一点了,不应该颓废了。加油。

2026.5.8

电装实习的第二天。神了,上午考试锡焊少了,最后老师看不下去了,亲自动手帮我弄好了。老师人真好,太感动了,虽然不知道我的分会是多少就是了。下午不知道在干嘛,云里雾里的。晚上训练 hdu 多校,哎,感觉今天做得还行。晚上回宿舍先摆了会,然后开播双线程工作,一边 vibe 改程设实习代码,一边读论文的代码然后想创新点,我真神了吧。今晚睡前效率其实还挺高的,学习得也挺投入的,不错,感觉是假期以来重新找回状态了。

2026.5.9

今天虽然放假了,但还是早起去弄报销了,也是弄了整整一上午。下午摆了摆,看了看论文,找老板沟通了一下。原来目前当务之急是把手头这篇投出去,然后我后续的工作可以之后在这篇基础上开展,还好今天去找了一下搞清楚了情况,不然感觉又要白干了。晚上挺累的,摆了蛮久,然后开播学了一个小时高数,把曲线积分学完了,也学不下去了。同时又继续按照目前最新的要求在优化论文的算法,希望能有个好成果吧,虽然感觉这篇关系和我不大,但我确实收尾的那一个,没绷住。

2026.5.10

愉快的休息天。中午出去转了转,下午回宿舍调了会代码,注意到了一个问题告诉了老板,只不过老板没回复。晚上依旧在调代码,额,感觉瓶颈了。读了篇 GraghRAG LRP 的论文,感觉挺自然,还挺有意思的。又把论文重新通读了一遍,感觉目前来说还是掌握地比较清楚的吧。

2026.5.11

高数课写六级卷,最终前卷还剩一篇阅读没写。中午摆了会,体育课打比赛输麻了,呃呃。下午和晚上研究了一下怎么怎么改进算法设计,找了找参数,又在想怎么补充实验,哎,感觉自己晕头转向的。又读了读程设的代码,准备了一下答辩。

2026.5.12

今天满课,白天主要在改论文的算法,又把昨天剩的一篇阅读补完了。晚上在改算法和准备程设答辩双线程工作。今天都没怎么摆。

2026.5.13

忙晕了。上午程设答辩,下午听了个讲座以及改论文,训练前找老板聊了聊,这次还挺支持我的,当然也可能是因为时间比较紧张吧。晚上训练也是做题了。回宿舍又改了会论文,然后写该死的实验报告。

2026.5.14

几乎满课。今天一早起来发现昨天晚上跑的实验数据完全是反向收敛,气晕了,改了改,重跑了一遍发现从开始跑到结束只是在震荡,完全没效果,无语了。哎,最终决定把原本的代码先跑一遍,然后慢慢加模块做消融看看吧。autodl 也不知道怎么连上去,就慢慢等吧,等待。晚上看了看 24 和 25 的 jscpc ,感觉难度很大啊,也是没咋看进去,中档题好多。

2026.5.15

今天依旧满课,满中满,晚上训练 hdu ,今晚是啥逆天场次,做完签到就开摆了。今天也在慢慢跑实验,哎,感觉原来的代码实验质量也是无比堪忧啊。

2026.5.16

今天去东南比赛,热身赛季军说是,我还拿了一个 A 的一血,不错。

2026.5.17

今天正式赛,感觉打烂了,哎,我是战犯。虽然再多过一题,也只是 \(7\) 题慢的银,哎。晚上回宿舍,继续跑实验了。

2026.5.18

又上课了,好不想上课啊。高数课在学高斯公式,其实我觉得积分的这些东西都是技巧性比较强的?还挺难的吧。今天加课了一节离散实验,实验课上做上次的实验报告,同时还在跑实验。今天人工介入了一下实验进程,感觉找到了一些问题,数据也算有所好转了,虽然还是任重而道远啊,慢慢来吧。晚上打了一场 cf edu d2 。睡前订正了一下之前做的六级,还把之前没写完的阅读补完了。感觉今天整体没咋学习,明天再开始努力吧。

2026.5.19

今天课上挺摆的,啥都没干。下午回宿舍研究了一下怎么用 AutoDL ,租了个 4090 ,真不赖啊,感觉效率比我本地跑的快多了。晚上本来想学一下物理的,结果学着学着就睡着了。今天继续改代码,把现在的论文主线大概确定下来了,然后慢慢改论文的表述。感觉自己好可悲啊,上周想的哪些理论,好像都没怎么能用到当前的版本,到头来当前的版本还是在之前研究生的论文基础上改出来的,我想的模块反而大多都不太可用,闹麻了。

2026.5.20

今天下午开始工作,继续修了会论文,好好理解了一下其中的模块。晚上训练,写完签到之后继续看论文,跑了一下实验。晚上回宿舍依旧跑实验,依旧修论文,依旧读论文,其实我觉得现在的完成度真是目前为止最高的时候了,而且实验的效果也很好,真有点难以想象了,当然也确实是因为我让论文服务于实验吧。

2026.5.21

赶来赶去的一天。本来想跑操的,结果没定闹钟,但又在早八之前自然醒了?!有点离奇了。物理课没带耳机,没开声音地学了会大物。下课了去工训楼做电装实习,感觉自己就是提供情绪价值的混子。下午水课睡着了,下课了又去工训楼做电装实习,本来只想做个半成品出来,下次继续的,没想到老师居然说做到这里就可以了,这么好,突然就做完了。不过今天原定计划是好好顺一遍论文,然后再考虑一下实验的,激情工作到睡觉,感觉差不多了。

2026.5.22

今天满课,试图不睡觉,但实际上根本没做到。高数课上学了一下级数,感觉还没学啥就睡着了。其他课上学了一下大物,几乎把静电场学完了,感觉后续还有很多电磁学的东西要学啊,我觉得真的好难。晚上形策课上和回宿舍之后在写一下电装实习报告。今天中午找老板报告了一下,感觉老板还是挺满意的,毕竟我当前的实验效果也还不错。晚上在宿舍做正式实验之前的准备,先把论文里今天老板提到的问题修了一下,然后把代码重新整合了一下,便于后续实验,又审计了一下论文和代码有差异的地方,确保万无一失了也是。

2026.5.24

临阵磨枪复习了一下码蹄杯,感觉还是没那么难,感觉拿下了啊。同时为正式跑实验做了做准备。下午去打码蹄杯,炸了,心态崩了,哎,我真唐吧,为什么觉得 \(1e4\) 不能跑 \(O(n^2)\) 呢?切记 \(1s\) 跑 \(2e8\) 啊,哎。晚上继续跑实验。

2026.5.25

上午在高数课上好像一直在摆,也没学进去,我不行了。下午体育课好热啊,累晕了。回宿舍,稍微弄了会论文,跑了跑实验,就润出去当场务了。晚上回宿舍又挂机跑实验在摆,哎哎,今天好像一直在摆。写完了上周的物理实验报告,稍微学了学大物,然后继续改自己的实验。

2026.5.26

满课,课上学了会大物,写了一套六级前卷。晚上干了一会场务的活,结果最终直接取消了,没绷住,但最后还是去了聚餐。除此之外的时间,写了点乱七八糟的作业,又跑了跑实验。睡前发现了当前论文的一个可能有点严重的问题,明天得好好修一下,如果有时间的话。

2026.5.27

早起。忙碌的一天,被各种事情排满了。除此之外的时间在写电装实习报告,劳动教育报告,弄了会论文的实验,把问题大概发现了,修好了之后感觉还是有不太好的问题。

2026.5.28

早起。满课。今天依旧在写电装实习报告,预估再写一天就能写完了。今天依旧跑实验,把问题修好了,但总感觉 claim 怪怪的,去问老板,发现我确实犯错了,呃呃,急头白脸又重新删了跑实验,明天又得急头白脸地汇报了。牙好痛啊。前几天还只是有时会痛一阵,今天感觉痛一晚上了,哎哎。

2026.5.29

早起。满课。今天中午抽空去找了下老板聊了聊,感觉还是挺有启发性的。晚上在思政课训练了一下。下课了之后去第一次健身了,爬坡爬了不到半个小时,然后又放松了半个小时。回宿舍,继续做实验,原本的环境太 toy 了而且耗时太长了,改代码,结果发现实验的效果一塌糊涂啊,哎,含泪睡觉。

2026.5.30

今天先去看了牙医,说再观察观察。然后去市里到处转转了。晚上回宿舍跑实验,总算勉强跑回了改代码之前的效果,准备再继续调调看,哎,如果能同时有很多卡,感觉就可以很快地验证,很快地改了。

2026.5.31

今天一直在跑实验,感觉昨天和前天训练的跨度都太大了,所以效果其实很差,今天打算慢慢改,希望能好一点,真是有够不懂的,为什么这么难训呢。感觉这几天都没什么实质性的产出。

2026.6.1

儿童节。高数课听了会课,感觉也是有点神秘了。今天跑实验感觉,跑了一整天都是同一个结果,都是有前期大降落,后期又升回去更高了,不懂啊,好神秘,之后再继续往外推吧。晚上愉快地和 ywy 出去吃晚饭逛了一圈。回宿舍学了一下六级的翻译和写作,感觉有点太难了。继续跑实验,准备给今天的各种失败的尝试收尾了,不能在这里继续耗下去了,哎。感觉烧 token 烧的有点太多了,我怎么觉得我经不起这么耗呢。又忙了会各种报告,好烦啊。

2026.6.2

今天还学了不少?今天跑各种实验,在小的环境下一步一步外推,每个不同的环境里总有一个出问题的,呃呃了,我真的在怀疑我要不要改一点算法了。上课的时候在学物理,今天把电学的 ppt 刷完了,晚上在宿舍学了一点热学,又看了个翻译,今天还是学术了的,明天继续加油吧。

2026.6.3

今天的时间被各种乱七八糟的事情占用了,切分成了好多好多碎片。今天高数课上学习了一会热学,睡着了。其他时间主要学习了六级的翻译,我觉得还是有学到点东西的。今天跑了一天实验,怎么说呢,发现在非常标准的对称场景下,效果是显著的好的,在符合理论上的构造出来的相对更真实的场景下,效果是很平庸的,这咋办呢,我也搞不懂了。试了半天发现在原有环境上跑不出东西了,试图改改算法改改代码,但发现也没啥效果,我没招了。

2026.6.4

今天只有一节早八,没什么事,还是挺好的。今天一直在跑各种实验,又是尝试加模块,又是尝试改环境,都没啥用,有点没招了,怎么都不 work ,我想不通为什么 IPPO 的效果能这么好。今天又看了点翻译,感觉还是挺有收获的。大物也学了不少,一直学热力学,感觉都没怎么学懂啊。直到气体动理论的部分我还能接受,到热力学以后,不是高中就学过的概念,就是我不知道是啥情况的公式了,真没看懂。电磁学学到了毕奥-萨伐尔定律,这个大概知道是啥了。

2026.6.5

今天满课,搞死我了。今天看了不少翻译的,感觉又进步了一点吧。又继续往下学了点大物,但也真就一点点。这么看今天也没干啥,摆了。今天实验结果也是一塌糊涂,反正现在最终决定回到原点重新做了,哎。

2026.6.6

今天依旧在看六级的写译,感觉还是学到不少的。实验今天从头开始了,但是一天没啥进展啊,呃呃,慢慢来吧。

2026.6.7

今日休息。闹麻了,跑了一晚上,反正没有有效实验的感觉。晚上发现中中转直接变成四分之一的价钱,妈呀,开蹬。

2026.6.8

额,最要死的一天。改了算法和代码,跑出来的效果非常好,最后一看总感觉这样又是走偏了啊。不懂。乒乓球考试顺利结束了,我怎么会做这样的梦。

2026.6.9

作息回来了,虽然今天一做英语就睡着。今天都没什么改算法的动力了,感觉最近的溃败已经有点让我畏惧了。不过最后还是改了改。今天又学了会六级,其实感觉来不及复习了呃呃,从明天开始努力吧。

2026.6.10

今天感觉又是杂七杂八的事情,也没什么继续改算法的动力了,准备明天找一下老板沟通一下。今天做了半张六级前卷,看了会写作。呃呃,睡前听听力,错了 \(10\) 个,昨天我 Section C 听睡着了最后也就错了 \(7\) 个,还有人样吗?我不行了。

2026.6.11

今天把离散的第一个 ppt 看完了,感觉没那么难,大概知道都是说些啥了。今天还做了套听力,依旧错 \(9\) 个,神了。

2026.6.12

今天依旧在看写作,要考六级了,感觉啥都不会啊,没绷住。

2026.6.13

感觉六级烂完了。做实验也感觉烂完了。

2026.6.14

今天学了一下离散的集合等等,还有复数基础,感觉学的都是会的。做了会实验,感觉实验效果还挺好的,又要给我希望了吗。

2026.6.15

今天把离散的图论部分学完了,又学了点代数系统的知识,感觉也基本都是会的知识过了一遍,证明题也是我根本看不懂也没啥想看的欲望,捉摸着就看下去吧,不过有点感觉来不及复习了。

2026.6.16

今天学到群了,感觉还是能看懂一些的,但后面的格什么的就好抽象啊,感觉是前面也没学懂导致的,反正就是不想看了。做实验又出现了离奇的问题,调了调参有所改善但还是不好。今天去打扫了一下工位,获得了一个临时工作,获得了显示屏,明天椅子到了去安装一下。晚上回宿舍决定明天去找老板聊一聊,毕竟也有两周没去了,整理了一下最近几天成功的实验结果,结果又发现了一个很难绷的问题,糖丸了。

2026.6.17

今天找老板聊了聊,感觉又解答了当下关于实验的一些疑惑啊,同时也知道了后续的实验要怎么开展,=。而且感觉现在的实验做出来的效果也很好。我去,终于要迎来转机了吗。感觉最近一段时间也挺坎坷的,从之前的有负效果,改了以后一直没效果,后面又改发现走偏了,最近一周终于审视到了现在的问题重新做反而变优秀了,当前的改动也得到了老板的认可,而且现在实验的结果也比较有利,哎,希望之后能一直这么顺利吧。今天去工位安装了我的椅子,正式入驻工位,感觉在工位上学习效率很高啊,今天直接看了一晚上 ppt 把离散看完了。

2026.6.18

摆了,看了会离散。

2026.6.19

看了会离散和高数。有了实验计划以后今天做实验就比较有规划了,补了点实验,反正就一直等到厌倦,但实验效果目前来说是对的,挺好的。

2026.6.20

今天把高数过了一遍,感觉还行。依旧补实验,现在消融下来第一个模块是对的,感觉第二、三个模块效果没那么好啊,啥意思呢。

2026.6.21

今天在复习物理实验和大物和高数,哎,gemini 到期了,之后几天咋办啊。今天是端午假期最后一天,为啥感觉感冒更严重了,咋这么多天都没好,啥意思呢。近期看的科隆 major 终于告一段落了,准备安心复习了。近期实验的情况也挺好的,这几天准备稍微放一放了,感觉可以做到期末考完无缝衔接下一个阶段的任务。

2026.6.24

这几天生病了而且也忙得没啥空看,甚至都没想到要写呃呃。今天物理实验考烂了,继续加油吧。

posted @ 2026-02-23 17:21  haphyxlos  阅读(290)  评论(0)    收藏  举报