AI研究所 - AI(人工知能)に脅かされないために、AI(人工知能)を作る側の人間になる -

HOME  >  ニューラルネットワークをPythonを使ってプログラミングする方法を徹底解説

公開日:2020.10.20 

ニューラルネットワークをPythonを使ってプログラミングする方法を徹底解説

プログラミング

 

AI(人工知能)技術はプログラミングでコードを書いて実装することで実現することができます。
最近では人工知能のプログラミングといえばPythonが大きなシェアを持ち、頻繁に使用されています。
本記事ではPythonとは何か、どうやってニューラルネットワークをPythonを使ってプログラミングするのかといった疑問を解決していきます。

本記事の内容

Pythonとは?
ニューラルネットワークとは
ニューラルネットワークの実装
・単純パーセプトロンの実装
・多層パーセプトロンの実装
・データセット
最後に

Pythonとは

Pythonとは1991年にオランダ人のグイド・ヴァンロッサム氏が開発したプログラミング言語です。
Pythonは「ソースコードの構造がシンプル」、「メンテナンスしやすい」、「学習コストが低い」などから、初心者にも学びやすいプログラミングとなっています。
他にもPythonはインタープリンタ型言語という種類になり、コードを書いたらコンパイルすることなくすぐに実行できることや、インデントの強制等があることも特徴です。
Python3にバージョンアップされてからは日本語対応もしっかりし、国内でもシェアが上がってきています。
同時に海外における人気も高く、有名なWebサービスやSNSサービスなどでも使用されており、人気のプログラミングとなっています。
Pythonは、今、AI(人工知能)や機械学習分野で使用されることも多くなり、とても注目されています。
本記事で使用したPythonの開発環境は、Anacondaというソフトウェアです。
AnacondaはPythonで使いたいプログラムやライブラリがすでに設定してあるディストリビューションになります。
これを使うことで、環境構築の時間を短縮したり、ツールを簡単にインストールできたりします。
初心者の方をはじめ多くの方に使いやすいソフトウェアとなっています。
Pythonについてやインストール手順などもう少し詳しく知りたい方はこちらをご覧ください。
では次にニューラルネットワークついて見ていきましょう。

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

次にこれからPythonで実装するニューラルネットワークとは何か確認しておきましょう。
ニューラルネットワークとは、人間の脳の働きをコンピューター上で模倣したものです。
脳では神経細胞(ニューロン)に電気信号が伝達され、脳内の情報が処理されます。
これを数理モデル化したものがニューラルネットワークになります。
構造としては、入力が行われる「入力層」、出力が行われる「出力層」、その間に「隠れ層(中間層)」というものがあります。
それぞれのつながりを「重み」というパラメーターで調整します。
本記事では、このニューラルネットワークについて、Pythonを使ってプログラミングを実装する方法を解説します。

ニューラルネットワークの実装

では、実際にニューラルネットワークの簡単なモデルをPythonを使って実装していきましょう。

単純パーセプトロンの実装

それではまず、図のような入力層と出力層の2層からなるニューラルネットワークの原点となる単純パーセプトロンをPythonを使って実装していきます。
入力xは1・3の行列、重みwを3・2の行列とするので、出力yは1・2の行列となる例です。
実際のコードは

import numpy as np

x = np.array([1, 2, 3])
w = np.array([[1, 4], [2, 5], [3, 6]])

y = np.dot(x, w)
print(y)

となります。
上のPythonのコードについて解説していきましょう。
まず、プログラム内において線形代数を扱う際に用いられるライブラリNumPyを読み込みます。
NumPyはオープンソースで公開されており、誰でも無料で使用できます。
ニューラルネットワークでは、ベクトルや行列など多次元配列の計算をすることが多くなりますが、NumPyを使うと非常に高速な処理を行うことができます。
そして、入力xと重みwを定義します。今回は特に意味のない数値をいれてあります。
ニューラルネットワークの単純パーセプトロンにおいて、出力は入力と重みの積で求められます。
ベクトルの内積や行列の積を計算することができるnp.dot関数を使って出力を求めます。
このコードの実行結果(y)は、
[14  32] となり正しい出力値がでました。

