duangxinBlog

记录 LLM、Agent、文章阅读与项目实践

这是这个博客的第一篇学习总结。

我搭建这个博客,不只是为了记录每天学了什么,更重要的是把学习过程变成可以回顾、可以展示、也可以继续迭代的材料。

为什么开始写

学习大语言模型和 Agent 很容易陷入“看了很多,但沉淀很少”的状态。博客可以帮我做三件事:

  • 记录:保留学习路径和关键资料。
  • 复盘:把理解不清楚的地方写出来,再逐步补齐。
  • 展示:把论文阅读、项目实践和阶段成果整理成作品集。

接下来怎么写

第一阶段先不追求复杂功能,只保证内容能够稳定发布。等文章数量增加后,再逐步优化主题、分类、搜索和阅读体验。

来源:duangxin/LLM-learing week4/week4_log.md

Flamingo: a Visual Language Model for Few-Shot Learning

Flamingo | Alayrac et al., 2022 | 【略读】

阅读重点

  • Flamingo 首次证明 few-shot 多模态 in-context learning 可行。
  • 核心思想是将冻结视觉编码器与冻结 LLM 通过跨注意力机制连接。
  • 由于工程细节和训练成本较高,重点把握它的历史定位,以及“如何把视觉信息高效注入 LLM”的思想。

笔记

  1. Flamingo 想让模型看懂图片或视频,并且只靠几个例子就学会回答新任务。它可以接收图片、视频和文字交错组成的提示,然后生成文字输出。
  2. 它的目标是把大语言模型的上下文学习能力搬到多模态任务里。这里的 few-shot 不只是文本 prompt 里的几个例子,而是图文交错上下文中的示例。
  3. Flamingo 同样冻结视觉编码器和语言模型,但和 BLIP-2 不同,它面向交错图文序列的自回归生成,并在语言模型层中插入跨模态注意力模块,让视觉信息能在多层被使用。
  4. 这篇文章和 BLIP-2 可以形成对照:BLIP-2 更强调用 Q-Former 低成本桥接冻结模型,Flamingo 更强调在 LLM 内部多层注入视觉信息和支持 few-shot 多模态上下文。
  5. Flamingo 使用网页级大规模图文数据,因此容易遇到噪声和不准确标签。它的数据清洗主要依赖基础网页过滤、图像质量过滤、显式内容过滤、部分 benchmark 去重,以及用高质量数据补充 noisy 数据。
  6. 我的质疑是:Flamingo 可以借鉴 BLIP 的 CapFilt 思路进一步清洗数据。用生成器生成更贴近图片内容的 caption,再用过滤器筛掉不匹配样本,可能有助于降低训练成本并提升泛化。

来源:duangxin/LLM-learing week4/week4_log.md

BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models

BLIP-2 | Li et al., 2023 | 【精读】

阅读重点

  • BLIP-2 是连接传统视觉语言预训练与现代 MLLM 的重要桥梁。
  • 核心是 Q-Former:在冻结视觉编码器和冻结 LLM 的前提下,用轻量连接模块实现高效多模态对齐。
  • 重点理解:Q-Former 设计、两阶段训练、冻结大模型带来的成本与性能权衡。

笔记

  1. 传统视觉语言预训练通常需要端到端联合训练大型图像模型和语言模型,成本很高。BLIP-2 的关键思路是利用现成的冻结模型:图像编码器不训练,LLM 也不训练,只训练中间的 Q-Former。
  2. Q-Former 是视觉编码器和 LLM 之间的桥梁。它用一组可学习 query 从冻结视觉编码器输出中提取与语言任务相关的信息,再把这些视觉信息变成语言模型能接收的软提示。
  3. Q-Former 包含两个共享自注意力层的 Transformer 子模块:一个用于和冻结图像编码器交互的视觉 Transformer,一个可以作为文本编码器和解码器的文本 Transformer。
  4. 第一阶段连接 Q-Former 和冻结图像编码器,让 Q-Former 学会从视觉表示中提取有用信息。第二阶段把 Q-Former 接到冻结 LLM 上,通过生成任务训练 Q-Former,让输出成为语言模型可用的视觉提示。
  5. 这篇文章里的“多模态对齐”已经不只是把图像和文本拉到同一个向量空间,而是进一步考虑:视觉表示怎样变成 LLM 可以用于生成的上下文。
  6. 冻结大模型的好处是成本低、训练稳定、复用已有能力;缺点是中间连接模块压力很大,所有跨模态适配几乎都压在 Q-Former 上。
  7. 我的质疑是:Q-Former 第一阶段学习的是图像和文字之间的匹配关系,第二阶段却要求它支持开放生成。两个阶段的目标跨度较大,第一阶段学到的东西可能不完全适合第二阶段。可以考虑增加过渡阶段,让 Q-Former 学习更通用的视觉语义表示。

