機械学習はどのように機能するか

確率論

概要

 機械学習が人工知能というコンセプトとして世に売り出されて久しいが、筆者は長らくこの機械学習という概念を全く理解できていなかった。いくつかの教科書を読んでみたが、複雑な関数型の回帰分析をしているだけであり、世の中で提供されている人工知能関連のサービスなど泥臭く大量のデータを収集して、そのデータの属性データを打ち込む(画像や文章、音声などに特性を表すラベルを張っていく)という大量の単純労働の賜物にすぎないだろうぐらいにしか考えていなかった(まあ、”おいおい、大体合ってるよ”という意見もありそうだけど)。ただ、今更感が全開であるが、最近ようやく機械学習が回帰分析など他のデータ分析手法と異なるものであり、それがどのように機能しているかということを理解できた気がしたので、ここで簡単に説明してみようというのが本稿の趣旨である。

機械学習と回帰分析

 2つのデータ\(\small x,y\)について、不確実性(ノイズ)があるにしても一定の関係性を見いだせる場合、観測データのサンプルからその関係性を関数\(\small \hat{y}=E[y\:|\:x]=f(x)\)として推定したいという問題は頻繁に生じることだろう。(説明変数といわれる)片方のデータ\(\small x\)が外生的に与えられたとき、観測データ(被説明変数)\(\small y\)の値を推測したいという問題を考える。得られた観測データ\(\small (x_i,y_i),i=1.\cdots, N\)から関数\(\small f(x)\)について、その推測誤差が最小になるように関数の形状を定めるパラメータを推定することで関数\(\small \hat{y}=f(x)\)を定めることができる。推測誤差を測る尺度として二乗誤差

\[ \small \Xi=\sum_{i=1}^N \left(y_i-f(x_i) \right)^2 \]

が用いられることが多く、このような関数の推定方法は最小二乗法(Least Square Method)といわれている。このような観測データからデータ間の関係性を関数として推定することを一般的に回帰分析(Regression Analysis)という。例えば、関数\(\small f(x)\)を線形関数

\[ \small f(x) = \beta_0+\beta_1x \]

と仮定する場合、線形回帰分析といわれる。推定した関数\(\small \hat{y}=f(x)\)はしばしばそれら観測データを説明するものとしてモデルといわれることもある。これは説明変数が複数である場合にも拡張することができて

\[ \small \hat{y}=E[y\:|\:x_1,\cdots,x_n]=f(x_1,\cdots,x_n) = \beta_0+\beta_1x_1+\cdots+\beta_nx_n \]

のように関数を定義して回帰分析を行うことを重回帰分析(Multiple Regression)という。重回帰分析に関する最小二乗法は最適化問題としても(凸最適化問題といわれる)好ましい性質を持っており、単純な行列計算でパラメータを推定することができる。

 機械学習で用いられるニューラルネットワークはこの概念を拡張したものであり、線形関数に活性化関数(Activation Function)といわれる非線形の関数を作用させて

\[ \small h_k=f_k(x) = \sigma(\beta_{k,0}+\beta_{k,1}x_1+\cdots+\beta_{k,n}x_n) \]

と表した関数(ニューロンという)を複数使用して(多重化して)、それを多層化した関数を用いる方法である。これをさらに多層化して

\[ \small z_l = g_l(h) = \sigma(\gamma_{l,0}+\gamma_{l,1}h_1+\cdots+\gamma_{l,n}h_n) \]

最終的な出力結果は

\[ \small y = \xi(z)=\varphi(\delta_0+\delta_1 z_1+\cdots+\delta_n z_n) \]

