最新の機械学習の代表、ニューラルネットワークとは

アクセリアの研究
ニューラルネットワークがまねした人間の脳
 前回のコラムで機械学習の原則について議論した後は、最新の機械学習の代表といえるニューラルネットワークを紹介します。

 ニューラルネットワークは人間の脳を模倣を試みたもので、70年代後半から80年代初めにかけて非常に人気がありましたが、コンピューティングパワー欠如のために、90年代後半に人気を失ってしまいました。
ところが、最近の計算能力の向上、特にGPUのサポートがニューラルネットワークの人気を復活させ、今日では最も成功した機械学習ツールの1つとなりました。
ニューロンの基本構造
 人間の脳では、通常、ニューロンが特定のタスクをそれぞれ担当していますが、実験では別のタスクを実行するように訓練することができます(例:舌で見る、など)。
 したがって、ニューロンを模倣することで、機械学習プログラムが作られるのです。

単一のニューロンの基本構造は以下の通りです。

●一連の入力線
●入力線の重み(または重要度)の値
●単一の出力線
●重み付けされた入力に基づいて、信号が出力に
 送信されるかどうかを決定するアクティブ化関数
ニューロンの簡単な例
 それぞれの重み -30, +20, +20 の3つの入力線と、5より大きい値を選択するアクティブ化関数を持つニューロンの簡単な例から見てみましょう。
 重み付けされた入力信号の合計が5より大きい場合は、信号が出力線に送られます。



 説明を簡単にするために、ここでは第1入力線を常に送信する(これはいわゆるバイアス入力と呼ばれる)-30という重みを付け、他の2本の入力線についてのみ説明します。
線xとyの両方が送信されている場合、総和 20+20-30=10 となり、5より大きいので、出力線に1が送信されます。しかし、入力線xまたはyのいずれかが送信しない場合、20-30=-10 のいずれかが得られ、情報は送信されません。数学的にはこれは数学論理学のゲートと記述できるので、ニューロンは「xかつy」を計算します。

 この単純な例では、適切な関数を計算するための重みを用意していますが、実際にこれらの重みは未知であり、ニューロン(ニューラルネットワーク)の学習によって学習されます。
 乱数で重みを初期化した後、実際の学習計算は、トレーニングデータ全体に対して以下のステップを繰り返すことからなります。

●現在の重みで学習入力の出力値を計算する(フォーワードプロパゲーション)
●期待される出力と実際の出力との間の誤差を計算する
●この誤差を使用して重みを調整する(バックプロパゲーション)
ディープラーニングの、「ディープ」が意味する「隠れ層」
 ニューラルネットワークでは、数ニューロンを層に結合して、入力から複素関数を計算します。特に、隠れ層の数が増えるとともに、計算できることが激増します。ディープラーニングの「ディープ」という意味は、この隠れ層の数が多いということなのです。



 一つのニューロンだけでも驚くほど多くのことができます。このリンクをクリックすると、シングルニューロンで2種類の点の群れをわけるニューラルネットワークのアニメーションを見ることができます。



参考文献:
ニューラルネットワーク(ウィキペディア)
Tensorflow Playground (英語)

■関連ページ
【アクセリアのサービス一覧】
 ・サービスNAVI

Norbert Preining

アクセリア株式会社 研究開発部社員
北陸先端科学技術大学院大学ソフトウェア検証研究センター 研究員
ウィーン工科大学 研究員
Debian開発者
TeX User Group (取締役会員)、Kurt Godel Society (取締役会員)
ACM, ACM SigLog, 日本数式処理学会、ドイツ数学論理学会