ニューラルネットワークの実装2 単一ニューロンの実装

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

前回の記事でニューラルネットワークについて解説をしました。そもそもニューラルネットワークって何なのっていうところから入りましたね( ̄▽ ̄;)。

 

文章だけ読んでいても実感が湧かないような気がします。実際にコードを実装しましょう。写経(書き写し)してみてください。自分で Python でコードを書いてみるとなんとなく理解ができてくると思います。

コードを書くときは Google Colaboratory を起動して下さい。忘れた方はこちらの記事を読んで、開発環境を整えるところから始めましょう。

今回の記事では、単一のニューロンにデータを入力するところを解説できたらなと思います。この記事を二つ並べた状態にして、コードを見る用と記事を読む用に分けてみると読みやすいかと思います。

データを足し合わせて、活性化関数(シグモイド関数)で処理するところまで解説します。もし簡単すぎると思われる方は次の記事に飛んでもらってもいいと思います。

単一ニューロンにデータを入力

まずはニューロンにデータ入力をしてみたいと思います。入力するだけで、重み関数は今は忘れて下さい。

先にコードを読んでみて下さい。Python のクラスとインスタンス、メソッド、関数がいろいろいでてきましたね。クラスとインスタンスについて忘れた方はこちらの記事を読んでみて下さい。

こちらのコードは単一ニューロンにデータを入力して、ただ足し合わせて出力するだけのものになります。入力データは input_data = [1.0, 2.0, 3.0] です。

このコードのアルゴリズム(処理手順)を説明します。

 

実行すると、まずは neural_network = NeuralNetwork() の処理が行われます(黄枠)。インスタンスを生成してますね。

順番通りに目で追ってみて下さい。黄枠でインスタンスが生成されたと同時に青枠でさらに neuron インスタンスが生成されます。neuron インスタンスは neural_network インスタンスの子要素になります。そしてさらに赤枠の中の処理が行われ、input_sum が生成されます。input_sum はクラスプロパティですね。

次にこちらをみて下さい。

neural_network インスタンスを生成したら次は黒枠の処理が始まります。input_data はリストです。このリストを引値にして、NeuralNetwork クラスの commit メソッドを呼び出しています。

ここで for 文が行われていますね。for 文について分からない方はこちらを読んでください。

for 文の中で neuron インスタンスの set_input メソッドが実行されています。緑枠の中の処理です。この中で input_sum というプロパティに入力データを足し合わせて、表示させているのがわかります。

input_data[1.0, 2.0, 3.0] の総和を求める処理になりますね^_^。

活性化関数の導入

活性化関数って覚えていますか?

活性化関数にはシグモイド関数を使います。入力データを処理して出力する際に使う関数です。忘れた方はこちらから復習してみてください^o^。

こちらのコードでは一番最初に numpy をインポートしていますね。

黄枠の部分で neural_network インスタンスを生成し、初期化を行います。

続いて黒枠で neural_network インスタンスの commit メソッドを実行しています。print 文の中でメソッドを実行していますね。ここ、初心者の方にはわかりにくいかもしれません。

実感が湧きにくいかもですが、そんなに気にしないでください。print 文の中で実行し、そのまま答えを表示させているとだけ理解してください~_~;。

続いて赤枠の中の for 文の処理が始まります。for 文の処理の中で set_input メソッドが呼び出されています。

緑枠の中の処理、すなわち、ただ足し合わせるだけの計算になっています。

赤枠の中の for 文が終わったら最後に get_output メソッドが行われています。return と書いてあるのですが、return とは戻り値を指定するものになります。今はちょっとわかりにくいかもしれませんが、ひとまず置いておきましょう。あとでまた説明します。

get_output メソッド(オレンジ枠)の処理が始まります。この中でまた return がでてきて、sigmoid メソッドが呼び出されてますね。いいかげん return がうんざりかもしれません。

青枠の中の計算が行われます。入力データを足し合わせた input_sum を引値としてますね。青枠の中でシグモイド関数の計算が行われ、その出力が戻り値としてリターンされます。

そしてオレンジ枠の中で、青枠の中での計算結果がそのまま戻ってきます。self.output = sigmoid(self.input_sum) という処理の右辺がそのまま青枠での計算結果に入れ替わるようなイメージです。

その出力がそのまま return されます。

そして赤枠の中の commit メソッドの return 文でもそのまま戻り値として返されていきます。

そして最終的に黒枠の中の print 文の中に戻ってきます。それをそのまま printする(表示する)という流れになります。

以上がこのコードのアルゴリズムになります。どうですか?イメージ湧きました?

この記事を二つ並べた状態にして、コードを見るようと記事を読むように分けてみてみると理解しやすいかと思います。

次回は単一ニューロンの処理を完成させていきたいと思います。バイアスや重み関数も取り上げられたらなと思います。

 


ところで雑談なのですが、ペルソナって知ってますか?ペルソナとは想定読者のことで、「このブログをどんな人に読ませたいか」というものになります。

ブログを書くときはペルソナを意識して書くことが大事と言われます。

ペルソナはどんなふうに設定しても構いません。特定の人、例えば会社の上司、親、尊敬している人、彼女などなど。過去の自分に対してでも構いません。

「AIについてなんとなく興味はあるけど、でもわからない」人向けに発信をしています。なので、堅い論文調というよりはちょっと砕けた感じで、口語的にしています。

難しいこと考えるの苦手な人向けに発信をしています。なのでたまに顔文字も使ったりしています。そこのところ、ご了承願えたらなと思います^o^。

関連記事

コメント

この記事へのコメントはありません。

TOP