cher1shed.的BLOG
首页项目归档照片墙音乐说说杂谈🌳 灵境友链关于
封面

刷题记录

✏️修改此篇
写作时间:2026-05-27 16:07:26
# 刷题

单选题

1.相关系数 ρxy

相关系数的取值范围是 [-1, 1]。

  • ρ = 1:完全正线性相关
  • ρ = -1:完全负线性相关
  • ρ = 0:不表示一定独立,只表示无线性相关

2.SVD矩阵

奇异值分解:

A=UΣVTA=UΣV^T A=UΣVT

‍

其中 Σ 是对角矩阵,对角线上的值就是奇异值。
矩阵的秩就是非零奇异值的个数。因为秩本质上是矩阵中线性无关信息的维度,而每个非零奇异值对应一个有效维度。

  • 若所有奇异值都非零,则矩阵满秩

  • SVD 常用于:

    • 降维
    • 去噪
    • 压缩
    • 伪逆计算

3.贝叶斯公式

P(A∣B)=P(B∣A)P(A)P(B)P(A∣B)= \frac {P(B∣A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)​

‍

其中:

  • P(A):先验概率
  • P(A|B):后验概率
  • P(¬A)=1−P(A)P(¬A)=1-P(A) P(¬A)=1−P(A)

‍

  • P(B)=P(B∣A)P(A)+P(B∣¬A)P(¬A)P(B)={P(B|A)P(A)}+{P(B|¬A)P(¬A)} P(B)=P(B∣A)P(A)+P(B∣¬A)P(¬A)

‍
‍

4. 混合精度中的 loss scaling

混合精度训练中使用 FP16 存储梯度,其表示范围较小。在反向传播时,许多很小的梯度会下溢(变成 0),因此需要使用 loss scaling 将损失放大,使得梯度落在 FP16 的安全表示范围内。

loss scaling 的做法是:
先把 loss 乘上一个较大的系数,使得反向传播得到的梯度整体变大,避免这些很小的梯度在 FP16 中下溢为 0;之后再把梯度按同样比例缩回去,不影响最终更新结果。

拓展:

  1. 混合精度训练为什么快

    • 因为 FP16 占用显存更少,计算吞吐更高,尤其在 GPU 上更明显。
  2. 为什么不用全程 FP16

    • 因为 FP16 精度和动态范围不足,容易出现梯度下溢、溢出等数值不稳定问题,所以通常采用“混合精度”。
  3. 动态 loss scaling

    • 如果缩放过大,可能又会导致溢出。
    • 所以实际训练里常用动态 loss scaling:自动调节缩放倍数,在稳定性和精度之间平衡。

5.PCA投影值

在主成分分析(PCA)中,我们需要将原始数据投影到特征向量所指向的方向上。假设我们有一个已经完成中心化处理的二维数据点x=[3,4]^T。通过计算协方差矩阵,我们得到了对应于最大特征值的第一主成分方向的单位特征向量w=[0.8,0.6]^T。请问,数据点 x 在该主成分方向上的投影值(即降维后的一维坐标)是多少?

投影值是:

z=wTxz=w^Tx z=wTx

‍

已知:

x=[34],w=[0.80.6]x=\begin{bmatrix}3\\4\end{bmatrix},\quad w=\begin{bmatrix}0.8\\0.6\end{bmatrix} x=[34​],w=[0.80.6​]

‍

代入计算:

z=[0.8, 0.6][34]=0.8×3+0.6×4=2.4+2.4=4.8z = [0.8,\,0.6] \begin{bmatrix}3\\4\end{bmatrix} = 0.8\times 3 + 0.6\times 4 = 2.4 + 2.4 = 4.8 z=[0.8,0.6][34​]=0.8×3+0.6×4=2.4+2.4=4.8

‍

所以答案是:4.8

解析:
PCA 中,把样本投影到某个主成分方向上,本质上就是用该方向的单位特征向量与样本向量做点积。

因为:

  • 主成分方向是 ( w )
  • 数据点是 ( x )
  • 投影后的一维坐标就是 ( w^T x )

这里 (w) 是单位向量,所以算出来的 4.8 就是点 x 在第一主成分方向上的标量投影长度,也就是降维后的一维表示。

拓展知识点:

  1. 为什么要先中心化
  • PCA默认分析的是“围绕均值的变化方向”。
  • 不中心化会让均值位置影响主成分结果。
  1. 投影值和投影向量的区别
  • 投影值:一个数,表示在该方向上的坐标,这里是 4.8

  • 投影向量:真正投影到直线上的那个二维向量,为

    x^=zw=4.8[0.80.6]=[3.842.88]\hat{x}=zw=4.8\begin{bmatrix}0.8\\0.6\end{bmatrix} =\begin{bmatrix}3.84\\2.88\end{bmatrix} x^=zw=4.8[0.80.6​]=[3.842.88​]

‍

  1. 如果做一维降维
  • 原来二维点

    [3,4]T[3,4]^T [3,4]T

‍

  • 降维后就变成一个数 4.8
  1. 几何意义
  • 点积 = 向量长度 × 方向夹角余弦
  • 所以它表示“x 在 w 方向上有多大分量”

6.Layer Normalization(LN)

以下关于Layer Normalization(LN)说法错误的是:

A.根据LN的位置不同可分Pre-LN和Post-LN

B.与RMSNorm相比,LN的主要区别在于去掉了减去均值的部分

C.LN首先计算每个样本的均值和方差,之后进行归一化,最后对归一化的值进行缩放和添加偏置

D.LN可在一定程度上避免梯度消失或梯度爆炸的问题,增强模型的泛化能力

错误的是:B

解析:
Layer Normalization(LN) 和 RMSNorm 的关键区别,不是“LN 去掉了减去均值的部分”,而是反过来:

  • LN 会做:

    1. 减去均值
    2. 除以标准差
    3. 再进行缩放 γ 和偏置 β

公式可写成:

y=γx−μσ2+ϵ+βy = \gamma \frac{x-\mu}{\sqrt{\sigma^2+\epsilon}} + \beta y=γσ2+ϵ​x−μ​+β

‍

  • RMSNorm 通常不做减均值,只根据均方根进行归一化,核心是保留尺度归一化而省去中心化这一步。

各选项判断:

A 正确

  • LN 在 Transformer 中按放置位置不同,常分为:

    • Pre-LN:先 LN,再进子层
    • Post-LN:子层输出后再 LN

B 错误

  • 说反了。
  • 实际上是 RMSNorm 去掉了均值中心化。

C 正确

  • 这是 LN 的标准流程:

    • 对每个样本计算均值和方差
    • 归一化
    • 再用可学习参数进行缩放和偏置

D 正确

  • LN 能稳定激活值分布,缓解训练中的梯度消失和梯度爆炸问题,在一定程度上提升训练稳定性和泛化表现。

拓展知识点

1. LN 和 BatchNorm 的区别

  • BatchNorm:按 batch 统计,依赖 batch 大小
  • LayerNorm:按单个样本的特征维度统计,不依赖 batch
  • 所以 LN 更适合 NLP 和 Transformer

2. Pre-LN 和 Post-LN 的区别

  • Pre-LN 训练通常更稳定,深层网络更常用
  • Post-LN 是早期 Transformer 常见结构,但深层时训练可能更难

3. 为什么 RMSNorm 会流行

  • 它比 LN 更简单,计算稍省
  • 在大语言模型里效果常常不错
  • 核心思想:有时只做“尺度归一化”就足够了

4. 一句速记

  • LN = 减均值 + 除标准差 + 缩放平移
  • RMSNorm = 只做幅值归一化,通常不减均值

7.狭长山谷曲面(病态曲率)

如果损失函数曲面呈现狭长的山谷形状(即在一个方向上曲率大,另一个方向上曲率小),SGD 容易发生什么现象?

SGD 容易出现的现象是:在陡峭方向来回震荡,在平缓方向前进很慢。

详细解析:
当损失函数是“狭长山谷”时,说明不同方向的曲率差别很大:

  • 曲率大的方向:梯度变化很快
  • 曲率小的方向:梯度变化很慢

这会导致 SGD 更新时:

  • 在曲率大的方向上,步子容易迈得过大,左右来回摆动、震荡
  • 在曲率小的方向上,更新又比较慢,所以整体收敛速度很低

也就是说,参数不会平稳地沿着山谷底部前进,而是像“之”字形一样不断震荡着往前走。

拓展知识点:

  1. 为什么会这样

    • SGD 的学习率对所有方向通常是统一的
    • 但不同方向最合适的步长其实不一样
    • 一个学习率很难同时兼顾“陡峭方向稳定”和“平缓方向快速前进”
  2. 会带来什么问题

    • 收敛慢
    • 容易震荡
    • 学习率稍大时甚至可能无法收敛
  3. 常见改进方法

    • Momentum:减少来回震荡,加快沿正确方向前进
    • AdaGrad / RMSProp / Adam:对不同方向自适应调整步长
    • 合理的学习率衰减也有帮助

8.SGD

SGD 是 Stochastic Gradient Descent,中文叫随机梯度下降。

它是训练机器学习、深度学习模型时最常用的优化方法之一,作用是:不断调整模型参数,让损失函数变小。

通俗理解
训练模型时,我们希望找到一组最好的参数,让预测误差尽可能小。
SGD 就像“下山找最低点”:

  • 当前位置:当前参数
  • 山的高度:损失函数值
  • 梯度:当前位置最陡的上升方向
  • 负梯度方向:下降最快的方向

所以每次参数更新都会朝着负梯度方向走一小步。

公式:

θ=θ−η∇_θL(θ)\theta = \theta - \eta \nabla\_\theta L(\theta) θ=θ−η∇_θL(θ)

‍

其中:

  • θ:模型参数η:学习率∇_θL(θ):损失函数对参数的梯度\theta:模型参数 \\ \eta:学习率\\ \nabla\_\theta L(\theta):损失函数对参数的梯度 θ:模型参数η:学习率∇_θL(θ):损失函数对参数的梯度

‍
‍

为什么叫“随机”
普通梯度下降(GD)每次都用整个训练集计算一次梯度,代价很大。
而 SGD 每次只随机取一个样本,或者实际中常说的小批量 mini-batch,来近似梯度,所以速度更快,但会有一些波动。

严格来说:

  • GD:每次用全量数据
  • SGD:每次用单个样本
  • Mini-batch SGD:每次用一小批样本
    实际深度学习里,大家口头说的 SGD,很多时候也包含 mini-batch 这种形式。

优点

  • 计算快,适合大规模数据
  • 能在线学习
  • 在深度学习中非常实用

缺点

  • 更新有噪声,容易震荡
  • 收敛路径不稳定
  • 需要合适的学习率

常见改进
在 SGD 基础上发展出了很多优化器:

  • Momentum
  • Nesterov
  • AdaGrad
  • RMSProp
  • Adam

9.KV Cache

关于KV Cache的量化压缩,以下哪种策略是错误的或存在明显缺陷的?

A.在推理过程中对KV Cache进行在线量化,每次访问都重新计算量化参数

B.采用INT8或INT4存储KV Cache,配合反量化到FP16进行注意力计算

C.使用分组量化(per-channel或per-head)平衡精度和效率

D.对Key和Value分别计算逐token的缩放因子进行动态量化

错误或明显有缺陷的是:A

解析:
KV Cache 的量化压缩目标,是减少显存占用,同时尽量不显著增加推理开销。
如果在推理过程中对 KV Cache 在线量化,并且每次访问都重新计算量化参数,会有明显问题:

  • 计算开销很大
  • 访存流程变复杂
  • 会拖慢推理速度
  • KV Cache 会被频繁读取,如果每次都重算 scale / zero-point,收益可能被额外开销抵消

所以 A 这种策略通常是不合理的,或者至少存在明显缺陷。

其余选项为什么对:

B 正确

  • 用 INT8 或 INT4 存 KV Cache,是常见压缩思路
  • 在注意力计算前反量化到 FP16/BF16,这是可行方案

C 正确

  • 分组量化,如 per-channel、per-head,能比整块统一量化保留更多精度
  • 同时计算和存储开销又比更细粒度方法更可控

D 一般可行

  • 对 Key 和 Value 分别做动态量化,甚至逐 token 设置缩放因子,虽然实现更复杂,但不是明显错误
  • 它的优点是适应不同 token 的数值分布,能减少量化误差
  • 缺点主要是元数据和计算开销增加,但不属于“明显错误”

拓展知识点:

  1. 为什么 KV Cache 要压缩
  • 自回归推理时,序列越长,KV Cache 占用越大
  • 大模型长上下文推理时,KV Cache 往往是显存瓶颈之一
  1. 量化 KV Cache 时最关心什么
  • 显存节省比例
  • 反量化额外开销
  • 对注意力精度的影响
  • 是否影响吞吐和延迟
  1. 为什么 Key 和 Value 的量化难点不同
  • Key 直接参与注意力分数计算,对误差更敏感
  • Value 影响最终加权输出,也重要,但误差传播方式不同
  • 所以很多方案会对 K/V 采用不同精度或不同量化策略

‍

多选题


‍

编程题


‍
‍

avatar

cher1shed.

青春 是一个梦 人生 如一阵春风 不经意的飘过 境界蓦然辽阔

NOW PLAYING

cover

Like 1999

Valley

RECOMMENDED

在Typora中配置图床的方法

2026-05-27 17:59:43

浅析CLAUDE.md使用方法

2026-05-29 14:43:16

Table of Contents

cover
Like 1999正在连接高可用神经云端...