2.2.2. 線形回帰モデルと正則化

2020/4/2公開

導入

前回はy=axy=axという非常に簡単なモデルを扱ったが、では切片を追加して

y=ax+b(2.2.2.1)y = ax + b \tag{2.2.2.1}

としたらどうなるだろうか。また、もっと入力を増やして

y=w0+w1x1+w2x2++wnxn(2.2.2.2)y = w _ 0 + w _ 1 x _ 1 + w _ 2 x _ 2 + \cdots + w _ n x _ n \tag{2.2.2.2}

としたらどうだろう。つまり出力yyを決めうるファクターとしての入力がx=(x1,x2,,xn)x = (x _ 1, x _ 2, \ldots, x _ n)のように複数ある状況を想定している。

今回は線形回帰モデルを扱うことにしよう。

モデリング

実は入力を増やすだけであればやることはほとんど変わらない。(2.2.2.2)(2.2.2.2)式は(2.2.2.1)(2.2.2.1)式の拡張になっているから、(2.2.2.2)(2.2.2.2)式についてだけ議論すればよく、前回と同様にガウス分布に従う誤差ε\varepsilonを導入して

y=w0+w1x1+w2x2++wnxn+ε(2.2.2.3)y = w _ 0 + w _ 1 x _ 1 + w _ 2 x _ 2 + \cdots + w _ n x _ n + \varepsilon \tag{2.2.2.3}

とすればよい。出力yy(2.2.2.3)(2.2.2.3)式で表現するモデルを線形回帰モデル(linear regression model)という。やることは前回『2.2.1. 線形回帰の基礎』とほとんど同じでやることがなさすぎるので、ついでに(2.2.2.3)(2.2.2.3)式を今後使いやすい形に整えておこう。

まず(2.2.2.3)(2.2.2.3)式で切片w0w _ 0の項にはxxが現れないのでアンバランスである。そこで

