Week 2 学习记录(4.21 - 4.27)

来源:duangxin/LLM-learing week2/week2_log.md

文献阅读

1. Deep Residual Learning for Image Recognition

ResNet | He et al., 2015 | 【精读】

阅读重点

  • 残差连接是现代几乎所有深度网络(包括 Transformer)的基础设计
  • ViT 的内部结构、视觉编码器的训练稳定性都依赖它
  • 重点理解:为什么深层网络会退化、残差连接如何解决梯度消失问题

笔记

  1. 深层网络退化问题:随着网络深度增加,训练误差反而增大,导致性能下降。
    • 什么都不做,有时候也很重要,直接把输入 x 传到输出 y,网络只需要学会一个恒等映射(identity mapping)就行了。
    • 传统的网络结构总得训练点什么东西,不能什么都不做。
  1. resnet框架的核心思想是,不再直接让网络层学习一个期望的映射函数H(x),而是让这些层学习一个相对于输入的残差映射F(x) := H(x) - x。然后,原始的映射函数可以被重新表述为F(x) + x。
    • 这样做的好处是,如果最优的映射函数H(x)接近于输入x,那么残差函数F(x)就接近于0,网络只需要学习一个简单的零映射,这比直接学习一个复杂的恒等映射更容易。
    • 反过来说,如果H(x)与x有较大差异,网络仍然可以通过学习一个非零的残差函数F(x)来实现所需的映射。
    • 可以理解成:之前的传统网络是在进行重塑,而残差网络是在做修正,相当于打补丁操作。这样深层网络至少不会比浅层网络更差了。

2. Attention Is All You Need

Transformer | Vaswani et al., 2017 | 【精读】

阅读重点

  • 多模态大模型的”骨架”,需彻底搞懂以下模块:
    • Self-Attention
    • Multi-Head Attention
    • Positional Encoding
    • Encoder-Decoder 结构
  • 重点理解:QKV 的直觉含义、注意力矩阵的计算、为什么要 scaled dot-product

笔记

  1. 为什么 Transformer 很重要

    • Transformer 可以说是现在大模型最核心的骨架。相比 RNN 需要按时间步一个个处理,Transformer 允许整个序列并行计算,所以训练效率更高,也更容易扩展到超大规模模型。
    • 它真正厉害的地方是:每个 token 都可以直接看到序列里其他位置的信息,因此更容易建模长距离依赖。
  2. Self-Attention 是什么

    • Self-Attention 的核心作用是:让一个 token 在编码自己时,动态决定应该关注序列中的哪些 token。
    • 比如一句话里“它”这个词,到底指代前面的哪个名词,Self-Attention 就可以通过和其他词计算相关性,自动把更多注意力放到最相关的位置上。
    • 所以它本质上是在做“信息检索”:当前位置需要什么信息,就去整句里找。
  3. Q、K、V 的直觉理解

    • Query(Q)可以理解成“我现在想找什么信息”。
    • Key(K)可以理解成“我这里有什么信息,适不适合被你关注”。
    • Value(V)可以理解成“如果你决定关注我,那我真正提供给你的内容是什么”。
    • 一个很直观的类比是图书馆检索:Q 像检索词,K 像每本书的标签,V 像书里的实际内容。先拿检索词去和标签匹配,再把匹配到的内容取出来。
  4. 注意力矩阵是怎么来的

    • 对每个 token,先分别线性映射得到 Q、K、V。
    • 然后用 Q 和所有 K 做点积,得到“当前 token 和其他 token 的相关性分数”。
    • 把这些分数经过 softmax,就得到注意力权重,也就是“应该把多少注意力分给每个位置”。
    • 最后再用这些权重对所有 V 做加权求和,得到当前 token 融合上下文后的新表示。
  5. 为什么要 scaled dot-product

    • 如果向量维度很大,Q 和 K 的点积值会容易变得很大。
    • 点积一大,softmax 就会变得特别尖锐,某几个位置的权重接近 1,其他位置接近 0,这会让梯度变小,训练不稳定。
    • 所以论文里会除以 $\sqrt{d_k}$,相当于把分数缩放一下,让 softmax 不至于过早饱和。这个操作本质上是为了让训练更稳定。
  6. Multi-Head Attention 为什么有效

    • 单头注意力相当于只用一种视角看句子关系。
    • Multi-Head Attention 则是把特征拆到多个子空间里,让不同的 head 去关注不同类型的信息,比如有的 head 关注语法关系,有的关注位置关系,有的关注语义相似度。
    • 最后把多个 head 的结果拼接起来,模型就能同时从多个角度理解序列。
    • 所以多头机制的关键价值不是“重复算很多遍”,而是“让模型并行学习多种关系模式”。
  7. Positional Encoding 为什么需要

    • Attention 本身只看 token 之间的两两关系,如果不额外提供位置信息,模型并不知道谁在前谁在后。
    • 但语言是有顺序的,比如“狗咬人”和“人咬狗”词几乎一样,意思却完全不同。
    • 所以必须把位置信息注入进去。原论文使用的是正弦余弦位置编码,本质上就是给每个位置一个可区分的位置信号,让模型知道顺序信息。
  8. Encoder-Decoder 结构怎么理解

    • Encoder 负责把输入序列编码成上下文表示,可以理解成“先把原文读懂”。
    • Decoder 负责基于前面已经生成的内容和 Encoder 提供的信息,逐步生成输出,可以理解成“边看理解结果边往下写答案”。
    • 在机器翻译里,这个结构很自然:Encoder 读源语言句子,Decoder 生成目标语言句子。
    • 后来的 BERT 主要用 Encoder,GPT 主要用 Decoder,大模型的发展其实就是在这个框架上不断做取舍和专门化。
  9. 为什么说它是多模态大模型的骨架

    • 因为 Transformer 的核心不是“只处理文本”,而是“处理一串 token 之间的关系”。
    • 文本可以切成 token,图像可以切成 patch,音频也可以切成时间片,只要能表示成序列,Transformer 就能统一处理。
    • 所以后来的 ViT、GPT、LLaMA、以及很多多模态模型,本质上都还是在 Transformer 这个框架上发展出来的。

