zoukankan      html  css  js  c++  java
  • 增量训练过于牛逼

    发现我司online learning 模式好像真的蛮牛逼的,许多公司都是 daily 全量更新或者增量更新。

    1. 推荐系统模型上线3部曲

    • offline
      • 用7天数据,训练 base, exp 两个模型。用第八天的近接着的一个小时数据来测试,比较 user_auc。如果有提升,用一个月的数据训练一个 offline 模型,推到 nearline 准备做 ab。
    • nearline
      • nearline 大概存着两天的最新数据,需要将 offline 的数据到 nearline的数据做个衔接。进行滚动训练。一般 nearline的数据是一分钟产生一个。
    • online
      • online 模型是一个被动接受的状态,只有 nearline 参数达到一定更新频率以后,才会 push 给 online 模型。online 模型再更新。
    • 更新方式
      • mini_batch + ftrl 
      • 更新的时候会先从参数服务器上pull 参数值, push 后覆盖。(不是存的梯度吗???

    2. 更新模式

    • 全量更新
      • daily 用全部数据进行训练,daily 迭代。时间窗口最长,时效性最差。
    • 增量更新
      • 在原有模型的基础上,按照新增样本batch跟新。
      • 缺点:收敛到新增样本的最优解上。不是全部样本+新增样本的最优解上。(我理解这是因为,以前的模型状态其实就是相当于一个参数初始化值)
      • 改善:几轮增量训练之后就用业务量较少的时间窗口进行全局更新(这不会有重复样本的问题吗?) ,纠正模型在增量更新过程中积累的误差。
    • 在线更新
      • 每获得一个样本就实时更新。(据同事介绍,flink 会 dump 到 hdfs 上传给模型)
      • ftrl 可以在保证稀疏性的情况下,只针对部分特征进行更新。
      • 局部更新
        • “让尖子生能跑多快跑多快"
        • 除了 GBDT,其他都可以支持增量训练。但是问过同事,我们只针对 LR 部分进行增量训练,那其他的部分还是 batch 优化?

    参考资料:

    https://github.com/wzhe06/Ad-papers/blob/master/Optimization%20Method/%E5%9C%A8%E7%BA%BF%E6%9C%80%E4%BC%98%E5%8C%96%E6%B1%82%E8%A7%A3(Online%20Optimization)-%E5%86%AF%E6%89%AC.pdf

    3. 优缺点

    4. 限制

    5. tensorflow-eos

  • 相关阅读:
    java程序打包成jar 配置文件信息路径
    django 认证系统
    django 表单验证和字段验证
    python 面向对象编程
    Python new() 方法
    Django 分页 以及自定义分页
    django 自己编写admin
    Django CRM客户关系管理系统
    Django model中的 class Meta 详解
    Django CRM系统
  • 原文地址:https://www.cnblogs.com/toonice/p/14460427.html
Copyright © 2011-2022 走看看