LOADING

加载过慢请开启缓存 浏览器默认开启

峰言峰语

并查集

数据结构 2025/10/6

并查集

并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素

并查集支持:

  • 查找:查询元素所属集合
  • 合并:合并两个集合

初始化

初始时,每个元素为一个集合,一个指针指向自身表示该集合由该元素代表

查询

通过给定的节点,不断沿着指针查询集合代表直到根节点

  • 路径压缩:当一个集合节点越来越多时,每次查询都可能要经过很长的链路,为此我们可以在每次查询时,将查询路径上所有节点的指针指向根节点,这样就压缩了查询的路径

合并

要合并两个集合,只需将一个集合的根节点指向另一个集合的根节点即可

在合并时,我们希望树高较小的集合合并到树高较大的集合,尽可能地减少树高,防止后续查询链路过长

阅读全文

DeepRetrieval召回

推荐系统 2025/10/5

Deep Retrieval

双塔模型将用户、物品表征为向量,线上做最近邻查找召回

Deep Retrieval把物品表征为路径,线上查找用户最匹配的路径

  1. 索引

    路径->物品列表

    物品->路径列表

  2. 预估模型

    预估用户对路径的兴趣

  3. 召回

    用户->路径->物品

索引

假设有L层节点,每层K个节点,那么一个物品就可以用路径表示如[2, 4, 1],物品可以被多个路径表示如{[2, 4, 1], [4, 1, 1]}

预估

假设有3层节点,那么一条路径可表示为path = [a, b, c]

预估用户对路径的兴趣可表示为p(a, b, c|x) = p1(a|x) × p2(b|a; x) × p3(c|a, b; x) $$ \mathbf{x} \to f_{1}(·) \to softmax \to p_{1} \to beam\;search选择出a\\ \mathbf{x} \oplus emb(a) \to f_{2}(·) \to softmax \to p_{2} \to b\\ \mathbf{x} \oplus emb(a) \oplus emb(b) \to f_{3}(·) \to sofrmax \to p_{3} \to c $$

召回

  1. 给定用户特征,召回一批路径
  2. 利用路径->物品列表索引,召回一批物品
  3. 对物品打分、排序,选出一个子集

训练

对模型的训练,先将物品表征为路径集合,模型能预测用户对一条路径的兴趣分数,如果用户点击过物品,那么对它的所有路径都应感兴趣,因此用户对物品的每条路径的分数的加和越大,模型越好

要学习物品的路径集合表征,就是要选出与物品最相关的多条路径,物品与路径的相关性分数可以由所有点击过物品的用户对该条路径的兴趣分数加和求得,相关性分数越大表征越好,同时引入正则项,避免同一条路径上物品数量过多

交替训练模型参数和物品表征

阅读全文

其他召回

推荐系统 2025/10/5

地理召回

维护一个GeoHash到优质物品的索引

召回:用户->地理位置->GeoHash->优质物品

同城召回

维护城市到优质物品的索引

召回:用户->所在或曾在城市->优质物品

作者召回

维护用户->关注作者/有交互的作者索引,作者->发布内容索引

召回:用户->感兴趣作者->发布内容

相似作者召回

维护作者->相似作者(相似计算类似ItemCF,粉丝越重合相似越高)索引

召回:用户->感兴趣作者->相似作者->发布内容

缓存召回

复用前几次精排未曝光的物品,按一定规则剔除缓存

阅读全文

曝光过滤

推荐系统 2025/10/5

曝光过滤

短时间内重复曝光可能会降低用户体验,因此在召回阶段会做曝光过滤

暴力比较召回物品是否在用户已曝光物品列表里开销过大,通常使用布隆过滤器

布隆过滤器判断物品不在集合中,则物品一定不在,判断在集合中可能误判

布隆过滤器

维护一个长度为m的二进制向量

布隆过滤器内有k个哈希函数,每个哈希函数能映射到0到m

每向过滤器加入一个物品,就将物品ID经过k个哈希函数,得到k个对应位置,将对应位置的二进制置为1

进行判断时,将物品ID经过k个哈希函数,得到的对应位置如果均为1,则判断在集合中,如果存在0,则一定不在集合中

阅读全文

CF召回

推荐系统 2025/10/4

基于物品的协同过滤ItemCF

