Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

(講義ノート)統計的機械学習第9回

前回はこちら。📄Arrow icon of a page link(講義ノート)統計的機械学習第8回 。内容は以下の通り。

多クラス分析の汎化誤差解析

Image in a image block

これはよくない上界であり、よりよい上界の評価だと、1δ1-\delta以上の確率で以下のようになる。

Rn(ϕρM)4YρRn(F)+log(1/δ)2mR_n(\phi_\rho \circ \mathcal{M}) \leq \frac{4 |\mathcal{Y}|}{\rho} R_n(\mathcal{F}^\prime) + \sqrt{\frac{\log(1 / \delta)}{2m}}

今回は、そこまで効率的ではないアルゴリズムであっても、数を集めるとうまく学習できるというBoostingについてである。

確率的近似学習

Probability Approximately Correct learning=PAC学習というものがある。

ある真の仮説hh^*がPAC学習可能であるとは、ϵ,δ\forall \epsilon, \forall \deltaについて、以下を満たす仮説hhを出力する多項式時間アルゴリズムが存在すること。

Pr(Pr(hh(x))>ϵ)1δPr(Pr(h \neq h^*(\mathbf{x})) > \epsilon) \leq 1 - \delta

うまく仮説を見つける多項式アルゴリズムがあればOK。

Boostingについて

まず、弱学習器について定義する。

先ほどのPAC学習でϵ,δ\forall \epsilon, \forall \deltaで成立するということだった。これをϵ.δ\exist \epsilon. \exist \deltaという、ある固定された2つの値で学習できる学習器のことである。

この弱学習器があるなら、PAC学習可能な学習器はできるか?→できます!

Boostingは何するの?

複数の識別器による重み付き(もちろんすべて重みが同じでもいい)の識別器による多数決をするアルゴリズムであること。

線形で分離不能であるとしても、多数決のシステムを導入すれば非線形も学ぶことができる。

  • バギング tt個目の識別器の訓練に使うデータは、全体のデータDDからサンプリングして選ぶ。
  • ブースティング tt個目の識別器の訓練に使うデータは、全体のデータDDだけではなく、今までの識別器f1,,ft1f_1, \cdots, f_{t-1}を参考にして作る。

📄Arrow icon of a page linkNNDL 第9章 教師なし学習 も参考にする。

Gradient Boosting

回帰について考える。

  • 観測データ{(xi,yi)}i=1n\{ (\mathbf{x}_i, y_i) \}_{i=1}^nである。
  • 弱識別器はh:XRh: X \to \mathbb{R}

集団学習における回帰問題は、以下のように重みαt\alpha_tを割り当てて、弱学習器hth_tを選ぶ。ではどう決めるのか?

yi=H(xi)=i=1Tαtht(xi)y_i = H(\mathbf{x}_i) = \sum_{i=1}^T \alpha_t h_t(\mathbf{x}_i)

弱学習器を追加するときに、追加した結果できるだけyiy_iに近づいてほしい。

i,yiHt1(xi)+αtht(xi)i,yiHt1(xi)αtht(xi)\forall i, y_i \approx H_{t-1}(\mathbf{x}_i) + \alpha_t h_t(\mathbf{x}_i) \\ \forall i, y_i - H_{t-1}(\mathbf{x}_i) \approx \alpha_t h_t(\mathbf{x}_i)

よって、次の弱学習器は、残差yiHt1(xi)y_i - H_{t-1}(\mathbf{x}_i)を学習するようにすればいい。

学習器Ht1H_{t-1}について損失関数を以下のように、MSEによる回帰の形にする。

L(Ht1)=i=1nl(yi,Ht1(xi))=12i=1n(yiHt1(xi))2L(H_{t-1}) = \sum_{i=1}^n l(y_i, H_{t-1}(\mathbf{x}_i)) = \frac{1}{2} \sum_{i=1}^n (y_i - H_{t-1}(\mathbf{x}_i))^2

ここで、xi\mathbf{x}_iを固定して微分を考えると、以下のようになる。

