最小二乗法で役立つ正規方程式(normal equation)の導出をします。後半にL2正則化項をつけたときの正規方程式も説明します。
正規方程式とは?
初めに正規方程式に関する定理を紹介します。
定理
$X$を行列、$\boldsymbol{\beta}, \boldsymbol{y}$を縦ベクトルとし、$|\cdot|$をノルムとする。また$X ^ T$を$X$の転置行列とする。$X ^ TX$が正則なとき, $S(\boldsymbol{\beta})=|X\boldsymbol{\beta}-\boldsymbol{y}| ^ 2$つまり$|X\boldsymbol{\beta}-\boldsymbol{y}|$を最小にする$\boldsymbol{\beta}$はただ1つ存在し、それは、正規方程式:
XTXβ=XTy
の解である。
$|X\boldsymbol{\beta}-\boldsymbol{y}|=0$, すなわち$X\boldsymbol{\beta}=\boldsymbol{y}$となる解が見つかればよい (→補足1) のですが、見つからないときでもこの定理により、$|X\boldsymbol{\beta}-\boldsymbol{y}|$を最小にするような$\boldsymbol{\beta}$を見つけられます。
正規方程式は$X\boldsymbol{\beta}=\boldsymbol{y}$の両辺に左から$X ^ {T}$を掛けたものですが、このことを用いて正規方程式を覚えるのがオススメです。
なお、$S(\boldsymbol{\beta})$を最小化する$\boldsymbol{\beta}$を
β^=βargminS(β)
と表記することができます。
補足1 :
$n$変数の連立1次方程式$A\boldsymbol{x}=\boldsymbol{b}$に解がただ一つ存在する必要十分条件は
rank(A)=n
正規方程式の導出
目的関数 $S(\boldsymbol{\beta})=|X\boldsymbol{\beta}-\boldsymbol{y}| ^ 2$ を式展開すると、
∥Xβ−y∥2=(Xβ−y)T(Xβ−y)(∵補足2)=(βTXT−yT)(Xβ−y)=βTXTXβ−βTXTy−yTXβ+yTy=βTXTXβ−2βTXTy+yTy(∵補足3)
となります。これを$\boldsymbol{\beta}$で微分します。これは、各要素$\beta _ j$で偏微分する、つまり勾配(gradient)を求めるということです(→補足4)。微分すると、
∂β∂∥Xβ−y∥2=2XTXβ−2XTy
となります。よって、 $S(\boldsymbol{\beta})=|X\boldsymbol{\beta}-\boldsymbol{y}| ^ 2$ が最小となる条件として、
∂β∂∥Xβ−y∥2=0 ⇔ XTXβ=XTy
が得られます。$X ^ TX$が正則なとき、$\boldsymbol{\beta}=(X ^ TX) ^ {-1}X ^ T\boldsymbol{y}$ が唯一の解であり、この $\boldsymbol{\beta}$ が目的関数の最小値を与えます。
補足2 :
$\mathbb{R} ^ n$のベクトル $\displaystyle \boldsymbol{a}= \left[a _ 1 \cdots \ a _ n \right]^T, \ \boldsymbol{b}= \left[b _ 1 \cdots b _ n\right]^T $に対して
⟨a,b⟩=aTb=a1b1+⋯+anbn
を$\mathbb{R} ^ n$の標準内積とし、ベクトル$\boldsymbol{a}$のノルムを
∥a∥=⟨a,a⟩
とします。
補足3 :
$\boldsymbol{y} ^ TX\boldsymbol{\beta}=\langle\boldsymbol{y},X\boldsymbol{\beta}\rangle$はスカラーなので、転置を取っても同じです。よって,
yTXβ=(yTXβ)T=βTXTy
補足4 :
多変数関数$f(x _ 1,x _ 2,\cdots,x _ n)$に対して、 各変数による偏微分を並べたベクトルを勾配ベクトルといいます。例えば、$f(x _ 1,x _ 2,x _ 3)=x _ 1+x _ 2 ^ 2+x _ 3 ^ 3$のとき、勾配ベクトルは$(1,2x _ 2,3x _ 3 ^ 2)$となります。この勾配ベクトルは、
dxdf=gradf=∇f=(∂x1∂f,⋯,∂xn∂f)
などと表記されます。ただし縦ベクトルか横ベクトルかは$\boldsymbol{x}$次第です。
対称行列$X’ (=X ^ TX)$(→補足5)に関する二次形式
βTX′β=i=1∑nj=1∑nxij′βiβj (X′:=[xij′]n×n)
を$\beta _ k$で偏微分すると、
∂βk∂βTX′β=∂βk∂i=1∑nj=1∑nxij′βiβj=∂βk∂⎝⎜⎛j(=k)∑xkj′βkβj+i(=k)∑xik′βiβk+xkk′βk2⎠⎟⎞=j(=k)∑xkj′βj+i(=k)∑xik′βi+2xkk′βk=2i=1∑nxki′βi(∵X′は対称行列なので、xik′=xki′)
となるので、勾配ベクトルは
∂β∂(βTX′β)=⎣⎢⎢⎡2∑i=1nx1i′βi⋮2∑i=1nxni′βi⎦⎥⎥⎤=2⎣⎢⎢⎡x11′⋮xn1′⋯⋱⋯x1n′⋮xnn′⎦⎥⎥⎤⎣⎢⎢⎡β1⋮βn⎦⎥⎥⎤=2X′β
となります。 よって
∂β∂(βTXTXβ)=2XTXβ
が成り立ちます。
また、線形関数
βTXTy=⟨Xβ,y⟩=(j=1∑mx1jβj)y1+⋯+(j=1∑mxnjβj)yn=i=1∑nj=1∑mxijβjyi
を$\beta _ k$で偏微分すると、
∂βk∂(βTXTy)=∂βk∂i=1∑nj=1∑mxijβjyi=∂βk∂j=1∑m(i=1∑nxijyi)βj=i=1∑nxikyi
となるので、勾配ベクトルは
∂β∂(βTXTy)=⎣⎢⎢⎡∑i=1nxi1yi⋮∑i=1nximyi⎦⎥⎥⎤=⎣⎢⎢⎡x11⋮x1m⋯⋱⋯xn1⋮xnm⎦⎥⎥⎤⎣⎢⎢⎡y1⋮yn⎦⎥⎥⎤=XTy
となります。
補足5 : $X ^ T X$ は対称行列となる
[証明] 行列$A$が対称行列ならば、$A ^ T=A$である。
(XTX)T=XT(XT)T=XTX
が成り立つので、$X ^ TX$は対称行列である。
L2正則化 (ridge)の正規方程式
L2正則化(ridge)をかけた場合の目的関数$S _ \lambda(\boldsymbol{\beta})$は
Sλ(β)=n1∥y−Xβ∥2+λ∥β∥2
となります。
第1項は正則化が無い場合と同じなので、第2項について考えます。 $|\boldsymbol{\beta}| ^ 2$を$\beta _ k$で偏微分すると、
∂βk∂∥β∥2=∂βk∂i=1∑nj=1∑nβiβj=2βk
ゆえに
∂β∂∥β∥2=2β
となります。
第1項と合わせると、目的関数 $S _ \lambda(\boldsymbol{\beta})$を最小化する条件は
n1⋅2(XTXβ−XTy)+2λβXTXβ−XTy+λnβ(XTX+λnI)β=0=0=XTy
となります。ただし、$I$は単位行列です。よって、L2正則化をつけた場合の正規方程式は
β=(XTX+λnI)−1XTy
となります。
これの良いところは$X ^ {T}X$が正則でなくとも、$X ^ {T}X +\lambda nI$が正則となることで、逆行列を求めることができるという点です。また、これが正則化という名の所以です。
最急降下法とのメリット・デメリットの比較
最適なパラメータを求めるのに、正規方程式を使う方法とは別に機械学習における最急降下法(勾配降下法)を用いる方法があります。
最急降下法(gradient descent) |
正規方程式(normal equation) |
学習率 (learning rate) $\alpha$ の設定が必要 |
学習率を設定する必要なし |
計算を繰り返す(ループ処理をする)必要がある |
ループ処理の必要なし |
計算量は $O (kp ^ 2)$ |
$X ^ T X$ の逆行列を計算するため、計算量は $O(p ^ 3)$ |
説明変数の値域をそろえる(feature scalingする)必要がある |
feature scalingの必要はない |
$p$ が大きくても動作する |
$p$ が大きくなると遅い |
なお、説明変数の数$p$が大きいというのは、おおよそ$p > 10 ^ 4$ぐらいからです。$p$が小さいときは正規方程式を用いるのがよいでしょう。