思想

  • 如果用户喜欢一个物品,那么很有可能也喜欢和它相似的物品
  • 两个物品的受众重合度越高,两个物品就越相似
  • 在推荐时,以用户历史交互物品和目标物品的相似度为权重,对用户对历史交互物品的评分进行加权,得到用户对目标物品的打分预测,排序筛选出top-k个物品

核心

物品相似度计算:余弦相似度

部署

  • 离线计算
    1. user->item索引,记录每个用户交互的item
    2. item->item索引,计算item两两相似度取top-k作为索引
  • 线上召回
    1. user-id通过user->item索引找到last-n个物品
    2. 对每个last-n物品使用item->item索引查找top-k相似物品
    3. 计算用户对物品的兴趣分数,排序、截断

Swing

思想

  • 假如用户来自一个小圈子,由于小圈子内消息流通,所以小圈子用户同时交互两个物品,不能说明交互物品的受众重合度高
  • 反之,如果多个不相干用户同时交互两个物品,说明交互物品的受众重合度高,物品越相似
  • 对用户设置权重解决小圈子问题

核心

定义用户的重合度,如果重合度高则需要降低权重 overlap(u1, u2) = |J1 ∩ J2|, J1, J2u1, u2 物品相似度计算 $$ sim(i_{1}, i_{2}) = \sum_{u_{1} \in V}{\sum_{u_{2} \in V}{\frac{1}{\alpha + overlap(u_{1}, u_{2})}}}, \; V是i_{1}, i_{2}受众交集 $$

基于用户的协同过滤UserCF

思想

  • 用户应该会喜欢相似用户的交互物品
  • 用户交互物品的重合度越高,用户之间越相似

核心

用户相似度计算——余弦相似度

流行度偏差

如果物品流行,那么它对用户的相似度贡献应该小,反之则大;避免流行物品增大实际不大相似用户的相似度

在计算用户相似度时,对每个物品引入一个流行抑制权重

部署

与ItemCF类似,都需要离线计算索引,区别是要计算的是user->item和user->user索引

阅读全文

双塔模型

推荐系统 2025/10/4

双塔模型

构建两座塔——用户塔和物品塔,每个塔分别将用户/物品的离散/连续特征进行处理,输入模型,分别得到用户emb和物品emb

训练

Pointwise:独立地看待每个正样本、负样本,做二元分类

Pairwise:每次取一个正样本、一个负样本

Listwise:每次取一个正样本、多个负样本

正负样本选择

正样本:用户点击的物品;少部分物品具有大量点击,对负样本不公平——对正样本降采样或对负样本过采样

负样本:

  • 简单负样本

    显然,未被召回的物品是负样本,数量极大,可近似为全局采样,采样如果是均匀抽样,那么负样本大多是冷门物品会打压冷门,因此全局随机采样要非均匀抽样

    Batch内负样本,Batch内正样本通常是点击较高的,直接batch内负采样容易造成对正样本打压过度,训练时可以增加一个偏置进行纠偏

  • 困难负样本

    被粗排淘汰的物品、在精排中靠后或淘汰的物品

部署

离线计算好物品emb并存入向量数据库,在线计算(更新快)用户emb做召回

全量更新,级别全量更新权重,重新发布模型和物品emb

增量更新,小时级别更新Embedding层权重,发布新Embedding层

加入自监督学习

数据长尾问题严重,热门物品表征学习较好而冷门物品表征不够好

自监督学习应用在物品塔

先进行数据增强,同一物品的不同视图应该接近,不同的物品的视图应该远离(对比学习)

增强方法有Mask、Dropout(对多值特征按概率丢弃)、互补(特征进行分组,每个分组缺失特征填充默认值)、Mask关联特征(计算特征间的相关度、互信息,同时mask相关的特征)

在训练损失中加入自监督损失

阅读全文

推荐系统

推荐系统 2025/10/4

转化流程

分析用户开始流程转化为目标用户的行为,将之划分为不同阶段,每个阶段的加深都代表用户兴趣的深入,后续推荐系统的设计皆以此为蓝本

如短视频推荐中,存在曝光->点击->动作(点赞、收藏、评论、转发等)这样一条转化流程

推荐系统链路

  1. 召回,多通道快速获取大量候选项(千万级、亿级)
  2. 粗排,使用小模型对候选进行打分排序截断(top-k)快速获取候选(千级、万级)
  3. 精排,用大规模神经网络模型对候选进行打分排序截断(可选),这是实现精细推荐的核心(百级)
  4. 重排,对精排后的数据进行采样排序优化、多样性优化、插入广告或其他内容(数十级)

