ざっくりML

機械学習に興味ある大学院生によるブログです.

テイラー展開

最適化数学でテイラー展開がたくさん出てきたのでとりあえず実装してみることにしました. 今回はサインカーブを使おうと思います. まず、関数のある一点での導関数の無限和で表されたものをテイラー級数と言います. その、テイラー級数を得るためにテイラー展開を行います. この時、ある一点をx=aとすると、x=a周りのテイラー展開と表現します. 要は、x=a近傍における導関数の無限和をとることを意味します. ちなみに、原点回りのテイラー展開のことをマクローリン展開といいます(ややこしい...). ここで、このテイラー展開マクローリン展開について気軽に学べる良書として数学ガールを紹介しておきます. 私は、学部時代はテイラー展開の有難みが全く分かりませんでしたが、この数学ガールを読んでテイラー展開の使いどころを理解できるようになりました.

数学ガール (数学ガールシリーズ 1)

数学ガール (数学ガールシリーズ 1)

さて、関数f(x)x=a周りのテイラー展開は次の式で表されます.

\displaystyle f(x) = \sum_{k=0}^{\infty}\frac{f^{(k)}(a)}{k!}(x-a)^{k}

無限級数で近似していることになりますので、例えばk=5で止めれば関数を5次関数で近似できることになります. kが大きいほど元の関数に近づきます.

また、マクローリン展開は原点回りのテイラー展開のことだったので、上式のa0を代入すればよいので、

\displaystyle f(x) = \sum_{k=0}^{\infty}\frac{f^{(k)}(0)}{k!}x^{k}

と表されます.

ここで、サインカーブに対してマクローリン展開してみたいと思います. \sin x微分していくと\sin x \rightarrow \cos x \rightarrow -\sin x \rightarrow -cosxとなります. また、\sin 0 = 0なのでサインの項が消えます. よってサインカーブマクローリン展開は、

\displaystyle \sin x = \sin 0 + \frac{cos 0}{1!}x + \frac{-sin 0}{2!}x^{2} + \frac{-cos 0}{3!}x^{3} + \frac{sin 0}{4!}x^{4} + \cdots = x - \frac{x^{3}}{3!}+\cdots

と規則性が見えてきます. コサインカーブマクローリン展開も同様に導くことができます.

今回は、サインカーブに限定して実装したので、導関数のところは事前にこちらで用意することにしました(4通りしかないので). 一般の関数に対しての実装はまた別の機会にあげられたらと思います. また、sympyというのを使えば、テイラー展開もn次導関数も求めることができますが、今回はnumpyだけを用いています.

テイラー展開展開(sin)

f:id:linearml:20170915200418p:plain

かなり見づらいですが、元のサインカーブが青色で他は各次元で近似したものを図示しています. 例えば緑色は1次元で近似しているので、直線になっています. その後次元数を上げると元のサインカーブに近づいていき、11次元の時は大分サインカーブに近づいていることが分かります. これなら分かる最適化数学ではn変数のテイラー展開について触れていましたが、それもまた別の機会で...