Open zerebom opened 3 years ago
src: https://arxiv.org/pdf/1704.03135.pdf pytorch impl: https://gist.github.com/NegatioN/eb2c23fc98e67a6396f6ea77e384c549
MultiLabelのRankingタスクで使用されるNN用の損失関数。 rainforestコンペ 5th solutionsで使用されていた。 src: https://kutohonn.hatenablog.com/entry/2021/02/18/224002
過去の提案手法では、hinge-loss を使用されていたものが多かったが、 連続ではないため最適化が困難であった。
hinge-loss
本論文ではhinge-lossに近似できる連続関数を定義した。
Multi LabelのRankingタスクは↑の図のように2つのパートに分かれる。
そして、このタスクのゴールは下記のように表現される。
つまり、posラベルのpred値<negラベルのpred値となる事象数(?)を最小化することが目的。
ただし、このpos/negラベルの決定は自明ではない。 単純にやれば、
のような手法が考えられるが、これらだと画像のコンテキストを考慮することが出来ない。
これを解決するために、hinge-lossをsmoothにした log-sum-exp fuction を提案する。 また、label decisionを解決するために、分類タスクを別で解く手法も提案する。 さらに、ベイズ的側面から、提案したloss funcが他のものより優れているということを証明した。
log-sum-exp fuction
notation x_i: i番目のd次元の入力 y_i: i番目のデータに対するカテゴリカルラベル(K種) k_i: i番目のデータに付くposラベルの数 F(x): multi-label classifier モデル f(x) : 入力データ -> 各ラベルの確率出力関数(= label prediction model) g(f(x)): 各ラベルの確率 -> pos/neg ラベル決定モデル(= label decision model)
Y_i と予測値を入力としたloss func + 正則化項を最小にするのがタスク。
従来は下記のようなhinge lossが使用されていた。 sum(max( Negラベルの確率 - Pos ラベルの確率 + α))) (=hinge loss)
これを連続化したのが提案手法のLSEP loss (LSEP lossの上界はhinge lossになる)
LSEP loss はpair-wiseなのでO(N**2) の計算オーダーになるので、 カテゴリが多ければword2vecのようにNegative samplingすると良い。
似たタスクのための関数、"WARP"や"BP-MLL"より良いらしい(読んでない)
notationのg(・)の部分。 本論文では、g(・)を学習可能な関数として、CNNの最終層-1層にMLPを結合した。
top-kの手法を良くした、Label count estimationと しきい値の手法を良くした、Threshold estimationを用意した。
この画像に対しては何個のラベルが付くでしょうか?というタスクをMLPに解かせる。 付与できるラベル数を最大nと区切ることで、n個の多値分類として解かせる。
このMLPの入力は CNNの最終-1 層の出力になる。
各ラベルのしきい値をK次元の回帰モデルとして解く。
VGG16のsoftmaxをLSEP lossに置換して10epoch fine-tuneした
参考: https://www.smartbowwow.com/2020/05/improving-pairwise-ranking-for-multi.html
src: https://arxiv.org/pdf/1704.03135.pdf pytorch impl: https://gist.github.com/NegatioN/eb2c23fc98e67a6396f6ea77e384c549
MultiLabelのRankingタスクで使用されるNN用の損失関数。 rainforestコンペ 5th solutionsで使用されていた。 src: https://kutohonn.hatenablog.com/entry/2021/02/18/224002
過去の提案手法では、
hinge-loss
を使用されていたものが多かったが、 連続ではないため最適化が困難であった。本論文では
hinge-loss
に近似できる連続関数を定義した。Multi LabelのRankingタスクの説明
Multi LabelのRankingタスクは↑の図のように2つのパートに分かれる。
そして、このタスクのゴールは下記のように表現される。
つまり、posラベルのpred値<negラベルのpred値となる事象数(?)を最小化することが目的。
ただし、このpos/negラベルの決定は自明ではない。 単純にやれば、
のような手法が考えられるが、これらだと画像のコンテキストを考慮することが出来ない。
これを解決するために、hinge-lossをsmoothにした
log-sum-exp fuction
を提案する。 また、label decisionを解決するために、分類タスクを別で解く手法も提案する。 さらに、ベイズ的側面から、提案したloss funcが他のものより優れているということを証明した。提案手法
notation x_i: i番目のd次元の入力 y_i: i番目のデータに対するカテゴリカルラベル(K種) k_i: i番目のデータに付くposラベルの数 F(x): multi-label classifier モデル f(x) : 入力データ -> 各ラベルの確率出力関数(= label prediction model) g(f(x)): 各ラベルの確率 -> pos/neg ラベル決定モデル(= label decision model)
Label Prediction
Y_i と予測値を入力としたloss func + 正則化項を最小にするのがタスク。
従来は下記のようなhinge lossが使用されていた。 sum(max( Negラベルの確率 - Pos ラベルの確率 + α))) (=hinge loss)
これを連続化したのが提案手法のLSEP loss (LSEP lossの上界はhinge lossになる)
Negative sampling
LSEP loss はpair-wiseなのでO(N**2) の計算オーダーになるので、 カテゴリが多ければword2vecのようにNegative samplingすると良い。
Gradient
Comparison to Related Loss Functions
似たタスクのための関数、"WARP"や"BP-MLL"より良いらしい(読んでない)
Label Decision
notationのg(・)の部分。 本論文では、g(・)を学習可能な関数として、CNNの最終層-1層にMLPを結合した。
top-kの手法を良くした、Label count estimationと しきい値の手法を良くした、Threshold estimationを用意した。
Label count estimation
この画像に対しては何個のラベルが付くでしょうか?というタスクをMLPに解かせる。 付与できるラベル数を最大nと区切ることで、n個の多値分類として解かせる。
このMLPの入力は CNNの最終-1 層の出力になる。
Threshold estimation
各ラベルのしきい値をK次元の回帰モデルとして解く。
実験
VGG16のsoftmaxをLSEP lossに置換して10epoch fine-tuneした
個人的な疑問
参考: https://www.smartbowwow.com/2020/05/improving-pairwise-ranking-for-multi.html