2.2.1. 線形回帰の基礎

2020/3/25公開

導入

ここではまず簡単な例として1次元の線形回帰について解説する。扱う問題自体は中学校で習うような簡単なものだが、モデリングや数式の表記は手加減せずに論文で使われているレベルのものを用いるので、機械学習の難しい数式に慣れることに集中できるだろう。

流れとしては直線y=axy=axによる回帰を生成モデルによって捉え直し、最尤推定を行うことで最小二乗法を導出する。今後の議論の基礎になるので、ぜひ時間をかけて取り組んでみてほしい。

問題

中学校でオームの法則を習ったことを覚えているだろうか。物体の電気抵抗RRと物体にかける電圧VV、流れる電流IIの間には

V=RI(2.2.1.1)V=RI \tag{2.2.1.1}

の関係が成り立つ。この法則を利用すれば物体の電気抵抗を測定でき、物体に所望の電圧をかけたり、電流を流したりできるようになる。

より一般化して(2.2.1.1)(2.2.1.1)式を直線の方程式で書き直せば

y=ax(2.2.1.2)y=ax \tag{2.2.1.2}

となる。電圧、電気抵抗、電流をそれぞれy,a,xy,a,xで置いただけである。機械学習の文化ではxxを入力(input)、yyを出力(output)またはラベル(label)という。またaaは重み(weight)と呼ばれ、本来ならwwで表記することが多い。

(2.2.1.2)(2.2.1.2)式のような関係性を持つことがわかっている、またはそのような関係性を持ちそうだと思われる現象は、重みaaさえ求めれば入力から出力を予測できる。いまの状況ではどれくらいの電流を流したときにどれくらいの電圧がかかっているかが推測できる。

中学校や高校の範囲では、適当に1点(x,y)(x,y)を測定してそれを代表とし、

a=yx(2.2.1.3)a = \frac{y}{x} \tag{2.2.1.3}

とすれば求まるということになっていた。しかし電気抵抗を実際に何回か測定してみると、どの点を代表とするかによって求まるaaの値は若干変わり、毎回同じ値になるとは限らない。これは物体の電気抵抗が温度に依存することや電気回路の接触などに起因するが、何が原因かはよくわからないことがほとんどだろう。

こういった「よくわからない観測値の揺らぎ」の扱いを得意とするのが確率論である。中学高校の範囲でならいくつかの観測点について求めたaaを平均する、大学の学部教養レベルであれば最小二乗法を用いてaaを求める、といった方法がある。

どちらも十分に実用的な方法であり、実際それで片付いてしまうことも多いが、いまは機械学習への導入に適した形で問題を解き直そう。

モデリング

出力yyと入力xxの間には以下の関係があると仮定する。

y=ax+ε(2.2.1.4)y = a x + \varepsilon \tag{2.2.1.4}

この式は「yyは基本的にaxaxで求まるが、よくわからない誤差ε\varepsilonを含む」という意味であり、理論値からのズレをε\varepsilonという補正項に吸収させたことになる。ここでε\varepsilonは平均00、分散σ2\sigma ^ 2のガウス分布に従うものとする。

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

この段階はモデリング(modeling)といって、現象に対して人間が勝手に仮定を置くことであり、誤差が本当にガウス分布に従うかどうかはわからない。しかし人間は現象に何かしら仮定を置かなければ対象を数学的に扱うことはできないし、また仮定の置き方に自由度があることで、人間やコンピュータが計算しやすい形の数式が導出されることもある。仮定がどれだけ正しそうかは、得られた結果を見てから考えればよく、もし満足いかない結果なら満足いくまで仮定を変更すればよい。

ガウス分布(Gaussian distribution)または正規分布(normal distribution)は以下の式で定義される連続確率分布である。

N(xμ,σ2)=12πσ2exp((xμ)22σ2)(2.2.1.6)\mathcal{N} (x | \mu, \sigma ^ 2) = \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \exp \left(- \frac{(x - \mu) ^ 2}{2 \sigma ^ 2} \right) \tag{2.2.1.6}

