京东 算法实习一面 上
八股:
- transformer的基本知识、几个层
Transformer完全基于注意力机制,摒弃了循环和卷积操作。Transformer出来之前,主流的序列转换模型都基于复杂的循环神经网络(RNN),包含编码器和解码器两部分。当时表现最好的模型还通过注意力机制将编码器和解码器连接起来。
Transformer是一种基于自注意力机制的深度学习模型,为了解决自然语言处理中的序列到序列(sequence-to-sequence)问题而设计的。
相较于RNN模型,Transformer模型具有2个显著的优势。
优势一:处理长序列数据。Transformer采用自注意力机制,能够同时处理序列中的所有位置,捕捉长距离依赖关系,从而更准确地理解文本含义。而RNN模型则受限于其循环结构,难以处理长序列数据。
优势二:实现并行化计算。由于RNN模型需要依次处理序列中的每个元素,其计算速度受到较大限制。而Transformer模型则可以同时处理整个序列,大大提高了计算效率。
Transformer遵循编码器-解码器总体架构,使用堆叠的自注意力机制和逐位置的全连接层,分别用于编码器和解码器。
Transformer的架构
Encoder编码器:Transformer的编码器由6个相同的层组成,每个层包括两个子层:一个多头自注意力层和一个逐位置的前馈神经网络。在每个子层之后,都会使用残差连接和层归一化操作,这些操作统称为Add&Norm。这样的结构帮助编码器捕获输入序列中所有位置的依赖关系。
Decoder解码器:Transformer的解码器由6个相同的层组成,每层包含三个子层:掩蔽自注意力层、Encoder-Decoder注意力层和逐位置的前馈神经网络。每个子层后都有残差连接和层归一化操作,简称Add&Norm。这样的结构确保解码器在生成序列时,能够考虑到之前的输出,并避免未来信息的影响。
编码器与解码器的本质区别:在于Self-Attention的Mask机制。
Transformer的核心组件:Transformer模型包含输入嵌入、位置编码、多头注意力、残差连接和层归一化、带掩码的多头注意力以及前馈网络等组件。
Transformer的核心组件
输入嵌入:将输入的文本转换为向量,便于模型处理。
位置编码:给输入向量添加位置信息,因为Transformer并行处理数据而不依赖顺序。
多头注意力:让模型同时关注输入序列的不同部分,捕获复杂的依赖关系。
残差连接与层归一化:通过添加跨层连接和标准化输出,帮助模型更好地训练,防止梯度问题。
带掩码的多头注意力:在生成文本时,确保模型只依赖已知的信息,而不是未来的内容。
前馈网络:对输入进行非线性变换,提取更高级别的特征。
Transformer的3种注意力层:在Transformer架构中,有3种不同的注意力层(Self Attention自注意力、Cross Attention 交叉注意力、Causal Attention因果注意力)
编码器中的自注意力层(Self Attention layer):编码器输入序列通过Multi-Head Self Attention(多头自注意力)计算注意力权重。
解码器中的交叉注意力层(Cross Attention layer):编码器-解码器两个序列通过Multi-Head Cross Attention(多头交叉注意力)进行注意力转移。
解码器中的因果自注意力层(Causal Attention layer):解码器的单个序列通过Multi-Head Causal Self Attention(多头因果自注意力)进行注意力计算
- 从0到1微调或训练一个LLM
数据-预训练-微调-对齐(提升实用性与安全性)
参考:
训练大语言模型(LLM)是 “数据 - 模型 - 训练 - 评估 - 部署” 的全链路工程,核心目标是让模型学习语言规律、知识逻辑并具备实用生成能力。以下是结构化的从 0 到 1 训练流程,兼顾理论框架与工程实践要点:
一、前置准备:明确目标与技术选型
1. 场景与目标定义
明确核心用途:通用大模型(如 GPT-3)或垂直领域模型(如代码漏洞检测、医疗问答);
界定能力边界:支持的任务类型(生成、分类、推理)、输入输出格式(文本长度、结构化要求)、性能指标(Perplexity、准确率、生成连贯性)。
2. 技术栈与硬件选型
框架选型:PyTorch(灵活易调试,适配研究场景)、TensorFlow(工业级部署友好);
分布式训练工具:DeepSpeed(ZeRO 优化)、Megatron-LM(张量并行 / 流水线并行);
硬件资源:GPU/TPU 集群(显存≥40GB / 卡,支持 FP16/FP8 混合精度;通用大模型需 100 + 张 A100/H100,垂直领域可缩减);
存储与算力调度:分布式文件系统(如 HDFS)、集群管理工具(Kubernetes)。
二、数据工程:高质量数据是模型的基础
1. 数据收集与筛选
数据来源:公开数据集(如 Wikipedia、C4、BigVul)、行业私有数据(需合规授权)、爬取数据(遵守 robots 协议与版权法);
筛选原则:高质量、多样性、无偏见—— 优先选择权威、准确、无冗余的数据,覆盖目标场景的核心领域(如漏洞检测模型需重点收集 C/C++/Java 漏洞代码数据),剔除色情、暴力、虚假信息。
2. 数据预处理(关键步骤)
清洗:去重(文本指纹去重、语义去重)、去噪(过滤乱码、低质量短句、广告垃圾信息)、格式标准化(统一编码、换行、标点);
分词与 tokenization:使用专用分词器(如 GPT 的 BytePairEncoding、CodeBERT 的 CodeTokenizer),处理特殊字符(如代码中的括号、注释),设定最大序列长度(如 512/1024 tokens);
数据格式转换:将文本转为模型可接收的张量格式(input_ids、attention_mask),划分训练集 / 验证集(比例通常 9:1);
合规处理:脱敏(去除个人隐私、敏感信息)、授权确认(商业数据需签署许可协议),符合 GDPR、数据安全法等规范。
三、模型设计与初始化
1. 架构选型
核心架构:基于 Transformer 解码器(自回归生成,如 GPT 系列)或编码器 - 解码器(Seq2Seq,如 T5),垂直领域可复用预训练基座(如 CodeBERT 用于代码相关任务);
超参数设计(需根据数据量与算力调整):
模型规模:层数(12-100+)、注意力头数(12-16+)、隐藏层维度(768-4096+)、参数量(百万级 - 千亿级);
其他超参:激活函数(GELU/SwiGLU)、归一化方式(LayerNorm)、dropout 比例(0.1-0.3,防止过拟合)。
2. 模型初始化
从零训练:随机初始化 Transformer 参数(适用于有海量数据的通用模型,成本高);
迁移初始化:基于公开预训练模型(如 RoBERTa、Llama)微调(适用于垂直领域,降低训练成本、提升效率);
权重初始化:采用 Xavier/Glorot 初始化,避免梯度消失或爆炸。
四、训练过程:分阶段优化与监控
1. 预训练(核心阶段)
训练目标:让模型学习语言基础规律与通用知识;
核心任务:自回归语言建模(预测下一个 token,适用于生成式模型)、掩码语言建模(MLM,预测被掩码的 token,适用于编码器模型)、句子顺序预测(SOP,增强语义理解);
训练策略:
优化器:AdamW(权重衰减 = 0.01,防止过拟合);
学习率调度:线性预热(Warmup)+ 余弦退火 / 多项式衰减(避免初期震荡,后期稳定收敛);
批量处理:梯度累积(显存不足时等效增大 batch size)、混合精度训练(FP16/FP8,提升算力利用率);
监控指标:训练损失(Loss)、验证集困惑度(Perplexity,越低表示模型拟合效果越好)、GPU 显存占用、训练速度(tokens/sec)。
2. 微调(适配具体任务)
监督微调(SFT):使用标注数据(如 “漏洞代码 - 修复方案” 配对数据)微调,让模型学习任务映射关系;
提示工程(Prompt Tuning):通过少量标注数据设计提示模板(如 “判断以下代码是否存在缓冲区溢出漏洞:{code} 答案:”),避免全量微调的高成本;
关键要点:冻结基座模型部分层(仅训练顶层分类器 / 适配器),使用更小的学习率(1e-5~1e-7),防止灾难性遗忘。
3. 对齐训练(提升实用性与安全性)
奖励模型训练(RM):收集人工标注的生成结果排序数据(如 A 方案优于 B 方案),训练奖励模型评估生成质量;
强化学习微调(RLHF):基于 PPO(近端策略优化)算法,让模型根据 RM 的奖励信号调整生成策略,优化连贯性、准确性、安全性;
安全对齐:加入拒绝生成规则(如拒绝恶意代码生成、虚假信息输出),过滤有害 prompt。
五、评估与迭代:全面验证模型能力
1. 量化评估
基础指标:困惑度(Perplexity)、BLEU/Rouge(生成任务)、准确率 / 召回率(分类任务如漏洞检测);
下游任务测试:Few-shot/Zero-shot 能力评估(如用少量漏洞样本测试模型检测准确率)、跨领域泛化性(如从 C 语言漏洞迁移到 Java 漏洞);
效率指标:推理速度(tokens/sec)、显存占用、训练成本(算力消耗)。
2. 定性评估
人工评估:邀请领域专家评估生成结果的准确性(如漏洞检测是否误报 / 漏报)、连贯性、逻辑性、实用性;
安全性测试:检测模型是否生成有害内容(如恶意代码、隐私信息)、是否存在偏见(如性别 / 种族偏见)。
3. 迭代优化
针对问题调整:数据层面(补充高质量标注数据、修正数据偏差)、模型层面(调整超参数、增加适配器层)、训练层面(优化学习率调度、延长训练周期);
版本管理:记录每次迭代的模型参数、数据版本、评估结果,便于回溯最优版本。
六、部署与落地:从模型到产品
1. 模型压缩与优化
量化:INT8/INT4 量化(降低显存占用与推理延迟,如 GPTQ、AWQ 量化);
蒸馏:通过教师模型(大模型)指导学生模型(小模型),在保证性能的前提下缩减参数量;
推理优化:使用 vLLM、TensorRT 等推理引擎,优化注意力计算(如 FlashAttention),提升并发处理能力。
2. 服务化部署
部署形式:API 接口服务(如 RESTful API)、嵌入式部署(适用于边缘设备);
工程保障:负载均衡(应对高并发请求)、缓存机制(缓存高频查询结果)、监控告警(推理延迟、服务可用性);
接口设计:明确输入输出格式(如代码漏洞检测模型输入为代码文本,输出为漏洞类型、位置、修复建议)。
3. 持续迭代与合规
收集用户反馈:监控模型实际使用中的错误(如漏检漏洞、生成无效修复方案),形成反馈数据集;
持续微调:定期用反馈数据更新模型,提升适配性;
合规合规:确保模型输出符合行业规范(如漏洞检测模型需满足信息安全标准),规避法律风险(如版权、隐私保护)。
核心总结
从 0 到 1 训练 LLM 的关键是 “数据为王、模型适配、训练可控、评估全面、部署高效”:高质量数据决定模型上限,合理的架构与训练策略决定模型性能,对齐与合规决定模型实用性,而工程优化决定模型能否落地应用。实际训练中需平衡算力成本、训练周期与性能指标,优先聚焦核心场景迭代,再逐步扩展能力边界。
