深度学习模型的多Loss调参技巧

 
 

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

编辑: kaggle竞赛宝典

在多目标多任务训练的网络中,如果最终的loss为有时为多个loss的加权和,例如 loss = a*loss_x+b*loss_y+c*loss_y+... ,这个问题在微信视频号推荐比赛里也存在。任务需要对视频号的某个视频的收藏、点击头像、转发、点赞、评论、查看评论等进行多任务建模,也就产生了多个loss。

342bf471b098b3eb1a2fd206963cce39.png

    这里介绍在这次实践过程中测试过的几个方法。

1.GradNorm

19c80b5e7c71f7e2164dd4cc188203c3.png

    GradNorm:ω(t+1)=ω(t)+λβ(t),该方法主要在对各损失函数权重的梯度进行处理,利用梯度更新公式动态更新权重ω。

f2b64a325252eb8d6ae6ac210a1d7cd2.png

2.Multi-Task Learning as Multi-Objective Optimization

d53cac76a3081bb35be9d8d262f44689.png

    在处理多个loss时,引入Pareto用一次训练的方式将问题转化为求取Pareto最优解。有兴趣的可以看看原文:https://arxiv.org/pdf/1810.04650.pdf

ffa64d5f3f6a28c81b0e185c298e2773.png

b6d3e9772e7a6ca0e5c6bb6d641c2869.png

3.Multi-task likelihoods

4faf6677dfdda8458116bb836abe9baa.png

    最简单的多任务Loss的线性加权:

878a91ea97aba4c1efe695a81ee1828f.png

    对于分类任务,经常通过softmax函数产生概率向量中抽取样本来构造多任务的最大似然函数。

class MultiLossLayer(nn.Module):
    """
        计算自适应损失权重
        implementation of "Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics"
    """
    def __init__(self, num_loss):
        super(MultiLossLayer, self).__init__()
        self.sigmas_dota = nn.Parameter(nn.init.uniform_(torch.empty(num_loss), a=0.2, b=1.0), requires_grad=True)

    def get_loss(self, loss_set):
        factor = torch.div(1.0, torch.mul(2.0, self.sigmas_dota))
        loss_part = torch.sum(torch.mul(factor, loss_set))
        regular_part = torch.sum(torch.log(self.sigmas_dota))
        loss = loss_part + regular_part
        return loss

4.玄学调参

0efb2236e426a32ea58001299e994f39.png

    上面说了太多方法调参,来点手动的经验吧。最简单的方法如下:

  • 例如 loss = a*loss_x+b*loss_y+c*loss_y ,可以在a+b+c=1前提下,固定a,b,调整c,分别在2x、4x、6x等倍数去做尝试,最后相加为1;

  • 权重缩放,固定其中一个为1,利用power(m,n)去调整尝试;

  • Weight Uncertainty 利用 Gaussian approximation 方式直接修改loss ,并同时以梯度传播的方式来更新里面的两个参数。

cea6cf64f86b392230850ee7c8072762.png

参考资料

7f86d27aaf0c6e01d8433681a358b911.png

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值