のように出力する。関数\(\small \varphi\)は出力結果を観測データの形式に変換する関数であり正則化関数という。入力値はあくまで\(\small x_1\cdots,x_n\)であり、出力結果は\(\small y\)であるから、いくばくか複雑な計算工程を辿るにしても、\(\small y=f(x_1,\cdots,x_n)\)という関数を表現しているものに過ぎないということは容易に理解できるだろう。機械学習では、この関数を用いて、二乗誤差が最小になるようにパラメータ\(\small \beta_{k,0},\cdots,\beta_{k,n}\), \(\small \gamma_{l,0},\cdots,\gamma_{l,n}\),\(\small \delta_0,\cdots,\delta_n\)を推定する。1階層あたりのニューロンの数\(\small m\)は任意に増やすことができるし、階層の数も任意に増やすことができる。1階層あたりのニューロンの数を\(\small m\)、階層の数を\(\small p\)とすれば、\(\small n\times m\times p\)個のパラメータを用いて、関数\(\small y=f(x_1,\cdots,x_n)\)を表現するモデルがニューラルネットワークということになる。

 機械学習と線形回帰分析の違いは関数の形状\(\small y=f(x_1,\cdots,x_n)\)が説明変数に対して、線形であるか非線形であるかである。活性化関数\(\small \sigma(x)\)は一般的に非線形関数であり、シグモイド(Sigmoid)関数という以下のような関数が良く用いられる。

\[ \small \sigma(x) = \frac{1}{1+e^{-x}} \]

他には、ReLU(Rectified Linear Unit)といわれる

\[ \small \sigma(x) = \max\{x, 0 \} \]

のような関数もよく用いられるようである。機械学習を回帰分析の拡張と考えたが、もし活性化関数が線形関数\(\small \sigma(x)=x\)ならば、多層化や多重化にはまったく意味がなく、ただの線形回帰分析を冗長な手続きで実施しているに過ぎないものに帰着することは容易に推測できるだろう。このように考えると機械学習は非線形回帰分析の特殊ケースと解釈することができる。

非線形回帰分析の線形化と次元の呪い

 機械学習というのは\(\small y=f(x_1,\cdots,x_n)\)が非線形関数である場合の回帰分析と等価なのであるから、最初から非線形回帰分析としてモデルを推定すればいいんじゃないのかと思うかもしれない。しかし、一般的な非線形回帰分析というのはあまり好ましくない性質を持っている上に、多くの問題は線形回帰分析に帰着することができる。これを簡単に説明しよう。

 一般的に二乗誤差

\[ \small \Xi=\sum_{i=1}^N \left(y_i-f(x_i) \right)^2 \]

を最小化する最適化問題は凸最適化問題であるとは限らないということに注意する必要がある。具体例としてはロジスティック回帰分析といわれる

\[ \small f(x) = \frac{1}{1+e^{-(\beta_0+\beta_1x)}} \]

で非線形の回帰分析を行う場合、二乗誤差関数は\(\small \beta_0,\beta_1\)に関して凸関数にならないことが知られている。そのため、ロジスティック回帰分析は二乗誤差を最小化する代わりに尤度関数といわれる観測されるデータが生成される確率が最も高くなるようなパラメータとして回帰分析の係数を求める方法が用いられる。

 最小化問題の目的関数が凸関数でないと何が困るかというと、非凸最適化問題はNP困難(NP-hard)といわれる効率的なアルゴリズムを用いて解を求めることができない数理問題であるということである。基本的には、あり得る解を総当たりで探索することでしか大域的な解を求めることができないということであり、変数に対して指数的に計算コストが増えてしまうことになる。非線形関数に関する回帰分析は効率的にパラメータを推定する方法論が多様なものになってしまい、線形回帰分析のようにどのようなケースでも効率的に解を求める一般化されたアルゴリズムが存在しない数理問題ということになる。

 このように考えると非線形回帰分析はそもそもパラメータの推定が困難であり、ほとんどの場合において実践では応用できないということになるかもしれない。しかし、実をいうと非線形回帰分析は多くの場合、線形回帰分析に帰着することができる。解析学にはストーン・ワイエルシュトラウスの定理といわれる定理があり、任意の連続関数は多項式で一定の収束度合いで近似することができるというものである。これは任意の連続関数\(\small y=f(x)\)が

\[ \small y=f(x) = \beta_0+\beta_1x+\beta_2x^2+\cdots \]

で近似できることを意味している。右辺は\(\small 1,x,x^2,\cdots\)というデータの線形結合であるから、この関数のパラメータ\(\small \beta_0,\beta_1,\beta_2,\cdots\)は観測データ\(\small y_i,x_i\)が与えられれば、線形回帰分析で推定することができる。言い換えるならば、非線形関数に関する回帰分析など用いずとも、任意の関数型は線形回帰分析でモデリングできることになる。特に説明変数が少ない場合などは、非線形回帰分析として計算するよりも線形回帰分析として説明変数を増やす形で対応した方がより平易である場合も少なくないだろう。

 ただし、このアプローチにも限界はある。説明変数の数に対して用意しなければならない線形回帰分析の項の数が指数的に増加するためである。ストーン・ワイエルシュトラウスの定理を多変数に拡張すると

