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

前回の投稿から随分と時間が経ってしまいましたが、今回はニューラルネットワークによる機械翻訳の話です。グーグル翻訳など現在の機械翻訳はニューラルネットワークを利用したものが主流のようです。それでは、ニューラルネットワークとはどういうものものなのでしょうか。ググってみると、次の説明が見つかります。

ニューラルネットワークはシナプスの結合によりネットワークを形成した人工ニューロン(ノード)が、学習によってシナプスの結合強度を変化させ、問題解決能力を持つようなモデル全般を指す。(ウィキペディア

うーん、難しい。ニューロンとは脳内の神経細胞のことですが、ぐぐると次のようなが見つかりました。

神経細胞とそのモデル

脳内の神経細胞(生体ニューロン)は、樹状突起からの入力を受け付け、ニューロン内で何らかの処理を行い、軸索を通して別のニューロンへと出力します。人工ニューロンはそれをモデル化したものであることがわかります。

コンピュータ上で人工ニューロンを再現する場合は、人工ニューロンが数式に置き換わるわけですが、ここでは数式をできるだけ使わずに説明してみます。

最も基本的な人工ニューロンでは、複数の入力(数値)があり、それぞれの入力値をそれぞれ調整(重みを付けることが)できるようになっており、調整した全ての入力値の和がユニットに渡されます。ユニット内では、まず、外部から渡された数値(調整した全ての入力値の和)を更に調整(バイアスを付加)し、ユニット内のプログラム(関数)に渡します。そして結果が出力されます。

人工ニューロンを再現するのに使われる関数として一般的なものはシグモイド関数と呼ばれる関数です。そのグラフを次に示します。

シグモイド関数

神経細胞(生体ニューロン)内ではこんな感じで処理しているんでしょうか。0と1の間を比較的緩やかに変化するのが特徴ですね。これを見ていて思い出したのは次のようなステップ関数です。

一つ一つの神経細胞が0か1かの数値を出力するのであれば1、神経細胞とはデジタル回路を構成する一つ一つの素子のようなものです。したがって、論理回路をかじったことがある人にとってはニューラルネットワークはイメージしやすいかもしれません2

さて、人工ニューロン一つ一つがこういったものであるとして、ニューラルネットワークは、人工ニューロンが複数繋がったものですが、一般的には次のような構造を持っています。

ニューラルネットワークは入力層、中間層、出力層と分かれます。入力層は入力されたものを中間層のニューロンに渡すだけで特に処理は行いません。中間層のニューロンは上位の層からの出力が下位の層のニューロン全てに出力されます。したがって一つの層のニューロンの数が増えればその数に応じて下位の層のニューロンの入力も劇的に増えます。出力層は出力用の処理を行います。

ニューラルネットワークが一般的なデジタル回路やプログラムと異なるのは、ニューラルネットワークに特定の処理を行わせるためには、ニューラルネットワークを調整(教育)しなくてはいけないことです。

例えば、とっても簡単な例として、入力、出力ともに1つで、入力されたものが、そのまま出てくるようなニューラルネットワークを作ることを考えます。

デジタル回路やプログラムなら設計の必要すらない簡単な処理ですが、ニューラルネットワークでは異なります。

ニューラルネットワークでは、まず最初に、入力と出力の関係を教えなくてはいけません。

それではどうやって教えるか?

それには入力(問題)と出力(解答)が対になった、それなりの量の調整用データを用意し、ニューラルネットワークに渡します。ニューラルネットワークは、与えられた問題に答えますが、それが実際の解答と違っていたら、ニューラルネットワークを出力から入力側に逆に辿りながら正しい解答に近づくように調整します。この調整作業はバックプロゲーションと呼ばれニューラルネットワーク側で自動的に行われます。

ひとまとまりの調整データを使って調整を行い、調整が不十分であれば、同じ調整データを使って、再度調整を行います。この作業を繰り返して、入力に対して正しい出力が得られるようにします。

正しい出力が得られるようになったら、最初に想定した入力されたものがそのまま出てきているかを確認して、ニューラルネットワークの完成です

拙い説明で申し訳ないですが、ニューラルネットワークが従来のプログラムとは違うものであることが伝わりましたでしょうか。

 

 

 

脚注

  1. このグラフではX=0のときY=0.5となっているのでステップ関数ではありませんが、とりあえずどちらかの値を取るものとします。
  2. 一つ一つの神経細胞が0か1かの数値を出力するニューラルネットワークをパーセプトロンと呼びます。

翻訳

Posted by 管理者