Gradient Boost Modelにおける多クラス分類の目的関数について
概要
本稿ではgradient boosting modelによるMulti classの分類問題に関する以下の内容について説明する。
- 目的関数がsoftmaxの場合のgradientとhessianの導出過程について
- soft-labelの場合の拡張について
- LightGBM, XGBoostの組み込みの多クラス分類の目的関数では、hessianにある乗数が乗じられていること
前提知識
本稿の内容を理解するための前提知識は以下:
- Gradient Boosting ModelがどのようにDecision Treeのパラメータを学習するかについての知識[9]
- 多変数関数の(偏)微分の計算方法
経緯
XGBoostのカスタムobjectiveについての公式のチュートリアル[2,3]を見るとmulti:softprob
の模擬実装が掲載されている。ここではpointwiseのgradientおよびHessianは以下のように計算されている。
なお、上記における
以下では目的関数がsoftmaxの場合に(1)式の勾配が導出できることを示す。
また、(2)式におけるHessianの対角要素(以下単にHessianと記述)については理論的に計算される値の2倍に設定してあることについても示す。
Cross entropy目的関数の勾配の導出
softmaxを適用する前のモデルの予測値を
(3) 式について
したがって、
hard target(各クラスの確率が正解の場合1、それ以外は0)の場合、(1)式が導出できる。
なお、正解ラベルがhard targetでなく、一般的な確率分布で与えられる場合は(4)式によって勾配を計算できる。
Hessianの乗数について
Hessianは(4)式より、
XGBoostの組み込みの目的関数multi:softprob
では(2)式のように、これを2倍したものになっている。この根拠については見つけられていないが、lightGBMのmulti_logloss
でも過去のバージョンで同じように理論値の2倍の値を採用しており[4]、何らかの理論的、経験的な理由があるのだと思う。
現行のLightGBMの最新版(v4.3.0)では乗数として2でなく
This factor is to rescale the redundant form of K-classification, to the non-redundant form
In the traditional settings of K-classification, there is one redundant class, whose output is set to 0 (like the class 0 in binary classification).
This is from the Friedman GBDT paper.
FriedmanによるGBDTの論文[7]を読むと、以下の内容についての記述がある。
- Hessianの対角要素による近似を行っていること[1]
- Hessianに補正項
が適用してあること(論文[7]中の33式)K/(K-1) - Hessianが0に近い場合に数値計算的に不安定になること
学び/今後の課題
- LightGBMにせよXGBoostにせよ、Hessianについては微分して得られる値をそのまま設定してあるわけではなさそうなので、自分でobjectiveを設計する場合は組み込みのobjectiveをcustomで再実装して、組み込みの結果と乖離がないか見ておいた方が良い。
- Hessianの対角要素による近似についての理論的な背景について理解するためにはFriedmanのGradient Boostingの論文[7]や、その前身であるLogitBoost[8]の論文を読んだ方が良さそう。
Reference
- [2] Custom Objective and Evaluation Metric
- [3] Demo for creating customized multi-class objective function
- [4] https://github.com/microsoft/LightGBM/issues/1052#issuecomment-343875791
- [5] https://lightgbm.readthedocs.io/en/latest/Parameters.html#core-parameters
- [6] https://github.com/microsoft/LightGBM/blob/v4.3.0/src/objective/multiclass_objective.hpp#L31
- [7] Greedy function approximation: A gradient boosting machine
- [8] Additive Logistic Regression: A Statistical View of Boosting
- [9] Introduction to Boosted Trees
-
なお、これはGradient Boostの前身であるFHT00[8]からそうしているとのこと。 ↩︎
Discussion