前期融合模型(在输入神经网络前就进行了特征交叉)无法在召回阶段使用

测试链路

离线实验->A/B测试(用户分流,在线测试)->全量测试

流量不足问题

生产中,推荐系统全链路以及其他各个部门可能都需要进行A/B测试,那么可能会出现流量不够分、流量不足的问题

解决方法——分层实验

将各阶段划分到层,同层实验互斥不同层之间正交(同时进行)

Holdout

取一定数量用户作为holdout用户,对其不进行任何策略优化(目的用于测算自然增长),其余用户使用策略,对比两组的各项指标

推全

新建推全层,与其他层正交

反转实验

在新的推全层上保留一个小的反转桶,使用旧策略,以长期观察策略对业务指标影响

数据存储

user emb和item emb的存储

user emb存储到KV表,通过user-id快速获取user emb

item emb通常存储到专业向量数据库

最近邻查找

给定一个查询向量q,计算每一个候选向量v与它的近邻程度(如欧式距离、内积、余弦相似度等)返回最近邻结果

ANN(近似最近邻查找)

直接计算最近邻计算开销巨大,采用先聚类/分块取得索引,查询向量先与索引进行匹配,再与索引所在聚类的其他向量做计算,减少计算开销

阅读全文

数据处理

深度学习 2025/10/4

离散特征处理

离散特征通常是可枚举的特征如类别特征,或是可推导的特征如连续自增ID,有些特征尽管在数学上是无限集合,但在实际使用过程中还是使用了有限子集,因此离散特征就是由离散值构成的有限集合

  1. 进行映射

    将不同形式的离散值映射到序号(正整数,因为0通常是作为填充值)

  2. 转成向量

    one-hot编码:序号映射为高维稀疏向量

    embedding:序号映射为稠密向量,embedding其实可以视作参数矩阵×one-hot编码

    其他编码方式:核心思路就是将序号映射为一个向量或值

连续特征处理

连续特征通常是可以直接作为模型输入的,但也需要进行一些数据处理

  1. 标准化(标准正态分布)
  2. 归一化(通常是MinMax)
  3. 鲁棒标准化,使用中位数与四分位距进行缩放
  4. 分桶,得到的桶可视为离散特征做进一步处理
  5. 函数变换
  6. 特征交叉

语义ID

语义ID是对embedding向量的量化,对于L层语义ID,每层通过聚类获得K个聚类中心,对于要量化的emb,查找当前层最近的聚类中心,它的序号即为量化后的一个索引值,将emb减去聚类中心得到残差向量进入下一层,以此类推直到结束,由此得到了量化后的语义ID,语义相近的emb在量化后在语义空间中也是相近的

阅读全文

数学技巧

数学 2025/9/30

余数性质

$$ \begin{align} (a+b) \bmod n &= (a \bmod n + b \bmod n) \bmod n \\ (a \times b) \bmod n &= (a \bmod n \times b \bmod n) \bmod n \\ a^{b} \bmod n &= (a \bmod n)^b \bmod n \end{align} $$

同余 $$ \begin{cases} \begin{align} (a - c) &\equiv (b - d) \pmod{n} \\ (a + c) &\equiv (b + d) \pmod{n} \\ (a \times c) &\equiv (b \times d) \pmod{n} \end{align}, a \equiv b \pmod{n} \; and \; c \equiv d \pmod{n} \end{cases} $$


乘法逆元

a × b ≡ 1 (mod  p),且a, p互质,则b就是a的乘法逆元,记作a−1,也可以叫做a mod  p下的倒数

有了乘法逆元就可以补充性质 $$ \frac{a}{b} \bmod p = (a \times b^{-1}) \bmod p = (a \bmod p \times b^{-1} \bmod p) \bmod p $$


