類題を用いた最小値問題・最適化の問題演習|高校数学の演習を通して理解するニューラルネットワーク #8

f:id:lib-arts:20181228181633p:plain

当連載は、高校数学の演習を通して機械学習アルゴリズムの一つであるニューラルネットワークを理解しようというものです。連載の経緯につきましては#1にまとめましたので下記をご覧ください。

#1~#6では6題の例題の解説とそれをベースにした回帰分析の学習の流れとモデルの数式のMLPやCNNへの拡張について取り扱いました。

 #6までで解説的な話題は一通り取り扱えたと思いますが例題だけだとしっくりこないと思いますので、#7以降では問題演習について取り扱います。(#7では関数と微分について取り扱いました。)
https://lib-arts.hatenablog.com/entry/math_nn7
#8では最小値問題や最適化について問題演習として取り扱います。

Math Exercises
以前セミナーを行った際に上記のサポートページを作っていただいたので、こちらから何題か抜粋しつつ足りないところは改めて作成できればと思います。
以下、目次になります。

1. 最小値問題に関する問題演習
2. 勾配降下法と等比数列に関する問題演習
3. まとめ


1. 最小値問題に関する問題演習

Math Exercises (Exercise 4)
より、1,3,4,5を取り扱えればと思います。

以下のf(x)が最小値をとる際のxを、導関数を用いて求めよ。

・Q.08   f(x) = x^2−2x+1
・Q.09   f(x) = 3x^2+5x−7
・Q.10   f(x) = \frac{1}{2}x^2+\frac{3}{5}x+4
・Q.11   f(x) = 2(x−1)(x+3)

A.08

f'(x) = 2x−2なので、f'(x)=0の時はx=1

f(x)は下に凸の関数のため、x=1で最小値をとる。


A.09

f'(x) = 6x+5なので、f'(x)=0の時はx=-\frac{5}{6}

f(x)は下に凸の関数のため、x=-\frac{5}{6}で最小値をとる。


A.10

f'(x) = x+\frac{3}{5}なので、f'(x)=0の時はx=-\frac{3}{5}

f(x)は下に凸の関数のため、x=-\frac{3}{5}で最小値をとる。


A.11

f(x) = 2(x−1)(x+3) = 2x^2+4x-6よりf'(x) = 4x+4なので、f'(x)=0の時はx=-1

f(x)は下に凸の関数のため、x=-1で最小値をとる。

 

解説.

下に凸の関数(定義域でf^{\prime\prime}(x)が0より大きい関数)はf'(x)=0で最小値をとります。もう少し踏み込んで解説すると微分は傾きなので、f'(x)f(x)の傾きを表します。また、f''(x)が0より大きいというのは傾きが増え続けるということを意味するので、f'(x)=0の点を境に関数の値は減少から増加に変わるのでf'(x)=0の点で最小値を取ることがわかります。

最適化を行うに当たって凸関数を目的関数としておくのはよく行われることなので、この辺は意識しておくと良いです。


2. 勾配降下法と等比数列に関する問題演習

Math Exercises (Exercise 5)
より、1,3を取り扱えればと思います。(1節で取り扱った問題と関数が同じになっているので注目です)
x_{n}の極限が入っていなかったので追加しました。

以下の条件に対し、勾配降下法の式x_{n+1}=x_{n}−αf′(x_{n})を用いてx_{1}x_{2}x_{n}\displaystyle \lim_{n \to \infty} x_{n}を求めよ。
Q.12   f(x) = x^2−2x+1x_{0}=1.5α=0.1
Q.13 f(x) = 3x^2+5x−7x_{0}=0,α=0.2
Q.14   f(x) = 2(x−1)(x+3)x_{0}=4,α=0.1

A.12

 x_{n+1} = x_{n}-0.1 × (2x_{n}-2)    ・・(1)

上記は(※)にα=0.1f'(x_{n})=2x_{n}-2を代入したものになる。

