字节的M3-Agent

当前的多模态Agents在实时处理视觉和听觉输入方面已有一定能力,但面临一个限制:长期记忆能力的缺失。

具体而言,现有方法在处理长视频流时面临三大挑战:

  • 身份识别混乱:基于语言描述的记忆(如"穿红衣服的男人")在长时程视频中容易产生歧义和混淆
  • 关键细节遗忘:视觉和听觉细节在文本摘要过程中丢失,跨模态关联难以建立
  • 知识无法沉淀:智能体无法从具体事件中提炼抽象知识(如"Alice喜欢早晨喝咖啡")

字节的M3-Agent要解决的问题:如何让多模态Agent具备类人的长期记忆系统,使其能够在线处理实时视频/音频流,构建一致性的实体表示,并在后续推理中有效检索和利用这些记忆?

整体架构设计:双过程并行

M3-Agent的架构类似于一个双脑系统:一个感觉脑(Memorization)持续不断地观察世界,将看到听到的一切都记下来;另一个思考脑(Control)只在被问到问题时才启动,查阅感觉脑记下的笔记,经过多轮思考后给出答案。

这两个大脑通过共享笔记本(长期记忆图)协作。感觉脑不停地往笔记本上写东西,思考脑需要时翻阅。

感觉脑是多模态专家(论文中用Qwen2.5-Omni-7B),擅长看图听声;思考脑是推理专家(论文中用Qwen3),擅长逻辑分析与决策。

长期记忆的图结构

M3-Agent以graph的形式记忆信息。

graph的储存主要又以实体为中心,比如人脸、声音、物体。

记忆节点的完整数据格式

这里先说下graph的设计。

每个记忆节点是一个JSON对象,包含以下字段:

基础字段(所有节点通用):

  • id: 字符串,唯一标识符,格式如face_alice_001event_20240801_103000voice_bob_003
  • type: 枚举值,text(文本描述)、image(人脸/物体截图)、audio(声音片段)
  • content: 字符串,具体内容。text类型为纯文本;image/audio为base64编码的二进制数据
  • embedding: 浮点数数组,长度为768或1024,用于相似度检索。不同模态可能使用不同模型生成,但映射到同一向量空间
  • weight: 浮点数,初始值通常为1.0,每次reactivate增加1.0,表示该记忆的激活频率与置信度
  • extra_data: JSON对象,包含时间戳、位置、关联ID等元数据

extra_data的具体字段:

{
  "timestamp_start": "2024-08-01T10:30:00",
  "timestamp_end": "2024-08-01T10:30:30",
  "clip_id": "clip_042",
  "location": "kitchen",
  "face_id": "alice",
  "voice_id": "alice_01",
  "object_class": "cup",
  "color": "red",
  "associated_entities": ["face_alice_001", "voice_alice_001", "obj_cup_001"],
  "derived_from": ["epi_001", "epi_005"],
  "confidence_history": [0.8, 0.85, 0.9]
}

节点的三种具体形态

每一个输入视频都可以产生多个记忆节点:有人脸、物体的,有声音的,还有文本的,其中文本又分为情景记忆和语义记忆。情景记忆即是单次发生的事实性内容,而语义记忆是可以跨多个节点的推断内容。

文本节点(情景记忆示例):

{
  "id": "epi_kitchen_042",
  "type": "text",
  "content": "Alice坐在厨房餐桌旁,右手拿起红色陶瓷杯,喝了一口咖啡,随后放下杯子,看向窗外的花园",
  "embedding": [0.12, -0.05, 0.88, ...],
  "weight": 3.0,
  "extra_data": {
    "timestamp_start": "10:30:00",
    "timestamp_end": "10:30:15",
    "clip_id": "clip_042",
    "location": "kitchen",
    "associated_entities": ["face_alice_001", "obj_red_cup_001", "voice_alice_001"],
    "memory_type": "episodic"
  }
}

图像节点(人脸示例):

{
  "id": "face_alice_001",
  "type": "image",
  "content": "base64 encoded image data...",
  "embedding": [0.23, 0.56, -0.12, ...],
  "weight": 15.0,
  "extra_data": {
    "face_id": "alice",
    "first_seen": "10:00:00",
    "last_seen": "11:30:00",
    "appearance_count": 15,
    "voice_associations": ["voice_alice_001", "voice_alice_002"]
  }
}

音频节点(说话声示例):

