Pythonで機械学習入門⑤ニューラルネットワーク編



ニューラルネットワークって、どんなもので、どう使うのかな?

この記事では、Pythonや投資初心者でもできるように、機械学習の入門をレクチャーしていきます!

今回の記事は日本ディープラーニング協会(JDLA)様のG検定公式テキストを参考に作成しています!

(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください。)

本記事は、全6回に渡って掲載される「Pythonで機械学習入門」シリーズの第5回になります!

このシリーズを読むとわかること

  • 機械学習の教師あり学習についてざっくり理解できる
  • 機械学習の教師なし学習についてざっくり理解できる
  • 機械学習の強化学習についてざっくり理解できる
  • 機械学習のニューラルネットワークについてざっくり理解できる
  • 機械学習の深層学習についてざっくり理解できる

機械学習について理解すれば、トレンドの技術である人工知能についてより正確な知識を身につけることができます!

それだけでなく、本記事ではPythonをつかい分析をするため プログラミングのスキルも磨けます!

第5回ではその中でも、

  • ニューラルネットワークをざっくり理解する
  • Pythonを用いてニューラルネットワークを体験する

といったことをおこなっていきます!

ニューラルネットワークとは、人が脳の神経をつかい意思決定をおこなうことをマネた手法です!

この手法を学ぶことで、人が文字や動物を認識するように、機械も同じような振る舞いをさせるような実装をすることができます!

まさに、人の意思決定の代わりの手段となりえる、ということです!

それでは一緒にまなんでいきましょう!

ニューラルネットワークをざっくり理解しよう!

モニター

ここではまず、そもそもニューラルネットワークとはなんなのか、どういった仕組みで学習していくのかについて簡単に抑えていきます!

ニューラルネットワークは、画像分類や音声認識、感情分析の際につかわれます。

特にファイナンスに限った話ですと、財務データから企業の業績を予測する研究につかわれたりしているのが最近の論文から確認できています!

この章では、まずニューラルネットワークとは何か説明します。

その後、ニューラルネットワークがどのような流れでおこなわれるか簡単にみていき、次章でpythonで動かすさいの理解を深めていきます!

それではみていきましょう!

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

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

ニューラルネットワークは機械学習の1つで、人間の神経回路を真似することで学習を実現しようとしたアルゴリズム。

例えば犬を犬と判断するプログラムがあるとします。

このとき人の脳の神経(ニューロン)の場合ですと、無意識のうちに、耳や目、輪郭などの顔や、4足で歩行している姿などを踏まえ犬と判断します。

このとき、ニューラルネットワークも同様に、耳や目などの特徴量から「犬である」いう1つの出力をします。

また、このとき、犬を犬と判断する上で、無意識のうちに、耳が5%、4足歩行が10%…と犬と認識する重要度(重み)を決めています。

このように、人の脳の神経を模した学習モデルがニューラルネットワークです!

ニューラルネットワークの流れ

ここで簡単にニューラルネットワークの流れについてみていきましょう!

まず、ニューラルネットワークの基本形である単純パーセプトロンについて説明します。

単純パーセプトロンとは

単純なニューラルネットワークのモデル(具体的な説明は下記にて)

ニューラルネットワーク

引用:機械学習の元祖「パーセプトロン」とは?

画像とともに、先ほどの犬を犬と判断するプログラムを例に説明します。

まず、画像のように一番左に1~N個まであるものが、先ほどの耳や目などの特徴量です。

これらは入力層と呼ばれます。

この入力層をもとに、犬かを判断しますが、出力されるものを出力層をといいます。

このとき、どれだけ入力層と出力層の間は重み(W)で表され、どれだけの電気信号(値)を伝えるのかを整理します。

ちなみにですが、このとき電気信号をどれだけ伝えるか調整するものを活性化関数といいます。

こうした流れが、単純パーセプトロンの中で行われています。

他方、発展形として多層パーセプトロンについても説明します。

多層パーセプトロンとは

入力層と出力層の間に隠れ層(中間層)を追加することで、単純パーセプトロンよりも表現力を大きく向上させたアルゴリズム。

入力層 図

引用:furukawa-laboratory様より

