らんだむな記憶

blogというものを体験してみようか!的なー

ニューラルネットワークの数理的構造 (4)

最近の機械学習は $f(\text{input}) = \text{output}$ を input と output のサンプルの対から推定したいというシチュエーションのものが多いと思う。

$(x_i, t_i)_{1 \leq i \leq L} \in \mathbb{R}^d \times \mathbb{R}^{d^\prime}$ をそのような対であるとして $f(x_i) \approx t_i,\ \forall i$ を満たすようにしたい。さて、一般に $f$ が分かっているのであればこれをできるだけ簡単な函数の和で近似しようとする理論としては Fourier 級数展開があるのであった。$f$ を $\sin(nx)$ と $\cos(nx)$ のスカラー倍の和で近似するというものである。或いはより抽象的には Weierstrass の多項式近似定理のほうがシックリくるかもしれない。ある関数 $f$ を多項式近似するという場合に、$f(x) \approx a_0$, $f(x) \approx b_0 + b_1 x$, $f(x) \approx c_0 + c_1 x + c_2 x^2$, ... のように精度の範囲で多様に近似できるが、 項の数を増やしても必ずしも良い近似とは言えない。また、逆に $f$ が未知という場合には、こういった漸近的に精度を上げるような近似はサンプリング定理でも成立するならいざしらず、一般には不可能である。

ということで数学的に厳密な近似は諦めてしまって、応用上十分な精度が出て何かしらの目的を達成できる近似を目指すことにする。ここではニューラルネットワークというもので近似することを考える。ニューラルネットワークの数理的構造 (1) - らんだむな記憶 に戻ると、入力 $x$ とパラメータ $W$, $B$ に関する和と積と初等的な函数の合成で表現可能な $F(x;W, B)$ という函数を考え、これで $f$ を近似しようというのだ。そのために、$W$ と $B$ の函数

\begin{align}
\mathrm{cost}(W,B;x_0,t_0) = \sum_{i=1}^L \left| F(x_i;W,B) - t_i \right|^2
\tag{1}
\end{align}

を導入して、この $\mathrm{cost}$ が最小になるような $W$, $B$ の値 $W_\min$, $B_\min$ を見つける。この時

\begin{align}
f \approx F(\cdot;W_\min, B_\min)
\end{align}

が $x_i$ のみならず一般の $x$ に対してもある程度成立するであろうという理屈である。
$W_\min$, $B_\min$ を見つける方法については一般には解析的なアプローチは不可能であるので、数値計算を用いる。ここで勾配降下法という方法で各点での勾配を求め、勾配方向にパラメータを修正していって、$\mathrm{cost}$ の極値(可能なら最小値)を目指すのであった。勾配については嬉しいことに $F$ が $W$, $B$ に関する和と積と初等的な函数であることから自動微分偏微分の連鎖律)によって厳密に簡単に求まるのでった。また、和と積がメインであることからこの手の演算がいかに沢山あろうとも、GPU の得意分野であるが故に高速に計算できる。

この辺は例え GAN であろうとも本質的には変わらない。$\mathrm{cost}$ の右辺は単純な二乗誤差ではなく交差エントロピーとし、$f(x_i)$ と $t_i$ を直接比較するのではなく、識別器と呼ばれる別の函数ニューラルネットワーク)$D$ を通して、

\begin{align}
\mathrm{cost}(W,B;x_0,t_0) = \sum_{i=1}^L \mathrm{cross\_entropy}(D(F(x_i;W,B)),t_i )
\tag{2}
\end{align}

と書くのであった。実際には、$D$ のほうもパラメータを持ち、こちらも何かしらの意味で最適化しないとならないので右辺にはもう 1 項加えられ、$F$ と $D$ を同時に最適化するという構図で書かれるのであった。このコンテキストで $F$ は生成器と呼ばれる。

結局、本質的には (1) を最適化する問題を解いて、$f$ を近似できる(と信じることにする)初等的な函数を求めるということである。