当前位置:首页 » 《关于电脑》 » 正文

关于增量训练中的参数初始化_Video Recommendation

8 人参与  2021年03月12日 13:03  分类 : 《关于电脑》  评论

点击全文阅读


嗨,各位大佬好,不知过年有没有想起我,沉寂了一个多月该出来溜溜了。在推荐场景中,无论是召回,排序或者粗排阶段都需要训练数据,用户的点击行为历史是一直在更新的,这就必然要求模型一直训练,因而增量训练成为必然。如果没有增量训练,那么推荐就会限于局部,比如很多item不够充分曝光、很多user短期内行为只有很少难以推荐相应的item、user和item不能够相互匹配(match)。当引入增量训练,很多问题就会不解而解,等于是绕过了很多问题,这时候的推荐则是全量的数据,全部的user和item,只要有行为,不管user在任何时候点击了,不管item有几个人点击,都可以得到相应的匹配,这是对内容的充分利用,让用户最大EE(给用户很多可能感兴趣的其他偏好),这是非常nice的。

下面则是简单的函数调用,

1-初始化方法。这个说起来有很多方法,常见的正态分布(或者截断正态分布、固定均值和方差的)以及Xavier,he等方法都可尝试。

初始化的时候要注意,一定要有初始化,,,这不是废话。

sess.run(tf.global_variables_initializer())

常用的函数如下,其他不多赘述。这两个意思一样,亲测结果一样,但前者只能加载一维的变量,如果采用初始化器则可以。

tf.get_variable()
tf.Variable()

2-累计编码。对见过的user/item进行编码,未见过的从上次的最大编码值处开始编码。

直接采用dict及zip即可解决,去重的话采用set的difference。但是奇怪的是在gbdt的编码中有误,百度的大佬说gbdt不能增量训练,也不知道是不是真的。待验证。

问题思考:

3-在一段时间内,如果user没有行为,那么训练中该user的emb是否会更新,讲道理应该没有更新,如果没有更新,如何给它推新的item呢?这时user的emb与item的新的emb并不算服从同一个模型啊,这样给它推item是否合理??

同样,如果真的在全部的user和item空间进行推荐,那么有些item的emb某一次没有经过训练,而有的item则经过训练了,这样这两个item的空间距离是怎样变化的?一个普适性的理论是:如果两个item距离很近,那么它们在任何空间的距离都很近。如果经训练的item与未经训练的item的距离变化了(本来应该近的,训练后距离远了,或者本来距离远的,训练后距离近了,注,这里的训练是指一个训练,一个未训练)这种情况怎么应对呢?可能最后推出的item并不理想,当然,如果更新的频率较快,比如1h,是不是可以忽略这种变化的影响?

4-上述3的假设是:如果近1h的数据中没有某个user或item,那么训练后他们的emb肯定没有变化,这个是不是真理??

请教了同事大佬,他觉得如果是数据可以在短时间进行更新,不必增量训练,另外,如果相似的item或者user经训练后变化大也可能是他们本来就不是那么相似,这是变化的思想,似乎也有道理。大佬还觉得,如果需要增量训练,如果要避免OOM问题,那么可以将没有用到的user和item向量去掉(也就是说未经训练的user/item的向量不变),这就是说要另外建立一个索引,每次都要重建,这个很心累的,如果我不想建立索引,只能减少batch_size,我怕最后的batch_size等于1还好OOM,这样即使采用多GPU也难以解决问题,而重建索引真的很麻烦。进退两难啊。所以今天的周报咋写呢???

后记,最近请教了很多公司的同事,有些公司的算法和工程是分开的,做算法的就是一直优化迭代更新模型,提升效果,这才是真的做算法,而有专门做工程的。如果是这样,那么精力只能花在几个模型上进行更新,而不是今天复现个paper,明天copy个代码,跑一下,能用,然后就over了,这仍旧没有丝毫的竞争力。

愿我们终有重逢之时,而你还记得我们曾经讨论的话题。


点击全文阅读


本文链接:http://zhangshiyu.com/post/16276.html

训练  大佬  增量  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1