Transformer 架构变化:旋转位置编码 (RoPE)

用 $\mathbf x_i$ 表示没有位置编码的 token embedding,那么 $\mathbf q_m,\mathbf k_n,\mathbf v_n$ 的计算如下

$$ \begin{equation} \begin{aligned} \mathbf q_m&=f_q(\mathbf x_m,m)\\ \mathbf k_n&=f_k(\mathbf x_n,n)\\ \mathbf v_n&=f_v(\mathbf x_n,n) \end{aligned} \end{equation} $$

这里的 $n, m$ 表示的是不同的位置,这里假设 $\mathbf k$ 和 $\mathbf v$ 是都是位置 $n$ 的,而 $\mathbf q$ 是位置 $m$ 的,并且 $m > n$

Transformer 架构变化:RMSNorm 指南

从 2017 年 Transformer 架构被提出以来,到现在 2025 已经 8 年过去了,Transformer 架构已经发生了很多变化。比如,现如今越来越多的大模型采用的是 RMSNorm1 而不是 LayerNorm。今天这篇文章就是对 RMSNorm 的一个简单介绍,在了解 RMSNorm 之前,我们不妨先回顾一下什么是 LayerNorm

Kosaraju 算法:求解有向图的强连通分量

在做算法题练习的时候遇到了一道有趣的题目 - 1682. Flight Routes Check。要解决这一道题需要高效确定一个有向图上有多少强连通分量。在看了一下题解之后,我发现 Kosaruju 算法可以用于解决这个问题,它可以在线性时间内找到有向图的所有强连通分量。这里说的线性时间是

Python 的 2 个进程池相关 API

作为一名算法工程师,在我的工作中经常都会写各种 Python 脚本来处理大量数据,做数据清洗、信息提取等。通常情况下,这些数据的处理并不涉及竞争条件(Race Condition),而是简单的数据并行(Data Parallel),属于 CPU 密集型任务。通常情况下,这样的任务可以被抽象为 map(fn, data) 的模式

Class Hierarchy Analysis 算法: 快速生成调用图

对于 OOP 语言来说,搭建调用图的核心问题是有多态的场景下如何确定到底是哪一个方法被调用了,下面是 Java 的一些可能的函数调用 1

Static Call Special Call Virtual Call
Instruction invokestatic invokespecial invokeinterface, invokevirtual
Receiver Objects
Target Methods Static Method Constructor, Private Instance Method, Superclass Instance Method Other Instance Method
Count of Possible Target Methods 1 1 $\ge 1$ (polymorphism)
Determinancy Compile-time Compile-time Run-time

其中 Virtual Call 因为包含了多态,方法调用存在多个可能的目标方法