跳转至

终身学习

BERT 论文复现

关于我们做到了哪一步

我在网上搜到了很多 BERT 复现的项目,有博客,也有 GitHub 代码仓库等。 这些文章和代码会告诉你他们在复现 BERT,介绍 BERT 是什么,原理是什么,代码要怎么写…… 但是几乎没有人提及是否复现了论文的指标,甚至也不会放当前实现的指标出来——这就让人不得不怀疑其正确性。所以在开始之前,我们先来谈一谈正确性的问题。

ToyRL: 从零实现深度强化学习算法

简介

在看 LLM + RL 的一些论文时,发现对于一些 RL 概念 (比如 GAE) 的理解还是有所欠缺, 所以就系统地学习了一遍深度强化学习(Deep Reinforcement Learning)相关的知识。选的书是 Foundations of Deep Reinforcement Learning1.

在阅读过程中,将书中介绍的一些算法(REINFORCE、SARSA、DQN(Double DQN)、A2C、PPO)用 PyTorch 从头实现了一遍,统一整理到了开源库, 也就是今天要介绍的 ToyRL。 为了更好地配合书一起学习,当前实现尽量贴近书中的伪代码。 另外每个算法实现都在一个 Python 文件内完成,虽然有些重复代码,但是避免了代码碎片化,更便于学习。

LLM Speculative Sampling

前言

今天我们将介绍并复现 Deepmind 的一篇关于 LLM Speculative Sampling 的论文:Accelerating large language model decoding with speculative sampling1. 我们将用不到 100 行代码来复现这篇论文,并得到 2 倍以上的速度提升。

Deepseek GRPO 中的 KL Divergence

Deepseek R1 发布之后,看到了论文中 RL 的算法用的是 GRPO,而 GRPO 是在之前 Deepseek Math 的论文中被提出来的。GRPO 的目标函数如下:

\[ \begin{aligned} \mathcal{J}_{GRPO}(\theta) &= \mathbb{E}_{[q \sim P(Q), \{o_i\}_{i=1}^G \sim \pi_{\theta_{old}}(O\mid q)]} \frac{1}{G}\sum_{i=1}^G \frac{1}{|o_i|} \sum_{t=1}^{|o_i|} \Biggl\{ \min \Biggl[ \frac{\pi_\theta(o_{i,t} \mid q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t} \mid q, o_{i,<t})} \hat{A}_{i,t}, \text{clip}\Biggl( \frac{\pi_\theta(o_{i,t} \mid q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t} \mid q, o_{i,<t})}, 1 - \epsilon, 1 + \epsilon \Biggr) \hat{A}_{i,t} \Biggr] \\ &\quad - \beta \, \mathbb{D}_{KL}\left[\pi_{\theta} \parallel \pi_{ref}\right] \Biggr\} \end{aligned} \]