出力yyaxaxε\varepsilonを足したものなので、平均axax、分散σ2\sigma ^ 2のガウス分布にしたがうものとみなせるから、その確率分布は

p(yx,a)=N(yax,σ2)(2.2.1.7)p(y | x, a) = \mathcal{N} (y | ax, \sigma ^ 2) \tag{2.2.1.7}

と表せる。最初なので一応丁寧に書いておくと、

p(yx,a)=12πσ2exp((yax)22σ2)(2.2.1.8)p(y | x , a) = \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \exp \left(- \frac{(y - ax) ^ 2}{2 \sigma ^ 2} \right) \tag{2.2.1.8}

である。パラメータσ2\sigma ^ 2は今後の計算にはあまり関わってこないので、議論の簡略化のため既知の定数とした。ちなみに、今回のように出力yyがある確率分布から生成されるモデルを生成モデル(generative model)という。

観測したNN個のデータ点の集合を

D={(x(1),y(1)),(x(2),y(2)),,(x(N),y(N))}(2.2.1.9)\mathcal{D} = \left\{ (x ^ {(1)}, y ^ {(1)}), (x ^ {(2)}, y ^ {(2)}), \ldots, (x ^ {(N)}, y ^ {(N)}) \right \} \tag{2.2.1.9}

とおく。D(i)=(x(i),y(i))\mathcal{D} ^ {(i)} = (x ^ {(i)}, y ^ {(i)})ii番目に観測されたデータ点を表す。また出力と入力を分けるときは

Dy={y(1),y(2),,y(N)}Dx={x(1),x(2),,x(N)}(2.2.1.10)\begin{aligned} \mathcal{D}_y = \left\{ y ^ {(1)}, y ^ {(2)}, \ldots, y ^ {(N)} \right \} \\ \mathcal{D}_x = \left\{ x ^ {(1)}, x ^ {(2)}, \ldots, x ^ {(N)}\right \} \end{aligned} \tag{2.2.1.10}

と書くことにする。

いま、簡単のために1番目のデータD(1)=(x(1),y(1))\mathcal{D} ^ {(1)} = (x ^ {(1)}, y ^ {(1)})のみが観測されたとしてaaを求めてみよう。(2.2.1.8)(2.2.1.8)式ではyyが確率変数、xxは確率変数だが観測されて(今回は人間が勝手に定めたことで)実現値となっており、aaはとりあえず与えられた固定値とみなしていた。しかしいまはaaを求めたいのでaaが変数であり、またyyは観測されたことで実現値(固定値)となっている。そこで以下の尤度関数(likelihood function)を定義する。

L(aD(1))=L(a(x(1),y(1)))=12πσ2exp((y(1)ax(1))22σ2)(2.2.1.11)\begin{aligned} \mathcal{L}(a|\mathcal{D} ^ {(1)}) &= \mathcal{L}(a | (x ^ {(1)}, y ^ {(1)})) \\ &= \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \exp \left(- \frac{(y ^ {(1)} - ax ^ {(1)}) ^ 2}{2 \sigma ^ 2} \right) \end{aligned} \tag{2.2.1.11}

尤度関数とは確率分布のパラメータを変数とみなし、確率変数を定数とみなした関数である。「尤度」は「ゆうど」と読み「尤もらしい」と書いて「もっともらしい」と読むので、尤度は「もっともらしさ」という意味である。

尤度関数は確率分布から生成したデータのもっともらしさを表す指標のひとつである。尤度関数を最大化するaaを求める、つまり最も尤もらしいaaの値を求める手法を最尤推定(さいゆうすいてい:maximum likelihood estimation)という。

(2.2.1.10)(2.2.1.10)式が最大となるのはexp\expの中が 0 になるときであるから、y(1)ax(1)=0y ^ {(1)} - a x ^ {(1)} = 0、すなわち

a=y(1)x(1)(2.2.1.11)a = \frac{y ^ {(1)}}{x ^ {(1)}} \tag{2.2.1.11}

