首页 > 其他分享 >Topology Distillation for Recommender System

Topology Distillation for Recommender System

时间:2023-09-22 15:14:55浏览次数:56  
标签:mathbb HTD Recommender Distillation System group mathbf Topology

目录

Kang S., Hwang J., Kweon W. and Yu H. Topology distillation for recommender system. KDD, 2021.

一种基于关系的知识蒸馏, 这种关系的处理比较特殊.

Topology Distillation

  • 已经有很多蒸馏的文章指出, 受限于学生模型的表达能力, 让其完全模仿教师模型的输出有些过于勉强和死板. 很多后续的文章都尝试提出一些`统计性'的指标, 从而给予学生模型更简单但有效的目标.

  • 本文实际中是从关系角度出发的, TD 希望学生模型的 embedding 的关系和教师模型的 embedding 的关系能够尽可能的一致.

Full Topology Distillation (FTD)

  • 对于一个 batch, FTD 首先计算教师模型中所对应的两两相似度:

    \[a_{ij}^t = \rho (\mathbf{e}_i^t, \mathbf{e}_j^t), \]

    这里, 作者用 cosine similarity 来计算相似度 \(\rho(\cdot, \cdot)\). 对于一个 batch size 为 \(b\) 的情况, 可以得到

    \[\mathbf{A}^t \in \mathbb{R}^{b \times b} \]

    的相似度矩阵.

  • 类似的, 我们可以得到学生模型的相似度矩阵 \(\mathbf{A}^s\). 很自然地, 我们可以通过如下损失要求 \(\mathbf{A}^s\) 与 \(\mathbf{A}^t\) 保持一致:

    \[\mathcal{L}_{FTD} = \|\mathbf{A}^s - \mathbf{A}^t\|_F^2. \]

Hierarchical Topology Distillation (HTD)

  • HTD 认为 FTD 的限制还是太强了, 希望首先将 embedding 分成 \(K\) 个 groups, 然后 groups 间和 group 内分别蒸馏.

  • 分组的步骤, HTD 利用一个额外的小网络 \(v: \mathbb{R}^{d^t}: \rightarrow \mathbb{R}^K\), 然后得到 item \(i\) 的类别向量

    \[\bm{\alpha}_i = v(\mathbf{e}_i^t) \in \mathbb{R}^K. \]

    \[\alpha_{ik} = P(z_{ik} = 1| v, \mathbf{e}_i^t). \]

  • 有了概率向量, HTD 采用 Gumbel-Softmax 来采样具体的类别:

    \[z_{ik} = \frac{\exp((\alpha_{ik} + g_k) / \tau)}{\sum_{j=1}^K \exp((\alpha_{ij} + g_j)/ \tau)}, \quad g \sim \text{Gumbel}(0, 1). \]

    注: 上面的公式似乎是错的, \(\alpha\) 应该替换为 \(\ln \alpha\).

  • 注: 读者可能觉得这分明就是一个连续的近似, 并不是离散的, 实际上 PyTorch 的 gumbel_softmax 实现中若令 hard=True 就会从该分布中采样, 并且可微 (通过某种技巧).

  • 现在我们已经有了分配矩阵 \(\mathbf{Z} \in \{0, 1\}^{b \times K}\), \(z_{ik} = 1\) 若 item \(i\) 属于第 \(k\) 个 group.

  • 现在, 我们可以根据这个分配矩阵来得到每个 group 中的 items, 并令这些 items 的 embedding 的平均作为类内中心, 即

    \[\mathbf{P}^t = \tilde{\mathbf{Z}}^T \mathbf{E}^t, \quad \mathbf{P}^s = \tilde{\mathbf{Z}}^T \mathbf{E}^s, \]

    其中 \(\mathbf{E}^t, \mathbf{E}^s\) 为当前 batch 的 item embeddings. \(\tilde{\mathbf{Z}}\) 为 \(\mathbf{Z}\) 的按列平均后的矩阵.

  • 类间距离: HTD 考虑两种类间距离,

    1. 一种是最直接的 group-group:

      \[h_{km} = \rho(\mathbf{P}_{k,:}, \mathbf{P}_{m,:}), \]

      由此可以得到 \(\mathbf{H}^t, \mathbf{H}^s \in \mathbb{R}^{K \times K}\).
    2. 另一种是 group-item:

      \[h_{kj} = \rho(\mathbf{P}_{k,:}, \mathbf{e}_j). \]

      由此可以得到 \(\mathbf{H}^t, \mathbf{H}^s \in \mathbb{R}^{K \times b}\).
  • 类内距离: 这个比较简单, 就是考虑每个 group 内的两两的相似度, 如果令

    \[\mathbf{M} = \mathbf{Z}\mathbf{Z}^T, \]

    则这部分的蒸馏损失可以总结为:

    \[\|\mathbf{M} \odot (\mathbf{A}^t - \mathbf{A}^s)\|_F^2. \]

  • 最后, 我们的 HTD 蒸馏损失为:

    \[\mathcal{L}_{HTD} = \gamma(\|\mathbf{H}^t - \mathbf{H}^s\|_F^2 + \|\mathbf{M} \odot (\mathbf{A}^t - \mathbf{A}^s)\|_F^2) + (1 - \gamma) (\sum_{i=1}^b \|\mathbf{e}_i^t - \sum_{k=1}^K z_{ik} f_k(\mathbf{e}_i^s)\|_2^2), \]

    注意到, 后半部分是为了保证一个比较合理的分类效果.

代码

[official-code]

标签:mathbb,HTD,Recommender,Distillation,System,group,mathbf,Topology
From: https://www.cnblogs.com/MTandHJ/p/17722400.html

相关文章

  • . Temporal table join currently only supports 'FOR SYSTEM_TIME AS OF' left table
    org.apache.flink.table.api.ValidationException:SQLvalidationfailed.Temporaltablejoincurrentlyonlysupports'FORSYSTEM_TIMEASOF'lefttable'stimeattributefield  atorg.apache.flink.table.sqlserver.utils.FormatValidatorExcept......
  • .netCore 图形验证码,非System.Drawing.Common
    netcore需要跨平台,说白点就是放在windows服务器要能用,放在linux服务器上也能用,甚至macos上。很多时候需要使用到图形验证码,这就有问题了。旧方案1.引入包<PackageReferenceInclude="System.Drawing.Common"Version="5.0.3"/>2.添加引用usingSystem.Drawing;usingSystem......
  • systemd path:实时监控文件和目录的变动
    回到Systemd系列文章大纲systemdpath:实时监控文件和目录的变动systemdpath工具提供了监控文件、目录变化并触发执行指定操作的功能。有时候这种监控功能是非常实用的,比如监控到/etc/nginx/nginx.conf或/etc/nginx/conf.d/发生变化后,立即reloadnginx。虽然,用户也可以使用in......
  • systemd timer:取代cron和at的定时任务
    回到Systemd系列文章大纲systemdtimer:取代cron和at的定时任务cron和systemdtimer实现定时任务的比较Linux环境下,cron是使用最广泛的定时任务工具,但它有一些不方便的地方。比如它默认:只支持分钟级别精度的定时任务定时规则太死板当调度到本次任务时,如果上次调度的任务仍......
  • systemd时代的开机启动流程(GPT+systemd)
    回到Systemd系列文章大纲systemd时代的开机启动流程(UEFI+systemd)计算机启动流程可以分为几个大阶段:内核加载前本阶段和操作系统无关,Linux或Windows或其它系统在这阶段的顺序是一样的内核加载中-->内核启动完成内核加载后-->系统环境初始化完成终端加载、用户登录......
  • (建议收藏)OpenHarmony系统能力SystemCapability列表
    SysCap,全称SystemCapability,即系统能力,指操作系统中每一个相对独立的特性。开发者使用某个接口进行开发前,建议先阅读Syscap使用指南,了解Syscap的定义和使用指导。再结合下文中的表格判断具体能力集是否支持某个设备,提高开发效率。说明:Default代表了一个功能比较全面的OpenHarmony设......
  • Ranking Distillation: Learning Compact Ranking Models With High Performance for
    目录概符号说明RankingDistillation代码TangJ.andWangK.RankingDistillation:Learningcompactrankingmodelswithhighperformanceforrecommendersystem.KDD,2018.概在分类问题上,知识蒸馏一般利用最后的logits,本文希望学生和教师对top-K的items的......
  • System API——arraycopy
    System.arraycopy(参数1,参数2,参数3,参数4,参数5)参数1:数据源,要拷贝的数据从哪个数组来参数2:从数据源数组中的第几个索引开始拷贝参数3:目的地,要把数据拷贝到哪个数组中参数4:目的地数组的索引参数5:拷贝的个数......
  • 【SystemUI】动态显示或隐藏状态栏及导航栏
    【SystemUI】动态显示或隐藏状态栏及导航栏平台:RK_TAOBAO_356X   Android11需求描述:动态切换状态栏与导航栏的显示或隐藏【解决方案】通过收发广播进行切换;>备注: protected-broadcast 为保护广播,如第三方应用想要接收到系统发送到以下广播,系统需对第三方应......
  • systemd 服务注册
    systemd服务项注册前言systemd是所有进程之母,它负责使Linux主机启动到可以做生产性任务的状态。systemd设定的一些功能比老的初始化程序要广泛得多,它要管理正在运行的Linux主机的许多方面,包括挂载文件系统、管理硬件、处理定时器以及启动和管理生产性主机所需的系统服务......