トップページ > おもしろ科学実験室(工学のふしぎな世界) > ニューラルネットワークを作ってみよう

おもしろ科学実験室(工学のふしぎな世界)

ニューラルネットワークを作ってみよう

2022年3月18日
東京農工大学 工学部 知能情報システム工学科
堀田政二

はじめに

 人間は、見たものや聞いた音が何であるかを即座に答えることができます。例えば、リンゴかミカンを見たとすると、それが初めて見るリンゴやミカンであっても即座にそれがどちらであるかを答えることができます。これは、脳の中の細胞(ニューロン)が、対象物の色や形、動きなどを捉え、総合的に対象物が何であるか(概念)を判断していると考えられています(図1)。このような働きを機械で模倣したものをニューラルネットワーク、あるいは深層学習と呼んでいて、ここ10年以上にわたって盛んに研究が行われています。今回は、このニューラルネットワークを実際に作ってみましょう。

図1 対象物が何であるかを判断する脳の働きの模式図図1 対象物が何であるかを判断する脳の働きの模式図

準備するもの

 ウェブに接続可能なパソコン、あるいはスマートフォン。後述するサイトに接続したときに何も表示されない場合は、ウェブブラウザの設定でJavascriptが動作するようにしてください。

前提となる仮定

 先程のリンゴとミカンの例において、人間の頭の中ではどのようにリンゴとミカンという概念が表現されているか考えてみましょう。仮にこの二つの対象物を区別するために重要な要素が、色と形であったとします。そしてそれらが数値で表現できると仮定しましょう。具体的には、色が赤っぽければプラスの数値、橙色っぽければマイナスの数値になるとします。同様にして、形も丸っぽければプラスの数値、四角っぽければマイナスの数値になるとします。そうすると、これまでの生活の中で目にしてきたリンゴやミカンは、これら二つの数値の組みとして表現することができます。このような数値の組みを特徴と呼びます。当然ながら同じリンゴやミカンであっても、特徴は若干異なりますが、同じ物体であれば同じような特徴となると考えられます。図2はそのような状態を模式的に描いたもので、 横軸が色の軸、縦軸が形の軸を表しています。この2次元の平面を用いれば、これまでの人生で見てきたリンゴやミカンは、この2次元平面上の点として表すことができ、リンゴであればリンゴ同士で、ミカンであればミカン同士で互いに近くの点として配置されるはずです。それらをグループ化して領域で表現すれば、初めて見るリンゴやミカンはどちらかの領域に入ってくる、あるいは対応する領域の近くに配置されると考えられます。このように、概念を特徴という数値で表した点の集合からなる領域で表せば、計算によってリンゴとミカンを区別する機械を作ることができそうですね。

図2図2

実際にリンゴとミカンを区別する機械を作ってみよう

 それでは実際に二つの物体を区別する機械を作ってみましょう。まずは以下のサイトにアクセスしてみてください。

すると以下のような画面が表示されると思います。

図3 深層学習を設計するためのページ画面図3 深層学習を設計するためのページ画面

 はじめに、画面右中央にある橙色の点と青い点を見てください。これは先程説明した、リンゴとミカンの特徴を用いて、リンゴを橙色の点、ミカンを青い点で表したものと考えてください(不自然な分布に感じるかもしれませんが、今は無視してください)。リンゴとミカンを区別する機械を作る、ということはこれらの点の分布を二つの領域に分ける、ということと同じです。そこで、まずは何も考えずに左上の再生ボタン(丸に横向きの三角のマーク)を押してみましょう。すると画面右の橙色の点と青い点を分けるような領域と、白い境目(境界)が表示されたと思います。境界が表示されたら停止ボタン(再生ボタンと同じ位置のボタン)を押して計算を停止させましょう。

 ここで、この画面の各項目について説明します。一番左側のDATAと書いてある列は、リンゴとミカンの特徴の点について調整する項目が並んでいます。上から順に、点の分布の状態を変更する項目で4種類選べます。次にRatio of training to test dataですが、これはミカンとリンゴを表す点のうち、既にリンゴかミカンであると分かっている特徴の点を訓練データ (training data) 、未だリンゴかミカンのどちらの特徴か分かっていない点をテストデータ (test data) と呼んで、その比率を変えるためのバーとなります。数値が大きくなるほど訓練データの数が増えて、計算機にとっては優しい問題となります。実際の応用では、テストデータをうまく区別できる能力が求められるので、いくら訓練データを正しく区別できてもあまり意味はありません。次のnoiseですが、これはリンゴとミカンの分布の重なり具合を調整するもので、数値が大きくなると重なりが大きくなり、計算機にとっては難しい問題となります。最後にBatch sizeですが、これはこのままの値で良いでしょう。

 次に中央のFEATURESとHIDDEN LAYERSの部分について説明します。FEATURESとは特徴を表す数値のことで、今回は縦軸と横軸の値を用いるためこのままで良いでしょう。HIDDEN LAYERSの四角の部分ですが、この四角の一つ一つは図4に示した脳細胞の働きを模した人工ニューロンを表しています。