のときである。これは原点と観測した1点を正確に通る直線を引くときの(2.2.1.3)(2.2.1.3)式と一致している。

注意点は尤度関数は確率分布ではないということである。つまり一般には

L(aD(1))p(aD(1))(2.2.1.12)\mathcal{L}(a|\mathcal{D} ^ {(1)}) \neq p(a | \mathcal{D} ^ {(1)}) \tag{2.2.1.12}

である。なぜならばいま、そもそもaaは確率変数ではないとみなしているし、仮に確率変数とみなしても、ベイズの定理により

p(aD(1))=p(ay,x)=p(yx,a)p(a)p(y)(2.2.1.13)p(a | \mathcal{D} ^ {(1)}) = p(a| y , x) = \frac{p(y|x,a)p(a)}{p(y)} \tag{2.2.1.13}

となるので、(2.2.1.12)(2.2.1.12)式の両辺が形式的にでも等号で結ばれるのはp(y)=p(a)=const.p(y) = p(a) = {\rm const.}という特殊な状況だけだからである。

ではNN個のデータ点を観測した場合に話を戻そう。各データ点の観測が独立で、同じ確率分布からのサンプリングであると仮定する。このときNN個のデータの確率分布は

p(DyDx,a)=p(y(1)x(1),a)××p(y(N)x(N),a)=i=1Np(y(i)x(i),a)=i=1N12πσ2exp((y(i)ax(i))22σ2)(2.2.1.14)\begin{aligned} p(\mathcal{D} _ y | \mathcal{D} _ x, a) &= p(y ^ {(1)}| x ^ {(1)}, a) \times \cdots \times p(y^{(N)}|x^{(N)}, a) \\ &= \prod _ {i=1} ^ N p(y ^ {(i)}| x ^ {(i)}, a) \\ &= \prod _ {i=1} ^ N \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \exp \left(- \frac{(y ^ {(i)} - ax ^ {(i)}) ^ 2}{2 \sigma ^ 2} \right) \end{aligned} \tag{2.2.1.14}

と表せる。具体的な状況としては、入力x(1),x(2),,x(N)x ^ {(1)}, x^{(2)}, \ldots, x ^ {(N)}のときの出力を観測する、と決めたがまだ実際には出力y(1),y(2),,y(N)y ^ {(1)}, y ^ {(2)}, \ldots, y ^ {(N)}の観測を行っていない状態(まだ確率変数)である。

出力y(1),y(2),,y(N)y ^ {(1)}, y ^ {(2)}, \ldots, y ^ {(N)}を観測する(実現値を代入して定数とみなす)ことで再び尤度関数が定義できる。すなわち

L(aD)=i=1N12πσ2exp((y(i)ax(i))22σ2)(2.2.1.15)\mathcal{L}(a|\mathcal{D}) = \prod _ {i=1} ^ N \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \exp \left(- \frac{(y ^ {(i)} - ax ^ {(i)}) ^ 2}{2 \sigma ^ 2} \right) \tag{2.2.1.15}

である。この尤度関数を最大化することでaaを求めるから、この最適化問題は

argmaxaRL(aD)(2.2.1.16)\underset{a \in \mathbb{R}}{\operatorname{arg}\operatorname{max}} \,\mathcal{L}(a | \mathcal{D}) \tag{2.2.1.16}

と書ける。

(2.2.1.16)(2.2.1.16)式のような最適化問題の表記は論文や書籍でよく用いられるので覚えておくとよい。最大化問題(maximization problem)に使われるargmax\operatorname{arg} \operatorname{max}は argument of the maximum の略で日本語に訳すと「関数の最大値を与える引数」の意味だ。argmax\operatorname{arg} \operatorname{max}の下についているaRa \in \mathbb{R}は「実数全体の範囲で」の意味であり、(2.2.1.16)(2.2.1.16)式は「関数L(aD)\mathcal{L}(a|\mathcal{D})の値を最大化するaaを実数全体の範囲で求めよ」という意味になる。この問題の最適解aa ^ \ast

