はじめに
推薦システムの Two Tower モデルなどでよく使われる LogQ correction についてちゃんと理解したかったので、調べつつ本記事を書きました。数式メインの内容で、実務的なことは書いていませんが興味があればお読み頂ければと思います。
LogQ correction とは?
推薦システムではしばしばユーザ埋め込みとアイテム埋め込みを同じベクトル空間にマッピングする DNN モデルが用いられます。代表的なモデルとしては、Two Tower モデルですね。
そのようなユーザ埋め込みとアイテム埋め込みを同一空間にマッピングする DNN モデルでは損失関数に softmax 関数が用いられることが多く、式で書くと、正例のユーザ・アイテムペア $(u,p)$ に対して以下のようになります。
\mathcal{L}_{\mathrm{softmax}} (u,p)
= - \log \frac{e^{f_\theta (u,p)}}{\sum_{d\in \mathcal{D}} e^{f_\theta (u,d)}}. \tag{1}
ここで、$d, \mathcal{D}$ はそれぞれアイテム及びアイテム集合を表し、$f_\theta$ はユーザとアイテムの similarity を測る関数で、例えばユーザ埋め込みとアイテム埋め込みの cos 類似度などです。$\theta$ は最適化対象となる DNN の重みパラメータをまとめて表しています。
さて、上記の損失関数は分母に全アイテムを走査する sum が入っており、上式をそのまま用いて学習を回すのは流石にコストがかかるので、実際に学習する際には分母は In-Batch Negative Sampling します。サンプリングにおいては、(In-Batch の) データセット内で一様にサンプル抽出しつつ、popularity bias を取り除く処理として、以下の loss を用います。
\mathcal{L}_{\mathrm{logQ}} (u,p)
= - \log \frac{e^{f_\theta (u,p)-\log Q(p)}}
{e^{f_\theta (u,p)-\log Q(p)} + \sum_{i=1}^n e^{f_\theta (u,d_i)- \log Q(d_i)}}. \tag{2}
ここで、$Q(x)$ はアイテム $x$ の出現数(出現頻度)であり、この $\log Q$ 形式の補正を入れることを LogQ correction と呼んだりします。なお、先に述べたことからも推察できるかと思いますが、この LogQ correction こそがサンプリング時の popularity bias を取り除く処理に対応しています。
LogQ correction による popularity bias の除去について、定性的に理解することは難しくないかと思います。出現数の多いアイテムほどサンプリングされる確率は高くなるので、loss に対する寄与をその分減らすイメージですね。では、定量的にはどうでしょうか?
- $\log Q$ 形式で寄与度を調整することは妥当なのでしょうか?
- サンプリングしたわけではない正例ペアについても $\log Q$ の補正を入れることは妥当なのでしょうか?
この記事では参考文献に記載の論文 (https://arxiv.org/abs/2507.09331) をもとに (1) 式を近似して (2) 式に至ることができるかを考えてみたいと思います。なお、当該論文に比べてこの記事だけの新規の内容が何かあるわけではありませんが、論文の方法より簡潔な式変形にしたのと、説明も丁寧にしたつもりです。また、当該論文の趣旨は LogQ correction を更に修正するという内容ですが、それについてはこの記事では触れません。
softmax の近似
では、早速 (1) 式の近似計算に入っていきましょう。
任意の $d$ に対して、$Q(d)>0$ かつ $\sum_{d\in \mathcal{D}} Q(d)=1$ なる $Q(d)$ を使って (1) 式の分母を以下のように書き換えます。
\sum_{d\in \mathcal{D}} e^{f_\theta (u,d)}
= \sum_{d\in \mathcal{D}} Q(d) \left[ \frac{e^{f_\theta (u,d)}}{Q(d)} \right]
= \sum_{d\in \mathcal{D}} Q(d) \left[ e^{f_\theta (u,d)- \log Q(d)} \right].
$Q(d)$ はその定義から $\mathcal{D}$ 上の確率分布を与えるように用意したので、上式は期待値の計算式になっています。そして、期待値計算についてはサンプリングによって以下のように近似できます。
\sum_{d\in \mathcal{D}} Q(d) \left[ e^{f_\theta (u,d)- \log Q(d)} \right]
\approx \frac{1}{n} \sum_{i=1}^n e^{f_\theta (u,d_i)- \log Q(d_i)}.
いうまでもないかもしれませんが、上式の $d_i (i=1,...,n)$ は分布 $Q(d)$ に従って i.i.d. でサンプリングしているものとします。
これを (1) 式に戻すと、
\displaylines{
\mathcal{L}_{\mathrm{softmax}} (u,p)
= - \log \frac{e^{f_\theta (u,p)}}{\sum_{d\in \mathcal{D}} e^{f_\theta (u,d)}}
\approx - \log \frac{e^{f_\theta (u,p)}}{\frac{1}{n} \sum_{i=1}^n e^{f_\theta (u,d_i)- \log Q(d_i)}} \\
= - \log \frac{e^{f_\theta (u,p)}}{\sum_{i=1}^n e^{f_\theta (u,d_i)- \log Q(d_i)}} - \log n.
}
(2) 式にだいぶ近くなりました。ここで、損失関数の近似とは異なりますが、最適化という観点では重みパラメータ $\theta$ に依存しない $\log n$ は無視しても問題ありません。また、これと同じ理由から次の操作も最適化には影響を与えません。
\displaylines{
- \log \frac{e^{f_\theta (u,p)}}{\sum_{i=1}^n e^{f_\theta (u,d_i)- \log Q(d_i)}} + \log Q(p)
= - \log \frac{e^{f_\theta (u,p)}}{Q(p)\sum_{i=1}^n e^{f_\theta (u,d_i)- \log Q(d_i)}} \\
= - \log \frac{e^{f_\theta (u,p)- \log Q(p)}}{\sum_{i=1}^n e^{f_\theta (u,d_i)- \log Q(d_i)}}.
}
これでほぼ (2) 式と同じになりました。
また、ここまでの式変形は形式的に進めることが出来たことからわかるように確率分布 $Q(d)$ にはどのような分布を選んでも良く、In-Batch Negative Sapmling は、$Q(d)$ をアイテム $d$ の出現頻度分布に選んだ場合に対応することがわかります。
さらに、この辺りで (2) 式の分母に違和感が出てきます。それは、負例は確率分布 $Q(d)$ からサンプリングされるのに対し、正例は確率1で確定的に含まれているという点です。つまり、分母に正例を含めることは (1) 式との整合性という点では必ずしも必要ではないことが分かります。ちなみに、参考文献の論文では (2) 式もサンプルサイズ無限大の極限 ($n \to \infty$) で (1) 式と等価であることが示されていますが、この記事では触れません。
終わりに
以上で、はじめの問いにある程度答えることが出来ます。
- $\log Q$ 形式で寄与度を調整することは妥当なのでしょうか?
式変形を通じて $\log Q$ の由来が明らかになったかと思いますので、その妥当性も確認できたと思います。
- サンプリングしたわけではない正例ペアについても $\log Q$ の補正を入れることは妥当なのでしょうか?
これについては、正例に $\log Q$ 補正を入れることは (1) 式との整合性という観点では必ずしも必要ではないことが分かりました。分母に正例を含めることについても同様です。一方で、(1) 式との整合性を保つことが性能向上を保証するわけではない点には注意が必要かと思います。
ともあれ、今回調べて LogQ correction はだいぶ正確に理解できた気がするのでよかったです。なお、記述内容に誤り等があればコメントいただけますと助かります。