【深度学习】多目标融合算法(一):样本Loss加权(Sample Loss Reweight)

目录

一、引言

二、样本Loss提权

2.1 技术原理

2.2 技术优缺点

2.3 代码实例

三、总结


一、引言

在朴素的深度学习ctr预估模型中(如DNN),通常以一个行为为预估目标,比如通过ctr预估点击率。但实际推荐系统业务场景中,更多是多种目标融合的结果,比如视频推荐,会存在视频点击率、视频完整播放率、视频播放时长等多个目标,而多种目标如何更好的融合,在工业界与学术界均有较多内容产出,由于该环节对实际业务影响最为直接,特开此专栏对推荐系统深度学习多目标问题进行讲述。

今天重点介绍“样本Loss提权”,该方法通过训练时Loss乘以样本权重实现对其它目标的加权,方法最为简单。

二、样本Loss提权

2.1 技术原理

所有目标使用一个模型,在标注正样本时,考虑多个目标。例如对于点击和播放,在标注正样本时,给予不同的权重,使它们综合体现在模型目标中。如下表,以视频业务为例,每行为一条训练样本,根据业务需要,把点击视频、视频完播、视频时长的权重分别设置为1、3、5。

该方法通过对不同正向行为给予不同权重,将多目标问题转化为单目标问题。本质是保证一个主目标的同时,将其它目标转化为样本权重,达到优化其它目标的效果。

2.2 技术优缺点

优点:

  • 模型简单:易于理解,仅在训练时通过Loss乘以样本权重实现对其它目标的加权
  • 成本较低:相比于训练多个目标模型再融合,单模型资源及维护成本更低

缺点: 

  • 优化周期长:每次调整样本加权系数,都需要重新训练模型至其收敛
  • 跷跷板问题:多个目标之间可能存在相关或互斥的问题,导致一个行为指标提升的同时,另一个指标下降。

2.3 代码实例

首先,我们需要定义一个DNN模型,并实现一个多目标样本损失函数loss加权算法。这个算法会为不同的目标分配不同的权重,以便在训练过程中优化每个目标

### 多损失函数权重分配方法 在机器学习模型中,当存在多个目标需要优化时,通常会引入多个损失函数。这些损失函数可能来自不同的任务或同任务的不同方面。为了平衡各个损失项的重要性,在训练过程中合理地为它们分配权重至关重要。 #### 加权求和方式 种常见的方式是对各单独定义好的损失函数采用加权求和的形式构建最终的整体损失函数: \[ L_{total} = w_1 \cdot L_1 + w_2 \cdot L_2 + ... + w_n \cdot L_n \] 这里 \(w_i\) 表示第 i 个特定损失对应的权重因子[^4]。通过调整不同部分的比重,可以让网络更侧重于某些类型的误差减少而非其他类型。 #### 动态调整策略 除了静态设定固定的权重外,还可以考虑动态改变这参数设置。例如基于当前阶段的学习进展状况自动调节;或是依据辅助任务的表现情况适时增减其影响力等高级技巧。这种方法能够使整个系统更加灵活高效地适应复杂场景下的需求变化[^3]。 #### 自动化搜索算法 近年来也有研究提出了利用自动化工具如贝叶斯优化、遗传算法乃至强化学习机制来寻找最优组合方案的可能性。这类方法试图在整个超参空间内探索最佳配置点,理论上可以获得更好的泛化性能[^2]。 ```python import torch.nn as nn class MultiTaskLoss(nn.Module): def __init__(self, task_num): super(MultiTaskLoss, self).__init__() self.weights = nn.Parameter(torch.ones(task_num)) def forward(self, losses): weighted_losses = [] for idx, loss in enumerate(losses): weight = self.weights[idx].exp() # Ensure positive weights via exponential function normalized_weighted_loss = (weight * loss).mean() weighted_losses.append(normalized_weighted_loss) total_loss = sum(weighted_losses) return total_loss ``` 此代码片段展示了如何实现个多任务损失模块 `MultiTaskLoss` ,它接受系列独立的任务损失并返回经过加权后的总损失值。注意这里的权重被设计成可学习参数,并通过指数运算确保始终是非负数[^1]。
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值