3. Language Models are Few-Shot Learners / LLaMA Technical Report

GPT-3 / LLaMA | Brown et al., 2020 / Touvron et al., 2023 | 【略读】

阅读重点

  • 理解 decoder-only 架构、自回归训练
  • in-context learning 与 scaling law
  • 现代 MLLM 的 LLM 部分均基于此范式
  • LLaMA 更贴近开源实践,建议优先读 LLaMA 2 或 LLaMA 3 技术报告

笔记

为什么要用decoder-only结构:由于文本生成任务主要是根据现有信息来预测下一个词,纯解码器专注于这一点,避免了编码器-解码器架构中不必要的复杂性和计算开销。同时,纯解码器结构更适合大规模预训练,可以更高效地利用计算资源。

  1. GPT vs BERT

    • GPT是知道之前以及现在的状态去预测开放式的未来;BERT是知道之前和之后的状态去预测被遮挡的中间状态。预测未来比预测中间更难,所以GPT的训练难度更大。而且GPT要训练出一个好的效果,必须要有一个非常大的模型和非常大的数据集,这也是为什么GPT-3有175B参数的原因。
  2. GPT-2使用in-context learning

    • GPT-2在做zero-shot任务的时候,对于下游任务,由于不改模型参数,就已经开始使用prompt了。GPT-3在这个基础上进一步发展了few-shot learning的能力,通过在prompt中提供一些示例,让模型靠上下文“临场学习”,从而在没有专门微调的情况下,仍然能够取得不错的性能。
  3. GPT-3文章里提到有局限性

    • 大型预训练语言模型缺乏来自其他领域的经验数据,比如视频或现实世界的物理交互数据,因此无法充分理解世界的各种背景信息。这也是为什么后面多模态和世界模型会成为自然的发展方向。
  4. llama系列要解决的问题更偏现实工程

    • LLaMA系列技术报告的核心创新不是在于提出了一个全新的架构,而是在相对更小参数规模下通过更多数据训练来获得更高性能。这样在推理时的预算会更低,也更适合开源社区使用。
    • llama后续的框架上的优化主要是使用了分组查询注意力(Grouped Query Attention),它的核心思想是将查询向量分成多个组,每个组独立计算注意力权重,这样可以减少计算量和内存占用,同时保持模型的性能。
  5. pre-normlization

    • 在transformer中,层归一化在feedforward之后,是对子层的输出进行归一化。
    • 在gpt以及LLAMA系列中,都使用了pre-normalization的设计,也就是把layer normalization放在子层的前面,对输入进行归一化。这种设计可以让训练更稳定,尤其是在训练非常深的模型时,可以有效缓解梯度消失问题。
  6. LayerNorm vs RMSNorm

    • LayerNorm是对每个样本的所有特征进行归一化,计算均值和标准差;RMSNorm则是只计算均方根(Root Mean Square),不计算均值。RMSNorm相对于LayerNorm来说,计算更简单,且在某些情况下可以提供更好的训练稳定性和性能。

    • LayerNorm(GPT‑2/3):去均值 + 归一化方差 + 偏置

      • $$\text{LN}(x)=\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}},\gamma+\beta$$
      • 先减均值 μ(中心化)
      • 再除以标准差 σ(单位方差)
      • 有 γ(缩放)+ β(偏置)
    • RMSNorm(LLaMA、GPT‑4):只做缩放,不移中心,无偏置

      • $$\text{RMS}(x)=\frac{x}{\sqrt{\mathbb{E}[x^2]+\epsilon}},\gamma$$
      • 不减均值,只除以“均方根 RMS”
      • 只有 γ,没有 β

