Disentangled Self-Attentive Neural Networks for Click-Through Rate Prediction

# はじめに
こんにちは、@shoot16625です。
気ままに論文読んでいきます。

# 論文情報

`Disentangled Self-Attentive Neural Networks for Click-Through Rate Prediction`

- 著者：中国の方
- 2021/01/11
- https://arxiv.org/pdf/2101.03654.pdf

# 3行要約

- CTR予測モデル作ったよ
- 特徴同士の相互作用を捉えるために、self-attentionなNNを使うよ
- 特徴同士の相互作用と単一の重要度みたいなのを区別したself-attentionモデルのDSANを作ったよ

# INTRODUCTION
- CTR予測したいよね
- メジャーな方法だと、たくさんの特徴を使うね。ただ、データがスパースになりやすくて、オーバーフィットしやすいよ(カテゴリカル変数とか)
- なので、特徴を低次元に落とし込むよね。
- 最近の実装だと、白色化（無相関化）をよく使うよ。FM, HoFM, DeepFMなどなど 
- ただ、現実世界では使いにくいね
- その強力な解決策として、self-attention NNは使えるよ
- だた、普通のself-attentionだと、よろしくない(a)
- pairwise項(相互作用)とunary項(単発の効果)に分けて学習させた方がいいんじゃないの？(b)

![スクリーンショット 2021-03-07 21.59.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/d05ac59b-72f3-dd68-7fae-693fcf87f71f.png)


# A CLOSE LOOK AT SELF-ATTENTIVE NETWORKS FOR CTR PREDICTION

##  Learning Feature Interactions with Self-Attentive Networks
- KeyとQueryがself-attentionなweight-αの計算部分(a)

```math
\begin{aligned}
\alpha\left(\boldsymbol{e}_{m}, \boldsymbol{e}_{n}\right) &=\sigma\left(\phi\left(\boldsymbol{q}_{m}, \boldsymbol{k}_{n}\right)\right) \\
&=\frac{\exp \left(\phi\left(\boldsymbol{q}_{m}, \boldsymbol{k}_{n}\right)\right)}{\sum_{l=1}^{M} \exp \left(\phi\left(\boldsymbol{q}_{m}, \boldsymbol{k}_{l}\right)\right)}
\end{aligned}
```
- Valueと合わせて、新しいembeddingを得る

##  Dissecting Self-Attentive Networks

- self-attentionの計算αでは、ペア間の相互作用に重きを置いていて、単一の特徴の作用を無視しているよ
- 他の論文にインスパイアーされて、self-attention scoreをこんな感じにしてみたよ

```math
\boldsymbol{q}_{m}^{\top} \boldsymbol{k}_{n}=\left(\boldsymbol{q}_{m}-\boldsymbol{\mu}_{\mathrm{q}}\right)^{\top}\left(\boldsymbol{k}_{n}-\boldsymbol{\mu}_{\mathrm{k}}\right)+\boldsymbol{\mu}_{\mathrm{q}}^{\top} \boldsymbol{k}_{n}+\boldsymbol{q}_{m}^{\top} \boldsymbol{\mu}_{\mathrm{k}}-\boldsymbol{\mu}_{\mathrm{q}}^{\top} \boldsymbol{\mu}_{\mathrm{k}}
```

```math
\begin{aligned}
\sigma\left(\boldsymbol{q}_{m}^{\top} \boldsymbol{k}_{n}\right) &=\frac{\exp \left(\boldsymbol{q}_{m}^{\top} \boldsymbol{k}_{n}\right)}{\sum_{l=1}^{M} \exp \left(\boldsymbol{q}_{m}^{\top} \boldsymbol{k}_{l}\right)} \\
&=\sigma\left(\left(\boldsymbol{q}_{m}-\boldsymbol{\mu}_{\mathrm{q}}\right)^{\top}\left(\boldsymbol{k}_{n}-\boldsymbol{\mu}_{\mathrm{k}}\right)+\boldsymbol{\mu}_{\mathrm{q}}^{\top} \boldsymbol{k}_{n}\right) \\
&=\lambda \cdot \sigma(\underbrace{\left(\boldsymbol{q}_{m}-\boldsymbol{\mu}_{\mathrm{q}}\right)^{\top}\left(\boldsymbol{k}_{n}-\boldsymbol{\mu}_{\mathrm{k}}\right)}_{\text {pairwise }}) \cdot \sigma(\underbrace{\left.\boldsymbol{\mu}_{\mathrm{q}}^{\top} \boldsymbol{k}_{n}\right)}_{\text {unary }}),
\end{aligned}
```