x_{n+1} = 0.8x_{n} + 0.2     ・・(2)

(1)を変形すると(2)のようになる。(2)に基づいて、
x_{1} = 0.8×x_{0}+0.2 = 0.8×1.5+0.2 = 1.4
x_{1} = 0.8×x_{1}+0.2 = 0.8×1.4+0.2 = 1.32 が解ける。

また、(2)は(3)のように変形できる(解説にある特性方程式の考え方を抑えておくとよい)。

x_{n+1}-1 = 0.8(x_{n}-1)     ・・(3)

(3)は高校数学の数列で習う漸化式であり、n+1番目から1を引いたものがn番目から1を引いたものの0.8倍になっているので{ x_{n}-1}は公比0.8の等比数列になる。そのため、数列の基本的な解き方に基づいて下記のように解いていくことができる。
x_{n}-1=0.8×(x_{n-1}-1)=0.8×(x_{n-2}-1)=...=0.8^n×(x_{0}-1)
したがってx_{n} =0.8^n×(1.5-1)+1 = 0.5×0.8^n + 1
\displaystyle \lim_{n \to \infty} x_{n}\displaystyle \lim_{n \to \infty} (0.5×0.8^n+1)=1


A.13

 x_{n+1} = x_{n}-0.2×(6x_{n}+5)    ・・(1)

上記は(※)にα=0.2f'(x_{n})=6x_{n}+5を代入したものになる。

x_{n+1} = -\frac{1}{5}x_{n} - 1     ・・(2)

(1)を変形すると(2)のようになる。(2)に基づいて、
x_{1} = -\frac{1}{5}×x_{0}-1 = 0-1 = -1
x_{2} = -\frac{1}{5}×x_{1}-1 = (-0.2)×(-1)-1 = -0.8 が解ける。

また、(2)は(3)のように変形できる。

x_{n+1}+\frac{5}{6} = -\frac{1}{5}(x_{n}+\frac{5}{6})     ・・(3)

(3)は漸化式であり、n+1番目に\frac{5}{6}を足したものがn番目に\frac{5}{6}を足したものの-\frac{1}{5}倍になっているので{ x_{n}+\frac{5}{6}}は公比-0.2の等比数列になる。そのため、数列の基本的な解き方に基づいて下記のように解いていくことができる。
x_{n}+\frac{5}{6}=-\frac{1}{5}×(x_{n-1}+\frac{5}{6})=...=(-\frac{1}{5})^n×(x_{0}+\frac{5}{6})
したがってx_{n} =(-\frac{1}{5})^n×(0+\frac{5}{6})-\frac{5}{6} = \frac{5}{6}×(-\frac{1}{5})^n-\frac{5}{6}
\displaystyle \lim_{n \to \infty} x_{n}\displaystyle \lim_{n \to \infty} (\frac{5}{6}×(-\frac{1}{5})^n-\frac{5}{6})=-\frac{5}{6}


A.14
A.12、A.13と同様に解けるので解答は以下のようになる。
x_{1} = 2
x_{2} = 0.8
x_{n} = 5×(0.6)^n -1
\displaystyle \lim_{n \to \infty} x_{n} = -1

 

解説.

A.12~A.14の\displaystyle \lim_{n \to \infty} x_{n}はそれぞれA.08、A.09、A.11の答えと一致していることは意識しておくと良いです。

また、A.12において(2)から(3)の式変形の際に言及した特性方程式ですが、x_{n+1}x_{n}をα、x_{n}の係数をβで置き換えて等号を解けばx_{n+1}+α=β(x_{n}+α)に変形できることを利用しています。

若干トリッキーではありますがなかなか面白い解法だと思います。


3. まとめ

特性方程式が若干発展的な内容で難しかったかもしれませんが、微分=0を解いた答えと勾配降下法を用いた際の極限が一致するというのを上記の問題演習を通して理解していただけたらと思います。