見出し画像

実装未経験者による機械学習入門 - 中編・ニューラルネットワークの原理 -

前編までで、人工知能の概要について述べたあと、機械学習とニューラルネットワークについて簡単に触れました。中編を進めますが、本稿ではニューラルネットワークについて話題にします。私も専門家ではないため至らない点引き続きあるかと思いますが、どうぞご容赦くださいますようお願いいたします。


CPUと生物の頭脳

唐突にニューラルネットワークと言われても面食らう人も多いかと思いますので、まずは脳や神経について考えてみることにします。

今日のコンピューターのCPUについて考えてみます。CPUは、現在は百億以上のトランジスタを集積した高度な回路です。人間では及びもつかないような高速な計算が可能です。しかし、例えば野生動物のような、自力で餌を探したり巣や住居を探したり作ったり、といった知的で曖昧性を含む処理はとても苦手で、生物の脳の方がより高度な処理を行えます。そこで、コンピューターに知的な作業を行わせるために、生物や人間の「脳」を模倣する仕組みをコンピューター上に構築することが考えられるようになりました。

脳は、多数の神経細胞(ニューロン)で成り立っています。神経細胞の模式図をWikipediaより引用します。神経細胞は、樹状突起、軸索、軸索末端などから成り立っています。この神経細胞による巨大なネットワークが生物や人間の脳、ということができます。

神経細胞(Wikipediaより引用)

脳の仕組みは、樹状突起への刺激が電気信号となって軸索、軸索末端を経て他のニューロンに伝播していくことで様々な情報が処理されていく、と言われています。この仕組みをモデル化して、パターン認識や画像の分類といった分野に応用しているのがニューラルネットワーク、と言うことができます。

ニューラルネットワーク

以下はごく単純なニューラルネットワークの模式図です。左側から入力があり、中の関数で計算が行われて、出力になるというイメージです。入力は、例えば「築年数」「間取り」「立地」といった感じで、出力が「家賃」という感じです。つまりこれは各種の入力から家賃を推測するモデル、ということも出来ます。

実際のニューラルネットワークでは、層状の構造が利用されます。例えば3層のニューラルネットワークを考えます。

円の一つを「ノード」と言い、ノードは値を持ちます。ノード間は互いにリンクしていて、リンクにはそれぞれ異なる「重み付け」がされています。ノードの持つ値に重みが掛け合わされて、それが次のノードへ伝播する、というイメージになります。ノードは、受け取った入力を合計して関数で処理し、同じように次のノードへ伝播させます。

例えば、ワインの分類といった問題を考える時、「年数」「アルコール度数」「色」といった情報を入力とすると、入力層のノード数は「3」になります。出力層は、「白ワイン」「赤ワイン」となりますので「2」になります。入力層の数を増やせば扱う情報の種類を増やすことができ、出力層の数を増やせば分類を増やすことが出来ます。中間層は、中間で様々な計算を行う層ですが、設計者が任意でノード数や層の数を選ぶことが出来ます。一般に層やノード数を増やすとより複雑な処理ができるようになります。

順伝播と逆伝播

例えば、年数が10、アルコール度数が30、色が0.5という入力が与えられたとします。それがノード、中間層を経て出力層で0.2、0.8という2つの値が得られたとします。この2つの値が、赤ワインに属するか白ワインに属するかの重みとなりますので、問題として与えられたワインは値の大きい方に属する、という結論になります。こうした、入力から出力までの順に伝播していく処理の流れを「順伝播」と言います。

ここで、このニューラルネットワークの分類精度を向上させることを考えます。このとき、正確な「赤ワイン」「白ワイン」の情報が必要となります。例えば、赤ワインの「教師データ」が0.1と0.9だった場合、先程の出力には誤差があるため、この誤差がより小さくなるようにノード間の「重み付け」を変化させることでニューラルネットワークを流れる値がより正確になるように調整します。この繰り返しを大量に行うことによって、分類や予測の精度を向上させることが出来ます。こうした、出力と教師データの誤差に基づいてパラメータを調整することを「逆伝播」といい、これに基づく学習のことを「バックプロパゲーション」と呼びます。

深層学習(ディープラーニング)

先程見たようなニューラルネットワークにおいて、中間層をより多層化してより複雑な分類やパターン検出に用いることができるようにした仕組みのことを「深層学習(ディープラーニング)」と呼びます。アプリのアルバムにおける人物の分類や、スマホの本人を声を認識する仕組みなどには、一般的に深層学習によるニューラルネットワークが用いられています。


中編はここまでといたします。後日、手間が掛かるので実際にやるかわかりませんが、「TensorFlow」というフレームワークを用いた実装について話題にしてみる予定です。

以上、お粗末でした。お付き合いいただきありがとうございました。

この記事が気に入ったらサポートをしてみませんか?