求逆元

  1. 扩展欧几里得算法

    欧几里得算法:有公式gcd (a, b) = gcd (b, a mod  b),其中gcd 是最大公约数,通过辗转相除 $$ \begin{align} \gcd(a, b) &= \gcd(b, a \bmod b) \\ \gcd(b, a \bmod b) &= \gcd(a \bmod b, b \bmod (a \bmod b)) \\ &\cdots \\ \gcd(x, d) &= \gcd(d, 0) = d \end{align} $$ 当得到形如gcd (d, 0)的式子时,说明上一步中有x mod  d = 0,最大公约数为d

    扩展欧几里得算法:有公式ax + by = gcd (a, b)x, y均为整数,有如下推论 $$ \begin{align} \because &\gcd(a, b) = \gcd(b, a \bmod b) = ax + by \\ &a \bmod b = a - \lfloor\frac{a}{b}\rfloor b \\ \therefore &\gcd(b, a \bmod b) = bx^{\prime} + (a \bmod b)y^{\prime} = ax + by \\ &bx^{\prime} + (a - \lfloor\frac{a}{b}\rfloor b)y^{\prime} = ay^{\prime} + b(x^{\prime} - \lfloor\frac{a}{b}\rfloor y^{\prime}) = ax + by \\ &x = y^{\prime} \\ &y = x^{\prime} - \lfloor\frac{a}{b}\rfloor y^{\prime} \end{align} $$ 通过辗转相除 $$ \begin{align} ax + by &= \gcd(a, b) \\ bx^{\prime} + (a \bmod b)y^{\prime} &= \gcd(b, a \bmod b) \\ &\cdots \\ dx^{\prime \prime} + 0 \times y^{\prime \prime} &= \gcd(d, 0) = d \end{align} \qquad \therefore x^{\prime \prime} = 1 \quad y^{\prime \prime} \in \mathbb{Z} $$ 根据推论往上递推最终可以求得ax + by = gcd (a, b)中的x, y $$ \begin{align} &\because a \cdot a^{-1} \equiv 1 \pmod{p} \\ &\therefore a \cdot a^{-1} + kp = 1, \; k \in \mathbb{Z} \end{align} $$ 所以当gcd (a, b) = 1,求出的x即是a在模b下的逆元

  2. 费马小定理

    费马小定理:若p质数,对应任意整数a,有ap ≡ a (mod  p)

    欧拉定理:若正整数a, n互质,则aφ(n) ≡ 1 (mod  n),其中φ(n)为欧拉函数,表示在小于等于n的正整数中,与n互质的数的个数

    费马小定理是欧拉定理的特殊情况,用费马小定理求逆元 ap − 2 ≡ a−1 (mod  p) 用欧拉定理求逆元 aφ(n) − 1 ≡ a−1 (mod  n)


快速幂

快速幂的核心在于利用二进制位运算

计算ab,首先将b用二进制展开得b = x0 + 21x1 + 22x2…, xn ∈ {0, 1},由此ab = ax0 ⋅ a21x1 ⋅ a22x2

b中每有一个1,代表此位置要乘a2i,否则乘1(不变),另外,有a2i ⋅ a2i = a2i + 1

def quick_pow(base, power):
    res = 1
    while power > 0:
        if power & 1 == 1:
            res *= base
        base *= base
        power >>= 1
    return res

位运算技巧

  1. 消去最后一个1:x & (x - 1)
  2. 获取最后一个1:x & -x
  3. 找出序列中唯一出现奇数次的数:x1 ^ x2 ^ x3 ...
阅读全文

DL常用函数

深度学习 2025/9/29

1. 激活函数 (Activation)

Sigmoid

$$ \sigma(x)=\frac{1}{1+e^{-x}} $$ 说明:输出在 (0, 1);适合二分类输出(配合 BCE),但隐藏层容易发生梯度消失。 导数σ′(x) = σ(x)(1 − σ(x))


Tanh

$$ \tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} $$ 说明:输出在 (−1, 1),比 sigmoid 居中(均值为 0)常用于 RNN/隐藏层。仍有梯度消失问题。 导数$$ \frac{d}{dx}\tanh(x)=1-\tanh^2(x) $$


ReLU(Rectified Linear Unit)

ReLU(x) = max (0, x) 说明:计算简单,稀疏激活,缓解梯度消失。但负区间梯度为 0,可能出现“死神经元”。


Leaky ReLU

$$ \mathrm{LeakyReLU}(x)= \begin{cases} x,& x\ge 0\\ \alpha x,& x<0 \end{cases} $$ 通常 α = 0.01说明:负区间保有小梯度,缓解 ReLU 死区问题。


PReLU(Parametric ReLU)

