跳转至

Blog

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 倍以上的速度提升。

Presentia: 简单而优雅的 Presentation 模板

Why

我真的用不好 PowerPoint,Keynote 也不行,这些工具对我来说都太复杂了。 这些基于拖拽的工具有很多小的问题让我很难受,比如两段文字到底有没有对齐…… 我想要的是一个简单的工具,让我可以专注于内容,且可以自动生成美观大方的排版。 同时这些内容的源文件是 文本,这样我就可以用 Git 来做版本控制了。

对于这个问题,我的第一个解法 LaTeX 的 Beamer,第二个解法是 Typst 的 Touying。

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} \]

LLM in 2024

Image title
管窥精密机器内部核心组件 (GPT 模型的内部构造 Transformer 部分)
(From bbycroft.net/llm)

我个人对 AI(人工智能)/LLM(Large Language Model, 大语言模型) 是完全祛魅的。即使是在 ChatGPT 问世之后,即使是在 LLM 在各个领域掀起热潮的今天, 我也仍然认为这里并没有什么所谓“智能”的东西——我个人不认为现在的 LLM 会思考,不认为它能真正地创作等等。 我更倾向于将现在的 LLM 看作一个庞大而又精密的机器:庞大到包含几百亿个元件,精密到可以和人类对话并完成各种复杂的任务。 尽管如此,我仍然认为我们正处于一个人工智能的黄金时代,一个 AI 可以大方异彩,可以很大程度上改变我们的未来生活方式的时代!

zhplot: 让 Python 中文做图变得简单

Why

在日常工作的少数的场景,我需要用 Python 画一些包含中文的图,一般为了简单快捷都会使用 matplotlib。 在半分钟写完画图代码后,发现图片的文字部分一堆方框后是真的很无奈... 是的,中文字体的支持并不在很多开源库的考虑范围内,这是事实,在社区搜一下能看到一大把的图片显示中文的 issue。

我本来只是想画个图而已,但是我现在需要去搜索怎么安装中文字体,怎么让这些开源库能够找到自己安装的字体...本来半分钟搞定的事情, 现在怎么都要花个十来分钟去搜索解决方案,并做一系列字体相关的操作。 这种“小而烦”的问题有时候很影响心情,更不用说这种 Context Switch 的带来的原工作节奏扰乱。 解决这个“小而烦”的问题就是 zhplot 项目要达成的目标。