Learningの各種アルゴリズムをスクラッチから実装していきたい。Learningのアルゴリズムを実装したPythonライブラリもあるのでスクラッチから実装する意味はほとんどないのだけれど、今回はアルゴリズムの詳細を勉強するというのが趣旨。Learningの各種アルゴリズムの実装方法がソースコード付きで解説されている。ぶっちゃけたところこの資料を読み込めばこんな記事はいらないのだけれど、実装する過程で試行錯誤しないと理解できないところが多々あったのでそういうところをまとめておきたい。今回はTheanoの基本的なところから。TIPSがあるので断片的に記事を書くかも・・・TheanoについてTheanoはPythonの数値計算ライブラリ。Learningを実装したライブラリだと勘違いしていたのだけれど違ってた。自動微分のサポートニューラルネットは微分を多用するので、微分の結果を自分で解かなくて済むのは大きなメリットになる。Learningの実装で便利なように作られたのだなという印象を受けた。TheanoをGPUで使えるようにインストールする方法は下の記事を参照のこと。Theanoの基本は下の資料が参考になった。TutorialTheano解説Theanoの基本メモTheano入門シンボルによる数式の定義Theanoでは実行時コンパイルをサポートするためシンボル(TensorVariable)という概念が出てくる。いう簡単な式の計算でも以下のような手順を踏む必要がある。'theano.compile.function_module.Function'>1.04.09.016.025.0こんな面倒なことやってられっか!と思ったのだけれど、先に挙げたTheanoのメリットを享受するには耐えなければならないということがわかってきた。dscalarの部分をdvectorやdmatrixに変えるとベクトル演算や行列演算もできる。スカラー、ベクトル、行列などを抽象化した概念をテンソル(Tensor)といい、TensorVariableという名前の由来になっている。物理で頻繁に使うみたいだけどメリットがよくわからない。コンパイルするためにPythonではあまり意識しなくてよかったデータ型が重要になっている。[4,5,6]])シンボルを組み立てた数式はそのままでは使えず、theano.function()で関数化する必要があるというのがポイント。theano.function()で関数化すれば自動的にコンパイルされるためシンボルで定義した数式が非常に高速に計算できる。シグモイド関数の例もう少しシンボルによる数式の例を。ニューラルネットのユニットでよく使うシグモイド関数は、で定義される。これをTheanoで実装すると入力は行列で与えているが、要素ごとに計算(Elementwise)されて結果が行列で返る。0.11920292]]共有変数プログラムの実行中に値を保持し続けないといけないようなデータは共有変数(SharedVariable)という仕組みが使える。機械学習の文脈では、訓練データやモデルパラメータが該当する。共有変数を作るときは、具体的なデータを初期値として与える必要がある。numpyのndarrayなどそのまま使えるので便利。6.]]共有変数に格納したデータは自動的にGPUのメモリに格納されるためデータを高速に読み書きできるようになる。GPUのメモリに乗せるデータはfloat型(theano.config.floatX)にする必要がある。borrowはデフォルトではFalseだけれど、Trueにしておくとdataに対する変更がXにも反映されるようになる。チュートリアルでは学習データはFalseでパラメータはTrueのように使い分けているようだけど基本的にTrueにしておいて問題なさそう?共有変数の値はシンボルと違ってget_value()で取得できるのがポイントかな。線形回帰モデルの式は、で表される。学習で求まったWとbを共有変数とみなして上の式を実装してみる。こんな感じで数式を組み立てるときにはシンボルと同じような感じで共有変数も使える。シンボルは関数化してから関数の引数として値を与える必要があるが、共有変数には最初から何らかの値が入っているのがポイントかな。共有変数の値を更新する方法はまた今度。非常に便利な仕組みがある。通常のPython変数とシンボル(TensorVariable)と共有変数(SharedVariable)の違いをしっかり意識してごちゃまぜにしないのがtheanoのソースコードを読む上でのコツだと感じた。次回はTheanoの自動微分について書きたい。今回からしばらくさまざまな自己符号化器(Autoencoder)を検証...2015-06-18Theanoによる多層パーセプトロンの実装Theanoによるロジスティック回帰の実装(2015/5/26)のつづき。自動微分(2015/5/18)のつづき。シンボルと共有変数(2015/5/9)のつづき。»プロフィールid:aidiary人工知能とその関連分野に興味があります。)はてなブログをはじめよう!aidiaryさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。