来源:duangxin/LLM-learing week4/week4_log.md

BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation

BLIP | Li et al., 2022 | 【略读】

阅读重点

  • BLIP 是视觉语言统一建模的重要过渡工作,核心贡献是通过 bootstrapping 方式清洗和增强图文数据。
  • 它属于“纯视觉语言预训练”时代,和后续“接入 LLM”的 MLLM 范式之间还有一次跳跃。
  • 重点把握 CapFilt 数据清洗的思路与动机。

笔记

  1. 当时视觉语言预训练已经很强,但模型常常偏科:encoder 型模型适合理解和检索,encoder-decoder 型模型更适合生成,单个模型很难同时兼顾两类任务。
  2. 数据侧也有问题。网页 alt-text 和图片配对规模大,但噪声也大;很多网页文本并不是图片内容的准确描述。规模变大带来收益,噪声也被一起放大。
  3. BLIP 提出统一的视觉语言预训练框架,既能迁移到理解任务,也能迁移到生成任务。它要同时解决两个问题:模型架构不统一,以及网络图文对噪声太大。
  4. BLIP 采用 CapFilt 数据增强方法:Captioner 为网络图像生成合成标题,Filter 根据图像-文本匹配损失筛选与图像匹配的高质量标题,从而移除噪声标题。
  5. BLIP 提出 MED(Multimodal Mixture of Encoder-Decoder)。同一个模型可以切换三种功能:单模态编码器用于图文对比学习;图像引导文本编码器用于判断图文是否匹配;图像引导文本解码器用于看图后自回归生成文字。
  6. 从 ALBEF 到 BLIP,可以看到路线从“先对齐再融合”继续走向“理解和生成统一”。这一步很关键,因为后来的 MLLM 不只要判断图文是否匹配,还要能围绕图片生成开放回答。
  7. 我的质疑是:BLIP 的 ITM 是 matched / unmatched 二分类,但图文关系不是非黑即白。有些文本部分匹配,有些对象错了,有些属性错了。ITM 可以进一步升级为更细粒度标签,例如完全匹配、部分匹配、对象错、属性错、关系错。

来源:duangxin/LLM-learing week4/week4_log.md

Align Before Fuse: Vision and Language Representation Learning with Momentum Distillation

ALBEF | Li et al., 2021 | 【略读】

阅读重点

  • ALBEF 提出“先对齐再融合”:先让图像和文本在全局语义上对齐,再用跨模态模块做更深层的融合。
  • 它是图文对齐与深度融合之间的过渡性工作,适合作为理解 BLIP 系列演进逻辑的背景。
  • 重点理解:对比学习、跨模态融合、momentum distillation。