a=argmaxaRL(aD)(2.2.1.17)a ^ \ast = \underset{a \in \mathbb{R}}{\operatorname{arg} \operatorname{max}} \,\, \mathcal{L}(a|\mathcal{D})\tag{2.2.1.17}

のように表記される(aa ^ \astaopt.a _ {\rm opt.}などの表記も好まれる)。厳密には最大値を与えるaaはひとつとは限らず右辺は集合を表しているものと解釈されるため、左辺が実数であるという意図と矛盾するので、上式のような表記は本来であれば好ましくないのだが、論文や書籍ではよく用いられる。

同様に最小化問題(minimization problem)ではargmin\operatorname{arg} \operatorname{min}を用い、これは argument of the minimum の略である。また、最大化問題や最小化問題の対象となる関数、ここではL(aD)\mathcal{L}(a | \mathcal{D})のことを目的関数(objective function)という。

最適化問題を解く

最適化問題(optimization problem)が解けるかどうかは異なるし、またその解き方にもバリエーションがあるものだが、(2.2.1.16)(2.2.1.16)式は対数尤度関数の最大化というよく使われる方法で解ける。

対数尤度関数とは尤度関数の対数をとったもの、すなわち

lnL(aD)(2.2.1.18)\ln \mathcal{L}(a|\mathcal{D}) \tag{2.2.1.18}

のことである。対数変換は単調変換であるから、対数変換した関数の最大化問題ともとの関数の最大化問題の最適解は一致する。したがって

argmaxaRlnL(aD)=argmaxaRL(aD)(2.2.1.19)\underset{a \in \mathbb{R}}{\operatorname{arg} \operatorname{max}} \,\, \ln \mathcal{L}(a|\mathcal{D}) = \underset{a \in \mathbb{R}}{\operatorname{arg} \operatorname{max}} \,\, \mathcal{L} (a|\mathcal{D}) \tag{2.2.1.19}

であり、解きやすい左辺のほうを右辺の代わりに解いてもよいことになる。

(2.2.1.19)(2.2.1.19)式の左辺のlnL(aD)\ln \mathcal{L}(a | \mathcal{D})を変形していこう。対数を取ると掛け算が足し算になり、さらにexp\expも外れるという部分がミソだ。式変形に使った式番号も書いておくので、少し大変だが追ってみてほしい。

lnL(aD)=lni=1N12πσ2exp((y(i)ax(i))22σ2)(2.2.1.15)=i=1Nln{12πσ2exp((y(i)ax(i))22σ2)}=i=1N[ln{12πσ2}+ln{exp((y(i)ax(i))22σ2)}]=i=1N((y(i)ax(i))22σ2)+i=1Nln{12πσ2}=12σ2i=1N(y(i)ax(i))2+Nln{12πσ2}\begin{aligned} \ln \mathcal{L}(a|\mathcal{D}) &= \ln \prod _ {i=1} ^ N \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \exp \left(- \frac{(y ^ {(i)} - ax ^ {(i)}) ^ 2}{2 \sigma ^ 2} \right) \quad \leftarrow (2.2.1.15) \\ &= \sum _ {i = 1} ^ N \ln \left\{ \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \exp \left(- \frac{(y ^ {(i)}- ax^{(i)}) ^ 2}{2 \sigma ^ 2} \right) \right\} \\ &= \sum _ {i = 1} ^ N \left[ \ln \left\{ \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \right\} +\ln \left\{ \exp \left(- \frac{(y ^ {(i)}- ax^{(i)}) ^ 2}{2 \sigma ^ 2} \right) \right\} \right] \\ &= \sum _ {i=1} ^ N \left(- \frac{(y ^ {(i)}- ax^{(i)}) ^ 2}{2 \sigma ^ 2} \right) + \sum _ {i = 1} ^ N \ln \left\{ \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \right\} \\ &= - \frac{1}{2 \sigma ^ 2} \sum _ {i=1} ^ N (y ^ {(i)}- ax^{(i)}) ^ 2 + N \cdot \ln \left\{ \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \right\} \end{aligned}