基本的には隠れ層を追加する以外は同じですが、多層パーセプトロンを選択することで、より複雑な分類(非線形分類など)をも行うことができるようになりました。

また多層パーセプトロンで、層が増えることにより調整すべき重みの数も増えることになりますが、その際バックプロバケーションと呼ばれるアルゴリズムも考えられました。

バックプロバケーション(誤差逆伝搬法)とは

予測値と実際の値との誤差をネットワークにフィードバックするアルゴリズム。

このバックプロバケーションによって、ニューラルネットワークの予測精度は向上し大いに貢献しました。

why
このバックプロバケーションや多層パーセプトロンに関してはディープラーニング編にてまた解説するよ!



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

    洋服 ハンガー

    ニューラルネットワークについてなんとなく理解したところで、実際にPythonをもちいて体験していきましょう!

    今回は、コードを全部解説していくというより、「二ューラルネットワークの流れってこうなんだ」程度に思ってくださるとうれしいです!

    理由としては、「Relu関数」や「ソフトマックス関数」など数学的な要素がかなり多いため、全てを解説するのが難しいためです…笑

    今回はFashion MNISTというデータセットを用いて服を分類する流れを学んでいきます!

    それでは体験していきましょう!

    今回体験するデータを読み込む

    まずは、下記のLINE@から「機械学習入門5_ニューラルネットワーク編」のファイルをダウンロードします。

    メッセージにて、「機械学習」とお送りいただければダウンロードができます。

    友だち追加 python フォルダ

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

    python コード

    ここでは、今回分類をする画像読み込ませ、訓練データとテストデータにわけていきます!

    データを確認する

    まずは、取得したデータを確認してみましょう!

    まずは、今回のデータ量を確認します。

    python コード

    訓練データでは、28×28ピクセルの画像が60000枚あることがわかります!

    テストデータでは、28×28ピクセルの画像が10000枚あることがわかります!

    加えて、データの一部をみていきましょう!

    今回は分類をするため、0~9までのラベルを貼って出力させます。

    なお、ラベルは以下の通りです。

    0 = Tシャツ/トップ
    1 =パンツ
    2 =プルオーバー
    3 =ドレス
    4 =コート
    5 =サンダル
    6 =シャツ
    7 =スニーカー
    8 =バッグ
    9 =ショートブーツ

    python コード

    画像を表示させることができました!

    784(28×28 = 784)画素なので、やはり荒いです笑

    基本的な画像は2000万画像くらいだそうです。

    モデルを作成し訓練させる

    データを確認したところで、モデルを作成します。

    このとき784(784 = 28×28)の特徴量をもつ入力層を作成しています。

    加えて、今回はラベルが0~9の10個のラベルを分類するため、10個の出力層を作成しています。

    python コードその後、モデルを学習させます!

    python コード

    予測結果を確認する

    モデルを学習させたところで、実際の精度をみていきましょう!

    python コード

    このとき、下記のような結果が出ていることがわかります。

    loss: 0.5329 - accuracy: 0.8241

    このときlossは、モデルがどれだけ予測ができなかったのかを表しています。

    ニューラルネットワークでは、loss(損失)を表すことが一般的な印象なので今回記載しました。

    またacuracyは、モデルの精度を表しています。

    今回は82.4%とかなり当てはまりが良いことがわかります!

    予測結果から写真を確認する

    予測結果をもとに、実際の写真を確認しましょう!

    今回は5枚の写真を確認していきます。

    まずは、予測のラベルと実際のラベルの結果を表示し予測できているかをみます。

    python コード

    今回の予測は、100%の正解率であることがわかります!

    ( 1 =パンツ / 2 =プルオーバー / 6 =シャツ /  9 =ショートブーツ )

    加えて、実際の画像もみていきましょう!

    python コード python コード

     

    予測できていることが確認できました!!



    まとめ

    第5回では、

    • ニューラルネットワークをざっくり理解する
    • Pythonを用いてニューラルネットワークを体験する

    といったことをおこなっていきました!

    第6回では、いよいよディープラーニングを学んでいきます!

    記事にでてくるコードはLINE@にて配布をしております!

    ラインのメッセージ欄に「機械学習」とお送りいただければ、ダウンロードリンクを送付いたします!

    友だち追加

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA