7/2(月)よりスマホまたはPCでアクセスした場合、各デバイス向けのサイトへ自動で転送致します
ニューラルネットワーク(神経網、英: neural network, NN)とは、
日本語の「ニューラルネットワーク」は、専ら「人工ニューラルネットワーク」(以下、ANN。)のことを指す。今日では多層ANN系機械学習のことを「ディープラーニング」(深層学習)と称する。
1943年、形式ニューロン(英: formal neuron)「Threshold Logic Unit」とも称する。1943年に神経生理学者・外科医であるウォーレン・マカロックと論理学者・数学者であるウォルター・ピッツが発表した。と称する人工ニューロンの登場により、ANNの歴史が幕を開ける。形式ニューロンは、以下の数式で表される。
N
H ( ∑wi xi - h )
n=1
今日のANNでは、「閾値」は正負が逆転して「バイアス」と称し、「ヘヴィサイドの階段関数」は同名の関数に限定せず「活性化関数」と称する様になったものの、上記の形式ニューロンは今日のANNのニューロン部分の原型であるといえる。
形式ニューロンをプログラミング言語Python3で擬似的に実装したコードを以下に記す。
import numpy
def like_formal_neuron(in_vec: numpy.ndarray, weight_vec: numpy.ndarray, threshold: float, actfun: object=lambda a: 1.0 if a > 0 else 0.0) -> float:
"""形式ニューロン的なもの。
Extended description of function.
Parameters
----------
in_vec : numpy.ndarray
入力ベクトルを指定します。
weight_vec : numpy.ndarray
重みベクトルを指定します。
threshold : float
閾値(負のバイアス)を指定します。
actfun : object
活性化関数を指定します。
(初期値: ヘヴィサイドの階段関数)
Returns
-------
float
計算結果を出力します。
"""
affine = numpy.dot(in_vec, weight_vec) - threshold
return actfun(affine)
# 閾値(負のバイアス)
h = -1.0
# 重みベクトル
w = numpy.array([0, 1])
# 入力ベクトル
x = numpy.array([0, 0])
# 計算して出力
print(like_formal_neuron(in_vec=x, weight_vec=w, threshold=h)) # --> 1.0
後に、正解の出力を得る為に前述の「重み」(w)と「バイアス」(h)を調節して行くという形の学習能力を備えたパーセプトロン(英: Perceptron)が登場し、ANNの機械学習への応用が始まった。だがしかし、1969年に人工知能学者マービン・ミンスキーらに「線型分離可能なものしか学習できない」と指摘されたことによってANN系機械学習の研究は下火となってしまい、以後暫くの間、サポートベクターマシン(英: support vector machine, SVM)等の非ANN系が機械学習研究の主流派となった。
その後、ボルツマンマシン(英: Boltzmann machine)や誤差逆伝播法(英: Backpropagation)という多層パーセプトロンでも「重み」と「バイアス」の調整を容易にする手段が登場したことにより、「線型分離可能なものしか学習できない」を克服することができた。2006年にジェフリー・ヒントンによってスタックドオートエンコーダなど多層にネットワークを積み重ねる手法が提唱され、更に2012年には物体の認識率を競うILSVRCに於いてジェフリー・ヒントン率いるトロント大学のチームが多層ANN系機械学習「ディープラーニング」によって従来の手法(エラー率26%)と比較してエラー率17%と実に10%もの劇的な進歩を遂げた。そして2015年10月のAlphaGoで世間の注目を浴び、多層ANN系機械学習は「ディープラーニング」の呼称の定着と共に機械学習研究の主流派となった。
▲