したがって

lnL(aD)=12σ2i=1N(y(i)ax(i))2+Nln{12πσ2}(2.2.1.20) \ln \mathcal{L}(a|\mathcal{D}) = - \frac{1}{2 \sigma ^ 2} \sum _ {i=1} ^ N (y ^ {(i)}- ax^{(i)}) ^ 2 + N \cdot \ln \left\{ \frac{1}{\sqrt{2 \pi \sigma ^ 2}} \right\} \tag{2.2.1.20}

が求まった。aaに関する最大化問題なので、第1項に関する正数倍、およびaaに関係ない第2項は問題の解に影響しないから、

argmaxaRlnL(aD)=argmaxaR{i=1N(y(i)ax(i))2}=argminaR{i=1N(y(i)ax(i))2}(2.2.1.21)\begin{aligned} \underset{a \in \mathbb{R}}{\operatorname{arg} \operatorname{max}} \,\, \ln \mathcal{L}(a|\mathcal{D}) &= \underset{a \in \mathbb{R}}{\operatorname{arg} \operatorname{max}} \,\, \left\{ -\sum _ {i=1} ^ N (y ^ {(i)}- ax^{(i)}) ^ 2 \right\} \\ &=\underset{a \in \mathbb{R}}{\operatorname{arg} \operatorname{min}} \,\, \left\{ \sum _ {i=1} ^ N (y ^ {(i)}- ax^{(i)}) ^ 2 \right\} \end{aligned} \tag{2.2.1.21}

である。(2.2.1.21)(2.2.1.21)式は最小二乗法(least squares method)の式そのものである。

あとはaaに関して整理して

i=1N(y(i)ax(i))2=(i=1N(x(i))2)a22(i=1Nx(i)y(i))a+(y(i))2\sum _ {i=1} ^ N (y ^ {(i)}- ax^{(i)}) ^ 2 = \left( \sum _ {i=1} ^ N \left(x ^ {(i)}\right) ^ 2 \right) a ^ 2 - 2 \left( \sum _ {i=1} ^ N x ^ {(i)} y ^ {(i)}\right) a + \left(y ^ {(i)}\right) ^ 2

であり、また二次関数の最小値を取る点は微分して00になる点だから、

ddai=1N(y(i)ax(i))2=2(i=1N(x(i))2)a2(i=1Nx(i)y(i))=0\frac{d}{da} \sum _ {i=1} ^ N (y ^ {(i)}- ax^{(i)}) ^ 2 = 2\left( \sum _ {i=1} ^ N \left(x ^ {(i)}\right) ^ 2 \right) a - 2 \left( \sum _ {i=1} ^ N x ^ {(i)} y ^ {(i)}\right) = 0

より、

a=i=1Nx(i)y(i)i=1N(x(i))2(2.2.1.22)a = \frac{ \sum _ {i=1} ^ N x ^ {(i)} y ^ {(i)}}{\sum _ {i=1} ^ N \left(x ^ {(i)}\right) ^ 2} \tag{2.2.1.22}

が解となる。データ点をひとつだけ用いるとき、すなわちN=1N=1のとき

a=x(1)y(1)(x(1))2=y(1)x(1)(2.2.1.23)a = \frac{x ^ {(1)} y ^ {(1)}}{\left(x ^ {(1)}\right) ^ 2} = \frac{y ^ {(1)}}{x ^ {(1)}} \tag{2.2.1.23}

であり、この結果は(2.2.1.22)(2.2.1.22)式が、代表点をひとつ決めてaaを求める方法の一般化になっていることを示している。

これで私たちは最小二乗法の裏にあるモデルとその数理を理解したことになる。これから登場する回帰モデルはほとんど今回の議論の拡張に過ぎないので、ここまでの話を理解できたのであればあとはぐっと楽になるであろう。

Last updated