図4 脳細胞の働きを模した人工ニューロン図4 脳細胞の働きを模した人工ニューロン

 この人工ニューロンは、自分より前の細胞からの数値(図のx)を渡してもらう腕と、次の細胞に値を渡す腕(右向きの矢印)を持っており、前の細胞から渡された数値に、何を重視するかを調節する重み(図のw)を掛けて、それを総和した値を計算します。その総和した値がある一定値を超えると、この細胞は1を次の細胞に渡し、超えなければ0(あるいは負の数値)を渡します。この人工ニューロンの重みが重要で、訓練データを上手く区別できるように、何度も試行錯誤して重みの値を調節することを学習と呼びます。一つの人工ニューロンを用いてリンゴとミカンを区別する重みを求める場合、訓練データがリンゴであれば1を、ミカンであれば0を出力するように重みを学習しますが、このとき訓練データを入力して、その出力が正しいかをチェックし、もし間違った場合は重みを調節して正しい出力となるよう繰り返し調整を行います。

 人工ニューロンを一つだけ用いることでもリンゴとミカンを区別できる機械を実現できそうですが、もし特徴点の分布が重なっていたり、分布の形状が複雑であったりした場合には、複数の人工ニューロンを繋ぎ合わせて複雑なネットワークにして、何とか上手くリンゴとミカンを区別できる能力を持った機械を作ることになります。このような人工ニューロンを複数繋ぎ合わせたネットワークをニューラルネットワークと呼びます。人工ニューロンを縦に並べたものを層 (LAYER) と呼びますが、今回の演習で用いるネットワークでは同じ層に属している人工ニューロンは互いに結合はしていません。ウェブサイトのHIDDEN LAYERSという文字の前にある+や−のボタンを押すことで層の数を増やしたり減らしたりすることが可能で、さらに一つの層に何個の人工ニューロンを配置するかも、各層の上部にある+や−のボタンで調整することが可能です。

 最後にOUTPUTの部分を説明します。上部のTest lossはテストデータをどれだけ上手く区別できたかを表す数値で、この値が小さいほど優れたニューラルネットワークであるといえます。一方、Training lossは訓練データをどれだけ上手く区別できたかを表す数値であり、この値も小さいほど良いと言いたいところですが、先述した通りテストデータを上手く区別できるものが実用的なので、この値が小さければ良いという訳ではないことに注意しましょう。これら二つの値の推移を、学習の回数を横軸、縦軸にそれぞれのlossとしたグラフ(Test lossが黒色の線、Training lossが灰色の線)も表示されるようになっています。中央の特徴の点の分布を表示する部分では、橙色の領域がリンゴと判定される領域、青色がミカンと判定される領域、白はリンゴとミカンを区別するための境界を表します。この図の下には、チェックボックスがあり、Show test dataにチェックを入れると、テストデータの点が黒枠付きで表示されるので、常にチェックを入れておくと良いでしょう。Discretize outputは滑らかな色の変化をやめたい場合にチェックを入れてください。

色々と試してみよう

 以上でニューラルネットワークを設計する準備は整ったので、ここからは以下の課題に挑戦してみましょう。

  1. DATAの部分にある4種類の分布それぞれに対して、Training lossが最小となるようなネットワークを作ってみましょう(Ratio of training to test dataやNoise等の数値は、この課題では動かさないことにします)。この課題では層の数や人工ニューロンの数は最大まで増やしても構いません。
  2. 課題1のTraining lossの値があまり変化しないように、層の数や人工ニューロンの数を可能な限り減らしてみてください。このときTest lossの値はどうなったでしょうか?
  3. Ratio of training to test dataやNoiseの値を変えて1と2を行なった場合、どのような違いがあるか、実際に動かして考えてみましょう。
  4. 特徴点の分布やTest lossは実際の応用では分からないため、Training lossだけでTest lossが小さくなるようなネットワークを設計する必要があります。そのためにはどのような工夫が有効であるか、アイデアを出してみて実際にそれが4種類全ての分布に対して有効であるかを確かめてみましょう。

まとめ

 この演習ではリンゴとミカンを区別する機械を作ってみる、という設定でニューラルネットワークを作成しました。実際の研究では、ネットワークの構造やTest lossを小さくするための工夫を数学的に考えて、実在のデータを用いて実験し、その正しさを検証する、ということで新たな知見を得ています。この分野で研究をしてみたい!と考えている人は、今のうちから、自分のアイデアを出し(可能であればそれを数学的に表して考え)、実際のデータを用いて検証する、というやり方を身につけておくと良いでしょう。

※このページに含まれる情報は、掲載時点のものになります。

関連記事

2022-09-22

おもしろ科学実験室(工学のふしぎな世界)

温度を認識して見た目が変わるハイドロゲル

信州大学繊維学部

2023-03-31

なんでも探検隊

動物を用いない、身の回りの化学物質の安全性評価法の開発

横浜国立大学理工学部

2023-11-10

なんでも探検隊

糖の機能を解明して、更なる可能性を広げる

名古屋工業大学工学部

2020-05-22

おもしろ科学実験室(工学のふしぎな世界)

深層学習を使った未来予測

長崎大学工学部

2024-08-02

生レポート!現役学生の声

システム情報学の魅力

神戸大学工学部

2021-12-17

工学ホットニュース

記憶の神秘に迫る「バイオイメージセンサ」

豊橋技術科学大学

東京農工大学
工学部

  • 生命工学科
  • 生体医用システム工学科
  • 応用化学科
  • 化学物理工学科
  • 機械システム工学科
  • 知能情報システム工学科

学校記事一覧

おもしろ科学実験室(工学のふしぎな世界)
バックナンバー

このサイトは、国立大学55工学系学部長会議が運営しています。
(>>会員用ページ)
私たちが考える未来/地球を救う科学技術の定義 現在、環境問題や枯渇資源問題など、さまざまな問題に直面しています。
これまでもわたしたちの生活を身近に支えてきた”工学” が、これから直面する問題を解決するために重要な役割を担っていると考えます。