多層パーセプトロンの実装

次に、ニューラルネットワークの基本形となる多層パーセプトロンの実装を行ってみましょう。
入力xは1・3の行列、重みwを3・2、重みvを2・3の行列とし、今回はバイアスb1、b2も入れ、出力yは1・3の行列となる例です。
実際にコードを書いてみましょう。

import numpy as np

def TwoLayer_Network():
    
    network={}
    
    network['W'] = np.array([[1,2],[3,4],[5,6]])
    network['V'] = np.array([[1,2,3],[4,5,6]])
    
    network['b1']=np.array([1,2])
    network['b2']=np.array([1,2,3]) 

    return network

def forward(network,input_data):
    
    W,V = network['W'],network['V']
    b1,b2 = network['b1'],network['b2']
    
    Layer1 = np.dot(input_data,W) + b1
    Layer1 = sigmoid_function(Layer1)
    
    Layer2 = np.dot(Layer1,V) + b2
    output_data = identity_function(Layer2)
    
    return output_data
    
def sigmoid_function(x):
     return 1 / (1 + np.exp(-x))
   

def identity_function(y):
  return y

network =TwoLayer_Network()
input_data = np.array([1.0,0.5,1.0])
output_data = forward(network,input_data)
    
print(output_data)

上の二つと同様にNumPyを読み込みます。
まず、重みとバイアスの初期設定を行います。
重みもバイアスも今回は意味のない数値に設定してあります。
次に、順伝番となる式をnp.dot関数を使用して定義します。
そして、活性化関数と恒等関数の定義を行います。
活性化関数はシグモイド関数を使用します。
シグモイド関数とはあらゆる入力値を0.0~1.0の範囲の数値に変換して出力する関数です。
ニューラルネットワークではよく用いられてきた活性化関数の1つです。
式は、

で表されます。
恒等関数とは入力値をそのまま出力する関数であり、ニューラルネットワークでは出力層で使われます。
最後に、入力値を入力し、出力値を出力し表示します。
最終結果は、
[ 5.999772    8.99956243 11.99935285] となりました。
ここまでニューラルネットワークにおける簡単なパーセプトロンを中心に実装してみました。

データセット

これらを元に、データセットを準備し、訓練用データ(traindata)とテストデータ(testdata)に分けて実際に学習し分類などを行うことができます。
それにより、Pythonでより複雑なモデル(model)にも学習をさせることが可能になります。
有名なデータセットには、アイリス花データセットやMNISTのデータセットがあります。
アイリス花データセットは、アイリスの花3種類を各々50ずつ計150のデータです。
変数として、がく片の長さと幅、花びら長さと幅をcmで計測した4つの変量が入っています。
これらの変数を用いて分類するという回帰問題を実装できます。
また、MNISTのデータセットは、手書き数字の画像データセットです。
主に画像認識を目的としたデータセットで分類問題として引用されます。

最後に

今回は、ニューラルネットワークをPythonを使ってプログラミングする方法を紹介しました。
単純パーセプトロンと順伝番を含んだ多層パーセプトロンまでの実際のPythonのコードと実行結果を見てきました。
ニューラルネットワークとPythonについての類似記事はこちらこちらでも見ることができます。
プログラミングは実際に手を動かしてコードを書くことが習得への道になります。
またプログラミングを書くことで、よりその学習の手法の理解が進むこともあります。
みなさんもPythonのコードを写すところからでもよいので挑戦してみてはいかがでしょうか。
そして、ニューラルネットワークをはじめディープラーニングなどいろいろな手法を実装してみてください。
最後までご覧いただきありがとうございました。


参考になったら「いいね!」と「シェア」をお願いします!!

このエントリーをはてなブックマークに追加
AI(人工知能)セミナー開催中