「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
モデル †
- 脳機能に見られるいくつかの特性に類似した数理的モデル(確率モデルの一種)
- シナプスの結合によりネットワークを形成した人工ニューロン(ノード)が、
学習によってシナプスの結合強度を変化させ、問題解決能力を持つようなモデル全般。
- 実際に生物の神経系のシミュレーションであるか否かについては
議論があるため人工ニューラルネットワークなどと呼ばれることもある。
学習 †
- 機械学習の、
・学習フェーズでは、信号は逆方向に伝播する。
・推論フェーズでは、信号は順方向に伝播する。
- 線形の座標変換(アフィン変換)をしたモノに対して
目盛の振り直しを行い新しい非線形の座標系を作る。
「重み」によって「新しい非線形の座標系」が変わる。
- 「重み」のパラメタ(w1, w2, θ(-b))の決定は人手によって行われる。
という問題を、データから自動で「重み」のパラメタを学習することで解決する。
- この「重み」は、ネットワーク構造が複雑であっても、微分]]可能な形で記述できていれば(何が?)、
勾配法によって目的関数(損失関数)を最適化することで(収束するかどうかは別にして)求めることが出来る。
構造 †
第0層(入力層 †
そのままの値を出力(出力に重みを掛けられる。
第1層(中間層(隠れ層 †
- 入出力変換後、重みを掛けて多分岐。
- 以下のような関数を使用できる。
第2層(出力層 †
誤差の計算と重みの更新 †
出力と教師信号の誤差の計算をし、
2→1→0層と層の重みを更新していく(誤差逆伝播法)
数学的に †
関数 †
関数はニューラルネットワーク全体で1つの関数、個々の合成関数。
- (x) → (z) → (w) → (p)
- ◯ → ◯ の「→」の部分が関数と重み(重みは入力に掛ける値)
(x) ─ f1(x1, x2, x3, ...) → (z) ─ f2(z1, z2, z3, ...) → (w) ─ f3(w1, w2, w3, ...) → (p)
特徴 †
- 深くする(p=fn(...f3(f2(f1(x)))...)と
少ないパラメタで複雑(≒ 高次)な関数を作れる。
計算 †
入力層~中間層の †
上記を行列計算に出来る。
- オンライン
(t1,t2,t3,t4) = (x1,x2,x3,x4)┌w11,w12,w13,w14┐ + (b1,b2,b3,b4)
│w21,w22,w23,w24│
│w31,w32,w33,w34│
│w41,w42,w43,w44│
│w51,w52,w53,w54│
└w61,w62,w63,w64┘
(z1,z2,z3,z4) = Φ((t1,t2,t3,t4))
- バッチ(サイズ3
┌t11,t12,t13,t14┐ ┌x11,x12,x13,x14┐┌w11,w12,w13,w14┐ ┌b1,b2,b3,b4┐
│t21,t22,t23,t24│ = │x21,x22,x23,x24││w21,w22,w23,w24│ + │b1,b2,b3,b4│
└t31,t32,t33,t34┘ └x31,x32,x33,x34┘│w31,w32,w33,w34│ └b1,b2,b3,b4┘
│w41,w42,w43,w44│
│w51,w52,w53,w54│
└w61,w62,w63,w64┘
┌z11,z12,z13,z14┐ ┌t11,t12,t13,t14┐
│z21,z22,z23,z24│ = Φ(│t21,t22,t23,t24│)
└z31,z32,z33,z34┘ └t31,t32,t33,t34┘
出力層と誤差計算 †
- バッチ
┌p11,p12┐ ┌f11,f12┐
softmax(│p21,p22│) = │f21,f22│
└p31,p32┘ └f31,f32┘
- バッチ
┌f11,f12┐ ┌l11,l12┐
cross_entropy_error(│f21,f22│) = │l21,l22│
└f31,f32┘ └l31,l32┘
活性化関数 †
- 各層の出力する前に、出力結果をどの程度活性(発火)させるかを決める関数。
- 共通点
- 微分可能な非線形な関数
- 0 <= 出力信号 <= 1 に収める。
- 入力信号が重要な時に1(に近い)、重要でない時0(に近い)値を返す。
- ステップ関数:0, 1の信号
・単純パーセプトロンの活性化関数はステップ関数。
・ある閾値を超えたら「1」、それ以外は「0」を返す関数。
- ニューラルネットワークでは、非線形な関数を使用する必要がある。
- 線形関数を用いてはならないのは、多層化の意味が無くなるため。
- 例 : 線形な h(x) = cx を多層化しても h(h(h(x))) = cccx となり1層で表現可能。
ステップ関数 †
実装 †
なんとなく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()
tanh関数 †
- tanh(Hyperbolic tangent function)関数、双曲線正接関数
- あらゆる入力値を-1.0~1.0の範囲の数値に変換して出力する関数である。
で、勾配消失問題を引き起こし難い。
実装 †
...
グラフ †
...
ReLU関数 †
ReLU(Rectified Linear Unit)関数、正規化線形関数
- 入力が0以下なら0を出力する。
- 入力が0を超えていればそのまま出力する。
┌
│0 ( a <= 0 )
y = h(a) = <
│a ( a > 0 )
└
主流 †
- ...は勾配消失問題を緩和できる。
・微分結果が 0 or 1 なので、
・ただし、0(の時は)では学習が上手くいかない。
- Leaky ReLU関数
- x < 0においてわずかな傾きをもっている。
- このため微分値が0になることはなくなり、
ReLUよりも勾配消失問題を引き起こし難い。
- Parametric ReLU
LeakyReLU のく 0 部分の直線の傾きを「学習によって最適化」
- Randomized ReLU
LeakyReLU のく 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()
推論と学習 †
ニューラルネットワークの問題点 †
概要 †
- 従来手法よりも過学習を起こし易い。
- データサンプルは、パラメータの10倍あると良い。
- 少ないデータ量でもできるだけ性能を落とさずに済むような工夫が新たに必要。
解決 †
学習率の調整が難しい †
概要 †
学習率とは、
- 一回の学習でどれだけ学習るか?
=どれだけパラメタ更新するか?で、
- 学習率が従来の機械学習の手法よりも大きく影響する。
- 小さ過ぎると
- 収束後は安定するものの、
- 収束までに時間がかかり過ぎる。
- 大き過ぎると
- 素早く学習官僚するものの、
- 発散(≒ 極小値周辺を行ったり来たり)する。
- 著しく大きい場合、学習するほど誤差が増える。
解決 †
- 一般的に、10^-1(0.1)~10^-6(0.000001)の間で調整。
- もしくは、学習率が自動調整されるような工夫がある。
勾配消失問題が起こる †
誤差逆伝播法の計算において入力層に近い手前の層まで学習が行き渡らなくなる現象
理由 †
- 誤差逆伝播法では奥にある出力層から、手前にある入力層へ順番に伝わる。
- 勾配の値は層を遡るほど1未満の値のかけ算する回数が増え小さくなる。
- このため、
- 手前の層ほど学習の際に用いる勾配の値が小さくなり、
- 手前の層ほど十分なパラメタの更新ができなくなる。
解決 †
により(事前学習とファイン・チューニングを用いず、)全体の学習ができるようになった。
ニューラルネットワークの色々 †
ディープニューラルネットワーク(DNN) †
(Deep Neural Network: DNN)
- ニューラルネットワーク内の層が多層(ディープ)化されている仕組み
- DNNを用いた近似は、非線形関数である活性化関数を何層にも
組み合わせることで多種・多様な強い表現力を獲得することが可能
- 線形の座標変換(アフィン変換)をしたモノに対して目盛の振り直しを行い、新しい非線形の座標系を作る。
"重み"によって"新しい非線形の座標系"を変えることで、現象を高次元の関数で近似することが出来る。
順伝播型ニューラルネットワーク(FNN) †
(Feedforward Neural Network: FNN)
- DNNやCNNなどは、FNNになる。
- 多分、RNNの登場で出来た区分
再帰型ニューラルネットワーク(RNN) †
(Recurrent Neural Network: RNN)
特徴 †
- 中間層に再帰構造(再帰セル)を追加したニューラルネットワークの総称。
Wh、Wx、bの変数の訓練だけが必要(xが入力、hが出力)
- h0=tanh(h-1Wh+x0Wx+b)
- h1=tanh(h0Wh+x1Wx+b)
- ...
- hn=tanh(hn-1Wh+xnWx+b)
- 特の自然言語や音声データの時間的構造を学習する。
- 時間順序を持つ可変長の系列データ入力を扱える。
- 過去の系列を記憶した上で将来の予測ができる。
- 一時刻前の中間層の出力を自らの入力に戻す。
- 情報を一時的に記憶して振る舞いを動的に変化させる。
- 再帰構造
- 入力層 → 隠れ層
- 隠れ層 → 隠れ層(再帰)
- 隠れ層 → 出力層
- 多対多(Seq2Seq)
例:文を入力すると翻訳文が返る。
- 長期に渡る特徴の学習は苦手。
- 勾配消失・爆発の問題(の回避方法、BPTT法が定着
- 重み衝突(入力重み衝突、出力重み衝突)
- 入力重み衝突:入力が重要なら重みを大きくするが、時系列を考慮できない。
- 出力重み衝突:出力(再起の入力)が重要なら重みを大きくするが、時系列を考慮できない。
RNNでできること †
系列データ(順序関係に重要な意味のあるデータ) の解析
時系列データの変動 †
- 長期変動(トレンド)
- 通り長期に渡る全体的な上がり下がりの変動
- 毎日(週/月/年)の、より長い期間で同じ傾向が見れられる。
- 周期変動(季節性)
- 一定期間ごとに繰り返される周期的な上下変動
- 年単位や月単位、週単位の周期等が考えられる。
- 不規則変動(残差)
- 長期変動、周期変動を除去したあとに残った傾向
- ランダムに発生するであろうノイズ
説明系列と目的系列、目的系列の教師データ化 †
- 目的系列は1つの系列から成る。
- 説明系列は複数の系列から成るケースがある。
- 目的系列を教師データに変換するには
元データからxタイムステップずらす。
- 1ステップ先を予想する場合、x=1
- 3ステップ先を予想する場合、x=3
- 説明系列と目的系列は1つの同じ系列であるケースがあり、この場合、
目的系列は説明系列をxタイムステップずらして教師データを作成する。
時系列の訓練・テストのデータ分割 †
- 時系列を維持して訓練・テストのデータ分割
- ランダムとかシャッフルで取り出さない
誤差計算の方法 †
BPTT法(Backpropagation Through Time: 通時的誤差逆伝播法)と呼ばれる。
- 時間方向に遡って通常のDNNと同様に誤差逆伝播法による学習ができる。
- サンプル毎ではなくタイムステップ毎に誤差を算出
- 二乗誤差関数(回帰)、クロスエントロピー誤差(分類)
- ただし、系列が長くなるほど、多くの勾配を掛けていくので、
- 勾配消失問題が起こりやすくなる。
- 遠く離れた依存性を学習しなくなりRNNの利点を生かせなくなる。
RNNの発展形 †
- Bidirectional RNN(バイディレクショナル リカレントネットワーク)
- 前方向のRNN層に加え、逆方向のRNN層も追加。
- 過去だけでなく未来の情報も利用し効果的に予測。
- RNN Encoder Decoder
- Seq2Seqモデルとも呼ばれ、機械翻訳や質問応答タスクで使用されることが多い。
- RNN Encoderによってエンコードされた情報をRNN Decoderの始めの内部状態として入力。
- Attention機構
「時間の重み」の概念をネットワークに組み込んだもの。
- 近年、Attention機構を追加することにより精度が向上したモデルも多い。
- Attentionの重みによってどの時間の入力を重視しているか確認することが可能。
- 機構
- メモリアクセスのようなもので、
・メモリセルをKey・Valueの対で構成する。
・Queryに近いKeyでメモリセルからValueを返す。
- y = f(x, h(, r)) の精度向上に関する情報 r を、
x, h に応じて、メモリから拾い上げる機能を実現する。
- 自己アテンション
・Key・Value生成とQueryの生成が同じデータから行われる。
・系列の文脈に応じて重要な情報を拾いながらベクトル列の特徴抽出を行う。
- ソースターゲット・アテンション
・Key・Value生成とQueryの生成が異なるデータから行われる。
・...
長短期記憶ニューラルネットワーク(LSTM) †
(Long short-term memory: LSTM)
特徴 †
- 長期的特徴と短期的特徴を学習することができる。欠点は計算量が多いこと。
- 長期依存が学習できない原因は勾配消失問題があり、
(遠くの層ほど勾配の大きさが小さくなってしまい、学習が進み難い)
過去10ステップ程しか記憶できなかったRNNに
過去1000ステップ以上の記憶を保持できる機能が追加されている。
- 勾配消失・爆発の問題
長期記憶を実現するCEC(記憶セル)
- 重み衝突(入力重み衝突、出力重み衝突)
3つのゲートを追加(Attention機構に近い)。
- 入力重み衝突:入力ゲート
- 出力重み衝突:出力ゲート
- 上記以外に、忘却ゲート
- 追加のニューロン
- ゲートをコントロールするニューロン
- セルへの入力を求めるニューロン
- 追加のニューロンへもCEC(記憶セル)の値を入力
LSTMでできること †
≒ RNNでできること
拡張形式、GRU †
- GRU(gated recurrent unit)
- ゲート付き回帰型ユニット
- LSTMの簡略版(ゲートの数が更新ゲートとリセットゲートの2つ)
- 更新ゲート:過去の情報をどれだけ取り込むかを決定する。
- リセットゲート:過去の情報をどれだけ捨てるかを決定する。
自己符号化器(AE:オートエンコーダ) †
特徴 †
- 教師あり、なし
- 入力データと一致するデータを出力することを目的とする教師なし学習
- データとしては教師なしだが(、学習としては)、入力データを用いた教師あり学習。
- 隠れ層の次元を小さくして情報量を小さくした特徴表現を獲得する。
(入力の情報を圧縮される。→ 学習の結果、重みとして要約される。)
- 入力したデータをエンコーダーで潜在変数に圧縮(次元削減・特徴抽出)し、
- 潜在変数からデコーダで復元(再び戻して出力)する。
- エンコーダーもデコーダもニューラルネットワーク
- 入出力が一致するように各エッジの重みを調整
出力と入力に対して誤差を算出し、その差が
小さくなるように誤差逆伝播法を用い重みを学習する。
- 種類
様々な種類があるもよう。
- 変分AE(VAE : Variational auto-encoder)
- スタック型AE
- スパースAE
- ディープAE
- デノイジングAE
- , etc.
AEでできること †
様々な用途で利用されている。
AEの歴史 †
元々、(入出力兼務の)可視層と隠れ層の2層のネットワークだが、
- 展開すれば、3層のニューラルネットワークと ≒ のものだった。
- AEのポイントは、可視層より隠れ層の次元(数)を少なくしてある(情報の圧縮)。
- このAEを積み重ね、ディープAE、正確には、積層AEを作成(ジェフリー・ヒントン)。
層の積み重ねは、事前学習とファイン・チューニングによって達成される。
- はじめに事前学習を行い層を積み重ねていく。
- 最上部に層を足し、教師あり学習にする(?)
- 最後の仕上げにファイン・チューニング(全体で再学習)する。
※ AEは、勾配消失問題を事前学習とファイン・チューニングに
よって解決しニューラルネットワーク発展の礎となった。
制限ボルツマン・マシン(RBM) †
特徴 †
- Restricted Boltzmann Machine
- ボルツマン・マシンは変数の組合せが
どのような頻度で出現するかを確率分布で表現する。
- 深層信念ネットワーク(2006, ジェフリー・ヒントン)
- AEに「制限付きボルツマンマシン」と言う手法を用いる。
- 積層AEと同様に事前学習を用いた手法
RBMでできること †
畳み込みニューラルネットワーク(CNN) †
(Convolutional Neural Network: CNN)
特徴 †
- 一般的な順伝播型ニューラルネットワークとは異なる。
- 1989年に単純な数字画像の認識のために開発されたLeNet?が原型
- データの空間的構造を学習する画像分類において、圧倒的な性能を発揮した。
- 視覚神経系を模した畳み込み処理で画像から特徴抽出することで性能が出た。
- 大規模コーパスで、学習されたモデルの重みは公開されていて、
転移学習で新たなタスク向けに再学習し、新たなタスクのモデルを作成する。
CNNでできること †
- 物体検出
- R-CNN
- Fast R-CNN
- Faster R-CNN
- FCOS
- YOLO
- SSD
- 領域検出
- FCN (Fully Convolutional Network)
パート †
CNNは大きく分けて2つのパートに分けることができる。
- 識別パート
脳の神経系を模した全結合層と出力層(≒ DNN)
- 全結合層を繰り返すことで最終的な出力を得る
- 得られた特徴量を活性化関数、ソフトマックス関数を用いてアウトプット
畳み込み層 †
- 視神経系(視覚を司る神経系)を模して画像から特徴抽出する。
- 全結合層に入力する特徴を取り出すために自動化された前処理。
- 畳み込み処理
- 画像のフィルタ処理+活性化関数
- 特徴マップを生成(様々な特徴を取り出す)
- 細かい(局所的な)特徴の組み合わせから、
大まかな(大局的、複雑な)特徴を捉えられる。
- 手前の階層 → 波長の光に反応
- 奥の階層に進むにつれ → 線の向き、折れ線の角、直線の交差に反応
- 最奥の階層 → 特定の模様(≒ 特定のカテゴリ)に反応
- 位置ずれや形の歪みに対する頑健性
特徴同士の位置関係で見る(絶対座標ではなく、相対座標で見る)。
- ただし、理論的な裏付けは無い。
生体の神経系を見よう見まねで模倣してみたら上手くいっただけで、
CNNが高性能を実現している理由は厳密には分かっていない。
- 特徴マップは、画像の局所的な特徴をによって抽出したもの。
- 画像から切り取った「画像の一部領域」と特定のパターンを検出する「カーネルの行列」の内積を計算。
- この場合、「画像の一部領域」と「カーネルの行列」のサイズは同じにする。
- 位置を探し少しずつずらしながら(ストライド)内積を計算してスカラにする。
- ベクトルの内積と同じ様にパターンが似ている場合、スカラの値は大きくなる。
- 一部領域の中心部分と同じ位置に計算したスカラを置き、元画像と同じサイズの特徴マップを作る。
- 1つのカーネル(フィルタ、ウィンドウ)につき1つの特徴マップが生成される。
- パディングとストライド
- パディング:入力データの周りを一定の値で埋める操作
- ストライド:畳み込み操作において、ウィンドウを移動させるピクセル数
- 4×4のサイズの画像に対して、3×3のカーネルをパディング0、ストライド1で適当した場合の特徴マップのサイズ
4 - 3 + 1 = 2 なので 2×2
- 5×5のサイズの画像に対して、3×3のカーネルをパディング1、ストライド1で適当した場合の特徴マップのサイズ
5 + ( 1 * 2 ) - 3 + 1 = 5 なので 5×5
#ref(): File not found: "ConvolutionalLayer.png" at page "ニューラルネットワーク"
プーリング層 †
- 特徴マップから位置のズレに対して頑強な特徴抽出を行う。
- カーネルで抜いた特徴が特徴マップ中のどの部分に位置するか?
最大値(MaxPooling?)・平均値(AvgPooling?)・Lp(Lp pooling)を抜く。
- 出力が縮小され処理の計算量が減る。
- 位置ずれや形の歪みに「頑健になる」(≒同じ値を返す)。
#ref(): File not found: "PoolingLayer.png" at page "ニューラルネットワーク"
分類器のパラメタ †
- この時点でカーネルは特定パターンの分類器(畳み込み&プーリング)のパラメタとして機能する。
- カーネルは重みパラメタとして機能し誤差逆伝播法によって、この分類器は学習できる。
著名なモデル †
- AlexNet?
ILSVRC2012で優勝し、Deep Learningブームの火付け役となった
- GoogLeNet?
インセプション・モジュールという構造を採用し深いネットワークの学習を可能にした
- Google, 2014
- 分類、検出部門で優勝
- 畳み込み層とプーリング層で構成されたインセプション・モジュールを更に重ね大きなCNNを構成
- VGGNet
現在では性能がよかった VGG16 または VGG19 が使われている。
- オックスフォード, 2014
- 分類部門で2位
- VGG16 は 畳み込み13層と全結合3層の計16層から成るCNN。
- ResNet?
残差学習という手法を取り入れ152層の深いネットワークの学習を可能にした
- Microsoft Research, 2015
- 初めて人間のエラー率 5% を上回る精度を達成。
- 残差ブロックの導入による残差学習により、より深いCNNの学習方法を提案
- ある層で求める最適な出力を学習するのではなく層の入力を参照した残差関数を学習。
- 入力層から出力層まで伝播する値と入力層の値を足し合わせたモデルで入力層まで、
勾配値がきちんと伝わり、今では1000層といったかなり深い構造でも学習が可能となった。
- EfficientNet?
- Google, 2019
- スケールアップ規則の採用で、当時、パラメタ数を大幅に減少
- スケール(幅:層中のニューロン数、深さ:層の深さ、解像度:入力画像の大きさ)
- 幅:α^φ、深さ:β^φ、解像度:γ^φ
- αβγをグリッドサーチで求める(φはパラメタ)
- α*β^2*γ^2 ≒ 2に制限(FLOPSは2φで増加
3D DNN †
アプローチ †
- 2Dベースのアプローチを結集する2D based approach
- 点群NNを適応するPoint cloud based approach
- PointNet?
- PointNet?++
- VoteNet?
- 画像から得た結果と点群NNをフュージョンするアプローチ
- 点群NNで点群を前処理(エンコード)した後に
2Dベースのアプローチを適応するPointCloud?+2Dアプローチ
- 順不同なデータ構造
- 非自明な隣接関係(畳み込み
- 回転・並進の取り扱いが難しい
3D DNNでできること †
深層生成ネットワーク(DGN) †
特徴 †
- 生成タスクとは
- 訓練データの分布を推論し、同じ分布のデータを生成する。
- 潜在的空間を学習することによって、様々な表現を取ることができる。
- 画像生成では変分オートエンコーダ(VAE)を使う。
AEを活用、学習データが何らかの分布に基づいて生成されていると仮定
- エンコーダ:入力を潜在空間上の特徴量で表す
- デコーダ:潜在空間から元の次元に戻す
- 潜在空間:何かしらの分布を仮定した潜在空間を学習
DGNでできること †
敵対的生成ネットワーク(GAN) †
(Generative Adversarial Network: GAN)
特徴 †
本物の画像と見分けのつかない画像を出力する。
- 教師なし学習で使用される人工知能アルゴリズムの一種
- ゼロサムゲームフレームワークで互いに競合する
2つのニューラルネットワークのシステムによって実装される。
- Generator:生成側は識別側を欺こうと学習
・Generatorは入力にノイズを受け取る。
・本物の画像データは受け取らない。
・学習が進むにつれどんどん精度の高い画像を生成できるようになる。
・最終的に学習が十分に完了すると、Generatorのみで画像を生成できる。
- Discriminator:識別側はより正確に識別しようと学習
・Discriminatorは本物の画像データとGeneratorの生成した画像データを受け取る。
・入力が本物の画像データである確率を出力する。
・学習が終わると不要になる。
- 2つのネットワークの競合関係は、損失関数を共有させることで表現される。
- Generatorはロス関数の値を小さくすることを目的に学習させる。
- Discriminatorはロス関数の値を大きくすることを目的に学習させる。
GANでできること †
- データの特徴を抽出して学習し、実在しないデータを生成できる(生成モデル)。
深層Qネットワーク(DQN) †
(Deep Q-Network: DQN)
特徴 †
- 深層強化学習のアルゴリズム
- 強化学習の構造中に深層学習ニューラルネットワークを埋め込む。
- 連続値の行動とそれに伴う高い報酬(Q)が得られるように学習する。
DQNでできること †
深層強化学習の事例を参照。
参考 †
Wikipedia †
YouTube? †
, etc. †
Blog †
Neural networks and deep learning †
mizu-mi blog †