$$ \mathrm{PReLU}(x)=\begin{cases} x,& x\ge 0\\ a x,& x<0 \end{cases} $$ 其中 a 为可学习参数。说明:比 Leaky 更灵活,但会增加参数。


ELU(Exponential Linear Unit)

$$ \mathrm{ELU}(x)=\begin{cases} x,& x\ge0\\ \alpha (e^x-1),& x<0 \end{cases} $$ 说明:负区间趋近于 α,能加速学习并部分居中激活。


SELU(Scaled ELU)

$$ \mathrm{SELU}(x)=\lambda\begin{cases} x,& x>0\\ \alpha(e^x-1),& x\le0 \end{cases} $$ 配套特殊初始化和网络结构可实现“自归一化”。


GELU(Gaussian Error Linear Unit)

常用近似形式: GELU(x) = x ⋅ Φ(x)  (Φ 为标准正态 CDF) 近似实现用: $$ \mathrm{GELU}(x)\approx \tfrac{x}{2}\left(1+\tanh\left[\sqrt{\tfrac{2}{\pi}}\left(x+0.044715x^3\right)\right]\right) $$ 说明:Transformer(BERT、GPT 系列)常用,表现优于 ReLU 的平滑替代。


Swish

Swish(x) = x ⋅ σ(x) 说明:平滑,有时比 ReLU/GELU 更好,特别在大模型里表现不错。


Mish

Mish(x) = xtanh (ln (1 + ex)) 说明:平滑、无界正区间,部分任务比 Swish/ELU 更优(但计算稍贵)。


Softplus(平滑 ReLU)

Softplus(x) = ln (1 + ex) 说明:可微分的 ReLU 近似;导数为 sigmoid。


Softmax(多类输出)

对于向量 z ∈ ℝK$$ \mathrm{Softmax}(z)_{i}=\frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} $$ 说明:把 logits 转为概率分布。数值稳定实现用 z − maxjzj(避免 exp 溢出)。 常用变体:Log-Softmax(用于 NLLLoss 的稳定实现)。


2. 损失函数 (Loss)

MSE(Mean Squared Error)

$$ L_{\mathrm{MSE}}=\frac{1}{n}\sum_{i=1}^n (y_i-\hat y_i)^2 $$ 说明:回归常用;对离群点敏感(平方放大误差)。


MAE(Mean Absolute Error)

$$ L_{\mathrm{MAE}}=\frac{1}{n}\sum_{i=1}^n |y_i-\hat y_i| $$ 说明:对离群点更稳健,但导数在 0 点不可导(可用 subgradient)。


Huber Loss

$$ L_\delta(a)= \begin{cases} \frac{1}{2}a^2,& |a|\le\delta\\ \delta(|a|-\tfrac{1}{2}\delta),& |a|>\delta \end{cases},\quad a=y-\hat y $$ 说明:MSE 与 MAE 的折中,常用于含异常点的回归。


Cross-Entropy(多类)

如果 y 为 one-hot, 为概率分布: L = −∑iyilog i 说明:分类任务最常用;通常与 softmax 一起使用。实现上常用 log-softmax + nll 以提高稳定性。


Binary Cross-Entropy / BCEWithLogits

对二分类,若用 logits zBCEWithLogits(z, y) = −[ylog σ(z) + (1 − y)log (1 − σ(z))] 实现提醒:用 BCEWithLogits(直接用 logits 而不是先 sigmoid)避免数值不稳定。


KL Divergence(Kullback–Leibler)

连续形式或离散形式,例如离散分布 P, Q$$ D_{KL}(P|Q)=\sum_i P(i)\log\frac{P(i)}{Q(i)} $$ 说明:VAE、知识蒸馏中常见(作为正则/约束)。非对称。


NLL(Negative Log Likelihood)

分类时给定目标类别 y 与 log-prob log p(y)LNLL = −log p(y) 常与 LogSoftmax 联用。


Hinge Loss(SVM)

Lhinge = max (0, 1 − y ⋅ f(x)) 说明:二分类与 margin 的损失,常用于传统 SVM。


Focal Loss(处理类别不平衡)

Lfocal = −(1 − pt)γlog (pt) 其中 pt 是预测概率,γ > 0 控制对困难样本的聚焦。常用于目标检测(如 RetinaNet)。


