搜广推校招面经六十五

蚂蚁金服-信贷部门

一、为什么使用 Layer Normalization 而不是 Batch Normalization?

1.1. Batch Normalization (BN) 的局限性

Batch Normalization(BN)是一种常用的归一化方法,它在 批次维度(batch) 上进行归一化,计算 均值和方差 来调整激活值。但 BN 存在以下问题:

(1) 依赖 Batch Size

  • BN 需要在 每个 mini-batch 内计算均值和方差,如果 batch size 过小,均值和方差估计不稳定,影响模型效果。
  • NLP、强化学习、推荐系统等小 batch 任务 中,BN 可能表现不佳。

(2) 不能处理变长序列

  • 在 NLP 任务中,输入序列长度通常不同,BN 在处理变长序列时不太合适,而 Layer Norm 不受 batch 维度影响。

(3) 不能应用于 Online Learning

  • BN 在训练时计算 batch 统计量(均值和方差),但在推理时使用 滑动平均值,这导致在 在线学习(Online Learning)和 Reinforcement Learning 中 BN 无法有效工作

1.2. Layer Normalization (LN) 的优势

Layer Normalization(LN)在 特征维度(而不是 batch 维度)上进行归一化,计算每个样本自己的均值和方差,具有以下优点:

(1) 适用于小 Batch 甚至单样本

  • LN 在特征维度上归一化,不依赖 batch size,适用于 小 batch 或 batch size = 1 的任务,如 NLP 和 RL。

(2) 适用于序列模型(如 Transformer)

  • 在 NLP 任务中,LN 适用于 变长序列,可应用于 Transformer、BERT 等模型。

(3) 适用于 Online Learning

  • LN 仅依赖单个样本 的均值和方差,因此可以用于 在线学习、强化学习等任务

(4) 对内部协变量偏移(Internal Covariate Shift)有更好的鲁棒性

  • LN 在 特征维度 归一化,可以 降低模型对输入变化的敏感性,加速训练收敛。

1.3. Layer Norm vs Batch Norm

归一化方式Batch Norm (BN)Layer Norm (LN)
归一化维度batch 维度 归一化特征维度 归一化
依赖 batch size,batch size 过小时 BN 可能失效,适用于小 batch 或单样本
适用于序列数据不适合(batch 维度归一化)适合(特征维度归一化)
计算方式在 batch 内计算均值和方差在样本内计算均值和方差

二、 写一下focal loss

2.1. 什么是 Focal Loss?

Focal Loss 是一种 改进的交叉熵损失函数,用于解决 类别不均衡难易样本不均衡 的问题。它在目标检测任务(如 RetinaNet)中被广泛使用。

2.2. Focal Loss 公式

Focal Loss 定义如下:
F L ( p t ) = − α t ( 1 − p t ) γ log ⁡ ( p t ) FL(p_t) = - \alpha_t (1 - p_t)^\gamma \log(p_t) FL(pt)=αt(1pt)γlog(pt)
其中:

  • p t p_t pt 表示预测概率(对正类, p t = p p_t = p pt=p;对负类, p t = 1 − p p_t = 1 - p pt=1p)。
  • α \alpha α: 用于处理类别不均衡,控制正负样本的权重(一般设为 0.25)。
  • γ \gamma γ: 调整易分类样本的损失贡献(一般设为 2.0)。
  • ( 1 − p t ) γ (1 - p_t)^\gamma (1pt)γ: 使得 难分类样本的损失较大,易分类样本的损失较小

2.3. Focal Loss 作用

解决类别不均衡:调整 α 控制正负样本损失权重。
聚焦难分类样本:γ 让易分类样本的损失更小,避免其主导梯度更新。
适用于目标检测:在 One-Stage 目标检测(如 RetinaNet) 中效果优越。

2.4. 代码实现

代码实现见上方 Python 代码块,支持 二分类任务,可以扩展至 多分类任务(使用 softmax)。

import torch
import torch.nn as nn
import torch.nn.functional as F

class FocalLoss(nn.Module):
    def __init__(self, alpha=0.25, gamma=2.0, reduction='mean'):
        """
        Focal Loss 实现
        :param alpha: 平衡因子,用于处理类别不均衡
        :param gamma: 调整因子,控制容易分类样本的损失降低幅度
        :param reduction: 'none', 'mean', 'sum',指定如何聚合损失
        """
        super(FocalLoss, self).__init__()
        self.alpha = alpha
        self.gamma = gamma
        self.reduction = reduction

    def forward(self, inputs, targets):
        """
        计算 Focal Loss
        :param inputs: 预测概率 (logits 需经过 sigmoid 或 softmax 处理)
        :param targets: 真实标签 (one-hot 编码或单标签)
        :return: 计算后的 Focal Loss
        """
        BCE_loss = F.binary_cross_entropy(inputs, targets, reduction='none')    # 计算 BCE Loss
        p_t = targets * inputs + (1 - targets) * (1 - inputs)                   # 计算 p_t
        focal_weight = self.alpha * targets + (1 - self.alpha) * (1 - targets)  # 计算 alpha 平衡因子
        focal_weight *= (1 - p_t) ** self.gamma                                 # 计算 (1 - p_t)^gamma

        loss = focal_weight * BCE_loss                                          # 计算 Focal Loss

        if self.reduction == 'mean':
            return loss.mean()
        elif self.reduction == 'sum':
            return loss.sum()
        return loss  # reduction='none' 时返回逐元素损失

三、MMOE 是硬约束还是软约束?

MMOE(Multi-gate Mixture-of-Experts,多门专家混合)是一种用于多任务学习(Multi-Task Learning, MTL)的模型架构,其主要特点是通过多个专家网络(Experts)和多个门控网络(Gates)来进行任务分配和共享特征。其门控机制(Gating Mechanism) 采用的是软约束(Soft Constraint),而不是硬约束。

3.1. 任务共享方式

MMOE 通过多个专家共享特征,并由门控网络根据任务动态分配权重。它不像硬共享(Hard Sharing)方法那样强制所有任务使用相同的底层特征,而是让门控网络自适应地决定不同任务的特征使用方式。因此,MMOE 更接近软约束(Soft Constraint),因为任务之间的共享是动态调整的,而不是强制共享的。

3.2 与硬约束的对比

  • 硬约束:任务必须严格共享特定的参数或结构,例如硬共享 MTL(Hard Parameter Sharing),其中所有任务共享同一个主干网络。
  • 软约束:任务可以根据需要动态调整共享程度,例如 MMOE 允许不同任务以不同的方式利用专家网络的输出,而不是固定的共享方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值