この回は、ニューラルネットワークの実装を連立式で行うことにします。 通常、ニューラルネットワークの実装には行列演算が欠かせないということで、PythonのNumpyを使って多次元配列による行列の計算処理をします。 多次元配列をつかった演算は行列演算を行うものですが、今の高校数学では行列が課程にはないということです。(すなわち、昔は行列計算が高校数学に有ったということです) このため、機械学習やディープラーニングのテキストでは、基本的な行列演算の導入説明を簡単に入れています。 しかし、行列演算は線形代数(連立方程式)の解法として導入されるのが通常コースです。 そこで、先ずは線形代数(連立方程式)としてニューラルネットワークの実装説明を始めることにします。
※なお、この一連の記事では「Pythonのプログラムを勉強する」ことを目的としいます。 そこで、ここで使う式や図表も出来るだけPythonで作る様にしました。 今回紹介するプログラムは式とフロー図の描画プログラムになります。
1. パーセプトロンからニュートラルネットワークへ
このブログでは、パーセプトロンにつて 7番目の記事『パーセプトロン(ディープラーニングStepⅠ)』で一度説明をしています。 2つの入力x1、x2に重みw1,w2 を付けてyを導く基礎的な伝達の図(III-1) でした。
(Ⅲ-1)
そしてこの時の伝達関数は、式(III-2)で表されました。
(Ⅲ-2)
次に、3入力3出力の伝達関数として次の(III-3)を設定します。 入力としてはx1、x2とバイアス b とします。
【 __ __ __~~~( ゜〈‶ ここで注意したいのは添字の付け方です。 3つの結果a1,a2,a3 に対して、重み w は、2つの添え字 i と j を付けて wij で表します( 本文中は添え字を小文字に出来なかった )。 この時、 i は結果の a の添え字に一致させて、j は入力の x の添え字に合わせています。 この次の記事では行列演算を導入するつもりです。通常の行列での位置と添え字の関係とに差が見られるので注意が必要に思えます。 "〉゜ )~~python __ __ __ 】
この伝達を図にすると図(III-4)となります。 図(III-4)では、重み w を a1 に対する重み w11 , w12 と b1 だけを描いています。
入力の 1, x1, x2 を第0層(Pythonでは整数は0から始まる)として、出量の a1, a2, a3 を第1層とすれば、これは1層のニューラルネットワークとなる様です。 複数の矢印(=重み)が絡んできましたので、一応は’ ネットワーク ’になったという事でしょう。
+++++++++++++++++++++++++++++++++++++++++++++
式(III-3)と図(III-4)のを描画するプログラムは以下です。 Texを使った数学文字の表記を使いましたが、表記する文字の位置、文字の大きさ、円の大きさ、矢印の長さと太さなど、何回も繰り返し調整をしました。
2. ニューラルネットワークの2層化、3層化
更に、上の出力結果 a1,a2,a3 を入力として、次の伝達関数を考えます。
最初の伝達関数には上付きの添え字(1)を付、出力結果も a1, a2 ,a3 を a(1)1 ,a(1)2 ,a(1)3
とします。 (記事の文中では上付きになっていません)。 バイアスも b(1)1, b(1)2, b(1)3 とします。 式(III-.3)は 式(III-5)となります。
ネットワークの1層目の結果 a1, a2 ,a3 を次の入力にして、2層目への伝達関数を
設定します。 2層目の伝達関数を 式(III-6)とします。2層目の重み w と出力 a には、(2)の上付の添え字を付けます。
2層目までの伝達ネットワーク図は次(図(III-.7) となります。
更に、 3層目への伝達関数で、最終の結果 y1、 y1 を得るとします。 伝達関数は 式(III-8)、そのフロー図は(III-9)となります。
+++++++++++++++++++++++++++++++++++++++++++++
式(III-5)から図(III-9)を描画するプログラムを以下紹介します。
プログラムは同じコマンドの繰り返しになります。テキストに使うフォントのサイズや、式の感覚を設定することで、ある程度の位置関係を設定できるようにはしています。しかし、詳細の式や記号、矢印の表示位置は何回も繰り返し、調整をして決めました。
(III-5)と(III-6)の描画プログラム
(III-7)の描画プログラム
(III-8)の描画プログラム
(III-9)の描画プログラム
+++++++++++++++++++++++++++++++++++++++++++++
3.後書き
今回は伝達関数の概要について理解する内容でした。 ディープラーニングの書籍*1)を読めば解る内容なのですが、パイソンのプログラム学習として式とフロー図をプロットするプログラムを作ってみました。 私のプログラムの作り方は、調査(主にWeb記事)と試行策の繰り返しです。 自分以外の人がどうやってプログラムを作っているのかはあまり知る機会はないので例として紹介したいと思っていますが、見る側からはイライラする動画になってしまいそうです。すっきりとした動画に編集するもそれなりに大変な作業。 今回は動画にするような内容には出来なかったので、動画を作っていません。
参考文献 / 参考リンク :
*1) このブログは教本として、ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実装 [ 斎藤 康毅 ] 【出版社: オライリージャパン 発売日: 2016/9/24 】 (ISBN-10:4873117585 ISBN-13:978-4873117584) を使っています。
2) Pythonでの描画はmatplotlibを使用します。matplotlibサイト のチュートリアルは機能を調べるのには便利でした。 例えば、Tutorials » Annotations(注釈)辺りから調べます。https://matplotlib.org/tutorials/text/annotations.html#sphx-glr-tutorials-text-annotations-py
2) 独学ではなかなか進まない方は、やはり有料のセミナーを受けられることをお勧めします。
① TechAcademy Pro ② AIジョブカレ など
__ __ __~~~( ゜〈‶ __ __ __ ~~( ゜〈‶ 🐭 "〉゜ )~~python __ __ __
0コメント