\[ \small y=f(x_1,\cdots,x_n) = a_0+\sum_{i=1}^na_1^ix_i+\sum_{i=1}^n \sum_{j=1}^n a_2^{ij}x_ix_j+\cdots \]

となるが、考慮する次数が増えるほど線形回帰分析の項が指数的に増加することが確認できるだろう。例えば、説明変数が\(\small n=100\)で、3次のオーダーまで考慮する場合\(\small 100+10000+1000000\)になり、線形回帰分析の項が100万個を超えてしまうことになる。この関数のパラメータを推定するということは不可能に近いと思われるし、データの量もこの個数を上回る量を用意しなければならないということになる。このように、非線形回帰分析を線形回帰分析化するという操作は次元の呪い(Curse of Dimensionality)を抱えているアプローチであると言える。ニューラルネットワークを用いた機械学習がこの次元の呪いをどのように回避しているというのが以下の工夫であるということになる。

多層化と非線形関数

 シグモイド関数

\[ \small f(x_1,\cdots,x_n)=\sigma\left(\beta_0+\sum_{i=1}^n\beta_ix_i\right) = \frac{1}{1+\exp\left(-\left(\beta_0+\sum_{i=1}^n\beta_ix_i\right) \right)} \]

について、Taylor展開をして多項式で近似することを考える。\(\small x\)について、1次微分と2次微分を計算すると

\[ \small \begin{align*} &\frac{\partial f(x_1,\cdots,x_n)}{\partial x_i} =-\beta_i\frac{\exp\left(\beta_0+\sum_{i=1}^n\beta_ix_i) \right)}{\left(1+\exp\left(\beta_0+\sum_{i=1}^n\beta_ix_i) \right)\right)^2} \\ &\frac{\partial^2 f(x_1,\cdots,x_n)}{\partial x_i\partial x_j} =-\beta_i\beta_j\left(\frac{\exp\left(\beta_0+\sum_{i=1}^n\beta_ix_i) \right)}{\left(1+\exp\left(\beta_0+\sum_{i=1}^n\beta_ix_i) \right)\right)^2}-2\frac{\exp\left(2\left(\beta_0+\sum_{i=1}^n\beta_ix_i) \right)\right)}{\left(1+\exp\left(\beta_0+\sum_{i=1}^n\beta_ix_i) \right)\right)^3} \right) \ \end{align*} \]

である。おいおい、機械学習で計算しなきゃいけないのは\(\small beta\)に関する微分であって、\(\small x\)​に関する微分じゃねえぞと思うかもしれない。しかし、ここで問題にしているのはニューロンがどのような関数形を表現しているのかであり、パラメータを推定しようとしているわけではないことに注意する。後半の\(\small \exp\)の項を無視して

\[ \small \begin{align*} &\frac{\partial f(x_1,\cdots,x_n)}{\partial x_i} \approx-\hat{\beta}_i \\ &\frac{\partial^2 f(x_1,\cdots,x_n)}{\partial x_i\partial x_j} \approx-\hat{\beta}_i\hat{\beta}_j \end{align*} \]

と近似できるものと仮定する。

 上記の計算から、シグモイド関数はパラメータが\(\small n\)個しかないのであるが、被説明変数の平均値が0であると仮定すると

\[ \small h_k=f_k(x_1,\cdots,x_n) = \hat{\beta}_0+\sum_{i=1}^n\hat{\beta}_ix_i+\sum_{i=1}^n \sum_{j=1}^n \hat{\beta}_i\hat{\beta}_jx_ix_j+o(x^3) \]

という二次形式の関数を近似的に表現しているものと考えることができる。ただし、複数のニューロンを組み合わせることでパラメータの数を調整することが可能であり、本来\(\small n^2+n\)個のパラメータが必要な情報を任意のパラメータの数\(\small n\times m\)で可能な限り近似するということを実現しているのがニューラルネットワークの1層分のモデルに相当しているということになる。

 加えて、1層分のニューラルネットワークが2次形式に相当する関数型を近似的に表現しているのであれば、それを多層化することで、表現できる関数の非線形性の程度を上げることができる。例えば、2階層のニューラルネットワーク

