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

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

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

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

目次


準備:行列の和と積

行列の定義

ニューラルネットワークに登場するパラメータはすべて行列で表現されます。本項では手始めに行列の和と積をJavaScriptで実装します。 プログラミング言語で行列を表現する方法は多重配列を用います。JavaScriptでは配列要素に配列を代入することで多重配列を表現することができます。 次の3つの行列

X = \left(\matrix{  1&2 \cr  3&4 } \right), Y = \left(\matrix{  4&2 \cr  3&-1 } \right), W = \left(\matrix{  1&2&3 \cr  4&5&6 } \right)

は、JavaScriptでは次のように表現します。

var X = [
	[ 1, 2 ],
	[ 3, 4 ]
];
var Y = [
	[ 4, 2 ],
	[ 3, -1 ]
];
var W = [
	[ 1, 2, 3 ],
	[ 4, 5, 6 ]
];

XとYは2行2列、Wは2行3列の行列と呼ばれます。

和の定義

同じ行数と列数の行列は和を定義することができ、各行列成分の単純な和で与えられます。 2行2列の行列AとBの和の結果をCとすると、次のように表されます。

A + B = C

\left(\matrix{ A_{00}&A_{01} \cr A_{10}&A_{11} } \right)+\left(\matrix{ B_{00}&B_{01} \cr B_{10}&B_{11} } \right) =\left(\matrix{ A_{00}+B_{00}&A_{01}+B_{01} \cr A_{10}+B_{10}&A_{11}+B_{11} } \right)

この演算をJavaScriptの関数で実装すると次のようになります。AとBの行数と列数は任意です。

//A+B=C (A,Bとも2重配列を想定)
function addMatrices( A, B, C ){
	C = C || [];

	var Agyou = A.length;
	var Aretu = A[ 0 ].length;

	for( var i = 0; i < Agyou; i++ ){

		C[ i ] = C[ i ] || [];

		for( var j = 0; j < Aretu; j++ ){

			C[ i ][ j ] = A[ i ][ j ] + B[ i ][ j ];

		}

	}

	return C;
}

積の定義

2つの行列A,Bが存在しAの列数とB行数が一致する場合、2つの行列は積を定義することもできます。 2行2列のAと2行3列のBの積の結果をCとすると、次のように表されます。

AB = C

\left(\matrix{ A_{00}&A_{01} \cr A_{10}&A_{11} } \right)\left(\matrix{ B_{00}&B_{01}&B_{02} \cr B_{10}&B_{11}&B_{12} } \right) =\left(\matrix{A_{00}B_{00}+A_{01}B_{10}& A_{00}B_{01}+A_{01}B_{11}& A_{00}B_{02}+A_{01}B_{12} \cr A_{10}B_{00}+A_{11}B_{10}& A_{10}B_{01}+A_{11}B_{11}& A_{10}B_{02}+A_{11}B_{12}}\right)

このようになる理由はここ(外部サイト)などを参考にしてください。この演算をJavaScriptの関数で実装すると次のようになります。 Aの列数とB行数が一致する条件のもと、AとBの行数と列数は任意です。

//C = AB (A,Bとも2重配列を想定)
function multiplayMatrices( A, B, C ){
	C = C || [];

	var Agyou = A.length;
	var Aretu = A[ 0 ].length;
	var Bgyou = B.length;
	var Bretu = B[ 0 ].length;

	for( var i = 0; i < Agyou; i++ ){

		C[ i ] = C[ i ] || [];

		for( var j = 0; j < Bretu; j++ ){

			C[ i ][ j ] = 0;

			for( var k = 0; k < Bgyou; k++ ){

				C[ i ][ j ] += A[ i ][ k ] * B[ k ][ j ];

			}

		}

	}

	return C;
}

計算チェック

先の行列X,Y,Wの和と積の計算を上記の関数を用いて実行します。 結果はコンソール(「F12」で表示)に出力しています。

C = X+Y

C = XW



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

関連記事

ゼロから作るDeep Learning







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