Closed1

LambdaRankのLightGBMの実装

bilzardbilzard

NN用のLambdaRankの公式実装は見つからなかったが、LightGBMの実装[1]は参考になる。

といっても、勾配更新の計算式は論文[2]の(6)式と全く同じである。

\lambda_{ij}=-\frac{\sigma}{1 + e^{\sigma(s_i - s_j)}}|\Delta_\text{NDCG}| \tag{6}

計算上の工夫として、

  • 損失関数の対象性を考慮してl_i>l_jのケースのみ計算
  • sigmoid関数などの関数をテーブル化
  • sigmoid関数を[-50, 50]の区間でクリッピング
  • |\Delta_{NDCG}| = | 2^{l_i} - 2^{l_j} | \cdot | \frac{1}{\log(2 + i)} - \frac{1}{\log(2 + j)}| \cdot \frac{1}{\text{NDCG}_{\max}}
脚注
  1. https://github.com/microsoft/LightGBM/blob/master/src/objective/rank_objective.hpp ↩︎

  2. https://www.microsoft.com/en-us/research/publication/from-ranknet-to-lambdarank-to-lambdamart-an-overview/ ↩︎

このスクラップは2022/12/29にクローズされました