\[ \small \begin{align*} &h_k=f_k(x_1,\cdots,x_n) \approx \hat{\beta}_0+\sum_{i=1}^n\hat{\beta}_ix_i+\sum_{i=1}^n \sum_{j=1}^n \hat{\beta}_i\hat{\beta}_jx_ix_j+o(x^3),\; k=1,\cdots,n \\ &z_l=g_l(h_1,\cdots,h_n) \approx \hat{\gamma}_0+\sum_{i=1}^n\hat{\gamma}_ih_i+\sum_{i=1}^n \sum_{j=1}^n \hat{\gamma}_i\hat{\gamma}_jh_ih_j+o(h^3),\; l=1,\cdots,n \
\end{align*} \]

を考えれば、1階層目は\(\small x\)​に関して2次のオーダーまでしか表現できないが、2階層目では4次のオーダーまで表現できることになるだろう。非線形性の強いデータを扱う場合は深く多層化することで、より非線形性が強い非線形関数を表現できることになる。同様の計算はReLU関数についても行うことができる(こちらはTaylor展開ではなくChebyshev多項式による近似などを用いることで同様の議論ができる)。

 まとめると、機械学習は線形回帰化した非線形回帰分析において\(\small n+n^2+\cdots+n^p\)個の項が必要となるという次元の呪いの問題を、関数の多重化や多層化を用いることで\(\small n\times m\times p\)個というパラメータの数で非線形関数を近似して回帰分析を実行している手法であるということになる。注意が必要なのは、一般的に回帰分析では推定するパラメータの数より多くのデータが必要とされるが、機械学習ではそうとは限らないということである。多層化に伴うパラメータの増加はデータ間の非線形な関係に対応するためのものであり、必ずしも多くのデータ量へフィッティングするために作用する項ではないと考えられるからである。ニュースでしばしばいわれる1兆個のパラメータを用いた人工知能などというと、1兆個以上のサンプルを学習させたのかよと思うかもしれないが、必ずしも学習させているデータサンプルの数はパラメータの数より多いわけではないということである(実際のところはどうなのか部外者には計り知れない部分であるけれど・・・)。

機械学習と非凸最適化問題

 世の中に存在する大抵の便利なものというのはそれに付随するデメリットを抱えているものである。活性化関数と多層化を用いることで、線形回帰における次元の呪いを巧みに回避しているニューラルネットワークを用いた機械学習であるが、そのメリットを得るために機械学習が線形回帰と比較して犠牲にしているものが存在している。

 線形回帰モデルのパラメータを推定する際に解く最適化問題は凸最適化問題(Convex Optimization Problem)といわれる最適化問題であり、これは効率的に解を求める手法が確立されている問題である。制約がない凸最適化問題はニュートン法といわれる収束計算で解を求めることができ、この解法は2次収束という非常に速い速度で解に収束することが知られている。もっと言ってしまうと、線形回帰モデルは行列を用いた解の公式が存在しており、行列計算だけでパラメータの推定値を求めることができる。そのため、非常に容易にパラメータを推定することができるという性質を持つ。

 一方で、機械学習がパラメータを推定するために解く最適化問題は非凸最適化問題(Non-Convex Optimization Problem)といわれる最適化問題であり、実を言うとこの数理問題は効率的な数値計算手法が発見されていない(というより、おそらく存在しない)数理問題として知られている。正確な最適解を発見するためには(Brute Force法といわれる)総当たりで解を探索する方法以外の方法がない。一般的な非凸最適化問題はNP困難(NP-Hard)という計算複雑性を持っている問題であり、パラメータの数に対して多項式程度の計算量では解を求めることができない(計算量がパラメータの数について指数的に増加する)問題ということである。言い換えれば、機械学習は線形回帰において指数的に増加するパラメータという問題を解決する代わりに、パラメータを推定するために計算しなければならない最適化問題の解を求めるための計算量が指数的に増加するという代償を払っているということになる。

 もちろん、ニューラルネットワークを用いた機械学習においては効率的にパラメータを推定する方法がいくつも考えられている。代表的なアルゴリズムが凸最適化問題の解法に類似した確率的勾配降下法(SGD: Stochastic Gradient Descent)である。目的関数\(\small F(\beta_0,\cdots,\beta_n)\)を最小化する解を求めるため、gradient