笔记

  1. ALBEF 的直觉是先让模型学会“图片和文字说的是同一件事”,再把两者融合起来做理解任务。多模态对齐就是把图像、文本等不同模态映射到共享空间,让模型能捕捉它们之间的语义关联。
  2. 当时一条主流路线依赖目标检测器提取图像区域特征,再和文本 token 一起送入跨模态 Transformer。这样做的问题是检测器成本高、类别有限,而且会提前压缩视觉信息;海报小字、细微表情、背景关系可能根本没被检测出来。
  3. 另一条路线是 CLIP 这种双塔对比学习。ALBEF 折中处理:先用对比学习做全局图文对齐,再通过轻量融合模块做深度交互。
  4. ALBEF 采用 12 层 ViT 作为视觉编码器,6 层 BERT 作为文本编码器,再加一个 6 层多模态编码器。图文特征在多模态编码器里通过交叉注意力融合,并配合 MLM 和 ITM 等预训练任务。
  5. 动量蒸馏(Momentum Distillation)用于稳定训练。蒸馏的直觉是让学生模型模仿教师模型输出,把较强或较稳定模型里的知识转移给当前模型。
  6. ALBEF 里的教师模型不是单独训练出来的专家,而是学生模型参数的指数移动平均。可以把学生模型理解成“每天变化很大的人”,教师模型是它过去一段时间表现的平滑版本:teacher = m * teacher + (1 - m) * student。
  7. 我的质疑是:ALBEF 认为 one-hot 标签太硬,因为一个 batch 里的其他文本不一定都是真负样本;但 soft label 也可能把本来应该区分开的样本拉近。比如两张图片都包含 “a dog”,一张是狗追球,一张是狗躺在沙发上,teacher 可能因为关键词相似而忽略动作和场景差异。

来源:duangxin/LLM-learing week3/week3_log.md

Learning Transferable Visual Models From Natural Language Supervision

CLIP | Radford et al., 2021 | 【精读】

阅读重点

  • CLIP 通过大规模图文对比学习,把图像和文本映射到统一表示空间。
  • 重点理解:双塔结构、对比学习目标、zero-shot 泛化能力。
  • 读完 CLIP 后可以略读 SigLIP,因为主流 MLLM 的视觉编码器已经逐渐从 CLIP 演进到 SigLIP 等路线。

笔记

  1. CLIP 的输入是图像和文本对,输出是它们在共享空间中的相似度。图像编码器和文本编码器分别得到向量表示,再计算相似度来判断是否匹配。
  2. 对比学习的目标是拉近正样本、推远负样本。对于一个 batch 里的 n 对图文对,正确图文对有 n 个,错误图文对有 $n^2-n$ 个。CLIP 用 softmax 和交叉熵让正确图文对的概率最大。
  3. 余弦相似度用于衡量两个向量方向是否相近,公式是 $\text{Cosine Similarity} = \frac{A \cdot B}{|A| |B|}$。结果越接近 1,表示两个向量越相似。
  4. CLIP 的预训练数据来自互联网收集的 4 亿对图文对,规模非常大。它在很多 benchmark 上表现出很强的 zero-shot 能力,但也需要警惕:预训练数据里可能包含测试集或相似图文对,这会让 zero-shot 的神奇程度打折。
  5. CLIP 和传统图像分类模型的区别是:传统模型通常只会把图片映射到训练集中已有类别,CLIP 学的是视觉概念和语言概念之间的关系。所以见到训练集中没有的新词时,它可以把词语拆解组合来推理。
  6. CLIP 使用 prompt engineering,例如在类别名前加 “a photo of a”,让文本输入更接近自然图文描述,从而提升 zero-shot 泛化。
  7. CLIP 的局限在于,它仍然很难理解深层概念,比如图片中的人是否安全、行为是否危险。继续扩大数据集未必总是现实,后续 SigLIP 通过改进损失函数等方式继续优化。
  8. SigLIP 把 CLIP 中的 softmax 损失改为 sigmoid 损失。CLIP 的 n×n 矩阵更像多分类,SigLIP 则把每个图文对判断为独立二分类,从而简化分布式训练中的损失计算。

来源:duangxin/LLM-learing week3/week3_log.md

An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

ViT | Dosovitskiy et al., 2020 | 【精读】

阅读重点

  • 视觉 Transformer 的代表作,核心思想是将图像切分为固定大小的 patch,并视作序列输入 Transformer。
  • 重点理解:patch embedding、位置编码、大规模预训练对视觉模型性能的影响。
  • 这是很多后续 MLLM 视觉编码器的起点。