Contrastive / Triplet / InfoNCE(表示学习)

  • Triplet Loss(三元组): L = max (0, d(a, p) − d(a, n) + α) 其中 a 为 anchor,p positive,n negative,d(⋅, ⋅) 距离,α margin。
  • InfoNCE(对比学习常见)(简化): $$ L=-\log\frac{\exp(\mathrm{sim}(z,z^+)/\tau)}{\sum_{i}\exp(\mathrm{sim}(z,z_i)/\tau)} $$ sim 常为余弦相似度,τ 温度参数。

CTC Loss(连接时序分类)

用于对齐未知对齐标签(如语音识别):数学形式复杂,通常使用动态规划实现(不可直接给出单行公式)。常用框架 API(如 ctc_loss)。


3. 正则化 / 其它防过拟合手段 (Regularization)

L2 正则化(权重衰减)

ΩL2(w) = λiwi2 说明:促使参数变小,常与优化器一起实现(注意:PyTorch 的 weight_decay 与直接在 loss 加 L2 有细微实现差异)。


L1 正则化

ΩL1(w) = λi|wi| 说明:倾向稀疏权重(特征选择效果)。


Dropout

训练时对每个神经元使用 Bernoulli 随机掩码: $$ \tilde h_i = \frac{h_i \cdot r_i}{1-p},\quad r_i\sim\mathrm{Bernoulli}(1-p) $$ 说明:训练时随机丢弃,推理时按比例缩放或使用训练时的 scale。如上式为 inverted dropout(常用实现),训练-推理一致性更好。


Label Smoothing

将 one-hot 软化: $$ y^{LS}_k=(1-\epsilon)\cdot \mathbf{1}_{k=y} + \frac{\epsilon}{K} $$ 说明:防止模型过度自信,常用于分类(Transformer 中常用)。


Spectral Normalization

对层权重做谱范数规范化(常用于 GAN 的判别器),控制 Lipschitz 常数,提升稳定性。


4. 归一化 / 标准化 函数 (Normalization)

Batch Normalization(BatchNorm)

对 mini-batch 的每个特征维度 k$$ \hat x_k=\frac{x_k-\mu_k}{\sqrt{\sigma_k^2+\epsilon}},\quad y_k=\gamma_k \hat x_k + \beta_k $$ 其中 μk, σk2 为 batch 均值与方差,γ, β 可学习。说明:加速训练,允许较大学习率;小 batch 时效果变差。


Layer Normalization(LayerNorm)

对单个样本的特征维度归一: $$ \hat x=\frac{x-\mu_{\text{layer}}}{\sqrt{\sigma_{\text{layer}}^2+\epsilon}},\quad y=\gamma\hat x+\beta $$ 说明:对 RNN 和 Transformer 更稳定(与 batch size 无关)。


InstanceNorm / GroupNorm

  • InstanceNorm:对每个样本每个通道独立归一(常用于风格迁移)。
  • GroupNorm:把通道分组后做归一,适合小 batch。

Weight Normalization / RMSNorm

  • WeightNorm:对权重向量做 reparam,提高训练稳定性。
  • RMSNorm:只用 RMS 信息做归一(无需均值),计算更简单。

5. 初始化(权重初始分布)

Xavier / Glorot 初始化(均匀或正态)

针对激活函数对称(tanh): 方差设定(正态): $$ \mathrm{Var}(w)=\frac{2}{n_\text{in}+n_\text{out}} $$ 说明:保持前向/反向传播方差平稳。


He / Kaiming 初始化

针对 ReLU: $$ \mathrm{Var}(w)=\frac{2}{n_\text{in}} $$ 说明:ReLU 系列常用。


Orthogonal 初始化

令权重矩阵为正交矩阵(适用于 RNN、深层网络时稳定训练)。


6. 相似度 / 距离 函数 (Similarity / Distance)

点积(Dot product)

dot(x, y) = xy 用于注意力、向量相似度基础。


余弦相似度(Cosine)

$$ \mathrm{cosine}(x,y)=\frac{x^\top y}{|x||y|} $$ 说明:对向量长度不敏感,仅看角度方向。常用于检索/相似度评估。


欧氏距离(L2)

$$ d(x,y)=|x-y|_2=\sqrt{\sum_i (x_i-y_i)^2} $$


曼哈顿距离(L1)

d(x, y) = |x − y|1 = ∑i|xi − yi|


Mahalanobis 距离