{
  "id": "voice_alice_003",
  "type": "audio",
  "content": "base64 encoded audio waveform...",
  "embedding": [0.45, -0.23, 0.67, ...],
  "weight": 5.0,
  "extra_data": {
    "voice_id": "alice_01",
    "timestamp": "10:30:05",
    "transcription": "这咖啡真香,早上不喝一口总觉得少点什么",
    "speaker_id": "alice",
    "clip_id": "clip_042"
  }
}

边的数据结构

graph中包含三种边:

  • 实体关联边:相同实体ID的节点相连(如某人的face_id与voice_id关联)
  • 时序边:表示事件先后顺序
  • 语义边:表示空间包含、属性从属等逻辑关系

实体关联边(人脸与声音绑定):

{
  "edge_id": "link_001",
  "source": "face_alice_001",
  "target": "voice_alice_001",
  "relation_type": "entity_link",
  "weight": 8.5,
  "created_at": "10:00:00",
  "last_activated": "10:30:05",
  "activation_count": 8
}

时序边(事件延续,时间顺序关系):

{
  "edge_id": "temp_042_043",
  "source": "epi_kitchen_042",
  "target": "epi_kitchen_043",
  "relation_type": "temporal",
  "weight": 2.0,
  "relation_detail": "sequential_clip"
}

语义边(比如空间关系):

{
  "edge_id": "sem_001",
  "source": "obj_red_cup_001",
  "target": "face_alice_001",
  "relation_type": "semantic",
  "relation_detail": "held_by",
  "weight": 3.0
}

记忆化过程

30秒Clip的处理流水线

M3-Agent中,简单粗暴把每个30秒的视频clip作为一个输入单位处理,处理过程包含:

工序1:模态分离(输入:原始视频流)

  • 视频轨道:每秒采样1-2帧,得到30-60帧图像序列
  • 音频轨道:提取30秒波形,转录为文本(ASR)

工序2:实体提取(并行处理)

  • 人脸检测:使用RetinaFace或类似工具检测每帧人脸,提取面部特征向量,通过聚类或匹配确定face_id。如果新face与库中某face相似度>0.85,判定为同一人,分配已有face_id;否则分配新ID如face_person_007
  • 声纹识别:使用ERes2NetV2等声纹模型提取音频特征,确定voice_id。同样基于相似度阈值判定是新声音还是已知声音。
  • 物体检测:使用开放词汇检测器(如OWL-ViT或Qwen2.5-Omni内置检测)识别显著物体(杯子、手机、书本等),提取视觉特征,分配object_id。

对于检测到的人脸、物体、声音等实体,可以基于embedding的快速搜索,找到这个实体是已有的实体,还是新的实体,从而实现ID的分配和节点的绑定。

工序3:关联检测(时间对齐)

  • 检查在同一时间窗口(如10:30:00-10:30:05)内是否同时出现face_id和voice_id。如果是,建立临时实体关联边,初始weight=1.0。
  • 检查物体与人的交互:如果在10:30:02检测到face_alice_001的手部区域与obj_cup_001有重叠,建立语义边held_by,weight=1.0。

工序4:记忆生成(文本描述)

  • 将30帧图像+音频转录文本输入Qwen2.5-Omni
  • 生成情景记忆:详细描述这30秒内发生的具体动作与对话,如"Alice在10:30:05拿起红色杯子说'咖啡真香',10:30:10放下杯子"
  • 生成语义记忆:提取抽象知识,如"Alice喜欢喝黑咖啡"、"Alice有红色陶瓷杯"

语义记忆在每个clip处理时即时生成,不是事后批量总结。

工序5:入库与关联

  • 将生成的节点存入图数据库
  • 执行refresh_equivalences():检查新节点与现有节点的相似度,如果文本描述相似度>0.9(使用文本embedding计算),判定为同一事件的延续,增加旧节点weight而不是创建新节点

跨Clip事件处理的详细机制

场景:Alice从10:00:00开始喝咖啡,持续到10:02:00,跨越4个clips(clip_001到clip_004)。

处理流程:

Clip 001(10:00:00-10:00:30):

  • 生成Node epi_001: "Alice开始喝咖啡,拿起红色杯子"
  • weight=1.0
  • 生成Node sem_001: "Alice喜欢喝咖啡"
  • weight=1.0

Clip 002(10:00:30-10:01:00):

  • 生成临时Node epi_002_temp: "Alice继续喝咖啡,看着窗外"
  • 调用search_node(query="Alice喝咖啡"),检索到epi_001相似度0.95
  • 判定为同一事件延续:
    • 不创建新的独立情景节点(或创建但标记为关联)
    • Reactivate epi_001,weight增加至2.0
    • 创建时序边 epi_001epi_002(如果保留clip级节点)或简单增加weight
    • 更新sem_001,weight增加至2.0(确认"喜欢咖啡"这一知识)