笔记

  1. ViT 主要采用有监督学习。因为 ViT 缺少 CNN 那种先天的视觉归纳偏置,比如局部性和平移等变性,它需要大量带标签数据来学出“哪些 patch 组合起来才是一个物体”。
  2. 这篇论文是 CV 和 NLP 架构统一的重要节点。ViT 证明:只要数据量够大,CV 不一定非要依赖卷积核,也可以直接用 Transformer 这套通用注意力机制。
  3. CNN 的卷积操作有权重、要训练,主要用于提取局部特征;池化操作通常无权重、不训练,主要用于压缩和筛选特征。这个流程天然带有图像局部结构假设,而 ViT 刻意把图像转成序列,让 Transformer 自己学习关系。
  4. Transformer 自注意力复杂度是 $O(n^2)$,直接作用在所有像素上序列太长。因此 ViT 把图片切成 16×16 patch,用牺牲部分细粒度像素关系的方式,让 Transformer 处理图像在算力上变得可行。
  5. 如果输入图片是 224×224,patch 是 16×16,那么图片会被切成 14×14=196 个 patch,再加上一个 [CLS] token,总长度就是 197。
  6. ViT 没有采用平均池化,而是使用 [CLS] token 聚合全局信息。它不代表任何具体 patch,只作为输出位置来代表整张图片做分类。
  7. 平移不变性指目标出现在图像不同位置时,最终分类结果仍然不变;更严格地说,CNN 前面层常体现的是平移等变性,即输入平移后特征图也相应平移。Transformer 如果没有位置编码,更像在处理一个集合,对空间位置并不敏感。
  8. ViT 使用一维位置编码,因为作者没有观察到二维位置编码带来明显提升。虽然图像是二维的,但 patch 被展平为一维序列输入 Transformer,一维位置编码也能学到二维空间结构。
  9. 微调时如果输入图片分辨率更高,patch 数量会增加,位置编码长度就不匹配。ViT 用插值(Interpolation)调整位置编码来适应新的输入尺寸,这种方法简单但实用。
  10. 位置嵌入可视化显示:一维位置编码也学习到了二维空间结构,说明模型训练过程中确实捕捉到了图像的空间关系。

位置嵌入可视化

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

LLaMA: Open and Efficient Foundation Language Models

LLaMA | Touvron et al., 2023 | 【略读】

阅读重点

  • LLaMA 更贴近开源大模型实践,重点不是提出全新架构,而是在较小参数规模下用更多高质量数据训练出强模型。
  • 理解它的意义:让高性能 LLM 从“只有少数公司能玩”变得更接近研究社区和工程实践。
  • 适合作为后续读 LLaMA 2、LLaMA 3、Qwen、Mistral 等技术报告的背景。

笔记

  1. LLaMA 系列要解决的问题更偏现实工程:在推理预算更低、参数规模相对更小的条件下,通过更多数据和更好的训练配方获得高性能。
  2. 它延续了 decoder-only 自回归范式,这说明 GPT-3 之后的主线并不是频繁换掉核心结构,而是在数据、训练稳定性、注意力实现和推理效率上持续优化。
  3. LLaMA 后续框架常见的优化包括分组查询注意力(Grouped Query Attention)。直觉上,它把 Query 分成多个组共享或复用 Key/Value,从而减少计算量和显存占用,同时尽量保持性能。
  4. pre-normalization 指把 LayerNorm 放在子层前面,而不是子层输出之后。这样做可以让非常深的 Transformer 更稳定,缓解深层训练中的梯度问题。
  5. LayerNorm 会减均值、除以标准差,并带有缩放和偏置:$\text{LN}(x)=\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}},\gamma+\beta$。
  6. RMSNorm 则更简单:$\text{RMSNorm}(x)=\frac{x}{\sqrt{\mathbb{E}[x^2]+\epsilon}},\gamma$。它不减均值,也通常没有偏置,因此计算更轻,在 LLaMA 这类模型里很常见。
  7. 对我来说,LLaMA 这种技术报告的阅读价值在于看“工程取舍”:不是每次都发明新结构,而是在成本、数据、训练稳定性、开源可复现之间找到更好的平衡。

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

Language Models are Few-Shot Learners

GPT-3 | Brown et al., 2020 | 【略读】