ϕi(x)={1ifi=0xiotherwise(2.2.2.4)\phi _ i (x) = \begin{cases} 1 & {\rm if} \,\, i = 0 \\ x _ i & {\rm otherwise} \end{cases} \tag{2.2.2.4}

とおく。今後は煩雑化を防ぐためにϕi(j)=ϕi(x(j))\phi _ i ^ {(j)} = \phi _ i (x ^ {(j)} )という書き換えを断りなく用いることがある。このとき(2.2.2.3)(2.2.2.3)式は

y=w0ϕ0(x)+w1ϕ1(x)+w2ϕ2(x)++wnϕn(x)+ε=i=0nwiϕi(x)+ε=wTϕ(x)+ε(2.2.2.5)\begin{aligned} y &= w _ 0 \phi _ 0 (x) + w _ 1 \phi _ 1 (x) + w _ 2 \phi _ 2 (x) + \cdots + w _ n \phi _ n (x) + \varepsilon \\ &= \sum _ {i=0} ^ n w _ i \phi _ i (x) + \varepsilon \\ &= w ^ \mathrm{T} \phi(x) + \varepsilon \end{aligned} \tag{2.2.2.5}

と書ける。上式のwTϕ(x)w ^ \mathrm{T} \phi(x)行列(matrix)による表記である。つまり

y=(w0w1w2wn)(ϕ0(x)ϕ1(x)ϕ2(x) ϕn(x))+ε(2.2.2.6)y = ( w _ 0 \,\,\, w _ 1 \,\,\, w_ 2 \, \cdots \, w _ n ) \left( \begin{matrix} \phi _ 0 (x) \\ \phi _ 1 (x) \\ \phi _ 2 (x) \\ \vdots \\ \phi _ n (x) \end{matrix} \right) + \varepsilon \tag{2.2.2.6}

である。前回の内容と並べて

y=ax+εy=wTϕ(x)+ε(2.2.2.7)\begin{aligned} y &= ax + \varepsilon \\ y &= w ^ \mathrm{T} \phi(x) + \varepsilon \end{aligned} \tag{2.2.2.7}

と書けば、とても構造が似通った問題だとわかる。前回と同様にノイズを

εN(ε0,σ2)(2.2.2.8)\varepsilon \sim \mathcal{N} (\varepsilon | 0, \sigma ^ 2) \tag{2.2.2.8}

とおけば、

p(yx,w)=N(ywTϕ(x),σ2)(2.2.2.9)p(y | x, w) = \mathcal{N}(y | w ^ \mathrm{T} \phi(x), \sigma ^ 2) \tag{2.2.2.9}

となるので、尤度関数は

L(wD)=i=1N12πσ2exp((y(i)wTϕ(x(i)))22σ2)(2.2.2.10)\mathcal{L}(w|\mathcal{D}) = \prod _ {i=1} ^ N \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \exp \left(- \frac{(y ^ {(i)} - w ^ \mathrm{T} \phi (x ^ {(i)})) ^ 2}{2 \sigma ^ 2} \right) \tag{2.2.2.10}

である。最尤推定の文脈で解くべき最適化問題は

argmaxwRn+1L(wD)\underset{w \in \mathbb{R} ^ {n+1}}{\operatorname{arg} \operatorname{max}} \,\, \mathcal{L} (w | \mathcal{D})

となる。

最適化問題の解法

今回の尤度関数は多変数関数である。一応、丁寧に書いておけば

L(wD)=L(w0,w1,w2,,wnD)(2.2.2.11)\mathcal{L}(w | \mathcal{D}) = \mathcal{L}(w _ 0, w _ 1, w _ 2 , \ldots, w _ n | \mathcal{D}) \tag{2.2.2.11}

である。求めるべき変数は増えたがせいぜい2次関数を多変数に拡張したものにすぎないので、方針は前回と変わらず微分して 0 になる点を探すことになる。まずはさくさくと対数尤度関数を用いた最適化問題に変形してしまおう。途中計算は前回とまったく同様なのでごっそり省くが、

argmaxwRn+1lnL(wD)=argmaxwRn+1{i=1N(y(i)wTϕ(x(i)))2}=argminwRn+1{i=1N(y(i)wTϕ(x(i)))2}(2.2.2.12)\begin{aligned} \underset{w \in \mathbb{R} ^ {n+1}}{\operatorname{arg} \operatorname{max}} \,\, \ln \mathcal{L}(w | \mathcal {D}) &= \underset{w \in \mathbb{R} ^ {n+1}}{\operatorname{arg} \operatorname{max}} \,\, \left\{ -\sum _ {i=1} ^ N (y ^ {(i)}- w ^ \mathrm{T} \phi(x^{(i)})) ^ 2 \right\} \\ &=\underset{w \in \mathbb{R} ^ {n+1}}{\operatorname{arg} \operatorname{min}} \,\, \left\{ \sum _ {i=1} ^ N (y ^ {(i)} - w ^ \mathrm{T} \phi(x^{(i)})) ^ 2 \right\} \end{aligned} \tag{2.2.2.12}

である。上式は行列を用いてもっと綺麗に書き直せる。つまりNN次元ベクトルa=(a1,a2,,aN)Ta = (a _ 1, a _ 2, \ldots, a_N) ^ \mathrm{T}について一般に

a2=aTa=i=1Nai2(2.2.2.13)\| a \| ^ 2 = a ^ \mathrm{T} a = \sum _ {i = 1} ^ N a _ i ^ 2 \tag{2.2.2.13}

が成り立つことを用いればよい。いま

y(i)wTϕ(x(i))(2.2.2.14)y ^ {(i)} - w ^ \mathrm{T} \phi(x ^ {(i)}) \tag{2.2.2.14}

の部分は、

y(i)ϕ(x(i))Tw(2.2.2.15)y ^ {(i)} - \phi(x ^ {(i)}) ^ \mathrm{T} w \tag{2.2.2.15}

と書いても同じことであるから、各データ点について式を列挙すれば

(y(1)ϕ(x(1))Twy(2)ϕ(x(2))Twy(N)ϕ(x(N))Tw)(2.2.2.16)\left( \begin{matrix} y ^ {(1)} - \phi (x ^ {(1)}) ^ \mathrm{T} w \\ y ^ {(2)} - \phi (x ^ {(2)}) ^ \mathrm{T} w \\ \vdots \\ y ^ {(N)} - \phi (x ^ {(N)}) ^ \mathrm{T} w \end{matrix} \right) \tag{2.2.2.16}

であり、ϕi(j)=ϕi(x(j))\phi _ i ^ {(j)} = \phi _ i (x ^ {(j)} )の略記と

y=(y(1)y(2)y(N)),ΦT=(ϕ0(1)ϕ1(1)ϕn(1)ϕ0(2)ϕ1(2)ϕn(2)ϕ0(N)ϕ1(N)ϕn(N)),w=(w(0)w(1)w(n))(2.2.2.17)y = \left( \begin{matrix} y ^ {(1)} \\ y ^ {(2)} \\ \vdots \\ y ^ {(N)} \end{matrix} \right), \quad \Phi ^ \mathrm{T} = \left( \begin{matrix} \phi _ 0 ^ {(1)} & \phi _ 1 ^ {(1)} & \cdots & \phi _ n ^ {(1)} \\ \phi _ 0 ^ {(2)} & \phi _ 1 ^ {(2)} & \cdots & \phi _ n ^ {(2)} \\ \vdots \\ \phi _ 0 ^ {(N)} & \phi _ 1 ^ {(N)} & \cdots & \phi _ n ^ {(N)} \\ \end{matrix} \right), \quad w = \left( \begin{matrix} w ^ {(0)} \\ w ^ {(1)} \\ \vdots \\ w ^ {(n)} \end{matrix} \right) \tag{2.2.2.17}

を用いれば、

(y(1)ϕ(x(1))Twy(2)ϕ(x(2))Twy(N)ϕ(x(N))Tw)=yΦTw(2.2.2.18)\left( \begin{matrix} y ^ {(1)} - \phi (x ^ {(1)}) ^ \mathrm{T} w \\ y ^ {(2)} - \phi (x ^ {(2)}) ^ \mathrm{T} w \\ \vdots \\ y ^ {(N)} - \phi (x ^ {(N)}) ^ \mathrm{T} w \end{matrix} \right) = y - \Phi ^ \mathrm{T} w \tag{2.2.2.18}

と書ける。したがって(2.2.2.12)(2.2.2.12)式は

argmaxwRn+1lnL(wD)=argminwRn+1yΦTw2(2.2.2.19)\underset{w \in \mathbb{R} ^ {n+1}}{\operatorname{arg} \operatorname{max}} \,\, \ln \mathcal{L}(w | \mathcal {D}) =\underset{w \in \mathbb{R} ^ {n+1}}{\operatorname{arg} \operatorname{min}} \,\, \| y - \Phi ^ \mathrm{T} w\| ^ 2 \tag{2.2.2.19}

と非常にシンプルな式で記述できる。

ではこの問題を解いていこう。あらためて目的関数を

f(w)=yΦTw2(2.2.2.20)f(w) = \| y - \Phi ^ \mathrm{T} w\| ^ 2 \tag{2.2.2.20}

とおく。多変数関数なので偏微分(勾配ベクトル)が 0 ベクトルになる場所が最小値である。勾配ベクトルf(w)\nabla f(w)

f(w)=2Φ(yΦTw)(2.2.2.21)\nabla f(w) = - 2 \Phi(y - \Phi ^ \mathrm{T} w) \tag{2.2.2.21}

であるから、これが 0 ベクトルに等しいとき、

ΦΦTw=Φy(2.2.2.22)\Phi \Phi ^ \mathrm{T} w = \Phi y \tag{2.2.2.22}

となる。上式を線形回帰の正規方程式(normal equation)という。正規方程式はΦΦT\Phi \Phi ^ \mathrm{T} が正則なとき、ただそのときに限り唯一の解

w=(ΦΦT)1Φy(2.2.2.23)w = (\Phi \Phi ^ \mathrm{T}) ^ {-1} \Phi y \tag{2.2.2.23}

を持つ。これでΦΦT\Phi \Phi ^ \mathrm{T} が正則なときは重みベクトルが求まった。

正則化

さて、次は当然の疑問として「ΦΦT\Phi \Phi ^ \mathrm{T} が正則でないとき重みベクトルはどう求めればよいのか」と考えるだろう。結論から言えば、正則でないならば無理やり正則にしてしまえばよい。目的関数g(w)g(w)に狭義単調増加関数Ψ\Psiを付け加えた関数

f(w)=g(w)+Ψ(w)(2.2.2.24)f(w) = g(w) + \Psi( \|w \|) \tag{2.2.2.24}

を新たな目的関数とする操作を正則化(regularization)といい、このときΨ(w)\Psi(\|w\|)正則化項(regularization term)という。いきなりややこしくなったので少しずつよく使われる形にしていこう。

正則化を確率モデルの観点から導くのは次回

page2.2.3. 線形基底関数モデル

に回すとして、今回は用語の整理と簡単なL2正則化の解法のみをピックアップしておこう。

ノルム

まず知っておいてほしいのが、ノルム(norm)の概念だ。聞き慣れない言葉かもしれないが、ラテン語のノルマ(norma:定規のこと)が英語になったもので「長さを測るもの」をイメージしてもらえればよく、ノルムはその名の通りベクトルの長さを測る数学の道具である。

私たちが日常生活で使っている「距離」の概念は、実はL2L^2-ノルムに対応している。ベクトルa=(a1,a2,,an)Ta = (a _1, a _ 2, \ldots, a _ n ) ^ \mathrm{T}L2L^2-ノルムはa2\| a \| _ 2と表記し、

a2=a12+a22++an2(2.2.2.25)\| a \| _ 2 = \sqrt{ a _ 1 ^ 2 + a _ 2 ^ 2 + \cdots + a _ n ^ 2} \tag{2.2.2.25}

で定義される。一般に、LpL ^ p-ノルムは|\cdot |を絶対値の記号として

ap=(a1p+a2p++anp)1/p(2.2.2.26)\| a \| _ p = (|a _ 1| ^ p + |a _ 2 | ^ p + \cdots + |a _ n |^ p) ^ {1/p} \tag{2.2.2.26}

で定義される。ここでは説明しないが、ノルムはノルムで定義があって、ノルムの性質を満たす関数ならばなんでもノルムと呼んでよく、LpL ^ p-ノルム自体は無数に存在するノルムのうちでも特殊なものである。たとえばL1L ^ 1-ノルムとL2L ^ 2-ノルムを足した

a=a1+a2(2.2.2.27)\| a \| = \|a\| _ 1+ \| a \| _ 2 \tag{2.2.2.27}

もノルムの性質を満たすので、これを新たなノルムとしてもよい。

(2.2.2.20)(2.2.2.20)式では目的関数をf(w)=yΦTw2f(w) = \| y - \Phi ^ \mathrm{T} w \| ^ 2と書いたが、これはより正確さを期するならば

f(w)=yΦTw22(2.2.2.28)f(w) = \| y - \Phi ^ \mathrm{T} w \| _ 2^ 2 \tag{2.2.2.28}

と書くほうがよい。よっていま(2.2.2.24)(2.2.2.24)式では

g(w)=yΦTw22(2.2.2.29)g(w) = \| y - \Phi ^ \mathrm{T} w \| _ 2^ 2 \tag{2.2.2.29}

としよう。(2.2.2.24)(2.2.2.24)式内にあるw\|w\|のノルムは任意である。よく使うのはやはりL2L ^ 2-ノルムで、狭義単調増加関数にΨ(x)=λx2(λ>0)\Psi(x) = \lambda x ^ 2 \,\, (\lambda > 0)を用いれば

f(w)=yΦTw22+λw22(2.2.2.30)f(w)= \| y - \Phi ^ \mathrm{T} w \| _ 2^ 2 + \lambda \| w \| _ 2 ^ 2 \tag{2.2.2.30}

となる。これは正則化項にL2L ^ 2-ノルムを用いているのでL2L^2-正則化と呼んだりする。

L2正則化問題の解法

問題が複雑になったように見えるが、wwに関する2次形式(行列とベクトルでいうところの2次関数)であることは変わっていないので、先ほどと同様に微分して 0 でよい。

f(w)=2Φ(yΦTw)+2λw(2.2.2.31)\nabla f(w) = - 2 \Phi(y - \Phi ^ \mathrm{T} w) + 2 \lambda w \tag{2.2.2.31}

であるから、

2Φ(yΦTw)+2λw=0(ΦΦT+λI)w=Φy(2.2.2.32) - 2 \Phi(y - \Phi ^ \mathrm{T} w) + 2 \lambda w = 0 \\ \therefore (\Phi \Phi ^ \mathrm{T} + \lambda I) w = \Phi y \tag{2.2.2.32}

となる。ここでIIは単位行列であり(ΦΦT+λI)(\Phi \Phi ^ \mathrm{T} + \lambda I)は必ず正則な行列になる(ΦΦT\Phi \Phi ^ \mathrm{T}は半正定値対称行列であり、IIは正定値対称行列だから、それらの線形結合は正定値対称行列になる)から、逆行列が存在して、

w=(ΦΦT+λI)1Φy(2.2.2.33)w = (\Phi \Phi ^ \mathrm{T} + \lambda I) ^ {-1} \Phi y \tag{2.2.2.33}

となる。

他の正則化

正則化項には任意のノルム\| \cdot \|と任意の狭義単調増加関数Ψ\Psiを用いてよいので選択肢の幅はかなり広いのだが、機械学習の分野で使われる正則化項はだいたい次の3種類である。もっと複雑な正則化項(グラフ正則化など)もあるので、論文を読むときはどんな目的関数にどんな正則化項がくっついているか確かめると面白い。

L1正則化

ベクトルの個々の要素の絶対値の和を正則化項にとる。

Ψ(w)=λw1(2.2.2.34)\Psi (\| w\|) = \lambda \| w \| _ 1 \tag{2.2.2.34}

L1L^1-正則化による線形回帰はLASSO(least absolute shrinkage and selection operator)と呼ばれ、解がスパースになる(重みベクトルwwの要素で 0 が選択されやすくなる)ことが知られている。目的関数が滑らかでなくなるので「微分して 0 になる」が使えない典型的な問題である。

pageLASSO

L2正則化

先ほど紹介した通りである。

エラスティックネット

エラスティックネット(elastic net)による正則化はL1L ^ 1-正則化とL2L^2-正則化の折衷案である。

Ψ(w)=αw1+βw22(2.2.2.35)\Psi (\| w\|) = \alpha \| w \| _ 1 + \beta \| w \| _ 2 ^ 2 \tag{2.2.2.35}

L1L ^ 1-正則化は解がスパースになる反面、関数の形状があまりよくないので学習アルゴリズムが収束しづらくなる。一方でL2L ^ 2-正則化は学習アルゴリズムの収束性がよい反面、解にスパース性は望めない。そこでエラスティックネットはこれらの正則化項を足し合わせることで、学習アルゴリズムを収束しやすくしつつスパースな解を得ることを期待する。

深層学習ではパラメータが非常に多いため、とっとと収束してもらいたいが、解がスパースでないとネットワークが無駄な枝を残して圧縮したりできないので、エラスティックネットを使うことがよくある。勾配法などで解く。

Last updated