ニューラルネットワークの紹介

ニューラルネットワークについて

本チュートリアルではニューラルネットワークについて紹介します。主にフィードフォワードニューラルネットワークというネットワークをベースに紹介します。また、なぜこの数理表現がいいかについて説明します。さらに、学習の意味と学習の評価ついて紹介したいと思います。

ニューラルネットワークとは?

ニューラルネットワークとは人間の脳を表現した数理モデルです。脳内にあるニューロン細胞を数理モデル化し、それらをネットワーク構造にしたものです。下記はニューラルネットワークの図です。

丸記号は「ユニット」(別名:パーセプトロン)といい、各ユニットを束ねているものを「層」と言います。各ユニットから出力している信号は同一であり、各々は別のユニットに入力します。ユニットは信号を受ける際に、各信号に「重み」定数を掛けて、それらの総和をとります。総和を算出した後、ユニットからどれだけ出力しないといけないかを「活性化関数」という関数で判断し、再度出力側にあるユニットに出力します。このように、入力層から出力層まで信号が処理されることを「フィードフォワード」と言います。

これらのユニットと層があれば、ニューラルネットワークになります。特に決まりはないので、どれだけユニット、または層を増やすかは設計者次第です。また、CNN(Convolutional Neural Network)やRNN(Recursive Neural Network) のように畳込み関数や、遅れ関数などを挟んでもニューラルネットワークと言います。

なぜこのモデルがいいのか?

ここで「このモデルにして何がいいの?総和を取って処理を繰り返すただのネットワークじゃん!」と思われた方がいるかもしれません。この関数の魅力は重みを調整することで、複雑な曲線を描くなど、様々な関数ができるところです。この数理モデルを使えば、例えば中身が複雑な計算が含まれていても、多くの関数を同定することができます。(同定とはある関数を対象に、入出力関係を近似することです。)この同定する過程を「学習」と言います。学習の際は、学習対象としている関数と同等の入出力が得られるように、「重み」を調整します。このようにして、必要とする関数を数理モデルで得ることができます。

関数がなくても学習?

多くの場合は、入力(データ)と出力(答え)の二つを用意して、ニューラルネットワークを学習させます。例えば「降水率」、「気温」、「気圧」、「湿気」のデータがあるとします。「降水率」を予測したい場合は、「降水率」を出力にし、「気温」、「気圧」、「湿気」を入力として学習します。上記の考えだと、ここでは関数(関係式)がないから学習ではないと考える方がいるのではと思います。しかし、例え明らかな関数が存在していなくても、データに関連性がある場合は目に見えない何かしらの関係式があると捉えられるため、あたかも目に見えない関数を同定していると捉えることもできます。つまり、関数がなくても、学習とも言えます。

学習はどうやって?

ではどのように重みを調整し、特定の関数を学習するのか?実はその手段として、誤差逆伝搬法(Back Propagation)という計算で重みを更新します。この更新方法はニューラルネットワークだからこそ対応する計算です。詳細はここでは記述しませんがこの計算を用いることにより、重みが更新し、特定の関数を学習することができます。

トレーニングとテストセット

トレーニング(訓練)とは特定のデータセットに基づいて、重みを更新することです。学習と同じです。特定のデータに基づいてトレーニングができたとしても、必ずしもモデルとして学習できたとは限りません。たとえば先ほど出た「降水率」の例を2017/1/1〜2017/3/31のデータでトレニーングしたからといって、2017/5/1〜2017/5/30の降水確率が大きくズレることがあります。この場合は、トレーニングしたニューラルネットワークは予測において使えないことがわかり、学習方法やデータ選択等を見直さなければなりません。そこで、モデルの妥当性を確認するためにテスト(評価)セットを用意します。このテストセットを用いることで、ニューラルネットワークが学習できたかどうかが判断します。

まとめ

「ニューラルネットワーク」とは人間の脳を表現した数理モデルであり、「ユニット」(別名:パーセプトロン)と「層」を組み合わせた時点でニューラルネットワークと言います。モデルを構築する際には、畳込み関数や遅れ関数を挟んでもニューラルネットワークと言います。「重み」を調整することで、複雑な曲線を描くなど、様々な関数ができます。「学習」とはとある関数を同定することであり、学習という段階を踏むことで、対象となる関数に同定するよう、重みを自動で更新します。重みは「誤差逆伝搬法」という方法により、学習します。学習する際にはトレーニングとテストデータセットを用意して、モデルが正しく機能するかを評価することで、正しく学習できているかがわかります。