- 最終的には、このように2partに

```math
\begin{array}{l}
\alpha_{\mathrm{p}}\left(\boldsymbol{e}_{m}, \boldsymbol{e}_{n}\right)=\sigma\left(\left(\boldsymbol{q}_{m}-\boldsymbol{\mu}_{\mathrm{q}}\right)^{\top}\left(\boldsymbol{k}_{n}-\boldsymbol{\mu}_{\mathrm{k}}\right)\right) \\
\alpha_{\mathrm{u}}\left(\boldsymbol{e}_{m}, \boldsymbol{e}_{n}\right)=\sigma\left(\boldsymbol{\mu}_{\mathrm{q}}^{\top} \boldsymbol{k}_{n}\right)
\end{array}
```

- (左)今回,(右)従来
- 従来のself-attentionだと、ジャンルという特徴自体が重要という情報が失われているのがわかるよね（全体的に違う感じもするけどw）

![スクリーンショット 2021-03-08 0.25.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/4507a834-f3c0-8ae8-a869-14048dfb2a0a.png)


## Why Cannot the Vanilla Self-Attentive Networks Learn the Two Terms Well?
- 従来のself-attentionだとうまいことscoreに反映されない理由が考察されてました

# THE PROPOSED METHOD: DISENTANGLED SELF-ATTENTIVE NETWORKS

## Modifying Vanilla Self-Attentive Networks
- モデルをどう修正するか書いてありました
- 確かに、いい感じになってるね↓（なぜ、従来のself-attentionもpairwiseとunaryに分かれているのだろう🤔）

![スクリーンショット 2021-03-08 0.57.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/5b2ed27b-66f0-527f-71b1-f6bd992e9f10.png)

## The DSAN Framework for CTR Prediction
- CTR予測に利用するなら、こんな感じだよ

![スクリーンショット 2021-03-08 0.59.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/7cb2837f-2202-7477-4b18-c586b2bbbfd8.png)

##  Discussion
- メモリの節約について書いてありました

# EXPERIMENTS
- 4つのことを検証するよ
    - RQ1: SOTAと比べる
    - RQ2: ゴリゴリのDeepなモデルと比べてどうやねん
    - RQ3: 何が精度に効いたの？
    - RQ4: key parameterがどう効いたの？
- 2つのデータセットで検証したよ

![スクリーンショット 2021-03-08 1.05.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/e3207fde-0949-8c42-0e2d-7161daa1fe2e.png)

## Performance Comparison of Feature-Interaction-based Models (RQ1)
- train timeタメになる

![スクリーンショット 2021-03-08 1.07.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/03484b58-ea57-945e-4614-f566e404a23a.png)

## Performance Comparison with Deep Models Integrated (RQ2)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/5aa5e955-491c-12b6-2e15-099d1805dda8.png)

## Ablation Studies (RQ3)
- DSANがよかった。（足し算）
- DSAN-M(掛け算とか)はダメみたい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/a66f3ae5-6f9b-82bc-ddf6-9d1079009430.png)

## Parameter Sensitivity Analysis (RQ4)

- Lを増やしていくと精度が落ちるのは、おそらくover fitting

![スクリーンショット 2021-03-08 1.22.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/fb7219f0-4f32-b766-530e-b2001d626097.png)

- dは大きいに越したことはない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343913/1655c4b1-f011-f632-c6a2-e73ab3b99a4f.png)

# 所感

- self-attentionのscoring部分だけの変更なので、そこまで変更がむずくなさそうで良かった。
- 学習時間も書いてあって良かった。
- よくこの発想（self-attentionではunary項がうまく学習できなそう）が思いついたなと思った。