ニューラルネットワーク
概要
編集ニューラルネットワークは機械学習のモデルとして利用され、分類・回帰・生成など様々なクラスのタスクに教師あり/教師なし問わず利用される。利用分野にはパターン認識やデータマイニング︵例: 画像認識、レコメンデーション︶が挙げられる。学習法は誤差逆伝播法が主流である。 三層以上のニューラルネットワークは可微分で連続な任意関数を近似できることが証明されている︵線形分離不可能な問題を解ける︶。 形式ニューロンなど研究の源流としては生物の神経系の探求であるが、その当初から、それが実際に生物の神経系のシミュレーションであるか否かについては議論がある[注釈3]。生物学と相互の進展により、相違点なども研究されている。
歴史
編集年表
編集代表的な人工ニューラルネットワーク
編集順伝播型ニューラルネットワーク
編集- 単純パーセプトロン: 1-layer 層間全結合ネットワーク
- 多層パーセプトロン: N-layer 層間全結合ネットワーク
- 畳み込みニューラルネットワーク: N-layer 層間局所結合ネットワーク(c.f. recurrent CNN; RCNN)
並列計算
編集FFNがもつ特徴に並列計算がある。回帰結合をもつネットワークはシーケンシャルに処理を繰り返す必要があるため、1データに対して時間方向に並列計算できない[13]。FFNは層内で並列計算が可能であり、RNNと比較して容易に並列計算機(例: GPU)の計算能力を上限まで引き出せる[注釈 4]。
RBFネットワーク
編集誤差逆伝播法に用いられる活性化関数に放射基底関数を用いたニューラルネットワーク
- RBFネットワーク
- 一般回帰ニューラルネットワーク(GRNN、General Regression Neural Network)- 正規化したRBFネットワーク
自己組織化写像
編集自己組織化写像はコホネンが1982年に提案した教師なし学習モデルであり、多次元データのクラスタリング、可視化などに用いられる。自己組織化マップ、コホネンマップとも呼ばれる。
畳み込みニューラルネットワーク
編集畳み込みニューラルネットワークとは層間が全結合ではない順伝播型ニューラルネットワークの一種。
画像を対象とするために用いられることが多い。
再帰型ニューラルネットワーク(リカレントニューラルネット、フィードバックニューラルネット)
編集フィードフォワードニューラルネットと違い、双方向に信号が伝播するモデル。すべてのノードが他の全てのノードと結合を持っている場合、全結合リカレントニューラルネットと呼ぶ。シーケンシャルなデータに対して有効で、自然言語処理や音声、動画の解析などに利用される[14]。
Transformer
編集確率的ニューラルネット
編集乱数による確率的な動作を導入した人工ニューラルネットワークモデル。モンテカルロ法のような統計的標本抽出手法と考えることができる。
スパイキングニューラルネットワーク
編集ニューラルネットワークをより生物学的な脳の働きに近づけるため、活動電位(スパイク)を重視して作られた人工ニューラルネットワークモデル。スパイクが発生するタイミングを情報と考える。ディープラーニングよりも扱える問題の範囲が広い次世代技術と言われている。ニューラルネットワークの処理は逐次処理のノイマン型コンピュータでは処理効率が低く、活動電位まで模倣する場合には処理効率がさらに低下するため、実用する際には専用プロセッサとして実装される場合が多い。
2015年現在、スパイキングNN処理ユニットを積んだコンシューマー向けのチップとしては、QualcommのSnapdragon 820が登場する予定となっている[16][17]。
複素ニューラルネットワーク
編集入出力信号やパラメータ(重み、閾値)が複素数値であるようなニューラルネットワークで活性化関数は必然的に複素関数になる[18]。
利点
編集生成モデル/統計モデル
編集生成モデル(統計モデルとも)は、データが母集団の確率分布に従って生成されると仮定しそのパラメータを学習するニューラルネットワークの総称である。統計的機械学習の一種といえる。モデル(=母集団)からのサンプリングによりデータ生成が可能な点が特徴である(詳しくは推計統計学 § 統計モデル、機械学習 § 統計的機械学習)。
自己回帰型生成ネット
編集変分オートエンコーダ
編集変分オートエンコーダ (VAE) とは、ネットワークA(エンコーダ)が確率分布のパラメータを出力し、ネットワークB(デコーダ)が確率分布から得られた表現をデータへと変換するモデルである。画像・音楽生成におけるVQ-VAE-2がその例である。
敵対的生成ネットワーク
編集敵対的生成ネットワーク (Generative Adversarial Network, GAN) とは、ガウシアン等の確率分布から得られたノイズをネットワークA (Generator) がデータへ変換し、ネットワークBが母集団からサンプリングされたデータとネットワークAの出力を見分けるように学習するモデルである。DCGANやStyleGAN、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)) | 局所/全体特徴の両立[20] | 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)) | 学習の高速化・安定化[21] | 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) | スタイル変換 | StyleGAN | |
SPADE | スタイル変換 |
バッチ正規化
編集活性化関数
編集学習
編集実装
編集実装例
編集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に近づく。
推論
編集ニューラルネットワークの学習(ディープラーニング)と対比して、ニューラルネットワークによる演算は推論(英: inference)と呼ばれる。
ハードウェアアクセラレーション
編集ニューラルネットワークの推論を高速化する様々なハードウェアアクセラレーションAPIが提案・実装されている[25]。GPUにおけるCUDA、WindowsにおけるDirectML[26]、NVIDIAにおけるTensorRT[27]などが挙げられる。
量子化
編集- 静的量子化(英: Static Quantization): 代表的データを用いた量子化パラメータの事前算出[34]
- 動的量子化(英: Dynamic Quantization): 各実行ステップのactivation値に基づくactivation用量子化パラメータの動的な算出[35](weightは実行前に量子化[36])
- fake quantization (Quantize and DeQuantize; QDQ): 量子化+脱量子化( )。学習時の量子化模倣[37]あるいは量子化オペレータの表現[38]
スパース化
編集脚注
編集注釈
編集出典
編集- ^ a b c d e f g h i j Charu C.Aggarwal著『ニューラルネットワークとディープラーニング』(データサイエンス大系シリーズ)、学術図書出版社、2022年。ISBN 978-4780607147, 第一章「ニューラルネットワークとは」「はじめに」、pp.1-2
- ^ 『2020年版 基本情報技術者 標準教科書』オーム社、p.55
- ^ a b 平塚秀雄『よくわかる脳神経外科学』金原出版、1996, pp.14-15「神経細胞とニューロン」
- ^ a b c 平野廣美『C++とJavaでつくるニューラルネットワーク』パーソナルメディア株式会社、2008、p.27「学習することは重みが変わること」
- ^ a b c d e 平野廣美『C++とJavaでつくるニューラルネットワーク』パーソナルメディア株式会社、2008、pp.9-10「はじめに」
- ^ John C. Eccles, Masao Ito, János Szentágothai(1967), The Cerebellum as a Neuronal Machine, (Springer, New York) [1]
- ^ 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
- ^ "A nonrecurrent network has no cycles. Nonrecurrent networks can be thought of as computing an input-output function." Jordan, M.I. (1986). Serial order: A parallel distributed processing approach. (Tech. Rep. No. 8604). San Diego: University of California, Institute for Cognitive Science.
- ^ a b c Vaswani et al. 2017, p. 6001.
- ^ Yu, Yong; Si, Xiaosheng; Hu, Changhua; Zhang, Jianxun (2019-07-01). “A Review of Recurrent Neural Networks: LSTM Cells and Network Architectures”. Neural Computation 31 (7): 1235–1270. doi:10.1162/neco_a_01199. ISSN 0899-7667 .
- ^ Vaswani, Ashish; Shazeer, Noam; Parmar, Niki; Uszkoreit, Jakob; Jones, Llion; Gomez, Aidan N.; Kaiser, Lukasz; Polosukhin, Illia (2017-12-05). “Attention Is All You Need”. arXiv:1706.03762 [cs] .
- ^ 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 複素ニューラルネットワーク
- ^ 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)
- ^ "ニューラルネットワークの演算の基本は、多入力の積和演算である。" 百瀬 (2016). 第2章:ディープ・ニューラルネットワークのニューロチップへの実装~その勘所は!!. semiconportal.
- ^ "深層学習の…フレームワーク中では, 計算時間の多くが畳み込み計算などの密行列積に費やされており … 計算時間の約90%が畳み込み層での計算時間であることが知られている" p.1 of 関谷, et al. (2017). 低ランク近似を用いた深層学習の行列積の高速化. 情報処理学会研究報告. Vol2017-HPC-158, No.24.
- ^ Optimize and Accelerate Machine Learning Inferencing and Training. ONNX Runtime.
- ^ "Direct Machine Learning (DirectML) is a low-level API for machine learning." Direct Machine Learning (DirectML). Microsoft.
- ^ "TensorRT can optimize and deploy applications to the data center, as well as embedded and automotive environments. It powers key NVIDIA solutions" NVIDIA TensorRT. NVIDIA.
- ^ "Quantization works by reducing the precision of the numbers used to represent a model's parameters, which by default are 32-bit floating point numbers." Model optimization. TensorFlow.
- ^ "Quantizing a network means converting it to use a reduced precision integer representation for the weights and/or activations." DYNAMIC QUANTIZATION. PyTorch.
- ^ "Quantization performance gain comes in 2 part: instruction and cache." Quantize ONNX Models. ONNX Runtime.
- ^ "Less memory usage: Smaller models use less RAM when they are run, which frees up memory for other parts of your application to use, and can translate to better performance and stability." Model optimization. TensorFlow.
- ^ "Old hardware doesn’t have or has few instruction support for byte computation. And quantization has overhead (quantize and dequantize), so it is not rare to get worse performance on old devices." Quantize ONNX Models. ONNX Runtime.
- ^ "Performance improvement depends on your model and hardware." Quantize ONNX Models. ONNX Runtime.
- ^ "Static quantization quantizes the weights and activations of the model. ... It requires calibration with a representative dataset to determine optimal quantization parameters for activations." QUANTIZATION. PyTorch.
- ^ "with dynamic quantization ... determine the scale factor for activations dynamically based on the data range observed at runtime." DYNAMIC QUANTIZATION. PyTorch.
- ^ "The model parameters ... are converted ahead of time and stored in INT8 form." DYNAMIC QUANTIZATION. PyTorch.
- ^ "Simulate the quantize and dequantize operations in training time." FAKEQUANTIZE. PyTorch. 2022-03-15閲覧.
- ^ "There are 2 ways to represent quantized ONNX models: ... Tensor Oriented, aka Quantize and DeQuantize (QDQ)." Quantize ONNX Models. ONNX RUNTIME. 2022-03-15閲覧.
参考文献
編集- 斎藤康毅『ゼロから作るDeep Learning - Pythonで学ぶディープラーニングの理論と実装』(第1刷)オライリージャパン、2016年9月24日。ISBN 978-4873117584。
- Vaswani, Ashish; Shazeer, Noam; Parmar, Niki; Uszkoreit, Jakob; Jones, Llion; Gomez, Aidan N.; Kaiser, Łukasz; Polosukhin, Illia (2017-12-04). “Attention is all you need”. Proceedings of the 31st International Conference on Neural Information Processing Systems (Red Hook, NY, USA: Curran Associates Inc.): 6000–6010. doi:10.5555/3295222.3295349. ISBN 978-1-5108-6096-4 .
関連項目
編集外部リンク
編集- 『ニューラルネットワークモデル』 - コトバンク
- 『ニューラルネットワーク』 - コトバンク