\[ \small \nabla F=\left[\begin{array}{c} \frac{\partial F}{\partial \beta_0} \\ \frac{\partial F}{\partial \beta_1} \\ \vdots \\ \frac{\partial F}{\partial \beta_n}
\end{array} \right] \]

を用いて

\[ \small \beta_{p+1} = \beta_{p}-\eta \nabla F \]

と収束計算で解を求める方法は勾配降下法といわれる。\(\small \eta\)は学習率といわれるパラメータである。凸最適化問題では最適解に収束することが知られているが、非凸最適化問題では局所的な極小解に落ちてしまうことが通常であるため、一般的には非凸最適化問題の解法として用いることができない。これを学習データをいくつかに分割して、ランダムにシャッフルして学習させることで大域的な最適解を探索するアルゴリズムが確率的勾配降下法ということである。このようなアルゴリズムが大域的な最適解を探索できるメカニズムというのは一定の程度では知られているものの、どのような非凸最適化問題にも適用できるようなものではないことは容易に理解できるだろう。しかし、ニューラルネットワークを用いた機械学習では、このアルゴリズムは多くの場合最適な解(でなくてもそれに近い解)を探索できる手法になっているということである。多層化したニューラルネットワークを用いて、モデルのパラメータを学習させる手法を深層学習(Deep Learning)というが、これは(非常に限定された範囲ではあるけれど)非凸最適化問題の解法の一種であると考えることができる。

 こういった考え方は他の最適化問題にも応用することができる。観測データとモデルが推測する推測誤差を最小化する最適化問題を解くのが深層学習であったが、特定の報酬関数\(\small R_{t}(s_t, a_t)\)を最大化する意思決定の問題を解くことにも応用することができる。意思決定の問題を解くために利用される機械学習の手法は強化学習(Reinforcement Learning)といわれる。特に、強化学習は動的計画法の問題として定式化されることが多く、割引率\(\small \gamma_t\)を用いて

\[ \small V(s,a) = \max_{a_t(s_t)} E\left[\sum_{t=1}^\infty \gamma_tR_{t}(s_t, a_t) \right] \]

と表すことができる。この報酬の現在価値を最大化するように行動関数\(\small a_t(s_t)\)を決定する問題が強化学習ということになる。\(\small s_t\)は確率的に生成される状態であり、金融であれば市場データなどの情報ということになるだろう。行動関数\(\small a_t(s_t)\)はこれらの状態の関数であり、状態\(\small s_t\)が与えられたときの最適な行動を返す関数が行動関数ということになる。この関数を回帰分析の時と同様に機械学習の手法を用いて最適なパラメータを推定すればよいということになる。もちろん、これが凸最適化問題として定式化できるのであれば、通常の動的計画法の手法で解を求められるが、非凸最適化問題になる場合が強化学習におけるアルゴリズムの課題ということになる。以上から、強化学習は非凸動的計画法の解法を研究する分野とみなすことができるだろう。

まとめ

 機械学習や人工知能と言われると一体何を研究している分野なのかよくわからなくなるが、本稿の議論を踏まえれば、これらの分野で研究されている手法というのは本質的に非凸最適化問題の解法であるということが分かるだろう。そして、この数理問題の厳密な解法というのは総当たり法(Brute Force法)以外には存在しないと思われるため、効率的に近似解を求める工夫の手段が無限に存在するということになる。そのため、機械学習や人工知能の手法として研究されるアイデアというのはどこまで行っても未完であるし、研究のネタが尽きることがない分野であると推測することができる。この意味で、学問とみてもビジネスとみても終わりがない分野ということであり、学生やビジネスパーソンにとって、参入するのに遅すぎるということがないという意味で、非常に魅力的な分野であると考えることができるだろう。まあ、よくあることはみんながそう考えた結果として過剰参入が起きて、レッドオーシャン化するということであるけれど・・・

コメント