阅读重点

  • 理解 decoder-only 架构、自回归训练、in-context learning 与 scaling law。
  • GPT-3 的意义不只是模型变大,而是展示了大模型在不改参数的情况下通过上下文完成新任务的能力。
  • 这篇更适合作为理解现代 LLM 范式的背景文章。

笔记

  1. decoder-only 结构适合文本生成任务,因为它本质上就是根据已有上下文预测下一个 token。相比 encoder-decoder,它更专注于自回归生成,也更适合大规模预训练。
  2. GPT 和 BERT 的差别可以粗略理解为:GPT 是知道过去和当前状态去预测开放未来;BERT 是知道前后文去预测被遮挡的中间内容。预测未来更难,也更依赖模型规模和数据规模。
  3. GPT-2 做 zero-shot 时,已经开始用 prompt 让模型直接适配下游任务。GPT-3 进一步展示 few-shot learning:在 prompt 里给几个例子,模型不改参数,只靠上下文“临场学习”。
  4. in-context learning 指的是模型在推理阶段通过上下文中的示例或提示适应新任务,而不是通过梯度更新去微调参数。它让大模型看起来像是在“学习”,但这种学习发生在上下文里。
  5. scaling law 关注模型性能与参数量、数据量、计算量之间的关系。GPT-3 的重要性在于,它让“扩大模型规模会带来通用能力提升”这件事变成了非常有说服力的工程路线。
  6. 论文也暴露了语言模型的局限:大型预训练语言模型缺少来自视频、现实物理交互等其他领域的经验数据,因此对世界背景的理解仍然不充分。这也是后续多模态模型和世界模型方向继续发展的原因之一。

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

Attention Is All You Need

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

阅读重点

  • Transformer 是多模态大模型和现代 LLM 的核心骨架。
  • 重点理解:Self-Attention、Multi-Head Attention、Positional Encoding、Encoder-Decoder 结构。
  • 真正要抓住的是 QKV 的直觉含义、注意力矩阵怎么来,以及为什么要 scaled dot-product。

笔记

  1. Transformer 重要,是因为它允许整个序列并行计算,不像 RNN 那样按时间步一个个处理。它真正厉害的地方是:每个 token 都可以直接看到序列中其他位置的信息,因此更容易建模长距离依赖。
  2. Self-Attention 的核心作用是让一个 token 在编码自己时,动态决定应该关注序列中的哪些 token。比如一句话里的“它”到底指代哪个名词,Self-Attention 可以通过相关性自动把更多注意力放到最相关的位置上。
  3. Q、K、V 可以类比为图书馆检索:Query 像“我现在想找什么信息”,Key 像“我这里有什么标签,适不适合被你关注”,Value 像“如果你关注我,我真正提供的内容是什么”。
  4. 注意力矩阵的计算过程是:每个 token 先线性映射得到 Q、K、V;再用 Q 和所有 K 做点积,得到相关性分数;经过 softmax 得到注意力权重;最后用这些权重对所有 V 加权求和。
  5. scaled dot-product 中除以 $\sqrt{d_k}$ 是为了训练稳定。如果向量维度很大,Q 和 K 的点积容易变得很大,softmax 会过早变尖锐,让少数位置权重接近 1,其他位置接近 0,梯度也会变小。
  6. Multi-Head Attention 的价值不是“重复算很多遍”,而是让模型在多个子空间并行学习不同关系模式。有的 head 可能关注语法,有的关注位置,有的关注语义相似度。
  7. Attention 本身不知道顺序。如果没有位置编码,“狗咬人”和“人咬狗”在 token 集合上很像,但意义完全不同。所以 Transformer 必须额外注入位置信息。
  8. Encoder 负责把输入序列编码成上下文表示,可以理解成“先读懂原文”;Decoder 负责基于已生成内容和 Encoder 信息继续生成,可以理解成“边看理解结果边写答案”。后来的 BERT 主要用 Encoder,GPT 主要用 Decoder。
  9. Transformer 的核心不是只能处理文本,而是处理一串 token 的关系。文本可以切成 token,图像可以切成 patch,音频也可以切成时间片;只要能表示成序列,就可以被 Transformer 统一处理。
0%