20
NIPS2014 reading Akisato Kimura (@_akisto)

NIPS2014 reading - Top rank optimization in linear time

Embed Size (px)

Citation preview

NIPS2014 reading

Akisato Kimura (@_akisto)

今日の本題

1-page summary

• 上位だけを当てに行くランキング学習

• サンプル数の線形オーダの学習時間

– ランキング学習=サンプル対の差分の二値分類=サンプル数の二乗オーダの学習時間という問題を解消.

• ランキング学習一般に使える

–問題特有の性質を使った高速化ではない

Learning to rank

• 指定のクエリを含むたくさんの文書を何かの基準で並び替える問題.

@sleepy_yoshiランキング学習事始め http://www.slideshare.net/sleepy_yoshi/dsirnlp1

Learning to rankのしくみ

Pairwise ranking

Pairwise rankingの問題点

与えられたランキングを全部再現しようとする.

訓練サンプル数の二乗オーダの計算時間がかかる.

なぜ全部を再現しなくても良いか

興味があるのはランキングの上位だけ.下位が多少外れていても気にならない.

上位だけを再現する方法

• 上位を強調する評価尺度を直接最適化

–情報検索の評価尺度は上位重視: AP, NDCG

–直接の最適化は問題が複雑になる,遅い.

• 上位を強調する凸損失関数を設定

– [Usunier+ ICML09] [Rudin+ JMLR09]

– InfinitePush [Agarwal+ SDM11]

–結局pairwise学習,遅い.

この論文の貢献

• 上位を強調する評価尺度を直接最適化

–情報検索の評価尺度は上位重視: AP, NDCG

–直接の最適化は問題が複雑になる,遅い.

• 上位を強調する凸損失関数を設定

– [Usunier+ ICML09] [Rudin+ JMLR09]

– InfinitePush [Agarwal+ SDM11]

– Pairwise損失と等価な非pairwise損失を設定

–非凸なprimalを凸なdualに変換して解く,速い.

ようやく本題

• Bipartite ranking: 評価値∈{-1,+1}の問題を考える.

• 普通の損失関数

– 二値分類に帰着させたときのAUCと等価

素性ベクトルのドメイン

+評価値・ー評価値素性の集合

損失関数を変える

• 普通の損失=AUC

• 上位に注力した損失: positives at the top

予測順位 正解評価値

1 +1

2 -1

3 +1

4 +1

5 -1

ℒ𝑟𝑎𝑛𝑘 = 1 + 1 + 0 + 1 + 0 + 1 /6

= 0.667

ℒ = 1 + 0 + 0 /3 = 0.333

最適化できる損失に変える

• Indicatorを単調非減少凸関数に変える

– Truncate quadratic がおすすめ?

• 実は従来法 [Agarwal+ SDM12] の損失と等価

–従来のℒ∞ℓ よりも今回のℒℓの方が計算が楽

–あとで出てくる双対問題の変数も少なくて済む

最適化の準備 1/2

• 線形ranker を考える

• 微分可能凸関数の共役凸関数ℓ 𝑧 = max

𝛼∈Ω𝛼𝑧 − ℓ∗(𝛼)

– ℓ∗ 𝛼 : ℓ(𝑧)の共役凸関数

– ℓ 𝑧 = truncated quadratic→ ℓ∗ 𝛼 = −𝛼 + 𝛼2/4, Ω = ℝ+

最適化の準備 2/2

• maxのある最適化しにくい損失関数を,最適化しやすい双対凸関数に変換.

提案手法のメリット

• 双対変数の数=訓練サンプル数

–従来法では訓練サンプルの二乗オーダ

• 凸(かつすごい簡単な)最適化

アルゴリズム

• Gradient-based method

注意するのはここだけ.ただ,これも解決済.(詳細は本文参照)

理論性能解析

• 計算量はサンプル数の線形オーダ

• 精度保証もある

Note:• TopPush, InfinitePush,

AAAPはMatlab実装.• LR, cs-SVRはliblinear• 他は著者配布コード

Last words

• ブラックボックスの中身を知ることは大切.

• 最適化の技術を身に付けておくと,計算機資源を有効に活用できる.

• 「非線形拡張は簡単」は全然信用できない.