ニューラルネットワークはこの人工ニューロンを多数まとめた層をいくつも積み重ねるようにして構成し、層から層へ値を伝播して変換を施していくようなモデルです。人工ニューラルネットワークこのとき、一番最初の層は説明変数の入力を受け取るため入力層と呼ばれ、最後の層は目的変数の予測値を出力するため出力層と呼ばれます。間の層は中間層、隠れ層などと呼ばれますがこの中間層の存在がニューラルネットワークが複雑な関数に対しても高い近似性能を誇る理由となっています。深層ニューラルネットワークまたの名をディープラーニングはこの隠れ層が一般に2~3以上になった深いネットワーク構造に対する呼称ですが実際のところ明確な定義はありません。ニューラルネットワークの学習ニューラルネットワークも教師あり学習のアルゴリズムの1つ7なので、学習データに対するフィッティングの作業があり、その作業が学習と呼ばれるという点は機械学習一般の話と変わりません。この場合もやはり、予測値と目的変数値から計算される損失関数を最小化することでフィッティングを行います。この際には微分が重要となってきます。人工ニューロンを1つとってみたとき、出力値に対する重みによる微分というものを計算することを考えます。この右辺第一項は活性化関数に依存しますが、入力から出力へと値を伝播するとき(forwardといいます)に計算した値を保存しておくことで効率的に計算することができます。このように人工ニューロンは出力に対する重みの微分が簡単に求められるのですが、これは多層に重なっていても同じです。同様にして各演算についての偏微分の積になりますので、出力層での出力値に対する第一層の重みによる微分みたいなものも簡単に求められます。ニューラルネットワークの学習においては、損失関数に対する各重みによる微分というものを計算します。この重みによる微分の意味を考えるとその重みを少しずらした時にどれくらい損失関数の値が変わるかを表現していると言えますので、損失関数の値が小さくなるように微分値を用いて各重みを更新してやれば損失関数を最小化することができます。損失関数は山あり谷ありなことがほとんどですので、単純に損失関数値が下がる方向にだけ調節しても大域的な最適解というものに辿り着かないこともあります。そこのあたりの最適化に関しては今回は割愛させていただきます。潜在変数モデルまたまた、話は飛びます。カルマンフィルタのような、観測変数の背後に非観測の状態変数の存在を仮定するモデルを潜在変数モデルと言います。潜在変数モデルの考え方は機械学習の世界では非常によくみられます。これは、潜在変数モデルにおける潜在変数の考え方が機械学習の適用先となる現実世界の問題設定によくある階層構造やデータの分布構造をよく表現できているからだと考えられます。カルマンフィルタは潜在変数が時系列性を持つ隠れマルコフモデルですが、それ以外にも単語群の出現の背後にトピックと呼ばれる潜在変数の存在を仮定するトピックモデルや、変分オートエンコーダも潜在変数モデルの1つと考えることができます。今回、深層カルマンフィルタを理解する上でこの変分オートエンコーダを潜在変数モデルの1つと考えることがキモとなります。潜在変数モデルにおいてよく現れる考え方として、潜在変数の分布が観測変数の分布の事前分布となる、すなわち潜在変数の取る値が観測変数を生成する分布のパラメータとなる、というものがあります。実際トピックモデルなどにおいてはトピックと呼ばれる潜在変数の分布をディリクレ分布として仮定し、その値に応じて各単語の出現確率を決定する多項分布のパラメータが変化する、というLDAというモデルが一般的に用いられます。変分オートエンコーダ変分オートエンコーダの説明をする前に、オートエンコーダについて簡単に触れておこうと思います。オートエンコーダは、ニューラルネットワークによる次元削減の教師なし学習アルゴリズムの1つです。オートエンコーダは入力に対応した出力として入力と同じデータを用います。上の図のような構造のニューラルネットワークの入力と出力に同じデータを与えた場合このネットワークが学習するのはなんでしょうか?左半分のネットワーク、すなわち入力から中間層へと流れていく部分に関しては、層を挟むごとにどんどん層のサイズが小さくなるようにします。これにより、入力データをより圧縮したような中間的な表現が中間層には現れることになります。右半分の中間層から出力層へと流れていく部分では、この圧縮された中間的な表現を再度拡張して元の入力と同じようなデータを出力するようにしています。結果としてこの構造をもったニューラルネットワークの入力と出力に全く同じデータを与えた場合には、そのデータの本質的な部分のみを抜き出したような表現が得られると考えられます。この中間表現を得ることは画像や自然言語など情報が疎な構造に分散している場合には有効であると考えられています。このオートエンコーダを先のニューラルネットワークの学習という観点で見直すと、説明変数と目的変数が同じものになっていると考えれば教師あり学習の枠組みで捉えることが出来ます。したがって出力の予測値と出力(入力)が近づくと小さくなるような損失関数を与えてやりそれを最小化するように学習すればネットワークはそのデータに対してフィットしたということが出来ます。従うような制限をかけることを考えます。これにより、例えば画像群に関してフィットさせると各画像は中間層においては標準正規分布を構成する一点として配置されるようになります。学習データが射影されていない点というのをその正規分布からサンプリングすることで学習データには含まれないデータを得ることが出来ます。このように、学習によって分布を得るような機械学習のモデルを生成モデルと言いますが、これが生成モデルと言われるのは学習データにはないデータも生成できるから、という背景があります。変分オートエンコーダは、オートエンコーダの中間表現を標準正規分布を構成するような制限をかけたもの、ということはわかりましたがこれをどのように実現するのでしょうか?世の中には変分オートエンコーダに関する説明がいろいろと溢れていますのでそれらとの差異を出すためにも、ここではお気持ちについて詳しく述べていこうと思います。標準正規分布を構成するように制限をかける、という点に関してですが、これは「エンコーダでの行き先の分布を標準正規分布にできるだけ近づける」ということを行って実現します。$$と呼ばれるものが導入されます。この指標は、分布が完全に一致する場合には0となり、それ以外の場合は正の値をとります。したがってこの値を0に近づける(=最小化する)ようにすれば、2つの分布は近づいていくことになります。エンコーダでの行き先の分布を標準正規分布に近づけるためにはエンコーダの出力が分布(のパラメータ)になっている必要があります。これらの値がKLダイバージェンスを最小化するように学習をすすめればいいのです。一方で、エンコーダで標準正規分布を近似するように構成された潜在変数をデコーダでは入力データを再構成するように復元してやる必要があります。$$を最小化するようにしてやります。この2つの和を最小化するように学習をすすめることで、エンコーダの行き先の分布を標準正規分布に近づけるようにしながら入力と出力ができるだけ同じようになるニューラルネットワークというものを得ることが出来ます。深層ニューラルネットワーク(DNN)に置き換えたものになります。部分がDNNで表現されているというのが深層カルマンフィルタです。部分をデコーダと考えると、これは変分オートエンコーダに非常によく似たモデルであることがわかります。$$となっている点です。用途としても変分オートエンコーダが主にデコーダを用いて未知画像を生成する、といった用途を考えている8のに対し、深層カルマンフィルタではエンコーダ、すなわち観測データと制御入力の系列から状態を推定する方がメインになっている点が異なります。エンコーダ部分に対応しています。デコーダ部分に関して言えばやっていることは変分オートエンコーダと変わりません。このネットワークの学習においてはどのような損失関数を最小化すれば良いのでしょうか?ここでも、詳細な証明は元の論文[1]が詳しいため割愛させていただくとして、お気持ちだけ書いておこうと思います。デコーダ部分は潜在変数を入力としてエンコーダに入ったデータと全く同じデータが出力されるようにしたいため再構成誤差を最小化するようにします。この部分は変分オートエンコーダと変わりません。変分オートエンコーダと大きく異なるのが、状態遷移が存在する点です。結論から言えば変分オートエンコーダがエンコーダとデコーダの2つのネットワークを用いていたのに対し、深層カルマンフィルタではエンコーダとデコーダと状態遷移の3つのニューラルネットワークを使います。どのようにしてこれを学習するか、というと初期状態については初期の潜在変数分布とエンコーダの出力の分布を近づけるようにKullback-Leiblerダイバージェンスを最小化するのですが、それ以降の時間ステップに置いては、状態遷移のニューラルネットワークの出力と、1ステップずれた観測変数+制御入力の入力があったエンコーダの出力の分布を近づけるように学習していく、という点が変分オートエンコーダとの大きな違いです。Filterのアーキテクチャまとめ今回は深層カルマンフィルタの説明を行いました。変分オートエンコーダの理論的な詳細や深層カルマンフィルタの理論的な説明は僕の理解力不足もあっておざなりになってしまったので今後余裕があったら追加していこうと思います。実装に関してもできたらいいなと思っています。中途半端ですが、アドベントカレンダーに間に合わせるために今回は一旦ここで終わりにしたいと思います。分かっていない場合の例としては不適切だが説明の手間を考えてごまかしています。論理的に構築する、というのがなんともぼやかした言い方ですが、自然科学の伝統的方法を鑑みるに「データからの法則性の抽出」と「法則性の適用と組み合わせ」によって数理モデルは成り立っているというのが個人的な見解です。この「法則性の適用と組み合わせ」を「論理的に構築する」と表現したつもりです。数理モデルの定義としてこれが妥当なのかはよくわからない。近づけるという表現が結構曖昧ですがまあここはごまかしています。↩の中身に実数倍かけたものであることもあります。月別アーカイブはてなブログをはじめよう!koukyo1213さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。