Clip 003与004:

  • 重复上述过程
  • epi_001的weight最终达到4.0,表示该记忆被4个clips确认
  • sem_001的weight同样累积,表示知识的置信度随观察次数增加

数据结构表现:

{
  "id": "epi_coffee_event",
  "type": "text",
  "content": "Alice在厨房喝咖啡(多clip聚合描述)",
  "weight": 4.0,
  "extra_data": {
    "clips_involved": ["clip_001", "clip_002", "clip_003", "clip_004"],
    "time_range": "10:00:00-10:02:00",
    "sub_events": [
      {"clip": "clip_001", "action": "开始喝", "timestamp": "10:00:05"},
      {"clip": "clip_002", "action": "继续喝", "timestamp": "10:00:35"},
      {"clip": "clip_004", "action": "喝完", "timestamp": "10:01:55"}
    ]
  }
}

单Clip多事件处理

场景:10:30:00-10:30:30内,Alice同时做三件事:跑步机上跑步、喝水、听音乐。

处理策略:

  • 不强制切分30秒clip,而是生成多个节点记录并行事件:

生成的节点集合:

  1. epi_run_042: "Alice在跑步机上跑步,配速8km/h",timestamp=10:30:00-10:30:30
  2. epi_drink_042: "Alice拿起水瓶喝了一口水",timestamp=10:30:15-10:30:20
  3. epi_music_042: "背景播放爵士音乐",timestamp=10:30:00-10:30:30
  4. face_alice_042: Alice面部图像(贯穿整个clip)
  5. voice_alice_042: Alice说话声"这音乐不错",timestamp=10:30:25

关联建立:

  • 所有节点extra_data.clip_id都指向"clip_042"
  • 所有节点的associated_entities都包含face_alice_042
  • 通过时间戳范围隐式表示并发:epi_run_042epi_drink_042在10:30:15-10:30:20重叠

查询时的并发检测:

当用户问"Alice跑步时做了什么",系统:

  1. 找到epi_run_042(时间范围10:30:00-10:30:30)
  2. 查找同一clip内其他节点
  3. 发现epi_drink_042(时间范围10:30:15-10:30:20)落在跑步时间范围内
  4. 返回"Alice边跑步边喝水"

实体关联与冲突解决

实体关联边的建立过程

初始关联(Clip 1):

  • 检测到face_alice_001(新人脸,weight=1)
  • 检测到voice_alice_001(新声音,weight=1)
  • 时间重叠:两者在10:00:00-10:00:05同时出现
  • 建立边:
    {
      "source": "face_alice_001",
      "target": "voice_alice_001",
      "relation_type": "entity_link",
      "weight": 1.0,
      "first_seen": "10:00:00"
    }

后续确认(Clip 5):

  • 再次检测到face_alice_001voice_alice_001同时出现
  • 找到已有边,执行reactivate
  • weight增加至2.0

多次确认后(Clip 20):

  • weight累积到8.0
  • 系统高置信度判定:这个声音确实属于这张脸

错误纠正的详细例子

错误场景:

  • Clip 3(光线昏暗):voice_alice_001被错误匹配到face_bob_001(Bob也在场,系统误识别)
  • 建立错误边:
    {
      "source": "face_bob_001",
      "target": "voice_alice_001",
      "weight": 1.0
    }

纠正过程:

  • Clip 4:系统再次检测到voice_alice_001,这次与face_alice_001同时出现(正确关联)

  • 建立/强化正确边:

    {
      "source": "face_alice_001",
      "target": "voice_alice_001",
      "weight": 1.0  // 新边或从已有边增加
    }

  • Clip 5-20:在后续15个clips中,voice_alice_001face_alice_001共同出现15次,与face_bob_001仅共同出现1次(初始错误)

  • Weight对比:

    • 正确边weight = 16.0
    • 错误边weight = 1.0

冲突解决:

当系统需要回答"这个声音是谁"时:
1. 检索voice_alice_001关联的所有face节点
2. 发现两个候选:face_alice_001(weight=16)和face_bob_001(weight=1)
3. 选择weight更高的face_alice_001
4. 错误边因长期未被激活,weight不增加,逐渐被系统忽略(或定期清理时删除)

边界情况:
如果错误关联被系统性重复使用(如用户反复问"Bob在说话吗"而系统基于错误边回答"是"),则错误weight也会累积,导致错误固化。文献假设此类情况较少,依赖正确信息的统计显著性压倒错误。

物体识别的ID分配机制

新物体vs已有物体的判定流程

场景:检测到红色杯子。

步骤1:特征提取

  • 提取杯子的视觉特征向量emb_cup_new(使用CLIP或DINOv2)

步骤2:相似度检索

  • 调用search_node(embedding=emb_cup_new, type="image", object_class="cup")
  • 检索记忆库中所有object_class为"cup"的image节点
  • 计算余弦相似度:
    • obj_red_cup_001(Alice的红杯):相似度0.92
    • obj_blue_cup_001(Bob的蓝杯):相似度0.45
    • obj_red_cup_002(办公室的红杯):相似度0.88

步骤3:阈值判定

  • 设定阈值(假设为0.90):
    • 0.92 > 0.90 → 判定为已有物体obj_red_cup_001
    • 0.88 < 0.90 → 判定为不同物体(即使都是红色杯子,但纹理/形状差异足够大)

步骤4:更新或创建

  • 已有情况:
    • Reactivate obj_red_cup_001,weight += 1
    • 添加新的时间戳到extra_data.appearance_history
    • 建立与当前face节点(Alice)的语义边used_by
  • 新物体情况(假设相似度都<0.90):
    • 分配新ID:obj_red_cup_003
    • 创建新节点,weight=1.0
    • 建立与当前face节点的边

跨天物体的追踪例子

Day 1:Bob送Alice红杯子

  • 生成obj_red_cup_001,建立语义边gift_from指向face_bob_001
  • 生成语义记忆sem_001: "Bob送了Alice一个红色杯子"

Day 30:红杯子再次出现

  • 检测到红色杯子,特征匹配成功(相似度0.91)
  • Reactivate obj_red_cup_001,weight增加
  • 新时间戳加入extra_data

Day 60:用户问"Bob送的那个杯子长什么样"

  • Control过程解析查询:
    1. search.node(query="Bob") → 找到face_bob_001
    2. 查找与face_bob_001关联的语义记忆 → 找到sem_001("Bob送杯子")
    3. sem_001通过derived_from或语义边关联到obj_red_cup_001
    4. 返回obj_red_cup_001的content(图像base64)和描述(红色、陶瓷、特定纹理)

控制过程与检索详解

算法伪代码:

输入: 用户问题 q, 长期记忆 D, 控制策略 π_θ
输出: 最终答案

对于轮次 t = 1 到 H(最大轮数):
    1. π_θ 生成响应,包含:推理过程 reasoning、动作 action、参数 argument
    2. 如果 action == [Search]:
        - 使用 argument 查询记忆 D
        - 可调用 search.node(检索人物/物体)或 search.clip(检索事件片段)
        - 将检索结果追加到上下文
    3. 如果 action == [Answer]:
        - 返回答案内容,终止过程

算法流程的详细展开

Algorithm 1的完整执行示例:

用户问题:"认证专家检查完Led Zeppelin专辑上的墨迹后做了什么?"

初始状态:
- 记忆库D包含30个clips的相关记忆
- 对话历史τ初始为空
- 最大轮数H=5

Round 1:

  • π_θ接收(q="认证专家检查完墨迹后做了什么", D, τ=空)
  • 生成:
    • reasoning: "用户问的是认证专家在检查墨迹后的下一个动作。我需要先找到'检查墨迹'这个事件,然后查找紧随其后的事件。"
    • action: [Search]
    • argument: "认证专家 检查 墨迹 Led Zeppelin专辑"
  • 执行search.clip(query="认证专家 检查 墨迹")
  • 检索结果:返回clip_015,包含事件"他比较了笔迹"
  • 更新τ:加入Round 1的推理与检索结果

Round 2:

  • π_θ接收(q, D, τ=包含clip_015的信息)
  • 生成:
    • reasoning: "已找到检查墨迹的事件,接下来需要确认这个动作是否就是用户问的事件之后发生的,还是需要更多上下文。"
    • action: [Search]
    • argument: "认证专家 比较笔迹 接下来"
  • 执行search.node或继续search.clip确认时序
  • 检索结果:确认"比较笔迹"是在"检查墨迹"之后立即发生的动作

Round 3:

  • π_θ生成:
    • reasoning: "已确认:检查墨迹后的动作是比较笔迹。我有足够信息回答。"
    • action: [Answer]
    • argument: "认证专家在检查完墨迹后比较了笔迹。"
  • 终止,返回答案

search.node与search.clip的粒度对比

维度 search.node search.clip
检索对象 单个记忆节点(人脸、物体、具体描述) 30秒记忆片段(包含该时间段所有节点)
返回内容 Top-k个节点及其embedding相似度分数 Top-k个clip的ID及其时间范围
使用场景 查找特定人物、物体、或精确记忆条目 定位时间段、获取场景上下文、浏览某时刻的所有事件
查询输入 文本、图像embedding、或音频embedding 主要是文本查询
示例查询 "Alice的脸"、"红色杯子"、"咖啡相关描述" "10:30左右发生了什么"、"认证专家检查墨迹的时刻"

协同使用示例:

  1. 先用search.clip("认证专家 墨迹")定位到clip_015
  2. 再用search.node("认证专家", clip_filter="clip_015")在clip内查找具体人物节点

训练策略与数据详情

记忆化过程(Qwen2.5-Omni)的训练

训练数据:

  • 500个长视频,切分为26,943个30秒clips
  • 每个clip的人工标注包括:
    • 情景记忆文本(详细描述)
    • 语义记忆文本(抽象知识)
    • 人脸与声音的ID标注(用于监督实体关联)

训练格式(ChatML格式):

{
  "messages": [
    {
      "role": "system",
      "content": "You are a memorization agent. Process the video and audio to generate episodic and semantic memories."
    },
    {
      "role": "user",
      "content": [
        {"type": "video", "video_path": "clip_042.mp4"},
        {"type": "audio", "audio_path": "clip_042.wav"}
      ]
    },
    {
      "role": "assistant",
      "content": {
        "episodic_memory": "Alice坐在厨房餐桌旁,右手拿起红色陶瓷杯...",
        "semantic_memory": ["Alice喜欢喝咖啡", "Alice有红色陶瓷杯"],
        "entities": [
          {"type": "face", "id": "alice", "bbox": [100, 200, 300, 400]},
          {"type": "object", "class": "cup", "color": "red", "id": "cup_001"}
        ]
      }
    }
  ]
}

控制过程(Qwen3)的RL训练

奖励函数设计:

  1. 格式奖励:检查输出是否包含reasoning、action、argument三部分,结构正确得1分,否则0分。
  2. 检索正确性奖励:评估search动作是否检索到了包含答案相关信息的节点/clip。使用GPT-4o作为评判器,判断检索结果与问题的相关性,得分0或1。
  3. 答案正确性奖励:最终答案与标准答案的匹配度。使用GPT-4o或规则匹配(完全匹配得1分,部分匹配0.5分,错误0分)。

GRPO训练细节:
- Group size:1024(rollouts.n=1024)
- 对每个问题采样1024条推理轨迹
- 计算组内相对奖励(每条轨迹的reward减去组内平均reward)
- Actor学习率:1e-6(极小,防止破坏预训练权重)
- PPO epochs:4(对1024条轨迹进行4轮优化)
- KL散度惩罚:防止策略偏离太远

训练数据(2,736个QA对)示例:

{
  "question": "认证专家检查完Led Zeppelin专辑上的墨迹后做了什么?",
  "answer": "比较了笔迹",
  "evidence_clips": ["clip_015"],
  "reasoning_steps": [
    "定位到认证专家检查墨迹的时刻",
    "查找该时刻之后的动作",
    "确认动作是'比较笔迹'"
  ],
  "type": "multi-hop"
}

分离训练的原因验证

记忆化用Qwen2.5-Omni的原因:

  • 需要同时处理视频帧(Vision Transformer)和音频(Audio Encoder)
  • 支持多模态输入的tokenization(图像patch + 音频频谱图)
  • 预训练已具备基础的多模态理解能力

控制用Qwen3的原因:

  • 纯文本输入(检索结果以文本形式传入)
  • 需要强大的CoT(Chain-of-Thought)推理能力
  • 支持ReAct范式(Reasoning + Action)
  • RL训练更高效(不需要处理多模态梯度)

边界情况与限制

已知的系统限制

错误固化风险:如前所述,如果初始错误关联被系统性高频查询使用,weight会持续累积,导致难以自动纠正。系统缺乏外部纠错机制(如人工标注或主动验证)。

记忆容量瓶颈:尽管使用向量数据库,但随着视频流持续输入(如7×24小时监控),节点数量将无限增长。文献未明确说明长期的记忆清理策略,仅提及weight-based pruning的可能性。

