Schwertlilien
As a recoder: notes and ideas.

2025-4-24

其他

知道RLHF吗?讲一下训练流程

用于大模型(如ChatGPT)对齐人类价值的训练方法。

  1. Supervised Fine-Tuning(SFT):用高质量人类标注数据微调预训练模型
  2. Reward Model(RM)训练:用人类偏好数据训练打分模型
  3. PPO阶段
    • 使用 PPO 在 reward model 指导下优化生成策略
    • 避免模型输出“看起来对但实际上错误”的结果

PPO的原理,损失函数: 优化策略时避免剧烈更新,防止性能骤降

\[ \mathbb{E} \left[\min \left( r_t(\theta)\hat{A}_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t \right) \right] \]

bn/ln(batch norm,layer norm,RMS norm)、bn训练阶段和测试阶段区别,详细讲讲原理

RMSNorm:

  • 仅使用输入的 均方根(RMS) 进行归一化,不减均值
  • 更轻量、效果接近 LayerNorm

dropout原理,训练阶段和测试阶段区别,为什么

  • 训练时:以概率 p 随机“丢弃”部分神经元(乘 0)
  • 测试时:不丢弃,将输出乘1 - p 来保持期望一致
  • 目的:防止 co-adaptation,增强泛化能力

优化器的原理

优化器 原理说明
SGD 基于当前梯度方向一步步下降
Momentum 加入“惯性”,加速收敛
RMSProp 使用梯度平方的滑动平均调节学习率
Adam Momentum + RMSProp(结合一阶+二阶信息)

残差链接的概念

形式:y = F(x) + x

作用

  • 缓解梯度消失
  • 让网络更容易拟合恒等映射
  • 提升深层网络可训练性(ResNet)

知识蒸馏损失函数:让 student 模仿 teacher 的“行为”。

\[ \mathcal{L}_{KD} = (1 - \alpha)\cdot CE(y, p_s) + \alpha \cdot T^2 \cdot KL(p_t^T || p_s^T) \]

  • CE:真实标签交叉熵
  • KL:学生和教师 softmax 输出的 KL 散度(用温度 T soften logits)
  • α:两个目标的加权系数
  • \(p_s^T = \text{Softmax}(z_s/T)\)\(p_t^T = \text{Softmax}(z_t/T)\)

交叉熵损失、符号以及含义、梯度下降方向是?代码

\[ \mathcal{L}_{CE} = -\sum_{i} y_i \log(p_i)\\ \frac{\partial \mathcal{L}}{\partial z_i} = p_i - y_i \]

二分类任务损失函数是?最后一层的激活函数是?Sigmoid \[ \mathcal{L}_{BCE} = -[y \log(p) + (1 - y)\log(1 - p)] \] 回归任务的损失函数可以用哪些?为什么回归使用MSE而不用交叉熵?

  • 回归输出是连续实数,交叉熵是概率分布之间的距离
  • 不满足 softmax 概率空间的假设,不适合做数值回归

MSE(均方误差),MAE(平均绝对误差)

对比学习?增量学习?

神经网络权重可以全部初始化为0吗、为什么?

不能。原因:如果所有权重都是 0,每个神经元的输出都一样,梯度也一样,导致所有神经元更新相同,失去了“对称性打破”

正确做法是:使用随机初始化(如 Xavier, He),打破对称性

长尾问题的解决方案?为什么长尾侧用MSE、短尾侧用MAE?

长尾问题:少数类别样本过少

解决方案:

  • 数据层:重采样(欠采多头 / 过采尾部)

  • 损失层:

    • re-weighting

    • label-distribution-aware margin loss

    • Focal Loss(RetinaNet 模型(ICCV 2017)) \[ FL=-(1-p_i)^{\gamma}\log(p_i) \]

    • LDAM Loss

  • 表达层:两阶段训练 / 分支网络

为何尾部用 MSE?头部用 MAE?

  1. MSE 更关注大误差(方差大、长尾更敏感)
  2. MAE 更稳健,不被极端样本拉动

CTR问题用的什么loss?可以用MSE吗、为什么?

CTR = Click-Through Rate,是一个 二分类问题

  • 常用损失:Binary Cross-Entropy Loss \[ \mathcal{L}_{BCE} = -[y \log(p) + (1-y)\log(1-p)] \]

  • MSE 理论上能用,但效果不好:输出是概率,但 MSE 对误差不敏感(如 0.01 vs 0.1)

  • BCE 更关注概率分布间的差异

搜广推

  • 推荐链路是怎么运作的 有哪些模块
  • 如何做排序模型的迭代
  • MAP(最大后验概率)和似然函数有什么关系?
  • 什么情况下,MAP的损失函数可以用NMSE来计算?(高斯噪声)
  • 推荐算法了解哪些?

数据结构

  • 跳表和二叉树的区别是什么?
  • b+ 树 和 b树的区别, 为什么innodb索引用b+ 不用b

程序设计语言

  • cpp五种内存类型:

    堆、栈、全局/静态存储区、常量区、代码区

  • python中可变/不可变类型

    不可变类型(Immutable)

    • 一旦创建,值不能更改。
    • 示例:intfloatstrtuple
    • 改变时会创建新的对象。

    可变类型(Mutable)

    • 可以改变其内容。
    • 示例:listdictset
    • 改变时不需要创建新对象,直接修改原对象。
  • 深拷贝/浅拷贝

    浅拷贝(Shallow Copy)

    • 只复制对象的引用,不复制对象本身。即拷贝的是引用类型的“引用”。
    • 例如:使用 copy()copy.copy(),复制的是最外层对象,内层对象仍然是共享的

    深拷贝(Deep Copy)

    • 递归地复制对象及其嵌套对象,确保每一层都被复制。
    • 例如:使用 copy.deepcopy()
  • python中的decorator

    装饰器是一个函数,用于在不修改函数本身的前提下,动态地添加功能。@decorator

  • 智能指针?其作用?与auto区别?

    智能指针(Smart Pointer):是一个包装指针的对象,自动管理内存,以避免手动 delete 带来的内存泄漏和野指针问题。

    auto 关键字:用于让编译器自动推导变量类型。

  • 野指针?

    野指针是一个指向已经释放的内存区域的指针。

  • 面向对象三要素:继承、多态、封装

    继承(Inheritance)

    • 允许新类从已有类派生,继承父类的属性和方法。
    • 优点:代码复用、层次化组织代码。

    多态(Polymorphism)

    • 相同接口可以由不同的对象实现,方法调用的具体实现可以在运行时决定。
    • 通过继承和重写(Override)实现。
    • 提高灵活性。

    封装(Encapsulation)

    • 将对象的状态(数据)和行为(方法)封装在一起,并对外界隐藏实现细节。
    • 只暴露必要的接口给外部使用,提高代码的安全性、可维护性。

软工

  • 设计模式:工厂模式等等

创建型模式、结构型模式和行为型模式

MVC,三层:表现层、业务逻辑层、数据访问层

搜索
匹配结果数:
未搜索到匹配的文章。