面壁智能 大模型应用开发 二面

1. 项目拷打

问的非常细 , 聊了30min

2. GRPO 里的 reward 一般怎么设计,怎么避免模型学歪

GRPO 的 reward 设计关键不是“打分越多维越好”,而是要保证相对排序真的有意义。常见做法是把 reward 拆成几部分,比如正确性、格式遵循、长度惩罚、拒答合理性、安全性这些,再做加权组合。对于推理任务,最核心的一般还是结果正确性和过程可验证性;对于开放式生成,还得控制风格漂移和模板化输出。

真正难的是 reward hacking。模型很容易学会一些表面上拿高分、实际上没解决问题的套路,比如故意写很长、固定套模板、强行迎合裁判模型。所以 reward 设计通常不能只靠单一 judge,而要配合规则校验、长度归一化、多裁判一致性,必要时还要混入人工抽检。

def reward_fn(correct, format_ok, length_penalty, safe_score):
    return 1.5 * correct + 0.5 * format_ok + 0.3 * safe_score - 0.2 * length_penalty

print(reward_fn(1, 1, 0.4, 0.9))

3. GRPO 相对 PPO 的优势到底是什么,为什么它在大模型后训练里会被关注

GRPO 最吸引人的地方是它弱化了对 value model 的依赖。PPO 一般要维护 policy、reference、reward model、value model,链路长,训练和调参成本都高。GRPO 则更强调同一 prompt 下多条候选之间的相对比较,通过组内归一化收益直接形成优化信号,整个流程更轻一些。

它之所以在大模型场景里被关注,不是因为理论上一定比 PPO 更强,而是因为工程上更省事。很多团队做后训练时,value model 本身就很不稳定,而 GRPO 恰好绕开了一部分复杂组件。不过它对采样质量更敏感,所以能不能训好,还是取决于候选分布和 reward 质量。

4. 如果 GRPO 训练效果不好,你会先排查什么

我会先看是不是组内候选太像了。因为 GRPO 的相对比较前提是同组答案之间真的有可区分度,如果采样温度太低、候选过于同质化,训练信号会很弱。第二个排查点是 reward 分布,如果 reward 非常尖或者特别 noisy,组内归一化后反而会放大噪声。第三是长度偏置和模板偏置,很多模型会学会“更像高分答案的样子”,但不是学会任务本身。

更具体一点,我会先看 group 内 reward 方差、有效样本比例、KL 漂移趋势和 bad case 聚类。如果 reward 方差几乎为零,说明候选没拉开;如果 KL 飘得太快,说明训练约束不够;如果错误集中在固定模板,说明 reward 很可能被投机利用了。

5. 多模态里的 ViT 一般是怎么训练的,训练任务都有哪些

ViT 最早本质上还是一个图像分类模型,把图像切成 patch,当成 token 输入 Transformer,再用分类头做监督。后来多模态场景里,ViT 更多是作为视觉编码器使用,训练任务也不再局限于分类。常见任务包括图文对比学习、图文匹配、图像描述、区域级对齐、掩码建模、蒸馏和指令微调里的视觉条件生成。

如果是实际业务里的多模态大模型,ViT 往往不是从头训练,而是拿预训练好的视觉 backbone,再通过 projector 或 adapter 接到语言模型上做联合微调。这个阶段训练任务会更偏向跨模态对齐,而不只是单独提升视觉分类能力。

6. 多模态训练里,视觉编码器为什么经常不完全放开训练

因为视觉编码器参数量本身就不小,而且它通常已经在大规模图像数据上学到比较稳定的低层和中层视觉表征。如果在多模态阶段全量放开,很容易带来两个问题:第一是训练成本显著增加,第二是数据量不够时容易把原来的视觉能力训坏。很多业务数据并没有大到足以支撑整套视觉 backbone 重学一遍。

所以更常见的做法是先冻结视觉主干,只训练 projector、adapter 或语言侧,让两边表征先对齐;等到数据质量和训练稳定性都够了,再做部分解冻。这样比一开始全量 joint training 更稳,也更容易控制训练预算。

7. Projector 常见有哪些形式,分别起什么作用

Projector 本质上是把视觉特征映射到语言模型能消费的表示空间里。最简单的是线性层,优点是轻量、稳定、训练快,适合先验证链路能不能跑通。再复杂一点的是多层 MLP,可以提供更强的非线性变换能力。还有一类是基于 query 的 resampler 或 Q-Former,这种做法不仅做空间映射,还能顺带做 token 压缩和信息提取。

它的作用不只是“对齐维度”,更重要的是跨模态语义桥接。因为视觉编码器输出和语言 token 空间分布差得很远,如果没有一个过渡层,语言模型往往很难稳定理解视觉信息。很多多模态模型效果差,不一定是底座不行,反而是 projector 设计太粗糙。

import torch
import torch.nn as nn

class MLPProjector(nn.Module):
    def __init__(self, in_dim, out_dim):
        super().__init__()
        self.net = nn.Sequential(
    

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务