L(Ht1)Ht1(xi)=Ht1(xi)yi\frac{\partial L(H_{t-1})}{\partial H_{t-1}(\mathbf{x}_i)} = H_{t-1}(\mathbf{x}_i) - y_i

ここで、以下のようなhth_tを選ぶとする。

ht(xi)=yiHt1(xi)=LHt1(xi)h_t(\mathbf{x}_i) = y_i - H_{t-1}(\mathbf{x}_i) = -\frac{\partial L}{\partial H_{t-1}(\mathbf{x}_i)}

そうすると、Ht(xi)=Ht1(xi)+αtht(xi)H_t(\mathbf{x}_i) = H_{t-1}(\mathbf{x}_i) + \alpha_t h_t(\mathbf{x}_i)へ代入をしてみると、以下のようにまさに勾配法になる

Image in a image block

なので、1ステップ前の関数で勾配法を適用させることで、自動的に残差を学習できる。

逆に言えば、hth_tがわかれば、それがGradientの負符号になる。実際はそこまで理想的なhth_tを得ることはできないので以下のように計算される。

ht=arg minhH12i=1n(yiHt1(xi)h(xi))2h_t = \argmin_{h \in \mathcal{H}} \frac{1}{2} \sum_{i=1}^n (y_i - H_{t-1}(\mathbf{x}_i) - h(\mathbf{x}_i))^2

なので、具体的には以下のようになる。損失関数が2乗誤差である必要がなく、2乗誤差であれば微分したらちょうど残差になりより数学的には推定の精度が上がるというだけである。

  1. 損失に対して、Ht1H_{t-1}についての勾配を計算する。
y~i=[l(yi,H(xi))Ht1(xi)]H=Ht1\tilde{y}_i = - [\frac{\partial l(y_i, H(\mathbf{x}_i))}{\partial H_{t-1}(\mathbf{x}_i)}]_{H=H_{t-1}}
  1. その勾配y~i\tilde{y}_iにできるだけフィッティングするような関数を探す。yHt1(xi)y-H_{t-1}(\mathbf{x}_i)は残差であり、MSEを使うならば今探しているh(xi)h(\mathbf{x}_i)はその解である。
ht=arg minhH12i=1n(yiHt1(xi)h(xi))2h_t = \argmin_{h \in \mathcal{H}} \frac{1}{2} \sum_{i=1}^n (y_i - H_{t-1}(\mathbf{x}_i) - h(\mathbf{x}_i))^2
  1. 更新するstep sizeを計算する。これは一意に決められる。
αt=arg minαL(Ht1+αht)\alpha_t = \argmin_\alpha L(H_{t-1} + \alpha h_t)
  1. Ht=Ht1+αthtH_t = H_{t-1} + \alpha_t h_tで更新する。
二乗損失の代わりに他使うとどうなるか

二乗損失では、微分すると残差になる。

絶対損失では、劣微分するとy~i=sign(yiHt1(xi))\tilde{y}_i = \mathrm{sign}(y_i - H_{t-1}(\mathbf{x}_i))となる。つまり残差の符号になる。

ロジスティック損失では、以下のようになる。

Image in a image block
分類の場合はどうすればいいか

これは回帰についての手法なので、分類に適用するときは以下のようにする必要がある。

Image in a image block

カテゴリごとに、所属している=0、所属していない=1を予測するように(onehotの予測のように)する。

それか、softmax化させたものを損失関数で予測する。

Boostingの汎化誤差解析

凸包

まず、凸包を定義する。これは該当のkk個の仮説について重みを割り当て、その重みの和が1になるようなときに作った識別器の集合のこと。

Image in a image block

凸包のRademacher複雑度は、もともとのRademacher複雑度と等しい。

Rn(conv(F))=Rn(F)R_n(\mathrm{conv}(\mathcal{F})) = R_n(\mathcal{F})
証明はこちら

まず、次のような集合を考える。

Image in a image block

このような集合を考える。これを重みに用いて、以下のようにRademacher複雑度で展開できる。

Image in a image block

ここでのsup\supconv(F)\mathrm{conv}(\mathcal{F})をかきかえることができる。sup(α1,)Asup(f1,)F\sup _{(\alpha_1, \cdots) \in \mathcal{A}} \sup_{(f_1, \cdots) \in \mathcal{F}}となる。

