多任务学习AITM论文的简介

2,462次阅读
没有评论

共计 1375 个字符,预计需要花费 4 分钟才能阅读完成。

前言

美团技术博客最近出了一篇文章讲多任务学习,优化的对象是深层转化。

多任务学习AITM论文的简介

上图是论文中给出的一个深层转化的过程图,从曝光到激活着过程经历点击、申请、审核才到激活。这种深层转化都会遇到一个问题:真实的正样本很少,而且转化的回流也会比较慢。

回想ESMM巧妙的利用了全空间的概念解决了ssb和ds问题,在这篇文章里也是利用到。这篇论文想通过学习每一个步骤之间的信息传递对下一步的影响,学习到“序列信息”。

模型网络介绍

看下网络与其他两个经典网络结构的对比:

多任务学习AITM论文的简介

对于这篇论文本身是基于hard share bottom的多任务学习方法,在构建各自的塔去学习相应的任务,然后在最终输出之前有一个AIT模块学习上一个步骤到下一个步骤之间信息到传递。

上面最右面的模型表示 塔t-1 到塔 t 的转化过程,AIT模块的输入是 p_{t-1}q_t ,它的输出会作为塔对应的目标z_t

之前的描述中提到两个塔之间的之间的信息传递,就是通过上述的AIT模块来实现的,这个模块是一个简单的注意力模块,通过融合两个输入实现输出。

多任务学习AITM论文的简介

看到wu就是一个softmax计算权重输出的过程。

def _attention(self, input1, input2):
        '''
        The attention module.
        :param input1: None, K
        :param input2: None, K
        :return: None, K
        '''
        # (N,L,K)
        inputs = tf.concat([input1[:, None, :], input2[:, None, :]], axis=1)
        # (N,L,K)*(K,K)->(N,L,K), L=2, K=32 in this.
        Q = tf.tensordot(inputs, self.weights['attention_w1'], axes=1)
        K = tf.tensordot(inputs, self.weights['attention_w2'], axes=1)
        V = tf.tensordot(inputs, self.weights['attention_w3'], axes=1)
        # (N,L)
        a = tf.reduce_sum(tf.multiply(Q, K), axis=-1) / \
            tf.sqrt(tf.cast(inputs.shape[-1], tf.float32))
        a = tf.nn.softmax(a, axis=1)
        # (N,L,K)
        outputs = tf.multiply(a[:, :, None], V)
        return tf.reduce_sum(outputs, axis=1)  # (N, K)

公示中的 h1、h2和h3分别对应weights中的参数,然后QKV的计算跟我们常规的注意力计算有点像,类似self attention 。

AIT的输出之后还会介入一个info模块,论文里给出的是mlp模块。

这样就实现了信息之间的传递,如果按照之前给出的例子,那么需要计算相应的交叉熵loss。但是现在还有一个额外的辅助loss需要加入:

多任务学习AITM论文的简介

当塔t的输出大于t-1当时候加入一个惩罚项。看起来是想让其满足正常的转化规律,漏斗效应。不过现在的业务里只有二级转化,没有这么多层的转化,离线测试了下没有什么差异。

总结

1、加入 AIT 模块,类似self attention 实现信息传递融合

2、loss优化那加入了约束相loss

正文完
请博主喝杯咖啡吧!
post-qrcode
 
admin
版权声明:本站原创文章,由 admin 2021-11-24发表,共计1375字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码