LogoMark.png

データサイエンス/あふれ原稿1 のバックアップ(No.3)


第11回 機械学習2

データサイエンス/2023?

CONTENTS

'データサイエンス/あふれ原稿1' does not exist.




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

ニューラルネットワーク(Neural Network:NN)とは、人間の脳内にある神経細胞(ニューロン)とその回路網を、人工ニューロンという数式的なモデルで表現したものです。ニューラルネットワークモデルは、シナプスの結合強度を学習によって調整することで、入力データを識別する能力を獲得していきます。


人工ニューロン

ArtificialNeuron.png

人間の脳の中にはニューロンという神経細胞が約千億個あり、各ニューロンがシナプスと呼ばれる接合部位によって繋がっています。ニューロンは入力される電気信号の総和がある一定の量を超えると発火し、次のニューロンに電気信号を出力します。

この仕組みを模したのが「人工ニューロン(artificial neuron)」で、1943年に神経生理学者ウォーレン・マカロックと数学者ウォルター・ピッツが発表した「形式ニューロン(formal neuron 別名:Threshold Logic Unit )」がその最初のものです。 右図は1個の形式ニューロンの模式図で、中心のCELLが細胞。x1〜xn が入力信号で、それぞれが一定の重み(w:値の大きいものが影響力大)で、細胞に接続されています。その総和が閾値(θ)を超えると、細胞が「発火」して次の細胞へと信号を送り出します。式で表すと以下のようになります。

 y = f ( w1・x1 + w2・x2 + ・・・・ + wn・xn - θ )

W = ( w1, w2, ・・wn )は、多次元空間における法線ベクトルで、関数式の内部ではまず、これとデータ X = ( x1, x2, ・・xn ) との内積をとっていることになります。法線ベクトルと同じ向きにあれば内積は + 、反対向きにあれば内積は - で、要するに、上の関数式は、データが存在する空間を分割する多次元空間上の境界(2次元なら直線、3次元なら平面)であるということができます(詳細は次節)。

一般に、出力 y は0または1。つまり、細胞は抑制されるか興奮するかの2状態しかありません。このような細胞が何個も並び、それが何層にも連結されたものがニューラルネットワークになります。


識別の原理

W の調整はどう行うのか、視覚的に説明してみましょう。x0, x1 を2軸とした平面に、データ X (x0,x1) が散布されていて、それらがTYPE A と TYPE B の2クラスに分類できる状態を仮定します(下図を参照)。

identification.png

以下の式は、原点を通る直線で、その法線ベクトルは(w0, w1)です。
w0・x0 + w1・x1 = 0

図の状態を仮定して識別問題を考えた場合、w0, w1 が適切な値をとると、データは直線によってきれいに識別されることになります。学習による最適化とは、境界線の位置を学習データを読みながら調整する、すなわちこの場合、法線ベクトルの向きを回転させて2つのタイプの境界に位置するように調整する作業であるということができます。

(x0,x1)と法線ベクトルの内積 = w0・x0 + w1・x1 を計算すると同時に、それを正解ラベル( 1:TYPE A , -1:TYPE B )と照らすと、境界線が正しく2者を分離しているかどうかを判定することができます。

つまり、ひとつのサンプルについての判定とその後の作業は以下のように記述することができます。

修正は、以下のように行います。正解ラベル を学習率( Learning_Rate )を 0.1 とすると、学習は以下の式で実現できます。
W = W + X * 正解ラベル * 0.1
正解ラベルが 1, -1 に設定されていることで、2種類のエラータイプに対して、同じ計算式を適用できるわけです。

学習率とは「どの程度強く修正をかけるか」を意味する値で、これは人間が設定するしかない・・という意味で、ハイパーパラメータといいます。

以上、学習率を正しく見極めた上で、この手順で、データを読んでは修正を繰り返せば、境界線は正しい位置に収まります。

ニューラルネットワークの概念図

NeuralNetwork.png

右図はニューラルネットワークのイメージです。Input Layer(入力層)は、最初のデータが入ってくる部分、Hidden Layer(隠れ層)は入力信号を受けて様々な興奮状態をつくる中間処理機関、そして Output Layer(出力層)は結果としての興奮状態を表現する部分す。例えば、気温、湿度、現在時刻という3種類のデータから、1時間後が「晴れている」か「雨が降る」かを予測する(ちょっと無理がありますが例え話です)という場合は、入力層が3、出力層が2となるモデルをつくって、過去の大量の気象データから、気温・湿度・時刻(説明変数)、そして 1時間後の天気(目的変数)というデータセットをつくって学習させることになります。

活性化関数

ニューラルネットワークにおいて線形変換(重み付き入力の総和)後に最終的な出力を決める関数のことを「活性化関数(Activation Function)」と言います。中間層と出力層では用いる関数が異なるのが一般的で、以下のように分類できます。

最適化アルゴリズム(オプティマイザ)

ニューラルネットの文脈では、最適化とは「出力の誤差が最小になるように調整すること」を意味します。誤差を表す関数は何らかのカーブを示しますが、このカーブをたどって、最下点に至るように、パラメータを調整するわけです。その方法には様々あります。以下リンクで紹介します。

参考:ディープラーニング

ニューラルネットワークの基本的なアイデアは3層構造ですが、中間層の数を数十〜百段階程度まで増やして、多段階の神経接続で出力を得よう・・という発想から誕生したのがディープラーニングです。多層化に耐えられるだけの計算力(演算速度向上とメモリの増大)が実現したことで、現在の人工知能はこの技術が主役になっています。

ディープラーニングの活用事例

演習11|NNによる手書き文字認識

手書き数字の画像データ(28 × 28px) と正解ラベルのペアを学習用 60,000個、評価用 10,000個をセットにしたデータサンプル、MNISTを使用します。

ノートブックの新規作成

サンプルデータ

MNIST(エムニスト):手書き文字認識用のサンプルデータ
http://yann.lecun.com/exdb/mnist/

MNIST.jpg

サンプルプログラム

JupyterNotebook形式(.ipynb)でプログラムを提供します。


学科サイトにリンク掲載

ノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。

演習11|プログラムの解説

手書き文字認識のプログラムについて解説します。


以下は、その他の参考事例です
参考情報なので、取り組みは任意です。




参考1|NNによる Iris の分類

Iris は、植物学者 R. Fisher による「あやめ」のデータで、統計ソフトの練習用として最も有名です。 Iris setosa、 Iris virginica、Iris versicolor 3種について、がく片の長さ、がく片の幅、花弁の長さ、花弁の幅の4つの計測データが、各 50、計 150 件含まれます。

サンプルデータ

IRIS:植物学者 R. Fisher による「あやめ」のデータ
https://archive.ics.uci.edu/ml/datasets/iris

以下の項目をもつ150の計測データ

サンプルプログラム

JupyterNotebook形式(.ipynb)でプログラムを提供します。
https://github.com/koichi-inoue/DataScience/blob/main/NeuralNetworkIris.ipynb

参考2|SVMによる分類

分類の手法は NN だけではなく、SVM(サポートベクターマシン)など、他の手法でも可能です。Python の機械学習ライブラリ Scikit-learnを使って手書数字を認識するプログラムを概説します。

サンプルプログラム

JupyterNotebook形式(.ipynb)でプログラムを提供します。
https://github.com/koichi-inoue/DataScience/blob/main/DigitRecognition.ipynb

という流れが開発の定番スタイルです。



APPENDIX

以下は、JavaScript用の機械学習ライブラリーを用いて、ブラウザ上で画像の認識を行うサンプルです。参考までにご紹介します。

TensorFlow.js

MobileNetの学習済みモデルと TensorFlow.jsを利用して、画像の対象物を推論するサンプルです。手元の画像のドラッグ&ドロップで、対象を推論するサンプルです。上位4件の候補を、その確率とともに表示します(人や人物の顔は対象外なので、人物の画像を投入すると「T-シャツ」や「ネクタイ」が検知されます。)。

ml5.js

ml5.js というJavaScriptAPI を利用した画像の分類その他について、以下のページにまとめています。
ml5.js