$$ d_M(x,y)=\sqrt{(x-y)^\top S^{-1}(x-y)} $$ 其中 S 为协方差矩阵。


7. 注意力与位置编码 (Attention & PosEnc)

Scaled Dot-Product Attention

给 query Q、key K、value V$$ \mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V $$ 说明$\sqrt{d_k}$ 用于缩放以缓解点积随维度增长而变大导致 softmax 梯度消失的问题。


Multi-Head Attention(概念公式)

MultiHead(Q, K, V) = Concat(head1, …, headh)WO headi = Attention(QWiQ, KWiK, VWiV)


Sinusoidal Positional Encoding(Transformer 原始)

对位置 pos 和维度 i$$ \begin{aligned} PE_{(pos,2i)} &= \sin\left(\frac{pos}{10000^{2i/d}}\right)\\ PE_{(pos,2i+1)} &= \cos\left(\frac{pos}{10000^{2i/d}}\right) \end{aligned} $$ 说明:为序列模型提供位置信息;也可用可学习的位置编码。


8. 优化器相关(优化器更新公式与学习率调度)

SGD(带或不带 momentum)

  • SGDwt + 1 = wt − ηwL(wt)
  • Momentumvt + 1 = μvt + ηwL(wt),  wt + 1 = wt − vt + 1 其中 μ 是 momentum(惯性系数)。

Adam(自适应一阶优化器)

参数:β1, β2, ϵ $$ \begin{aligned} m_t&=\beta_1 m_{t-1} + (1-\beta_1) g_t\\ v_t&=\beta_2 v_{t-1} + (1-\beta_2) g_t^2\\ \hat m_t&=\frac{m_t}{1-\beta_1^t},\quad \hat v_t=\frac{v_t}{1-\beta_2^t}\\ w_{t+1}&=w_t - \eta \frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon} \end{aligned} $$ 说明:广泛用于 Transformer / 大模型训练。注意学习率与 weight decay 的配合(AdamW 推荐分离 weight decay)。


RMSProp / Adagrad

  • Adagrad:历史梯度平方和累计,适合稀疏梯度。
  • RMSProp:对平方梯度做指数平均,避免 Adagrad 的学习率过快衰减。

学习率调度(常见)

  • Step decay:每 k 步降低 lr(乘以 gamma)。
  • Exponential decayηt = η0ekt.
  • Cosine annealing(无/有热重启):常见于训练后期退火。
  • Warmup:训练初期线性/指数升高 lr(Transformer 常用线性 warmup + 后续衰减)。 说明:大模型常用 linear warmup + Adam + cosine decayinverse sqrt 衰减。

9. 其它常见数学工具(数值稳定性等)

LogSumExp(数值稳定的 log-sum-exp)

log ∑iexi = m + log ∑iexi − m,  m = maxixi 说明:用于 stable softmax / log-likelihood 计算,避免溢出。


Softmax with Temperature

$$ \mathrm{softmax}_\tau(z)_i=\frac{e^{z_i/\tau}}{\sum_j e^{z_j/\tau}} $$ τ < 1 使分布更尖锐,τ > 1 更平滑。常用于知识蒸馏或采样控制。


Gradient Clipping(梯度裁剪)

  • 按值裁剪gi = clip(gi, −c, c)
  • 按范数裁剪:若 |g|2 > c,则 $g\leftarrow g\cdot \frac{c}{|g|_2}$ 说明:RNN / 大学习率下防止梯度爆炸。

小结

  • 激活函数:Transformer/大模型 通常选 GELUSwish;传统 CNN 常用 ReLU/LeakyReLU
  • 损失函数:分类用 Cross-Entropy/NLL;回归用 MSE/Huber;不平衡用 Focal
  • 归一化:Transformer 用 LayerNorm;CNN 多用 BatchNorm(但小 batch 时考虑 GroupNorm)。
  • 优化器:大模型通常用 Adam / AdamW + 线性 Warmup + Cosine Decay。注意 weight decay 的实现方式(AdamW 与旧 Adam + L2 不同)。
  • 数值稳定性:softmax/log-sum-exp、BCEWithLogits、log-softmax 等稳定实现非常重要。
  • 调参实践:学习率、batch size、权重衰减、warmup 步数对大模型影响最大。
阅读全文
avatar
周文峰

疯疯癫癫,一笑一天 (笑不出来版)