知识学习

1.传梯度到底在传什么?

梯度本质上就在告诉模型:“你现在偏大了,往小改,而且改的力度大概是多少。”
损失函数只相当于最后给你一个总分,梯度相当于老师在每一段旁边写批注
“传梯度”,本质上就是:后一层把“误差责任”传给前一层,前一层再继续往前传。
模型是一个很长的处理链条:
输入 → 第1层 → 第2层 → 第3层 → 输出 → 损失
最后你只知道“结果错了多少”,但你不知道前面每一层、每一个参数到底该怎么改。梯度反传就是在回答这个问题:
“最终错了这件事,前面这个参数要负多大责任?”
如果不这样传,你就只能用一种很笨的办法:把每个参数都单独加一点、减一点,重新跑一遍模型,看损失变没变。参数一多,这几乎不可能。大模型有上亿、上百亿参数,根本试不起。

2.深度学习更像是一个工程问题,而不是理科

做一个项目有时候像是炼丹,你不知道为什么这个组合有效,为什么那个组合无效。你只能不断试错,积累经验。有时候不一定能很严谨的解释为什么某个设计有效,但是结果就是有效的。

3.梯度消失vs网络退化

梯度消失:在反向传播过程中,梯度逐层变小,导致前面层的参数更新非常缓慢,甚至停滞。
网络退化:随着网络深度增加,训练误差反而增大,导致性能下降。这是因为深层网络难以学习到有效的特征表示。
ResNet 的残差连接通过引入恒等映射,使得网络可以直接传递输入信息,缓解了梯度消失和网络退化问题。

4.为什么拟合“零”比拟合“恒等”容易?

在数学上,F(x) = 0和H(x) = x似乎只是一个位移的差别,但在神经网络的参数初始化和激活函数机制下,两者的难度完全不同。
初始化的“天性”:神经网络的权重(Weight)在初始化时通常是非常接近 0 的随机小数字。这意味着,在训练开始的那一刻,任何一层网络的天生倾向就是输出一个接近 0 的值。要让网络学习F(x)=0,它只需要把权重往 0 萎缩即可,这是符合它“本能”的。要让网络学习 H(x) = x,它必须精确地调整大量权重,使得它们能够完美抵消激活函数的非线性影响,并形成一个精确的单位矩阵。这对于随机初始化的网络来说,是一个极高难度的“技术活”。

5.下采样(Downsampling)

下采样(Downsampling)是一个在信号处理、图像处理和机器学习等领域中非常常见的概念。简单来说,它就是减少数据采样率或降低数据分辨率的过程。你可以把它理解为“抽样调查”:从一大堆数据中,按照一定的规则挑选出一部分,从而使数据的总量变少。

6.in-context learning

in-context learning(ICL)是指模型在没有显式微调的情况下,通过提供一些示例或提示(prompt)来学习和适应新任务的能力。它允许模型在推理阶段利用上下文信息来理解和完成任务,而不需要修改模型的参数。这种能力使得大型语言模型能够在面对新的任务时表现出一定的灵活性和适应性。

7.scaling law

Scaling law(缩放定律)是指在机器学习中,模型性能与模型规模(如参数数量、训练数据量等)之间的关系。通常情况下,随着模型规模的增加,性能会呈现出一定的提升,但这种提升并不是线性的,而是遵循某种特定的规律。理解和利用 scaling law 可以帮助研究人员更有效地设计和训练大型模型,以达到更好的性能。