ゼロから作るDeep Learning
準備2:ベクトルと行列の積を計算する関数の実装
昨今注目を集めているAI(人工知能)を学びたいと思い立ち、ディープラーニング(Deep Learning、深層学習)と呼ばれるAIの数理モデルである多層構造のニューラルネットワークを書籍「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」を参考にを独習していきたいと思います。本書籍ではプログラミング言語としてPythonが利用されていますが、本項ではJavaScriptで実装していきます。
目次
- 準備1:行列の和と積を計算する関数の実装
- 準備2:ベクトルと行列の積を計算する関数の実装
- 準備3:多変数関数の数値微分と極小値の探索
- 1.1層ニューラルネットワークの実装(バイアスなし、活性化関数なし、学習なし)
- 2.1層ニューラルネットワークへのバイアスと活性化関数の追加
- 3.1n1型2層ニューラルネットワークの実装(学習なし)
- 4.1変数関数を学習させてみる1:勾配法による学習計算アルゴリズム
- 5.1変数関数を学習させてみる2:勾配法による学習計算アルゴリズムの実装
- 6.1変数関数を学習させてみる3:ニューロン数による学習効果の違い
- 7.誤差逆伝搬法(バックプロパゲーション)の導出
- 8.順伝播型ニューラルネットワーク「FFNNクラス」の実装(JavaScript)
- 9.三角関数のサンプリング学習(WebWorkersによる並列計算)
- 10.学習後の各層ニューロンの重みの可視化
- 11.層数とニューロン数による学習効果の違い
準備:ベクトルへの行列の積算
ベクトルを行列で表現する場合、横ベクトルと縦ベクトルという2種類の表現方法があります。
,
行列との積算を考える場合、どちらを選択するかで行列要素の定義と表記が反転します。 次の2つの行列とベクトルの積は同じ計算を表します。
関数の実装
横ベクトルと縦ベクトルへ行列を積算するための関数はそれぞれ用意します。
次の関数は第一引数に横ベクトル、第二引数に行列を与えることで、結果を第三引数と戻り値に渡します。
//ベクトル×行列の計算 function multiplayVectorMatrix( U, A, V ){ V = V || []; var Agyou = A.length; var Aretu = A[ 0 ].length; for( var i = 0; i < Aretu; i++ ){ V[ i ] =0; for( var j = 0; j < Agyou; j++ ){ V[ i ] += U[ j ] * A[ j ][ i ]; } } return V; }
次の関数は第一引数に行列、第二引数に横ベクトルを与えることで、結果を第三引数と戻り値に渡します。
//行列×ベクトルの計算 function multiplayMatrixVector( A, U, V ){ V = V || []; var Agyou = A.length; var Aretu = A[ 0 ].length; for( var i = 0; i < Agyou; i++ ){ V[ i ] =0; for( var j = 0; j < Aretu; j++ ){ V[ i ] += A[ i ][ j ] * U[ j ]; } } return V; }
計算チェック
横ベクトルと縦ベクトルに対する行列の積算結果をコンソール(「F12」で表示)に出力します。 [37, 40] が出力されます。
var U = [ 1, 2 ]; var A_yoko = [ [ 11, 12 ], [ 13, 14 ] ]; var A_tate = [ [ 11, 13 ], [ 12, 14 ] ]; var V_yoko = multiplayVectorMatrix( U, A_yoko ); console.log("横ベクトル", V_yoko ); var V_tate = multiplayMatrixVector( A_tate, U); console.log("縦ベクトル", V_tate );