detail
機械学習および データマイニング |
---|
学会・論文誌等 |
ニューラルネットワーク(神経網、英: neural network、略称: NN)は、脳機能に見られるいくつかの特性に類似した数理的モデルである。「マカロックとピッツの形式ニューロン」など研究の源流としては地球生物の神経系の探求であるが、その当初から、それが実際に生物の神経系のシミュレーションであるか否かについては議論がある[1]ため人工ニューラルネットワーク (artificial neural network、ANN) などと呼ばれることもある。生物学と相互の進展により、相違点なども研究されている。
概要[編集]
ニューラルネットワークはシナプスの結合によりネットワークを形成した人工ニューロン(ノード)が、学習によってシナプスの結合強度を変化させ、問題解決能力を持つようなモデル全般を指す。狭義には誤差逆伝播法を用いた多層パーセプトロンを指す場合もある。一般的なニューラルネットワークでの人工ニューロンは生体のニューロンの動作を極めて簡易化したものを利用する。
ニューラルネットワークは、教師信号(正解)の入力によって問題に最適化されていく教師あり学習と、教師信号を必要としない教師なし学習に分けられることがあるが、本質的には教師なし学習と教師あり学習は等価である。三層以上のニューラルネットワークは可微分で連続な任意関数を近似できることが証明されている。
画像や統計など多次元量のデータで線形分離不可能な問題に対して、比較的小さい計算量で良好な解を得られることが多い。現在は、画像認識、市場における顧客データに基づく購入物の類推など、パターン認識、データマイニングに応用されている。
歴史[編集]
- 1943年、ウォーレン・マカロックとウォルター・ピッツが形式ニューロンを発表した。
- 1958年、フランク・ローゼンブラットがパーセプトロンを発表した。
- 1969年、マービン・ミンスキーとシーモア・パパートが著書『パーセプトロン』の中で、単純パーセプトロンは線形分離不可能なパターンを識別できない事を示した。
- 1979年、福島邦彦がネオコグニトロンを発表し、文字認識に使用し、後にこれが畳み込みニューラルネットワークへと発展する。
- 1982年、ジョン・ホップフィールドによってホップフィールド・ネットワーク(再帰型ニューラルネットワーク)が提案された。
- 1985年、ジェフリー・ヒントンらによりボルツマンマシンが提案された。
- 1986年、デビッド・ラメルハートらにより誤差逆伝播法(バックプロパゲーション)が提案(再発見)された。
- 1988年、畳み込みニューラルネットワークを Homma Toshiteru らが音素の認識に[2]、1989年にヤン・ルカンらが文字の認識に使用した[3][4]。LeCunらの多層の畳み込みニューラルネットワークは後にディープラーニングの一種に分類されることになる。
- 2006年、ジェフリー・ヒントンらによりオートエンコーダ[5]およびディープ・ビリーフ・ネットワーク[6]が提案され、この理論が、2010年代にディープラーニングと呼ばれる分野を形成した。
代表的な人工ニューラルネットワーク[編集]
順伝播型ニューラルネットワーク[編集]
順伝播型ニューラルネットワーク(フィードフォワードニューラルネットワーク、略称: FFNN)は、最初に考案された単純な構造の人工ニューラルネットワークモデルである。ネットワークにループする結合を持たず、入力ノード→中間ノード→出力ノードというように単一方向へのみ信号が伝播するものを指す。
教師信号によるニューラルネットワークの学習は心理学者ドナルド・ヘッブが1949年に提唱したシナプス可塑性についての法則、「ヘッブの法則」に基づく。神経細胞間のネットワークの繋がりが太くなり、その結果、特定の細胞への情報伝達経路が作られる(情報が流れやすくなる)、これを学習とする。パーセプトロンは学習の結果、集合を超平面により分割する。この学習は有限回の試行で収束することがマービン・ミンスキーによって1969年に証明された。
1986年にデビッド・ラメルハートらにより誤差逆伝播法(バックプロパゲーション)が提案され、多層パーセプトロンの学習モデルとして使用されている。バックプロパゲーションは主に中間層が1層の時に使われ、中間層が2層以上ある時は深層学習と呼ばれ、入力に近い側の層をオートエンコーダで学習してから積み上げていく方法などが提案されている。
各層を と置くと、下記漸化式で表現される。3層の場合は、 が入力層、 が中間層、 が出力層。
と はパラメータ。 は行列、 と は縦ベクトル。 を重みパラメータ、 をバイアスパラメータと呼ぶ。 は活性化関数と呼び、単純パーセプトロンでは使われていなかった、つまり、であったが、すると線形になってしまうので、現在は何らかの非線形関数を使う。微分可能な単調関数を使うことが一般的。最もよく使われるのはシグモイド関数の 。
学習は誤差を最小化する最適化問題を解く。最適化問題の解法はバックプロパゲーションを使うのが一般的。誤差は二乗和誤差を使うのが一般的。汎化能力を高めるために、誤差に正則化項を加算することが多い。2次の正則化項を追加する場合、誤差に を加算する。 は の要素。 は実数のパラメータ。
RBFネットワーク[編集]
誤差逆伝播法に用いられる活性化関数に放射基底関数を用いたニューラルネットワーク
- RBFネットワーク
- 一般回帰ニューラルネットワーク(GRNN、General Regression Neural Network)- 正規化したRBFネットワーク
自己組織化写像[編集]
自己組織化写像はコホネンが1982年に提案した教師なし学習モデルであり、多次元データのクラスタリング、可視化などに用いられる。自己組織化マップ、コホネンマップとも呼ばれる。
畳み込みニューラルネットワーク[編集]
畳み込みニューラルネットワークとは層間が全結合ではない順伝播型ニューラルネットワークの一種。
画像を対象とするために用いられることが多い。
再帰型ニューラルネットワーク(リカレントニューラルネット、フィードバックニューラルネット)[編集]
フィードフォワードニューラルネットと違い、双方向に信号が伝播するモデル。すべてのノードが他の全てのノードと結合を持っている場合、全結合リカレントニューラルネットと呼ぶ。
確率的ニューラルネット[編集]
乱数による確率的な動作を導入した人工ニューラルネットワークモデル。モンテカルロ法のような統計的標本抽出手法と考えることができる。
スパイキングニューラルネットワーク[編集]
ニューラルネットワークをより生物学的な脳の働きに近づけるため、活動電位(スパイク)を重視して作られた人工ニューラルネットワークモデル。スパイクが発生するタイミングを情報と考える。ディープラーニングよりも扱える問題の範囲が広い次世代技術と言われている。ニューラルネットワークの処理は逐次処理のノイマン型コンピュータでは処理効率が低く、活動電位まで模倣する場合には処理効率がさらに低下するため、実用する際には専用プロセッサとして実装される場合が多い。
2015年現在、スパイキングNN処理ユニットを積んだコンシューマー向けのチップとしては、QualcommのSnapdragon 820が登場する予定となっている[7][8]。
複素ニューラルネットワーク[編集]
入出力信号やパラメータ(重み、閾値)が複素数値であるようなニューラルネットワークで活性化関数は必然的に複素関数になる[9]。
利点[編集]
- 情報の表現
- 入力信号と出力信号が複素数(2次元)であるため、複素数で表現された信号はもとより、2次元情報を自然に表現可能[9]。また特に波動情報(複素振幅)を扱うのに適した汎化能力(回転と拡大縮小)を持ち、エレクトロニクスや量子計算の分野に好適である。四元数ニューラルネットワークは3次元の回転の扱いに優れるなど、高次複素数ニューラルネットワークの利用も進む。
- 学習特性
- 階層型の複素ニューラルネットワークの学習速度は、実ニューラルネットワークに比べて2〜3倍速く、しかも必要とするパラメータ(重みと閾値)の総数が約半分で済む[10][9]。学習結果は波動情報(複素振幅)を表現することに整合する汎化特性を示す[11]。
生成モデル/統計モデル[編集]
生成モデル(統計モデルとも)は、データが母集団の確率分布に従って生成されると仮定しそのパラメータを学習するニューラルネットワークの総称である。統計的機械学習の一種といえる。モデル(=母集団)からのサンプリングによりデータ生成が可能な点が特徴である(詳しくは推計統計学 § 統計モデル、機械学習 § 統計的機械学習)。
自己回帰型生成ネット[編集]
自己回帰型生成ネット(Autoregressive Generative Network)とは、系列データの生成過程(同時確率分布)を系列の過去データに対する条件付分布の積と考え条件付分布をニューラルネットワークで表現するモデルである。非線形自己回帰生成モデルの一種、詳しくは自己回帰モデル § 非線形自己回帰生成モデル。画像生成におけるPixelCNN、音声生成におけるWaveNet・WaveRNNがその例である。学習時は学習データを条件付け(=入力)にできるため、ニューラルネットワーク自体が再帰性を持っていなければ並列学習が容易である(CNN型のWaveNetなど)。ニューラルネットワーク自体に再帰性がある場合は学習時も系列に沿った逐次計算が必要となる(RNN型のWaveRNNなど)。
変分オートエンコーダ[編集]
変分オートエンコーダ (VAE) とは、ネットワークA(エンコーダ)が確率分布のパラメータを出力し、ネットワークB(デコーダ)が確率分布から得られた表現をデータへと変換するモデルである。画像・音楽生成におけるVQ-VAE-2がその例である。
敵対的生成ネットワーク[編集]
敵対的生成ネットワーク (Generative Adversarial Network, GAN) とは、ガウシアン等の確率分布から得られたノイズをネットワークA (Generator) がデータへ変換し、ネットワークBが母集団からサンプリングされたデータとネットワークAの出力を見分けるように学習するモデルである。DCGANやBigGANがその例である。
flow-based生成モデル[編集]
flow-based生成モデルはFlow、Glow、NICE、realNVP等が存在する。
構成要素[編集]
ニューラルネットワークは様々な要素を組み合わせからなる。各構成要素は経験的・理論的に示された特徴をニューラルネットワークへもたらしている。
総称/名称 | 概念 | 意図/効果 | 例 | |
---|---|---|---|---|
skip connection | x = x + f(x) | 勾配消失の防止 | ResNet | |
アンサンブル学習 | ResNet | |||
位置情報の保持 | U-Net | |||
ボトルネック構造 | Wshallow > Wmiddle < Wdeep | 特徴抽出 | AE | |
圧縮された潜在表現 | generative AE | |||
階層構造 | middle(x) = f(x + bottom(x)) | 局所/全体特徴の両立[12] | U-Net GAN | |
一貫性
consistency |
cycle | GB2A(GA2B(a)) = a | コンテンツ/不変特徴の保持 | CycleGAN |
latent | D(G(z)) = D(G(z+Δ)) | 潜在変数ゆらぎへの堅牢性 | ICR-BigGAN | |
データ拡張 | D(Aug(x)) = D(x)
D(G(z)) = D(Aug(G(z))) |
leakのないデータ拡張 | CR-GAN
ICR-BigGAN | |
progressive | output | Size(Gt=0(x)) < Size(Gt=1(x)) | 学習の高速化・安定化[13] | PGGAN |
input | Input Complexity t0 < t1 | 学習の高速化・安定化 | PA-GAN | |
正規化 | batch | y = γc Norm(x) + βc | 学習の高速化 | |
layer | ||||
instance | ||||
group | ||||
Conditional | y = γcnl,s Norm(c) + βcnl,s | スタイル変換 | ||
AdaIN | y = σ(s) Norm(c) + μ(s) | スタイル変換 | ||
SPADE | スタイル変換 |
バッチ正規化[編集]
バッチ正規化(英: Batch Normalization)は学習時のミニバッチに対する正規化である[14]。バッチ正規化レイヤー/BNでは学習時にバッチ内統計量(平均μ, 分散σ)を計算し、この統計量により各データを正規化する。その上で学習可能パラメータ (β, γ) を用いて y = γX+βの線形変換をおこなう。これにより値を一定のバラツキに押し込めた上で柔軟に線形変換することができる。
CNNの場合、各チャネルごとにバッチ正規化処理がおこなわれる。バッチ方向ではない正規化手法も様々提案されており、Layer Norm・Instance Norm・Group Normなどがある。また正規化時のβ・γを計算から求めたりNN(β)・NN(γ)で表現する手法も存在する。
活性化関数[編集]
ニューラルネットワークにおいて、各人工神経は線形変換を施した後、非線形関数を通すが、これを活性化関数という。様々な種類があり、詳細は活性化関数を参照。
学習[編集]
ニューラルネットワークの学習は、最適化問題として定式化できる。
現在最も広く用いられる手法は、勾配法の一種である勾配降下法を連鎖律と共に用いるバックプロパゲーションである。
勾配法によらない学習法 (gradient-free method) は歴史的にも多く用いられており、現在でも研究が進んでいる[1]。
実装例[編集]
ここでは、3層フィードフォワードニューラルネットワークで回帰を実装する。 において、 を学習する。活性化関数はReLUを使用。学習は、確率的勾配降下法でバックプロパゲーションを行う。
3層フィードフォワードニューラルネットワークのモデルの数式は以下の通り。X が入力、Y が出力、T が訓練データで全て数式では縦ベクトル。 は活性化関数。 が学習対象。 はバイアス項。
誤差関数は以下の通り。誤差関数は出力と訓練データの間の二乗和誤差を使用。
誤差関数 をパラメータで偏微分した数式は以下の通り。肩についてる T は転置行列。 はアダマール積。
Python 3.5 によるソースコード。Python において、@ は行列の乗法の演算子、** は冪乗の演算子、行列同士の * はアダマール積。
import numpy as np
dim_in = 1 # 入力は1次元
dim_out = 1 # 出力は1次元
hidden_count = 1024 # 隠れ層のノードは1024個
learn_rate = 0.005 # 学習率
# 訓練データは x は -1~1、y は 2 * x ** 2 - 1
train_count = 64 # 訓練データ数
train_x = np.arange(-1, 1, 2 / train_count).reshape((train_count, dim_in))
train_y = np.array([2 * x ** 2 - 1 for x in train_x]).reshape((train_count, dim_out))
# 重みパラメータ。-0.5 〜 0.5 でランダムに初期化。この行列の値を学習する。
w1 = np.random.rand(hidden_count, dim_in) - 0.5
w2 = np.random.rand(dim_out, hidden_count) - 0.5
b1 = np.random.rand(hidden_count) - 0.5
b2 = np.random.rand(dim_out) - 0.5
# 活性化関数は ReLU
def activation(x):
return np.maximum(0, x)
# 活性化関数の微分
def activation_dash(x):
return (np.sign(x) + 1) / 2
# 順方向。学習結果の利用。
def forward(x):
return w2 @ activation(w1 @ x + b1) + b2
# 逆方向。学習
def backward(x, diff):
global w1, w2, b1, b2
v1 = (diff @ w2) * activation_dash(w1 @ x + b1)
v2 = activation(w1 @ x + b1)
w1 -= learn_rate * np.outer(v1, x) # outerは直積
b1 -= learn_rate * v1
w2 -= learn_rate * np.outer(diff, v2)
b2 -= learn_rate * diff
# メイン処理
idxes = np.arange(train_count) # idxes は 0~63
for epoc in range(1000): # 1000エポック
np.random.shuffle(idxes) # 確率的勾配降下法のため、エポックごとにランダムにシャッフルする
error = 0 # 二乗和誤差
for idx in idxes:
y = forward(train_x[idx]) # 順方向で x から y を計算する
diff = y - train_y[idx] # 訓練データとの誤差
error += diff ** 2 # 二乗和誤差に蓄積
backward(train_x[idx], diff) # 誤差を学習
print(error.sum()) # エポックごとに二乗和誤差を出力。徐々に減衰して0に近づく。
脚注[編集]
- ^ 2020年現在のところ、「小脳パーセプトロン説」が支持されるなど、「全く無関係」ではない、とされている。
- ^ Homma, Toshiteru; Les Atlas; Robert Marks II (1988). “An Artificial Neural Network for Spatio-Temporal Bipolar Patters: Application to Phoneme Classification”. Advances in Neural Information Processing Systems 1: 31–40 .
- ^ Yann Le Cun (June 1989). Generalization and Network Design Strategies .
- ^ Y. LeCun; B. Boser; J. S. Denker; D. Henderson; R. E. Howard; W. Hubbard; L. D. Jackel (1989). “Backpropagation applied to handwritten zip code recognition”. Neural Computation 1 (4): 541-551.
- ^ Reducing the Dimensionality of Data with Neural Networks
- ^ A fast learning algorithm for deep belief nets
- ^ Neuromorphic Processing : A New Frontier in Scaling Computer Architecture Qualcomm 2014年
- ^ Qualcomm’s cognitive compute processors are coming to Snapdragon 820 ExtremeTech 2015年3月2日
- ^ a b c 複素ニューラルネットワーク
- ^ 複素逆誤差伝播学習アルゴリズム(複素BP)を使用した場合
- ^ Akira Hirose, Shotaro Yoshida (2012). “Generalization Characteristics of Complex-valued Feedforward Neural Networks in Relation to Signal Coherence”. IEEE TNNLS 23 (4): 541-551.
- ^ The proposed U-Net based architecture allows to provide detailed per-pixel feedback to the generator while maintaining the global coherence of synthesized images
- ^ starting from a low resolution, we add new layers that model increasingly fine details as training progresses. This both speeds the training up and greatly stabilizes it PGGAN paper
- ^ "making normalization a part of the model architecture and performing the normalization for each training mini-batch." Sergey Ioffe, et. al.. (2015)
参考文献[編集]
- 斎藤康毅『ゼロから作るDeep Learning - Pythonで学ぶディープラーニングの理論と実装』オライリージャパン、2016年9月24日、第1刷。ISBN 978-4873117584。
関連項目[編集]
- 人工知能
- 強化学習
- 機械学習
- ニューロコンピュータ
- コネクショニズム
- 認知科学
- 脳科学
- 計算論的神経科学
- ウォーレン・マカロック
- ウォルター・ピッツ
- ヘッブの法則
- 認知アーキテクチャ
- 階層構造
- 創発
- Neuroevolution
- コネクトーム
- ディープラーニング
外部リンク[編集]
- ニューラルネットワーク - 菅沼研究室