「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
モデル †
- 脳機能に見られるいくつかの特性に類似した数理的モデル
- シナプスの結合によりネットワークを形成した人工ニューロン(ノード)が、
学習によってシナプスの結合強度を変化させ、問題解決能力を持つようなモデル全般。
- 実際に生物の神経系のシミュレーションであるか否かについては
議論があるため人工ニューラルネットワークなどと呼ばれることもある。
学習 †
- 機械学習の、
・学習フェーズでは、信号は逆方向に伝播する。
・推論フェーズでは、信号は順方向に伝播する。
- 線形の座標変換(アフィン変換)をしたモノに対して
目盛の振り直しを行い新しい非線形の座標系を作る。
「重み」によって「新しい非線形の座標系」が変わる。
- 「重み」のパラメタ(w1, w2, θ(-b))の決定は人手によって行われる。
という問題を、データから自動で「重み」のパラメタを学習することで解決する。
- この「重み」は、ネットワーク構造が複雑であっても、微分可能な形で記述できていれば(何が?)、
勾配法によって目的関数(損失関数)を最適化することで(収束するかどうかは別にして)求めることが出来る。
構造 †
第0層(入力層 †
そのままの値を出力(出力に重みを掛けられる。
第1層(中間層(隠れ層 †
入出力変換後、重みを掛けて多分岐。
第2層(出力層 †
0、1の間の値に変換(全部の和が1となるように正規化する場合もある
誤差の計算と重みの更新 †
出力と教師信号の誤差の計算をし、
2→1→0層と層の重みを更新していく(誤差逆伝播法?)
ResNet? †
- ニューラルネットワークのモデルを深くすることを可能にした。
- ある層で求める最適な出力を学習するのではなく、層の入力を参照した残差関数を学習する。
活性化関数 †
ステップ関数とシグモイド関数とReLU関数がある。
- ステップ関数とシグモイド関数
- 相違点
- ステップ関数:0, 1の信号
- シグモイド関数:連続的な実数の信号
- 共通点
- 非線形な関数
- 0 <= 出力信号 <= 1 に収める。
- 入力信号が重要な時に1に近い、重要でない時0に近い値を返す。
- ニューラルネットワークでは、非線形な関数を使用する必要がある。
- 線形関数を用いてはならないのは、多層化の意味が無くなるため。
- 例 : 線形な h(x) = cx を多層化しても h(h(h(x))) = cccx となり1層で表現可能。
- しかし、最近は、ReLU関数の利用が主流になっている。
ステップ関数 †
実装 †
なんとなくAPI仕様を知らないと難しい感じ。
グラフ †
-5.0 ~ 5.0までの0.1刻みのプロットをステップ関数にかけてグラフ化する。
"""This is a test program."""
import numpy as np
import matplotlib.pylab as plt
def step_function(x_1):
"""This is a test program."""
# 上記のいずれかの実装を選択。
X = np.arange(-5.0, 5.0, 0.1)
Y = step_function(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1) # 図で描画するy軸の範囲を指定
plt.show()
シグモイド関数 †
1
h(x) = ────────
1 + exp(-x)
- exp(-x)とは、eの-x乗を意味する。
- eはネイピア数(2.7182)の実数を表す。
実装 †
ポイントは、Pythonのブロードキャストによって配列も計算できる点。
"""This is a test program."""
import numpy as np
def sigmoid(x_1):
"""This is a test program."""
return 1 / (1 + np.exp(-x_1))
グラフ †
-5.0 ~ 5.0までの0.1刻みのプロットをシグモイド関数にかけてグラフ化する。
"""This is a test program."""
import numpy as np
import matplotlib.pylab as plt
def sigmoid(x_1):
"""This is a test program."""
return 1 / (1 + np.exp(-x_1))
X = np.arange(-5.0, 5.0, 0.1)
Y = sigmoid(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)
plt.show()
ReLU関数 †
ReLU(Rectified Linear Unit)関数
- 入力が0以下なら0を出力する。
- 入力が0を超えていればそのまま出力する。
┌
│0 ( a <= 0 )
y = h(a) = <
│a ( a > 0 )
└
実装 †
"""This is a test program."""
import numpy as np
def relu(x_1):
"""This is a test program."""
return np.maximum(0, x)
グラフ †
-5.0 ~ 5.0までの0.1刻みのプロットをReLU関数にかけてグラフ化する。
"""This is a test program."""
import numpy as np
import matplotlib.pylab as plt
def relu(x_1):
"""This is a test program."""
return np.maximum(0, x_1)
X = np.arange(-5.0, 5.0, 0.1)
Y = relu(X)
plt.plot(X, Y)
plt.ylim(-0.1, 5.1)
plt.show()
推論と学習 †
深層学習の高速化? †
ニューラルネットワークの色々 †
ディープニューラルネットワーク(DNN) †
(Deep Neural Network: DNN)
- ニューラルネットワーク内の層が多層(ディープ)化されている仕組み
再帰型ニューラルネットワーク(RNN) †
(Recurrent Neural Network: RNN)
- 時間順序などを持つ系列データの入力を扱える。
- 一時刻前の中間層の出力を自らの入力に戻す。
- 情報を一時的に記憶して振る舞いを動的に変化させる。
長短期記憶ニューラルネットワーク(LSTM) †
(Long short-term memory: LSTM)
- 再帰構造を横展開して長期記憶を実現するキャリーを付ける。
- GRU(gated recurrent unit)
- ゲート付き回帰型ユニット
- LSTMの簡略版(ゲートの数が2つ)
畳み込みニューラルネットワーク(CNN) †
(Convolutional Neural Network: CNN)
- 一般的な順伝播型ニューラルネットワークとは異なる。
- 画像分類において、圧倒的な性能を発揮した。
畳み込み層、プーリング層、全結合層 †
CNNは、畳み込み層とプーリング層の重ね合わせ。
- 畳み込み層
画像から特徴を抽出する操作
- 画像のフィルタ処理+活性化関数
- 特徴マップを生成(様々な特徴を取り出す)
- プーリング層
位置のズレに対して頑強な特徴抽出
- 特徴マップの縮小処理
- (小さな領域の統計量(min, max)を取る)
- 画像の詳細情報を消す。
- 全結合層、出力層
畳み込み層、プーリング層で計算を何回も繰り返し、
得られた特徴量を活性化関数、ソフトマックス関数を用いてアウトプット
- AlexNet?
- R-CNN
- Fast R-CNN
- Faster R-CNN
- FCOS
- YOLO
3D DNN †
- アプローチ
- 2Dベースのアプローチを結集する2D based approach
- 点群NNを適応するPoint cloud based approach
- PointNet?
- PointNet?++
- VoteNet?
- 画像から得た結果と点群NNをフュージョンするアプローチ
- 点群NNで点群を前処理(エンコード)した後に
2Dベースのアプローチを適応するPointCloud?+2Dアプローチ
- 点群データ
- 順不同なデータ構造
- 非自明な隣接関係(畳み込み
- 回転・並進の取り扱いが難しい
...
...
把持位置検出 †
PointNetGPD
敵対的生成ネットワーク(GAN) †
(Generative Adversarial Network: GAN)
- 教師なし学習で使用される人工知能アルゴリズムの一種
- データの特徴を抽出して学習し、
実在しないデータを生成できる(生成モデル)。
- ゼロサムゲームフレームワークで互いに競合する
2つのニューラルネットワークのシステムによって実装される。
- 2つのネットワークを競わせながら学習させるアーキテクチャ
- 識別NNの識別エラーが50%になるように、生成NNが学習する。
- 2つのネットワークの競合関係は、損失関数を共有させることで表現される。
- Generatorはロス関数の値を小さくすることを目的に学習させる。
- Discriminatorはロス関数の値を大きくすることを目的に学習させる。
- 変分オートエンコーダやボルツマンマシンなど
以前からある生成モデルと比べてより鮮明な画像の生成が可能。
などにも利用されるらしい。
深層Qネットワーク(DQN) †
(Deep Q-Network: DQN)
- 深層強化学習のアルゴリズム
- 強化学習の構造中に深層学習ニューラルネットワークを埋め込む。
- 連続値の行動とそれに伴う高い報酬(Q)が得られるように学習する。
自己符号化器(オートエンコーダ) †
- 入力データと一致するデータを出力することを目的とする教師なし学習
- 入力したデータをエンコーダーで潜在変数に圧縮(次元削減・特徴抽出)し、
- 潜在変数からデコーダで復元(再び戻して出力)する。
- エンコーダーもデコーダもニューラルネットワーク
- 入出力が一致するように各エッジの重みを調整
出力と入力に対して誤差を算出し、その差が
小さくなるように誤差逆伝播法を用い重みを学習する。
- 種類
様々な種類があるもよう。
- 変分オートエンコーダ
- スタック型オートエンコーダ
- スパース・オートエンコーダ
- ディープ・オートエンコーダ
- デノイジング・オートエンコーダ
- , etc.
参考 †
Wikipedia †
Neural networks and deep learning †