ニューラルネットワークの使い方

ニューラルネットワークを使った簡単な例を紹介

本チュートリアルでは、どのようにニューラルネットワークが使えるのかをより理解するためにいくつか簡単な例を基に紹介します。以下でる例は直感的な理解を促すためにあるためです。

例1 血糖値のコントロール

例えば、Aさんという人が眠気問題で血糖値をコントロールしたいとします。彼は食事量X [カロリー]摂取すると、食後血糖値Y [mg/dL]上昇するとします。目的は、血糖値をコントロールすることだとします。ここで、YとXは静的な関係(X入力したら即時にYを得る事)とします。例えば、Aさんという人が眠気問題で血糖値をコントロールしたいとします。彼は食事量X [カロリー]摂取すると、食後血糖値Y [mg/dL]上昇するとします。目的は、血糖値をコントロールすることだとします。ここで、YとXは静的な関係(X入力したら即時にYを得る事)とします。例えば、Aさんという人が眠気問題で血糖値をコントロールしたいとします。彼は食事量X [カロリー]摂取すると、食後血糖値Y [mg/dL]上昇するとします。目的は、血糖値をコントロールすることだとします。YとXは静的な関係(X入力したらY が即時に出る事)とします。

もし、Aさんの食事量と血糖値が線形なメカニズムだとしたら、傾きa、切片bとしてY=aX+bという単純な方程式ができます。するとAさんがどれだけ食べれば、血糖値が上昇するかが予測できます。

しかし、Aさんのように、世の中の多くの関数は非線形な特性を持つことがあります。通常Aさんのような非線形な関係の場合、複数のデータを取ってそこからモデリングする必要があります。通常モデリングをする際には、データに当てはまる数式を仮定しなければなりません。簡単な非線形システムならモデルは導出できるかもしれないが、複雑な形で非線形特性を示した場合、数式を仮定することは難しくなります。例えば、下記にある左の図なら同定するための関数はできるかもしれないが、右のような図を得たい場合は極めて困難な場合があります。

また、別の手段として、内部のメカニズムを理解した上で各々の構成要素をモデリングするという手法があります。しかし、内部を構成するメカニズムが複雑だったり、不明パラメータがあったりすると、多くの場合は実物に対してモデルが大きくズレることがあります。

そこで、上記の問題を解決する手段として、ニューラルネットワークがあります。モデルを学習するために大量のデータがあれば、このようなシステムの中身がわからなくてもモデリングすることができます。

さらに、ニューラルネットワークの入力を血糖値Y[mg/dL]、出力を食事量X[カロリー]として学習すると、制御するためのモデルができます。つまり、目標とする血糖値Yr[mg/dL]に抑えたいなら、どれだけX[mg/dL] が許容できるかが算出できます。さらに、ニューラルネットワークの入力を血糖値Y[mg/dL]、出力を食事量X[カロリー]として学習すると、制御するためのモデルができます。つまり、目標とする血糖値Yr[mg/dL]に抑えたいなら、どれだけX[mg/dL] が許容できるかが算出できます。さらに、ニューラルネットワークの入力を血糖値Y[mg/dL]、出力を食事量X[カロリー]として学習すると、制御するためのモデルができます。つまり、目標とする血糖値Yr[mg/dL]に抑えたいなら、どれだけX[mg/dL] が許容できるかが算出できます。

例2 交通渋滞の予測

ニューラルネットワークの他の応用例として、予測器などがあります。例えば、ある区間において道路上にある自動車の数、密度、平均速度等のデータを基に、その区間における渋滞具合を予測したいとします。

ここで、過去のデータを元に自動車の数、密度、平均速度等のデータを入力とし、一定時間先の渋滞具合を出力として学習します。すると、車の数、車の密度、車の平均速度等のデータで先々の交通渋滞を検知することができます。このようなモデルを形成することによって、例えばこのままだと混雑しそうだから道路を整備したり、これからその区間を通過する自動車に警告したりすることも可能です。

例3 人間、猫、犬の顔画像分類

ニューラルネットワークの代表的な活用例として画像分類があります。例えば、人間と猫と犬の顔を識別したいとします。これまでは「人間の顔の特徴は何か?」という議論から始まり、そこからどのような画像処理をすることで特徴が抽出できるかを検討することで、人間の顔を認識するアルゴリズムを検討していました。しかし、人間の顔のように複数の特徴を持つ場合、認識するためには複数の特徴抽出機が必要でした。また検出したい対象(猫、犬)によって、検出方法が異なるため検出対象に応じてアルゴリズムを追加する等の問題が生じ、大量の対象を識別する場合は大量のアルゴリズムを要しました。

ニューラルネットワークでは、学習するための画像と出力をたくさん用意するだけで、自動的に人間と猫の顔を識別するための関数を得ることができ、これまで様々な特徴を抽出するための煩雑な作業を省力することができます。

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

これまでニューラルネットワークで何ができるかについて説明しました。しかし、例えば数少ない情報から全てを予測したり、お互いに関係のないデータから何かを予測したりなど、なんでも学習できるとは限りません。例え学習できたとしても、モデルとして正しく機能するとは限らないです。例えば、予測対象とする「降水率」を「○○の株価」で予測するなど、ほぼ関係のない変数を使って学習すると、意味のない予測器を作ってしまう可能性があります。場合によっては学習可能か、学習する前にデータの処理(前処理)が必要かなど検討する必要があります。上記の血糖値のコントロールでは血糖値までの出力を静的なシステムとして扱いましたが、本来は動的(正確には時間要素を含むことだが、ざっくりすると時間遅れがあること)であるため、学習する際には時間差を考慮する必要があります。実際に学習する際には、入出力データ間の関係性にある程度の裏付けができるようにしてから学習することを推奨します。

まとめ

従来であれば入力と出力の間の関係性を導出するために関数というものを作ります。しかし、データによって単純な処理だけで済むことなく、煩雑な作業が求められることがあります。それに対して、ニューラルネットワークは定量的な関連性がわからなくても大量の学習データがあれば、それらの間にある関係式を得ることができ、予測器や分類器等のモデルができます。本チュートリアルでは血糖値コントロールをするためのモデリング、渋滞予測モデルや画像分類器を例に紹介しました。ただし、予測器等モデルとして正しく学習するためには学習データに対してお互いに関係性が必要であり、例えば「天気」と「株価」等のかけ離れた変数からモデルを作ることはできません。学習する際にはある程度、データ間の関連性を考慮した上で学習する事を推奨します。

最後にですが、本チュートリアルではどのような使い方ができるかについては紹介しました。しかし、本チュートリアルはあくまで使い方の一部しか紹介しておりません。Renom.jpでは様々な事例とともに、どのようなニューラルネットワークがあるか、またどのような使い方ができるかについて紹介しておりますので、そちらも参考いただければ幸いです。