今、坂本俊之『作ってわかる アンサンブル学習アルゴリズム入門』を学習中です。
決定木の基礎から勾配ブースティングまでフルスクラッチで作れて勉強になり、楽しいです。
しかし、この記事
坂本俊之『作ってわかる! アンサンブル学習アルゴリズム入門』の誤植情報を集める
にあるよう、ミスがいくつかあります。
そして、9章の勾配ブースティングの説明も間違っていると思われるのですが、私の勘違いかもしれないので、指摘等を集める意味でも記事にしました。
間違っていると思われる個所
p201の式(2)
\begin{align}
h_{i+1}&=h_{i}+\eta \frac{\delta l_i}{\delta y}\\
&=h_{i}+\eta\cdot2\cdot\sum_m(y_{mi}-h_{mi})
\tag{2}
\end{align}
という式がおかしいと思います
p200で、「$i$番目の学習」と書いてあるので、$i$は予測機が何番目か表すインデックス、$m$はデータのインデックスだと思われます。
そうすると$\sum_m(y_{mi}-h_{mi})$はデータすべてについて目的変数と予測結果の残差を取って足し合わせるという計算になると思われます。
しかしそのような計算はその次のページのコードには載ってないですし、そもそもページ下部で参照している勾配ブースティングの論文1にも載ってません。
修正案
記号はそのままで、元の論文の理論展開に合わせてp200、201の説明を直すと、
「$M$個あるデータの内$m$番目のデータの目的変数を$y_m$、それに対する$i$番回学習した予測結果(モデル関数)を$h_{i}(x_m)$とすると、二乗平均誤差の損失関数$l$は
\begin{align}
l_{mi}=\frac{1}{2}[y_{m}-h_{i}(x_m)]^2\tag{1*}
\end{align}
となる。
一般的に次の$i+1$番目のモデル関数$h_{i+1}$の誤差関数がより小さくなるようにするには、学習率$\eta$、全ての$x$についての損失関数の勾配の期待値
\begin{align}
g_i&=E\left[\frac{\partial l}{\partial h}|_{h=h_i}\right]
\end{align}
を用いて、勾配降下法の要領で、$h_{i+1}=h_i-\eta g_i$と計算すればいい。このとき$g_i$は$h_{i+1}$,$h_i$と同じくモデル関数である。(特定の値などではない)
しかし、$M$個の有限のデータしかなく、$x=x_m$以外の点での勾配が求められないので$g_i$は計算できない。そこで式(1*)を$h$で微分し、$h_{i}(x_m)$を代入する。
\begin{align}
\frac{\partial l_{mi}}{\partial h_i}&=-[y_{m}-h_{i}(x_m)]\\
&=-\tilde{y}_{mi}
\end{align}
$x_m$から、$\tilde y_{mi}$を予測するモデル関数は、$-g_i$と近くなりそうである。そこで、$\tilde y_{mi}$を予測する弱学習機$\theta_i(x_m)$を作成し、これを$-g_i$の近似関数とみなして$h_{i+1}=h_i+\eta \theta_i$と更新することにすればいい。
さらに$\theta_i^\ast=\eta\theta_i$とすると、学習機$\theta_i$で$\tilde y_{mi}$ を予測することは次の表に示すように、 $\theta^\ast_i$ で $\eta\tilde y_{mi}$ を予測することと同じになる。
学習機 | 目的変数 |
---|---|
$\theta_i$ | $\tilde{y}_{mi}$ |
$\theta_i^\ast=\eta \theta_i$ | $\eta\tilde{y}_{mi}$ |
よって、$x_m$から目的変数$\tilde{y}^\ast_{mi}=\eta[y_{m}-h_{i}(x_m)]$を予測する学習機$\theta_i^\ast$を作成し、予測機を$h_{i+1}=h_i+\theta_i^\ast$と更新する。」
という説明にすると、論文やこの次のページのコードとの整合性が取れます。
(本書籍のここの説明中の記号は、論文中の記号が別で使われている記号と入れ替わっていて大変紛らわしいです
論文→本書籍の対応で、全体の予測機$F$が$h$、弱学習機$h$は$\theta$、学習機の番号$m$は$i$、データ番号$i$は$m$に入れ替わっています。)
以上です。どなたか指摘等あればコメントお願いします。