Image in a image block

このように、σi,αi\sigma_i, \alpha_iの順序を交換してみると、supα\sup_{\alpha}は一番大きい所だけαi=1,\alpha_i=1, それ以外は0にすればよく、それはつまりmaxを取るのと変わらない。

この操作をすれば、おのずと当初のRademacher複雑度Rn(F)R_n(\mathcal{F})が得られる。

汎化解析

弱学習器の集合をF\mathcal{F}とする。Boostingの仮説関数H(x)=t=1Tαtht(x)H(\mathbf{x}) = \sum_{t=1}^T \alpha_t h_t(\mathbf{x})として、その集合をH\mathcal{H}とする。

ここではαt\alpha_tの非負、和が1を満たす必要がある。Boostingによってはそうじゃないものもあるので、もし重みが負ならばh,hF\forall h, -h \in \mathcal{F}とすればいい。和自体は正規化してもいいので正規化する。

Rademacher複雑度による汎化誤差解析は以下のようになっていた。

Image in a image block

これを利用すると、以下のようになる。

ρ>0\forall \rho > 0に対して、1δ1 - \delta以上の確率で以下が成り立つ。

Image in a image block

ここで、ϕρ=1(yiH(xi))exp(yiH(xi))\phi_{\rho=1}(y_i H(\mathbf{x}_i)) \leq \exp(-y_i H(\mathbf{x}_i))を用いれば、AdaBoostの汎化誤差解析ができる。ここで使っているexp-\expは非常に誤差に対して厳しいものである。

Image in a image block

これの証明自体はほぼ自明であるので、書かない。Taraglandの補題と、01損失をϕρ=1\phi_{\rho=1}を使って上から押さえられるというのを使う。

Decision Stamp(決定株)のRademacher複雑度

定義

Image in a image block

仮説関数は、ある閾値zzを引いた時の符号にα=+1,1\alpha=+1,-1を乗じたもので、これは弱識別器である。そして、kkクラス分類であるので、識別器はd,k[1,d]d, k \in [1,d]個ありその中での最大値を取るクラスを識別結果とする。

証明

形からして、Massartの有限仮説の補題を使いそう。

まず、H\mathcal{H}zzが無限に値をとれるので無限集合のように見える。しかし、α,d\alpha, dは有限であり、各データ点は有限であるので、取りうる意味があるzzは高々意味のあるn+1n+1通りしかない。なので、実はH\mathcal{H}は有限集合であり、以下のMassartの有限仮説の補題を使える。

M0,supaAi=1nai2M2Eσ[supaA1ni=1nσiai]2M2logAn\exist M \geq 0, \sup _{\mathbf{a} \in \mathcal{A}} \sum_{i=1}^n a_i ^ 2 \leq M ^ 2 \\ \mathbb{E}_{\sigma} [\sup _{ \mathbf{a} \in \mathcal{A}} \frac{1}{n} \sum_{i=1}^n \sigma_i a_i] \leq \frac{\sqrt{2 M^2 \log |\mathcal{A}|}}{n}

そして、H=2×d×(n+1)|\mathcal{H}| = 2 \times d \times (n+1)であり、取りうるデータ点がM=1|M|=1であるとすれば、示せた。

XGBoost/LightGBM

テーブルデータに強い。

回帰木と呼ばれる実数値を出力する木のアンサンブルをする。

回帰木は+1,1+1,-1に限らず、連続値を出力する。

XGBoostのRademacher複雑度

Gradient Boostingのアルゴリズムに落とし込んで考えると、

Image in a image block

こんな風にやりたい。ここにあるh(xi)h(\mathbf{x}_i)は回帰木である。

回帰木

まずは回帰木について定義する。

各葉leaflleaf_lは値wlw_lを持つ。入力x\mathbf{x}を、葉のいずれかに対応付けるノード分割関数(左に行くか右に行くかのように)を決定木で実装する。

そして、葉の出力については、入力x\mathbf{x}が分類の末にたどり着いた葉leaflleaf_lに入っているなら1、入っていないなら0を得るようなもの1[xleafl]\mathbf{1}[\mathbf{x} \in leaf_l]を考える。

