HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > ゼロから作るDeep Learning

ゼロから作るDeep Learning
準備2:ベクトルと行列の積を計算する関数の実装

文責:遠藤 理平 (2017年4月 8日) カテゴリ:ゼロから作るDeep Learning(14)

昨今注目を集めているAI(人工知能)を学びたいと思い立ち、ディープラーニング(Deep Learning、深層学習)と呼ばれるAIの数理モデルである多層構造のニューラルネットワークを書籍「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」を参考にを独習していきたいと思います。本書籍ではプログラミング言語としてPythonが利用されていますが、本項ではJavaScriptで実装していきます。

目次


準備:ベクトルへの行列の積算

ベクトルを行列で表現する場合、横ベクトルと縦ベクトルという2種類の表現方法があります。

U = \left(\matrix{ U_0 & U_1 }  \right), U = \left(\matrix{ U_0 \cr U_1 }  \right)

行列との積算を考える場合、どちらを選択するかで行列要素の定義と表記が反転します。 次の2つの行列とベクトルの積は同じ計算を表します。

\left(\matrix{  V_0 &V_1 }  \right) = \left(\matrix{ U_0 &U_1 }  \right)  \left(\matrix{  A_{00}& A_{10} \cr   A_{01} &  A_{11} } \right)
\left(\matrix{  V_0 \cr V_1 } \right) = \left(\matrix{  A_{00}& A_{01} \cr A_{10} &  A_{11} } \right) \left(\matrix{ U_0 \cr U_1 }  \right)

関数の実装

横ベクトルと縦ベクトルへ行列を積算するための関数はそれぞれ用意します。
次の関数は第一引数に横ベクトル、第二引数に行列を与えることで、結果を第三引数と戻り値に渡します。

//ベクトル×行列の計算
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 );


▲このページのトップNPO法人 natural science トップ

関連記事

ゼロから作るDeep Learning







▲このページのトップNPO法人 natural science トップ