事件切分粒度:30秒固定窗口可能导致事件边界模糊(如"倒水"动作在第30秒被截断)。系统通过时序边连接跨clip的片段,但未明确说明如何处理clip内部的事件边界检测。

多模态对齐误差:人脸与声音的关联依赖时间对齐(同时出现)。如果存在延迟(如回声导致声音稍晚于画面),或只闻其声不见其人(如门外说话),关联准确性下降。

跨模态检索的局限性

语义鸿沟:虽然embedding映射到同一空间,但文本描述的"红色杯子"与图像中的红色杯子可能存在语义差异(如文本忽略杯子的具体纹理,而图像包含)。检索时可能因描述不匹配而漏检。

长时序推理:对于跨越多个clips的复杂推理(如"找出Alice上周所有喝咖啡的时刻"),系统需要遍历大量时序边,计算复杂度随时间范围线性增长,可能影响实时性。

References

【1】Seeing, Listening, Remembering, and Reasoning: A Multimodal Agent with Long-Term Memory, https://arxiv.org/pdf/2508.09736


【推荐文章】
- Agent:
DeepResearch的报告生成方法
从RAG到DeepSearch
阿里通义Lab: WebWalker,WebDancer和WebSailor
Agent评测数据集
Agent完全手册(零):三大模块,三个理念
agent调研(1)--MetaGPT,OpenManus和OWL
Devin和Anthropic的Agent开发经验
- MoE:
DeepSeek-V3细节探索
MoE模型的前世今生
DeepSeek-V2和MLA
昆仑万维-SkyworkMoE
成本10w刀的JetMoE
MoE的top-p routing
对MoE模型的一些观察
从dense到MoE -- sparse upcycling
MoE路由--expert choice routing
- 端侧模型:
苹果智能系统模型--AFM
MiniCPM
适合移动设备的语言模型--MobileLLM
phi系列模型
Gemma2
苹果的OpenELM
bilibili的index-1.9B
- 预训练:
Qwen3实测&技术报告
代码大模型(一)--业界现状
代码大模型(二)--OpenCoder
LLM高效预训练(一)
LLM高效预训练(二)
Llama3.1--预训练要点一览
Qwen2技术报告
Yi技术报告-划重点看细节
InternLM系列模型
GLM4报告的一些技术点
从Yuan2.0到Yuan2.0-M32
从loss视角理解大模型涌现能力
- 数据:
训练数据合成(一)
训练数据合成(二)
训练数据合成(三)
LLM预训练数据策略(一)
预训练数据处理--长度分解
- 长上下文:
Qwen2.5-1M技术解析
LLM长上下文的问题
解锁大模型长上下文能力
大模型推理窗口-从有限到无限大
prompt压缩(一)
prompt压缩(二)
reasoning压缩(一)
- 推理加速:
大模型推理加速-投机解码
大模型推理加速-MEDUSA
- 对齐:
VeRA,LoRA-XS和TinyLoRA
腾讯的Training-Free GRPO
深度求索DeepSeek-R1详解
基模型Cognitive Behaviors对RL的影响
Llama3.1--post-training要点一览
模型平均 -- model soup
大模型偏好对齐-DPO
大模型偏好对齐-ODPO
大模型偏好对齐-simPO
大模型偏好对齐-IPO
- Transformer:
Attention Residuals
理解Attention:从起源到MHA,MQA和GQA
LLM的重复生成和ICL
transformer中normalization的二三事
从代码实现看normalization-到底做了什么
稀疏注意力计算:sliding window attention
理解LLM位置编码:RoPE
RoPE的远距离衰减
LLM水印
- 训练框架
Muon优化器
LLM训练框架:从优化器和精度讲到ZeRO
LLM训练各种并行策略
- 项目应用:
一个模型支持智能助手系统
关于The Bitter Lesson
- CV:
CV入门--关于Vision Transformer
CV入门--无监督学习
- 多模态:
多模态入门(一)--CLIP
多模态入门(二)--Flamingo,LLaVA系列和BLIP系列
多模态入门(三)--MiniGPT4,DeepSeekVL,InternVL系列和QwenVL系列
多模态入门(四)--CogVLM,VILA,MM1,MM1.5和Pixtral-12B
多模态入门(五)--InternVL系列
小米的移动UI多模态模型--MobileVLM
DeepSeek-VL2的细节
- 论文阅读:
最近阅读--关于数据合成、agent、reasoning和多任务
最近阅读2-关于自适应深度思考、context engineering和模型训练
- 大模型算法题:
(1)(2)(3)(4)(5)(6)(7)(8)(9)