一、业务背景
前阵子跟业界同行聚会的时候聊到,我们在营销的时候,是分人群投放物料的,但我们物料的排序算法模型却是同一个,这样肯定是有gap的。按人群生命周期管理,例如新手区,我们的目标是成单,而进阶区我们的目标是成大单,排序的产品应该不同。如果按人群训练多个模型,管理起来又非常麻烦。这个问题其实就是千人(千人群)千模的新范式经典问题。目前用meta-learning解决很方便。
我们再来看一个场景:
假设我们是一个电商店铺老板,因为自认为产品性价比好,但没流量不好卖,买了广告流量包成了广告主。一段时间下来,发现广告账户的钱根本花不出去,照样竞争不过那些本来就很好卖的商家。虽然他们产品不好,但还是抢到了流量。
对平台来说,这是一个很有挑战的广告流量分配的问题。一方面,买广告流量的商品一般不是热销商品,他们交互数据少;但平台的排序算法倾向于那些交互数据多的。导致新广告根本没有损耗。这个也可以看做是冷启动问题。其实广泛来说,即使都有交互数,不是冷启动商品,也存在交互不一样的情况。因此也是千人千模问题。一方面,我们需要在顶端流量分发的时候用bandit算法,去给一定流量比例来探索新爆品;但更核心的是,我们需要千AD(广告主)千模,让小广告主排序算法跟大广告主的不一样,达到公平竞争。
这些问题本文提出的方法都能给你解决。
还有一类问题是百度最近发表的。他们2014年就开始做了。现在线上还跑着meta-learning的model。他们用meta learning解决了一个与上面两个场景解耦的问题。因此可以把他们结合起来使用效果更好。百度最近在CIKM2021发表的文章中解决的问题是广告在线学习问题。1)高阶信息的特征交叉可能产生数万亿个特征,这对于在线学习示例来说是稀疏的;2)数据分布的快速变化给准确学习带来了挑战,因为模型必须对新数据进行快速适应。他们用meta-learning的方法来解决老数据、新数据之间有gap的问题。
二、meta-learning深入浅出
从finetune到元学习
这两个概念是容易混淆的。我这里把他们两个放在一起好好比较一下。
如果是搞CV出身的,我们对finetune的感受是很深的。因为一个高维CNN网络,在
小样本数据集上很难收敛。这个时候需要拿一个在大数据集上训练好的model参数,这些参数可以提取到图片各样式的丰富特征,然后针对目前的小样本,微调一下参数即可。微调的方式可以固定第0层-n-1层layer参数,只微调最后一层都可以。
但这个方法有一个问题,我们训练的时候是在小样本上微调的,我们线上跑的时候呢,是另一个小样本。既然都是小样本,他们的分布是不稳定的,因为不是完全数据集嘛。没有丰富的样本。那么这样微调的网络,在新的小样本数据集上就不一定有效了。
解决这个问题就需要元学习了。这样入手元学习的方式应该比较丝滑吧。
我们在以上面的流程为例,假设原始model的参数是A,我们copy一份为B,把他拿过来在小样本数据集1上finetune,得到参数B1,然后,用这个B1的参数在小样本数据集2上求loss和梯度w,用这个w来更新原始model参数A为A1,这样,新学的A1,相当于是B1在新样本上的信号。这样就是活学活用了。比finetune又更多了一步。
严格的算法说明见下:




