この記事では、Pythonや投資初心者でもできるように、機械学習の入門をレクチャーしていきます!
今回の記事は日本ディープラーニング協会(JDLA)様のG検定公式テキストを参考に作成しています!
(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください。)
本記事は、全6回に渡って掲載される「Pythonで機械学習入門」シリーズの第5回になります!
機械学習について理解すれば、トレンドの技術である人工知能についてより正確な知識を身につけることができます!
それだけでなく、本記事ではPythonをつかい分析をするため プログラミングのスキルも磨けます!
第5回ではその中でも、
- ニューラルネットワークをざっくり理解する
- Pythonを用いてニューラルネットワークを体験する
といったことをおこなっていきます!
ニューラルネットワークとは、人が脳の神経をつかい意思決定をおこなうことをマネた手法です!
この手法を学ぶことで、人が文字や動物を認識するように、機械も同じような振る舞いをさせるような実装をすることができます!
まさに、人の意思決定の代わりの手段となりえる、ということです!
それでは一緒にまなんでいきましょう!
目次
ニューラルネットワークをざっくり理解しよう!

ここではまず、そもそもニューラルネットワークとはなんなのか、どういった仕組みで学習していくのかについて簡単に抑えていきます!
ニューラルネットワークは、画像分類や音声認識、感情分析の際につかわれます。
特にファイナンスに限った話ですと、財務データから企業の業績を予測する研究につかわれたりしているのが最近の論文から確認できています!
この章では、まずニューラルネットワークとは何か説明します。
その後、ニューラルネットワークがどのような流れでおこなわれるか簡単にみていき、次章でpythonで動かすさいの理解を深めていきます!
それではみていきましょう!
ニューラルネットワークとは
ニューラルネットワークは機械学習の1つで、人間の神経回路を真似することで学習を実現しようとしたアルゴリズム。
例えば犬を犬と判断するプログラムがあるとします。
このとき人の脳の神経(ニューロン)の場合ですと、無意識のうちに、耳や目、輪郭などの顔や、4足で歩行している姿などを踏まえ犬と判断します。
このとき、ニューラルネットワークも同様に、耳や目などの特徴量から「犬である」いう1つの出力をします。
また、このとき、犬を犬と判断する上で、無意識のうちに、耳が5%、4足歩行が10%…と犬と認識する重要度(重み)を決めています。
このように、人の脳の神経を模した学習モデルがニューラルネットワークです!
ニューラルネットワークの流れ
ここで簡単にニューラルネットワークの流れについてみていきましょう!
まず、ニューラルネットワークの基本形である単純パーセプトロンについて説明します。
単純なニューラルネットワークのモデル(具体的な説明は下記にて)

画像とともに、先ほどの犬を犬と判断するプログラムを例に説明します。
まず、画像のように一番左に1~N個まであるものが、先ほどの耳や目などの特徴量です。
これらは入力層と呼ばれます。
この入力層をもとに、犬かを判断しますが、出力されるものを出力層をといいます。
このとき、どれだけ入力層と出力層の間は重み(W)で表され、どれだけの電気信号(値)を伝えるのかを整理します。
ちなみにですが、このとき電気信号をどれだけ伝えるか調整するものを活性化関数といいます。
こうした流れが、単純パーセプトロンの中で行われています。
他方、発展形として多層パーセプトロンについても説明します。
入力層と出力層の間に隠れ層(中間層)を追加することで、単純パーセプトロンよりも表現力を大きく向上させたアルゴリズム。

引用:furukawa-laboratory様より
基本的には隠れ層を追加する以外は同じですが、多層パーセプトロンを選択することで、より複雑な分類(非線形分類など)をも行うことができるようになりました。
また多層パーセプトロンで、層が増えることにより調整すべき重みの数も増えることになりますが、その際バックプロバケーションと呼ばれるアルゴリズムも考えられました。
予測値と実際の値との誤差をネットワークにフィードバックするアルゴリズム。
このバックプロバケーションによって、ニューラルネットワークの予測精度は向上し大いに貢献しました。

Pythonを用いてニューラルネットワークを体験しよう!

ニューラルネットワークについてなんとなく理解したところで、実際にPythonをもちいて体験していきましょう!
今回は、コードを全部解説していくというより、「二ューラルネットワークの流れってこうなんだ」程度に思ってくださるとうれしいです!
理由としては、「Relu関数」や「ソフトマックス関数」など数学的な要素がかなり多いため、全てを解説するのが難しいためです…笑
今回はFashion MNISTというデータセットを用いて服を分類する流れを学んでいきます!
それでは体験していきましょう!
今回体験するデータを読み込む
まずは、下記のLINE@から「機械学習入門5_ニューラルネットワーク編」のファイルをダウンロードします。
メッセージにて、「機械学習」とお送りいただければダウンロードができます。


その後、ジュピターノートブックを使いファイルを読み込みます!

ここでは、今回分類をする画像読み込ませ、訓練データとテストデータにわけていきます!
データを確認する
まずは、取得したデータを確認してみましょう!
まずは、今回のデータ量を確認します。

訓練データでは、28×28ピクセルの画像が60000枚あることがわかります!
テストデータでは、28×28ピクセルの画像が10000枚あることがわかります!
加えて、データの一部をみていきましょう!
今回は分類をするため、0~9までのラベルを貼って出力させます。
なお、ラベルは以下の通りです。
0 = Tシャツ/トップ
1 =パンツ
2 =プルオーバー
3 =ドレス
4 =コート
5 =サンダル
6 =シャツ
7 =スニーカー
8 =バッグ
9 =ショートブーツ

画像を表示させることができました!
784(28×28 = 784)画素なので、やはり荒いです笑
基本的な画像は2000万画像くらいだそうです。
モデルを作成し訓練させる
データを確認したところで、モデルを作成します。
このとき784(784 = 28×28)の特徴量をもつ入力層を作成しています。
加えて、今回はラベルが0~9の10個のラベルを分類するため、10個の出力層を作成しています。
その後、モデルを学習させます!

予測結果を確認する
モデルを学習させたところで、実際の精度をみていきましょう!

このとき、下記のような結果が出ていることがわかります。
loss: 0.5329 - accuracy: 0.8241
このときlossは、モデルがどれだけ予測ができなかったのかを表しています。
ニューラルネットワークでは、loss(損失)を表すことが一般的な印象なので今回記載しました。
またacuracyは、モデルの精度を表しています。
今回は82.4%とかなり当てはまりが良いことがわかります!
予測結果から写真を確認する
予測結果をもとに、実際の写真を確認しましょう!
今回は5枚の写真を確認していきます。
まずは、予測のラベルと実際のラベルの結果を表示し予測できているかをみます。

今回の予測は、100%の正解率であることがわかります!
( 1 =パンツ / 2 =プルオーバー / 6 =シャツ / 9 =ショートブーツ )
加えて、実際の画像もみていきましょう!


予測できていることが確認できました!!
まとめ
第5回では、
- ニューラルネットワークをざっくり理解する
- Pythonを用いてニューラルネットワークを体験する
といったことをおこなっていきました!
第6回では、いよいよディープラーニングを学んでいきます!
記事にでてくるコードはLINE@にて配布をしております!
ラインのメッセージ欄に「機械学習」とお送りいただければ、ダウンロードリンクを送付いたします!