回帰木は、以下のように定義できる。所属している葉は1つしかないが、これを指示関数で表現しwlw_lの重みを乗じている。

Image in a image block

回帰木を構成するすべての葉について、すべてに重みを割り当てて帰ってくる値はそのうちの1つのx\mathbf{x}が行き着いた葉ということ。

1\mathbf{1}の総和は1つだけ1になるが、それについてRademacher変数を割り当てて考えてみる。つまり、以下のようになる。これらを成分としたRademacher変数のベクトルσ\boldsymbol{\sigma}があるとする。つまり、重み

σ=i=1nσi1[xleafl]\boldsymbol\sigma = \sum_{i=1}^n \sigma_i \mathbf{1}[{x} \in leaf_l]

回帰木のノルムについて、正則化の制限をする。q1,wqλq \leq 1, ||\mathbf{w}||_q \leq \lambdaである。

そして、h(x)h(\mathbf{x})のノード数(同じ葉の数でも、それに至るまでの条件分岐=ノードの数が違うかも)をmmとする。これらを変数として、決定木の集合Hm,λ,q\mathcal{H}_{m, \lambda, q}を定められる。

これからRademacher複雑度を計算していく。

Image in a image block

まず重みw\mathbf{w}とRademacher変数と枝を掛け合わせたσ\boldsymbol \sigmaの内積に分解でき、次にHolderの不等式で内積をr,q,1/r+1/q=1r,q, 1/r+1/q=1のノルムに分解できる。

そのためにノルムの仮定を設けたのであり、次にrrノルム単品はL1ノルムで抑えられる

Image in a image block

なぜL1ノルムで評価したのかというと、回帰木のRademacher複雑度の絶対値を外したい。絶対値を外したい=絶対値の外に1,+1-1,+1を取る変数を入れて、それのsupを取る事に当たる!(Rademacher変数も1,+1-1,+1を取るがあちらはランダム。これは恣意的に選べる。)

このようにsls_lを導入できるには意味があって、最後の式変形のように総和の交換を行うことで、重みが恣意的に動かせるw\mathbf{w}である回帰木ではなく、重みが+1か-1であり、(1[]\mathbf{1}[]は1つだけ1となり他は0となる。1のところのsls_lだけを出力する)決定木となる。

よって、これの集合を以下のようにすると、また式変形ができる。

Image in a image block
Image in a image block

このように、slSns_l \in \mathcal{S}_nのRademacher複雑度に帰着できる。ノード数がmmの二分決定木であると仮定する(そうじゃなくてlogに入れる都合上関係なさそう)と、そのような決定木の集合Bm\mathcal{B}_mの集合は有限である(前述のように、学習データが有限なので、意味がある決定木の数が有限ということ)

なので、Massartの有限仮説の補題から、抑えられる。

R^n(Bm)=2nlogBn\hat{R}_n (\mathcal{B}_m) = \sqrt{\frac{2}{n} \log |\mathcal{B}_n|}

回帰木を決定木に帰着したい、ということなのでL1ノルムで抑えたという形。

ノード数mmの二分決定木とは何なのか

出来るだけきれいに分かれてる二分木である決定木のモデルを考える。

深さがDDの時、葉の数は2D2^Dであり、それに至るまでのノード数は1+2+4+=2D11+2+4+\cdots=2^D-1である。

ノードの閾値をθ=0\theta=0を固定し、各ノードの選択に使える特徴量の種類がdd個であるとき、二分木全体のサイズは

Bm,0=dm2m+1(d+2)2m+1|\mathcal{B}_{m,0}| = d^m \cdot 2^{m+1} \leq (d+2)^{2m+1}

今は閾値が全部で統一しているが、閾値を自由に動かせる場合はどうか?無限に動かせるが、実質意味がある閾値はデータ点nn個を分類するためにn+1n+1個しかないので、以下のようにサイズを抑えられる。

Bm=(n+1)mdm2m+1|\mathcal{B}_m| = (n+1)^m \cdot d^m \cdot 2^{m+1}