ニューラルネットワーク
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-[[戻る>深層学習(deep learning)]]
--[[パーセプトロン]]
--ニューラルネットワーク
---[[ニューラルネットワーク(推論)]]
---[[ニューラルネットワーク(学習)]]
*目次 [#x49ef019]
#contents
*概要 [#rfb3c4eb]
**モデル [#s6da2326]
-脳機能に見られるいくつかの特性に類似した数理的モデル(確...
-シナプスの結合によりネットワークを形成した人工ニューロン...
学習によってシナプスの結合強度を変化させ、問題解決能力を...
-実際に生物の神経系のシミュレーションであるか否かについて...
議論があるため人工ニューラルネットワークなどと呼ばれるこ...
**学習 [#ta24af9c]
***ニューラルネットワークは、 [#j8a912c6]
-ネットワークにループする結合を持たず、
--単一方向へのみ信号が伝播する。
第0層 第1層 第2層~
入力層 → 中間層(隠れ層) → 出力層
--機械学習の、
---学習フェーズでは、信号は逆方向に伝播する。
---推論フェーズでは、信号は順方向に伝播する。
-≒ 多層[[パーセプトロン]]
--[[パーセプトロン]]では、[[活性化関数>#m155734b]]にStep...
ニューラルネットワークでは、これ以外の[[活性化関数>#m1557...
--線形の座標変換(アフィン変換)をしたモノに対して~
目盛の振り直しを行い新しい非線形の座標系を作る。~
「重み」によって「新しい非線形の座標系」が変わる。
--参考
---ニューラルネットワークと深層学習~
CHAPTER 4 ニューラルネットワークが任意の関数を表現でき...
https://nnadl-ja.github.io/nnadl_site_ja/chap4.html
*** 「重み」のパラメタの決定 [#a107ff3e]
- 「重み」のパラメタ(w1, w2, θ(-b))の決定は人手によっ...
という問題を、データから自動で「重み」のパラメタを学習す...
-ニューラルネットワークとは[[微分>DS:数学的基礎 - 微分・...
一つの大きな合成関数で、この[[微分>DS:数学的基礎 - 微分...
-従って、ネットワーク構造が複雑であっても、合成関数を構成...
[[勾配法>ニューラルネットワーク(学習)#v7a3cd9d]]によっ...
**構造 [#yc7e37b6]
***第0層(入力層 [#b6e78f8d]
そのままの値を出力(出力に重みを掛けられる。
***第1層(中間層(隠れ層 [#i02c345d]
-入出力変換後、重みを掛けて多分岐。
-以下のような関数を使用できる。
--任意の実数を非線形に変換出来る関数
--[[誤差逆伝播法>深層学習の誤差逆伝播法]]を用いるため[[微...
***第2層(出力層 [#r4c3a636]
-0、1の間の値に変換(全部の和が1となるように正規化する...
-これには[[Sigmoid関数またはSoftmax関数>ニューラルネット...
***誤差の計算と重みの更新 [#ncec156b]
出力と教師信号の誤差の計算をし、~
2→1→0層と層の重みを更新していく([[誤差逆伝播法>深層学...
*数学的に [#c3d14236]
**関数 [#e0977af7]
関数はニューラルネットワーク全体で1つの関数、個々の合成...
-(x) → (z) → (w) → (p)
-◯ → ◯ の「→」の部分が関数と重み(重みは入力に掛ける値)
(x) ─ f1(x1, x2, x3, ...) → (z) ─ f2(z1, z2, z3, ...) → ...
**特徴 [#lb6dc6f4]
-複雑性(表現力)、計算可能性
-深くする(p=fn(...f3(f2(f1(x)))...)と~
少ないパラメタで複雑(≒ 高次)な関数を作れる。
--1次関数だと複雑にならない。
--2次関数だとパラメタが多過ぎ。
--非線形なΦ([[活性関数>#m155734b]])に1次関数(w1x1+w2x2...
z1 = Φ1(w11x1 + w12x2 + w13x3 + ... + b1)
z2 = Φ1(w21x1 + w22x2 + w23x3 + ... + b2)
...
zn = Φ1(wn1x1 + wn2x2 + wn3x3 + ... + bn)
**計算 [#r8277172]
***入力層~中間層の [#v87d7f9e]
上記を行列計算に出来る。
-[[オンライン>ニューラルネットワーク(学習)#h15bc15d]]
(t1,t2,t3,t4) = (x1,x2,x3,x4)┌w11,w12,w13,w14┐ + (b1,b2,...
│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>ニューラルネットワーク(学習)#h15bc1...
┌t11,t12,t13,t14┐ ┌x11,x12,x13,x14┐┌w11,w12,w13,w14┐ ...
│t21,t22,t23,t24│ = │x21,x22,x23,x24││w21,w22,w23,w24│ +...
└t31,t32,t33,t34┘ └x31,x32,x33,x34┘│w31,w32,w33,w34│ ...
│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┘
***出力層と誤差計算 [#wf84c90c]
-出力層~
[[分類問題の場合、Softmax関数>ニューラルネットワーク(推...
以下は、2値分類の例
--オンライン
softmax((p1,p2)) = (f1,f2)
--バッチ
┌p11,p12┐ ┌f11,f12┐
softmax(│p21,p22│) = │f21,f22│
└p31,p32┘ └f31,f32┘
-誤差計算~
[[分類問題の場合、交差エントロピー誤差>ニューラルネットワ...
以下は、2値分類の例
--オンライン
cross_entropy_error((f1,f2)) = (l1,l2)
--バッチ
┌f11,f12┐ ┌l11,l12┐
cross_entropy_error(│f21,f22│) = │l21,l22│
└f31,f32┘ └l31,l32┘
*活性化関数 [#m155734b]
-各層の出力する前に、出力結果をどの程度活性(発火)させる...
-ニューラルネットワークでは、非線形な関数を使用する必要が...
--線形関数を用いてはならないのは、多層化の意味が無くなる...
--例 : 線形な h(x) = cx を多層化しても h(h(h(x))) = cccx ...
-[[Step関数>#af597062]]、[[Sigmoid関数>#u0ac8472]]、[[tan...
-また、[[出力層の活性化関数>#zdf50e01]]には、[[Sigmoid関...
-しかし、最近は、[[勾配消失問題>#id252e38]]を防ぐ[[ReLU関...
**[[Step関数>#af597062]]と[[Sigmoid関数>#u0ac8472]] [#k01...
***共通点 [#r05f83c6]
-[[微分>DS:数学的基礎 - 微分・偏微分]]可能な非線形な関数
-0 <= 出力信号 <= 1 に収める。
-入力信号が重要な時に1(に近い)、重要でない時0(に近い...
***相違点 [#i93fc337]
-[[Step関数>#af597062]]:0, 1の信号
--単純パーセプトロンの活性化関数はStep関数。
--ある閾値を超えたら「1」、それ以外は「0」を返す関数。
-[[Sigmoid関数>#u0ac8472]]:連続的な実数の信号
--[[出力層の活性化関数>#ec8f2917]]として使われていたが転...
--[[微分>DS:数学的基礎 - 微分・偏微分]]可能で[[誤差逆伝...
**Step関数 [#af597062]
f(x) = 1 (x ≧ 0)
f(x) = 0 (x < 0)
***実装 [#jeb6ec06]
なんとなくAPI仕様を知らないと難しい感じ。
-パターン1
"""This is a test program."""
import numpy as np
def step_function(x_1):
"""This is a test program."""
y_1 = x_1 > 0
return y_1.astype(np.int)
-パターン2
"""This is a test program."""
import numpy as np
def step_function(x_1):
"""This is a test program."""
return np.array(x_1 > 0, dtype=np.int)
※ 0、1を真偽のキャストで返しているのがトリッキーだよ。
***グラフ [#m668ff44]
-5.0 ~ 5.0までの0.1刻みのプロットをStep関数にかけてグラ...
"""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()
#ref(step_graf.png,left,nowrap,step関数グラフ,60%)
**Sigmoid関数 [#u0ac8472]
もともと[[出力層の活性化関数>#ec8f2917]]から転用されたも...
-式
f(x) = 1 / (1 + e^-x)
1
h(x) = ────────
1 + exp(-x)
-特徴
--exp(-x)とは、eの-x乗を意味し、eは[[ネイピア数>DS:数学...
--[[微分>DS:数学的基礎 - 微分・偏微分]]値は、以下の式で...
f'(x) = f(x)(1-f(x))
--最大勾配は0.25で[[勾配消失問題>#id252e38]]を引き起こし...
***実装 [#ta9e2a1c]
ポイントは、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))
***グラフ [#z4a69601]
-5.0 ~ 5.0までの0.1刻みのプロットをSigmoid関数にかけて...
"""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()
#ref(sigmoid_graf.png,left,nowrap,sigmoid関数グラフ,60%)
***温度パラメタ [#dc2ee3c2]
-上記は標準Sigmoid関数で、温度パラメタ = 1の場合。
-一般的なSigmoid関数は以下の温度パラメタの逆数aを使って表...
-正確には、温度パラメタは Tnで、a = 1/Tn、Tn = 1/a となる。
-式
f(x) = 1 / (1 + e^(-x * a))
1
h(x) = ────────
1 + exp(-x * a)
-実装
"""This is a test program."""
import numpy as np
def sigmoid(x, a):
"""This is a test program."""
return 1 / (1 + np.exp(-x * a))
-形状の変化
#ref(温度パラメタ.png,left,nowrap,温度パラメタ,60%)
**tanh関数 [#x6c1dfdf]
-tanh(Hyperbolic tangent function)関数、双曲線正接関数
-式
f(x) = (e^x - e^-x) / (e^x + e^-x)
-特徴
--あらゆる入力値を-1.0~1.0の範囲の数値に変換して出力する...
--[[Sigmoid関数>#u0ac8472]]より勾配消失に強い。
---[[微分>DS:数学的基礎 - 微分・偏微分]]値は、以下の式で...
f(x)' = 1 - f(x)^2
---最大勾配は[[Sigmoid関数>#u0ac8472]]が0.25、tanh関数が1...
---ただ、それでも[[勾配消失問題>#id252e38]]は発生する(非...
***実装 [#cdef2624]
def tanh(x):
y = np.tanh(x)
return y
***グラフ [#z6d84270]
x = np.arange(-10.0, 10.0, 0.1)
y = tanh(x)
plt.plot(x, y)
plt.ylim(-1.2, 1.2)
plt.show()
#ref(tanh_graf.png,left,nowrap,tanh関数グラフ,60%)
**ReLU関数 [#x80775f2]
-ReLU(Rectified Linear Unit)関数、正規化線形関数
-式
f(x) = x (x ≧ 0) → 傾き 1
f(x) = 0 (x < 0) → 傾き 0
┌
│0 ( a <= 0 )
y = h(a) = <
│a ( a > 0 )
└
-特徴~
勾配消失問題を防ぐ関数として主流。
--入力 x が0を超えていれば x をそのまま出力する。(傾き ...
--入力 x が0以下なら0を出力する。(傾き 0)
***主流 [#n19e1e4d]
-最近の主流。
-その理由は、
--[[Sigmoid関数>#u0ac8472]]の利用は
---...ロジスティック回帰などの名残
---...[[勾配消失問題>#id252e38]]を引き起こす問題がある。
--ReLU関数
---...は[[勾配消失問題>#id252e38]]を緩和できる。~
・[[微分>DS:数学的基礎 - 微分・偏微分]]結果が 0 or 1 な...
・ただし、0(の時は)では学習が上手くいかない。
---...は非常にシンプルで学習時間が短縮される。
***実装 [#ia060830]
np.maximumとか知らんわwと思ってググると、大きい方を返す...
(つまり、xが、0以下のときは0が返り、0以上になるとxの値が...
"""This is a test program."""
import numpy as np
def relu(x_1):
"""This is a test program."""
return np.maximum(0, x)
***グラフ [#u3fb9dae]
-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()
#ref(relu _graf.png,left,nowrap,ReLU関数グラフ,60%)
**ReLU派生系 [#v32e29fb]
***Leaky ReLU関数 [#g0fbb6fb]
-式
f(x) = x (x ≧ 0)
f(x) = αx (x < 0)(※αは0.01)
-特徴
--x < 0において、僅かな傾きをもっている。
--[[微分>DS:数学的基礎 - 微分・偏微分]]値が0になることは...
-実装~
np.where は三項演算子のベクトル版
def leaky_relu(x, alpha=0.01):
y = np.where(x > 0, x , alpha * x)
return y
-グラフ~
x = np.arange(-5.0, 5.0, 0.1)
y = leaky_relu(x, alpha=0.1)
plt.plot(x, y)
plt.ylim(-1.0, 5.5)
plt.show()
#ref(leaky_relu_graf.png,left,nowrap,Leaky ReLU関数グラフ...
***Parametric ReLU [#x4ff8ba6]
LeakyReLU のく 0 部分の直線の傾きを「学習によって最適化」
***Randomized ReLU [#he721188]
LeakyReLU のく 0 部分の直線の傾きを「ランダムに試す」
**その他の活性化関数 [#h0b6ca65]
***Absolute value rectification [#zfbc2470]
主に物体認識に使用されている。
def abs_relu(x):
return np.abs(x)
***Maxout関数 [#u8daadfb]
-ReLUをさらに一般化した関数
--ReLUの2つの定義域をK個に拡張し、領域毎に異なる関数を用...
--区分線形凸関数を学習する(=活性化関数自体を学習する。
--kが十分大きければどんな凸関数も任意の精度で近似できる。
-[[Dropout>深層学習のテクニック#hf3c7a28]]と組み合わせる...
***GELU関数 [#pc64efce]
GELU(Gaussian Error Linear Units)は、GPTやBERTで使われて...
**出力層の活性化関数 [#zdf50e01]
***[[恒等関数>ニューラルネットワーク(推論)#u6563984]] [...
***[[Sigmoid関数>ニューラルネットワーク(推論)#qc025e6f]...
***[[Softmax関数>ニューラルネットワーク(推論)#b77bdfd7]...
*推論と学習 [#jae09dd6]
**[[ニューラルネットワーク(推論)]] [#raaefcbb]
**[[ニューラルネットワーク(学習)]] [#u323c180]
***[[深層学習の誤差逆伝播法]] [#c4daa80e]
***[[深層学習のテクニック]] [#j9845af7]
*ニューラルネットワークの問題点 [#s191b3fd]
**出力の分布 [#hdea3b9f]
***[[重みの初期値>深層学習のテクニック#o35805ae]] [#e535a...
***[[バッチ正規化>深層学習のテクニック#t3c6ab88]] [#mac7d...
**[[過学習>機械学習(machine learning)#l377f5cd]]を起こ...
***概要 [#ff142863]
-従来手法よりも過学習を起こし易い。
-データサンプルは、パラメータの10倍あると良い。
-少ないデータ量でもできるだけ性能を落とさずに済むような工...
***[[解決>深層学習のテクニック#f5d40509]] [#cb59f056]
***実装 [#l1e59d85]
-[[DNNの場合、>データマイニング(DM)- Python - DL#c86429...
-[[CNNの場合、>データマイニング(DM)- Python - CNN#yb34d...
**学習率の調整が難しい [#za4d873f]
***概要 [#o020c2dd]
学習率とは、
-一回の学習でどれだけ学習るか?~
=どれだけパラメタ更新するか?で、
-学習率が従来の機械学習の手法よりも大きく影響する。
-学習率が
--学習率が適切な場合、~
スムーズに学習が進行する。
--小さ過ぎると
---収束後は安定するものの、
---収束までに時間がかかり過ぎる。
--大き過ぎると
---素早く学習官僚するものの、
---発散(≒ 極小値周辺を行ったり来たり)する。
---著しく大きい場合、学習するほど誤差が増える。
***解決 [#tde6b511]
-調整
--一般的に、10^-1(0.1)~10^-6(0.000001)の間で調整。
--もしくは、学習率が自動調整されるような工夫がある。
**勾配消失問題が起こる [#id252e38]
[[誤差逆伝播法>深層学習の誤差逆伝播法]]の計算において入力...
***理由 [#nba07422]
-[[誤差逆伝播法>深層学習の誤差逆伝播法]]では奥にある出力...
-[[活性化関数>#m155734b]]に[[Sigmoid関数>#u0ac8472]]を使...
[[微分>DS:数学的基礎 - 微分・偏微分]]値が最大でも+0.25
-勾配の値は層を遡るほど[[連鎖律>DS:数学的基礎 - 微分・偏...
-このため、
--手前の層ほど学習の際に用いる勾配の値が小さくなり、
--手前の層ほど十分なパラメタの更新ができなくなる。
***解決 [#rc251dad]
-一時的に、[[事前学習>深層学習のテクニック#ebe9edcc]]と[[...
-その後、
--[[活性化関数>#m155734b]]を[[Sigmoid関数>#u0ac8472]]から...
--[[ドロップアウト(Dropout)>#cb59f056]]
--[[バッチ正規化(Batch Normalization)>#cb59f056]]
--[[ResNetのSkip Connectionで残差学習>畳み込みニューラル...
--ハードウェア性能の向上([[CPU、GPU、TPU>深層学習(deep ...
>により([[事前学習>深層学習のテクニック#ebe9edcc]]と[[フ...
*ニューラルネットワークの色々 [#p7254b04]
**一般的なフツーのニューラルネットワーク [#i29bfc40]
***順伝播型ニューラルネットワーク(FNN) [#mcd402f7]
(Feedforward Neural Network: FNN)
-[[DNN>#ge448516]]や[[CNN>#fb7864bd]]などは、FNNになる。
-多分、[[RNN>#sa1d8d21]]の登場で出来た区分
***ディープニューラルネットワーク(DNN) [#ge448516]
(Deep Neural Network: DNN)
DNNの説明は[[本項>ニューラルネットワーク]]で行われていま...
-ニューラルネットワーク内の層が多層(ディープ)化されてい...
-DNNを用いた近似は、非線形関数である活性化関数を何層にも~
組み合わせることで多種・多様な強い表現力を獲得することが...
-線形の座標変換(アフィン変換)をしたモノに対して目盛の振...
"重み"によって"新しい非線形の座標系"を変えることで、現象...
***[[畳み込みニューラルネットワーク(CNN)]] [#fb7864bd]
**[[再帰型ニューラルネットワーク(RNN)]] [#sa1d8d21]
***[[長短期記憶ニューラルネットワーク(LSTM)]] [#o836d6ff]
***[[RNN Encoder-Decoder(Sequence-to-Sequence)]] [#r88c...
**[[生成モデル>機械学習の理論#p3f4e303]]系の[[ニューラル...
***[[自己符号化器(AE:オートエンコーダ)]] [#l7546f0f]
***[[敵対的生成ネットワーク(GAN)]] [#b6b45e6b]
**制限ボルツマン・マシン(RBM) [#s93fc300]
***特徴 [#b22f8346]
-Restricted Boltzmann Machine
-ボルツマン・マシンは変数の組合せが~
どのような頻度で出現するかを確率分布で表現する。
-深層信念ネットワーク(2006, ジェフリー・ヒントン)
--AEに「制限付きボルツマンマシン」と言う手法を用いる。
--積層AEと同様に[[事前学習>#n519f0fb]]を用いた手法
***RBMでできること [#z6579cd2]
-音声認識ソフトウェアの性能の向上
**3D DNN [#lb526a13]
***アプローチ [#h628165c]
-2Dベースのアプローチを結集する2D based approach
--Complex YOLO
--YOLO 3D
-点群NNを適応するPoint cloud based approach
--PointNet
--PointNet++
--VoteNet
-画像から得た結果と点群NNをフュージョンするアプローチ
--Frustrum PointNets
-点群NNで点群を前処理(エンコード)した後に~
2Dベースのアプローチを適応するPointCloud+2Dアプローチ
--VoxelNet
--Pointpillars
***[[点群データ>画像処理とコンピュータビジョン#g606d9ca]]...
-順不同なデータ構造
-非自明な隣接関係(畳み込み
-回転・並進の取り扱いが難しい
***3D DNNでできること [#n7e966ed]
-[[物体検出>画像処理とコンピュータビジョン(AI)#j5d31a6f]]
--VoxelNet
--VoteNet
-[[領域検出>画像処理とコンピュータビジョン(AI)#o768dc51...
...
-[[特定物体検出>画像処理とコンピュータビジョン(AI)#d53f...
...
-把持位置検出~
PointNetGPD
**深層Qネットワーク(DQN) [#d10f2743]
(Deep Q-Network: DQN)
***特徴 [#t838a0a8]
-[[強化学習>機械学習(machine learning)#nbbca2a2]]に[[深...
--[[深層強化学習>機械学習(machine learning)#s6c0e580]]...
--[[強化学習>機械学習(machine learning)#nbbca2a2]]の構...
--連続値の行動とそれに伴う高い報酬(Q)が得られるように学...
-Q学習と呼ばれるアルゴリズムに基づいており、
--行動価値関数 Q (s,a) (状態sで行動αを選び、その後方策に...
--価値関数をDNNにより近似する手 法はDQNが登場するよりも古...
-DQNが解決に取り組んだ学習の不安定化要因は大きく3つ
--入力データが時系列データであり、入力データ間に独立性が...
---DQNでは「Experience Replay」を適用した。
---エージェントが経験した状態 行動 報酬遷移 先は一旦メモ...
---損失の計算を行う際には、メモリに保存した値からランダム...
--価値関数が小さく更新されただけでも方策が大きく変わって...
---DQNでは「Target Q-Network」を適用した。
---学習の目標値の計算に用いる価値関数を一定期間の学習の間...
---一定期間の学習の間、価値関数ネットワークのパラメタを固...
--与えられたタスクによって報酬のスケールが大きく異なる。
---DQNでは「報酬のクリッピング」を適用した。
---報酬の値を [-1, 1] の範囲に制限することで学習を安定さ...
---報酬の大小を区別できなくなるデメリットはあるものの学習...
***DQNでできること [#y5450203]
[[深層強化学習の事例>機械学習(machine learning)#s6c0e58...
*参考 [#w2783425]
-機械学習・深層学習についてのレポート~
https://www.osscons.jp/joho108j0-537/#_537
**Wikipedia [#r61af4f5]
-ニューラルネットワーク~
https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC...
-畳み込みニューラルネットワーク~
https://ja.wikipedia.org/wiki/%E7%95%B3%E3%81%BF%E8%BE%BC...
-敵対的生成ネットワーク~
https://ja.wikipedia.org/wiki/%E6%95%B5%E5%AF%BE%E7%9A%84...
**YouTube [#na0a1f80]
***[[深層学習、DNN>深層学習(deep learning)#y1f8375e]] [...
***[[RNN、CNN、>深層学習(deep learning)#y1f8375e]] [#n2...
***, etc. [#m260a2f3]
**Blog [#ie06e871]
***Neural networks and deep learning [#jfc150a0]
-ニューラルネットワークと深層学習~
https://nnadl-ja.github.io/nnadl_site_ja/
--ニューラルネットワークを用いた手書き文字認識~
https://nnadl-ja.github.io/nnadl_site_ja/chap1.html
--逆伝播の仕組み~
https://nnadl-ja.github.io/nnadl_site_ja/chap2.html
--ニューラルネットワークの学習の改善~
https://nnadl-ja.github.io/nnadl_site_ja/chap3.html
--ニューラルネットワークが任意の関数を表現できることの視...
https://nnadl-ja.github.io/nnadl_site_ja/chap4.html
***mizu-mi blog [#mdf23d5d]
-ニューラルネットワークの表現力を確かめる~
https://mzmlab.hatenablog.com/entry/neural-regress
-ニューラルネットワークと最小二乗法の違いについて考えてみ...
https://mzmlab.hatenablog.com/entry/neural-regress-sinc
**ゼロから作るDeep Learning [#w79e9c10]
Pythonで学ぶディープラーニングの理論と実装~
https://www.oreilly.co.jp/books/9784873117584/
***サンプル [#g7cdf646]
https://github.com/oreilly-japan/deep-learning-from-scratch
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
***その他、参考 [#p227f4c9]
-『ゼロから作るDeep Learning』の学習ノート:記事一覧 - か...
https://www.anarchive-beta.com/entry/2020/06/01/192900
--[[1章 Python入門>https://www.anarchive-beta.com/entry/2...
--[[2章 パーセプトロン>https://www.anarchive-beta.com/ent...
--[[3章 ニューラルネットワーク>https://www.anarchive-beta...
--[[4章 ニューラルネットワークの学習>https://www.anarchiv...
--[[5章 誤差伝播法>https://www.anarchive-beta.com/entry/2...
--[[6章 学習に関するテクニック>https://www.anarchive-beta...
--[[7章 畳み込みニューラルネットワーク>https://www.anarch...
--[[8章 ディープラーニング>https://www.anarchive-beta.com...
-Qiita
--ゼロから作るDeep Learning~
https://qiita.com/okayu303/
---誤差逆伝播法の概要~
https://qiita.com/okayu303/items/b67ea27ae221fb5386d1
---Affineレイヤ~
https://qiita.com/okayu303/items/8931a9076d7b867109d4
---Softmax-with-Lossレイヤ~
https://qiita.com/okayu303/items/b67ea27ae221fb5386d1
--【学習メモ】ゼロから作るDeep Learning~
https://qiita.com/yakof11/items/
---~4章:https://qiita.com/yakof11/items/ffe4297d73ac4d7...
---5章:https://qiita.com/yakof11/items/5d37042f689760515...
---6章:https://qiita.com/yakof11/items/7c27ae617651e76f0...
---7章:https://qiita.com/yakof11/items/2e187f7d9f253b500...
--深層学習 / ゼロから作るDeep Learning
---3章:https://qiita.com/jun40vn/items/2104738dc3aa36e41...
---4章:https://qiita.com/jun40vn/items/be171ff7626d37007...
---5章:https://qiita.com/jun40vn/items/bd3f0ec0444a551e0...
---6章:https://qiita.com/jun40vn/items/5593e4f5cc3dc69f2...
---7章:https://qiita.com/jun40vn/items/be48afbdd9da19f1e...
--ゼロから作るDeep Learningで素人がつまずいたことメモ: ま...
https://qiita.com/segavvy/items/4e8c36cac9c6f3543ffd
---1章:https://qiita.com/segavvy/items/1945aa1a0f91a1473...
---2章:https://qiita.com/segavvy/items/d8e9e70437e35083a...
---3章:https://qiita.com/segavvy/items/6d79d0c3b4367869f...
---4章:https://qiita.com/segavvy/items/bdad9fcda2f0da918...
---5章:https://qiita.com/segavvy/items/8707e4e65aa7fa357...
---6章:https://qiita.com/segavvy/items/ca4ac4c9ee1a126bf...
---7章:https://qiita.com/segavvy/items/8541c6ae1868d9b2b...
---8章:https://qiita.com/segavvy/items/3eb6ea0ea2af68c96...
--「ゼロから作るDeep Learning」自習メモ~
---(1)ディレクトリー、フォルダの配置とか~
https://qiita.com/slow_learner/items/8272450c2b876fdc690c
---(2)2章 パーセプトロン、半加算器、全加算器~
https://qiita.com/slow_learner/items/7caefc9ff17b4f543b15
---(3)3.6.1 MNISTデータセットのダウンロード~
https://qiita.com/slow_learner/items/9447c5717d52d3e60930
---(4)3.6.2 ニューラルネットワークの推論処理~
https://qiita.com/slow_learner/items/d914454ecee154e98cd2
---(5)4章 ニューラルネットワークの学習~
https://qiita.com/slow_learner/items/4e799af75779e35abca9
---(6の2)Kaggleの猫と犬のデータセット~
https://qiita.com/slow_learner/items/95603dcbe8784036fadb
---(6の3)9未満か9以上か~
https://qiita.com/slow_learner/items/3b7d3b8f4c7821a2b617
---(7)なんで2分の1、なんでlog?~
https://qiita.com/slow_learner/items/efbe24999562c3630c93
---(8)6章のグラフをmatplotlibで描いてみた~
https://qiita.com/slow_learner/items/d770bc712c96f0ec3b69
---(9) MultiLayerNetクラス~
https://qiita.com/slow_learner/items/16b4cad06782abeb98d5
---(10)MultiLayerNetクラス~
https://qiita.com/slow_learner/items/cfca161fb2fb05216a74
---(10の2)重みの初期値~
https://qiita.com/slow_learner/items/d2e2e2094080d67e3e01
---(11)CNN~
https://qiita.com/slow_learner/items/d4c36e3701e16c5a9e77
---(12)ディープラーニング~
https://qiita.com/slow_learner/items/ed10b1964c33e76235f3
---(13)Google Colaboratoryを使ってみる~
https://qiita.com/slow_learner/items/ccf0a35bcb1a0d628669
---(14)Google Colaboratoryで4章のプログラムを動かして見...
https://qiita.com/slow_learner/items/c422bd3d06c86bf0beec
---(15)TensorFlowの初心者向けチュートリアル~
https://qiita.com/slow_learner/items/f9ba7f84053684da750a
---(16)SimpleConvNetをKerasで構築してみた~
https://qiita.com/slow_learner/items/28a8025c9b881491e3be
---(17)DeepConvNetをKerasで構築してみた~
https://qiita.com/slow_learner/items/675fbedc932e850db4e8
---(18)ワン!ニャン!Grad-CAM!~
https://qiita.com/slow_learner/items/a62421e5110cf925e503
---(読めない用語集)~
https://qiita.com/slow_learner/items/03eb3367119e98b5a22c
終了行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-[[戻る>深層学習(deep learning)]]
--[[パーセプトロン]]
--ニューラルネットワーク
---[[ニューラルネットワーク(推論)]]
---[[ニューラルネットワーク(学習)]]
*目次 [#x49ef019]
#contents
*概要 [#rfb3c4eb]
**モデル [#s6da2326]
-脳機能に見られるいくつかの特性に類似した数理的モデル(確...
-シナプスの結合によりネットワークを形成した人工ニューロン...
学習によってシナプスの結合強度を変化させ、問題解決能力を...
-実際に生物の神経系のシミュレーションであるか否かについて...
議論があるため人工ニューラルネットワークなどと呼ばれるこ...
**学習 [#ta24af9c]
***ニューラルネットワークは、 [#j8a912c6]
-ネットワークにループする結合を持たず、
--単一方向へのみ信号が伝播する。
第0層 第1層 第2層~
入力層 → 中間層(隠れ層) → 出力層
--機械学習の、
---学習フェーズでは、信号は逆方向に伝播する。
---推論フェーズでは、信号は順方向に伝播する。
-≒ 多層[[パーセプトロン]]
--[[パーセプトロン]]では、[[活性化関数>#m155734b]]にStep...
ニューラルネットワークでは、これ以外の[[活性化関数>#m1557...
--線形の座標変換(アフィン変換)をしたモノに対して~
目盛の振り直しを行い新しい非線形の座標系を作る。~
「重み」によって「新しい非線形の座標系」が変わる。
--参考
---ニューラルネットワークと深層学習~
CHAPTER 4 ニューラルネットワークが任意の関数を表現でき...
https://nnadl-ja.github.io/nnadl_site_ja/chap4.html
*** 「重み」のパラメタの決定 [#a107ff3e]
- 「重み」のパラメタ(w1, w2, θ(-b))の決定は人手によっ...
という問題を、データから自動で「重み」のパラメタを学習す...
-ニューラルネットワークとは[[微分>DS:数学的基礎 - 微分・...
一つの大きな合成関数で、この[[微分>DS:数学的基礎 - 微分...
-従って、ネットワーク構造が複雑であっても、合成関数を構成...
[[勾配法>ニューラルネットワーク(学習)#v7a3cd9d]]によっ...
**構造 [#yc7e37b6]
***第0層(入力層 [#b6e78f8d]
そのままの値を出力(出力に重みを掛けられる。
***第1層(中間層(隠れ層 [#i02c345d]
-入出力変換後、重みを掛けて多分岐。
-以下のような関数を使用できる。
--任意の実数を非線形に変換出来る関数
--[[誤差逆伝播法>深層学習の誤差逆伝播法]]を用いるため[[微...
***第2層(出力層 [#r4c3a636]
-0、1の間の値に変換(全部の和が1となるように正規化する...
-これには[[Sigmoid関数またはSoftmax関数>ニューラルネット...
***誤差の計算と重みの更新 [#ncec156b]
出力と教師信号の誤差の計算をし、~
2→1→0層と層の重みを更新していく([[誤差逆伝播法>深層学...
*数学的に [#c3d14236]
**関数 [#e0977af7]
関数はニューラルネットワーク全体で1つの関数、個々の合成...
-(x) → (z) → (w) → (p)
-◯ → ◯ の「→」の部分が関数と重み(重みは入力に掛ける値)
(x) ─ f1(x1, x2, x3, ...) → (z) ─ f2(z1, z2, z3, ...) → ...
**特徴 [#lb6dc6f4]
-複雑性(表現力)、計算可能性
-深くする(p=fn(...f3(f2(f1(x)))...)と~
少ないパラメタで複雑(≒ 高次)な関数を作れる。
--1次関数だと複雑にならない。
--2次関数だとパラメタが多過ぎ。
--非線形なΦ([[活性関数>#m155734b]])に1次関数(w1x1+w2x2...
z1 = Φ1(w11x1 + w12x2 + w13x3 + ... + b1)
z2 = Φ1(w21x1 + w22x2 + w23x3 + ... + b2)
...
zn = Φ1(wn1x1 + wn2x2 + wn3x3 + ... + bn)
**計算 [#r8277172]
***入力層~中間層の [#v87d7f9e]
上記を行列計算に出来る。
-[[オンライン>ニューラルネットワーク(学習)#h15bc15d]]
(t1,t2,t3,t4) = (x1,x2,x3,x4)┌w11,w12,w13,w14┐ + (b1,b2,...
│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>ニューラルネットワーク(学習)#h15bc1...
┌t11,t12,t13,t14┐ ┌x11,x12,x13,x14┐┌w11,w12,w13,w14┐ ...
│t21,t22,t23,t24│ = │x21,x22,x23,x24││w21,w22,w23,w24│ +...
└t31,t32,t33,t34┘ └x31,x32,x33,x34┘│w31,w32,w33,w34│ ...
│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┘
***出力層と誤差計算 [#wf84c90c]
-出力層~
[[分類問題の場合、Softmax関数>ニューラルネットワーク(推...
以下は、2値分類の例
--オンライン
softmax((p1,p2)) = (f1,f2)
--バッチ
┌p11,p12┐ ┌f11,f12┐
softmax(│p21,p22│) = │f21,f22│
└p31,p32┘ └f31,f32┘
-誤差計算~
[[分類問題の場合、交差エントロピー誤差>ニューラルネットワ...
以下は、2値分類の例
--オンライン
cross_entropy_error((f1,f2)) = (l1,l2)
--バッチ
┌f11,f12┐ ┌l11,l12┐
cross_entropy_error(│f21,f22│) = │l21,l22│
└f31,f32┘ └l31,l32┘
*活性化関数 [#m155734b]
-各層の出力する前に、出力結果をどの程度活性(発火)させる...
-ニューラルネットワークでは、非線形な関数を使用する必要が...
--線形関数を用いてはならないのは、多層化の意味が無くなる...
--例 : 線形な h(x) = cx を多層化しても h(h(h(x))) = cccx ...
-[[Step関数>#af597062]]、[[Sigmoid関数>#u0ac8472]]、[[tan...
-また、[[出力層の活性化関数>#zdf50e01]]には、[[Sigmoid関...
-しかし、最近は、[[勾配消失問題>#id252e38]]を防ぐ[[ReLU関...
**[[Step関数>#af597062]]と[[Sigmoid関数>#u0ac8472]] [#k01...
***共通点 [#r05f83c6]
-[[微分>DS:数学的基礎 - 微分・偏微分]]可能な非線形な関数
-0 <= 出力信号 <= 1 に収める。
-入力信号が重要な時に1(に近い)、重要でない時0(に近い...
***相違点 [#i93fc337]
-[[Step関数>#af597062]]:0, 1の信号
--単純パーセプトロンの活性化関数はStep関数。
--ある閾値を超えたら「1」、それ以外は「0」を返す関数。
-[[Sigmoid関数>#u0ac8472]]:連続的な実数の信号
--[[出力層の活性化関数>#ec8f2917]]として使われていたが転...
--[[微分>DS:数学的基礎 - 微分・偏微分]]可能で[[誤差逆伝...
**Step関数 [#af597062]
f(x) = 1 (x ≧ 0)
f(x) = 0 (x < 0)
***実装 [#jeb6ec06]
なんとなくAPI仕様を知らないと難しい感じ。
-パターン1
"""This is a test program."""
import numpy as np
def step_function(x_1):
"""This is a test program."""
y_1 = x_1 > 0
return y_1.astype(np.int)
-パターン2
"""This is a test program."""
import numpy as np
def step_function(x_1):
"""This is a test program."""
return np.array(x_1 > 0, dtype=np.int)
※ 0、1を真偽のキャストで返しているのがトリッキーだよ。
***グラフ [#m668ff44]
-5.0 ~ 5.0までの0.1刻みのプロットをStep関数にかけてグラ...
"""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()
#ref(step_graf.png,left,nowrap,step関数グラフ,60%)
**Sigmoid関数 [#u0ac8472]
もともと[[出力層の活性化関数>#ec8f2917]]から転用されたも...
-式
f(x) = 1 / (1 + e^-x)
1
h(x) = ────────
1 + exp(-x)
-特徴
--exp(-x)とは、eの-x乗を意味し、eは[[ネイピア数>DS:数学...
--[[微分>DS:数学的基礎 - 微分・偏微分]]値は、以下の式で...
f'(x) = f(x)(1-f(x))
--最大勾配は0.25で[[勾配消失問題>#id252e38]]を引き起こし...
***実装 [#ta9e2a1c]
ポイントは、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))
***グラフ [#z4a69601]
-5.0 ~ 5.0までの0.1刻みのプロットをSigmoid関数にかけて...
"""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()
#ref(sigmoid_graf.png,left,nowrap,sigmoid関数グラフ,60%)
***温度パラメタ [#dc2ee3c2]
-上記は標準Sigmoid関数で、温度パラメタ = 1の場合。
-一般的なSigmoid関数は以下の温度パラメタの逆数aを使って表...
-正確には、温度パラメタは Tnで、a = 1/Tn、Tn = 1/a となる。
-式
f(x) = 1 / (1 + e^(-x * a))
1
h(x) = ────────
1 + exp(-x * a)
-実装
"""This is a test program."""
import numpy as np
def sigmoid(x, a):
"""This is a test program."""
return 1 / (1 + np.exp(-x * a))
-形状の変化
#ref(温度パラメタ.png,left,nowrap,温度パラメタ,60%)
**tanh関数 [#x6c1dfdf]
-tanh(Hyperbolic tangent function)関数、双曲線正接関数
-式
f(x) = (e^x - e^-x) / (e^x + e^-x)
-特徴
--あらゆる入力値を-1.0~1.0の範囲の数値に変換して出力する...
--[[Sigmoid関数>#u0ac8472]]より勾配消失に強い。
---[[微分>DS:数学的基礎 - 微分・偏微分]]値は、以下の式で...
f(x)' = 1 - f(x)^2
---最大勾配は[[Sigmoid関数>#u0ac8472]]が0.25、tanh関数が1...
---ただ、それでも[[勾配消失問題>#id252e38]]は発生する(非...
***実装 [#cdef2624]
def tanh(x):
y = np.tanh(x)
return y
***グラフ [#z6d84270]
x = np.arange(-10.0, 10.0, 0.1)
y = tanh(x)
plt.plot(x, y)
plt.ylim(-1.2, 1.2)
plt.show()
#ref(tanh_graf.png,left,nowrap,tanh関数グラフ,60%)
**ReLU関数 [#x80775f2]
-ReLU(Rectified Linear Unit)関数、正規化線形関数
-式
f(x) = x (x ≧ 0) → 傾き 1
f(x) = 0 (x < 0) → 傾き 0
┌
│0 ( a <= 0 )
y = h(a) = <
│a ( a > 0 )
└
-特徴~
勾配消失問題を防ぐ関数として主流。
--入力 x が0を超えていれば x をそのまま出力する。(傾き ...
--入力 x が0以下なら0を出力する。(傾き 0)
***主流 [#n19e1e4d]
-最近の主流。
-その理由は、
--[[Sigmoid関数>#u0ac8472]]の利用は
---...ロジスティック回帰などの名残
---...[[勾配消失問題>#id252e38]]を引き起こす問題がある。
--ReLU関数
---...は[[勾配消失問題>#id252e38]]を緩和できる。~
・[[微分>DS:数学的基礎 - 微分・偏微分]]結果が 0 or 1 な...
・ただし、0(の時は)では学習が上手くいかない。
---...は非常にシンプルで学習時間が短縮される。
***実装 [#ia060830]
np.maximumとか知らんわwと思ってググると、大きい方を返す...
(つまり、xが、0以下のときは0が返り、0以上になるとxの値が...
"""This is a test program."""
import numpy as np
def relu(x_1):
"""This is a test program."""
return np.maximum(0, x)
***グラフ [#u3fb9dae]
-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()
#ref(relu _graf.png,left,nowrap,ReLU関数グラフ,60%)
**ReLU派生系 [#v32e29fb]
***Leaky ReLU関数 [#g0fbb6fb]
-式
f(x) = x (x ≧ 0)
f(x) = αx (x < 0)(※αは0.01)
-特徴
--x < 0において、僅かな傾きをもっている。
--[[微分>DS:数学的基礎 - 微分・偏微分]]値が0になることは...
-実装~
np.where は三項演算子のベクトル版
def leaky_relu(x, alpha=0.01):
y = np.where(x > 0, x , alpha * x)
return y
-グラフ~
x = np.arange(-5.0, 5.0, 0.1)
y = leaky_relu(x, alpha=0.1)
plt.plot(x, y)
plt.ylim(-1.0, 5.5)
plt.show()
#ref(leaky_relu_graf.png,left,nowrap,Leaky ReLU関数グラフ...
***Parametric ReLU [#x4ff8ba6]
LeakyReLU のく 0 部分の直線の傾きを「学習によって最適化」
***Randomized ReLU [#he721188]
LeakyReLU のく 0 部分の直線の傾きを「ランダムに試す」
**その他の活性化関数 [#h0b6ca65]
***Absolute value rectification [#zfbc2470]
主に物体認識に使用されている。
def abs_relu(x):
return np.abs(x)
***Maxout関数 [#u8daadfb]
-ReLUをさらに一般化した関数
--ReLUの2つの定義域をK個に拡張し、領域毎に異なる関数を用...
--区分線形凸関数を学習する(=活性化関数自体を学習する。
--kが十分大きければどんな凸関数も任意の精度で近似できる。
-[[Dropout>深層学習のテクニック#hf3c7a28]]と組み合わせる...
***GELU関数 [#pc64efce]
GELU(Gaussian Error Linear Units)は、GPTやBERTで使われて...
**出力層の活性化関数 [#zdf50e01]
***[[恒等関数>ニューラルネットワーク(推論)#u6563984]] [...
***[[Sigmoid関数>ニューラルネットワーク(推論)#qc025e6f]...
***[[Softmax関数>ニューラルネットワーク(推論)#b77bdfd7]...
*推論と学習 [#jae09dd6]
**[[ニューラルネットワーク(推論)]] [#raaefcbb]
**[[ニューラルネットワーク(学習)]] [#u323c180]
***[[深層学習の誤差逆伝播法]] [#c4daa80e]
***[[深層学習のテクニック]] [#j9845af7]
*ニューラルネットワークの問題点 [#s191b3fd]
**出力の分布 [#hdea3b9f]
***[[重みの初期値>深層学習のテクニック#o35805ae]] [#e535a...
***[[バッチ正規化>深層学習のテクニック#t3c6ab88]] [#mac7d...
**[[過学習>機械学習(machine learning)#l377f5cd]]を起こ...
***概要 [#ff142863]
-従来手法よりも過学習を起こし易い。
-データサンプルは、パラメータの10倍あると良い。
-少ないデータ量でもできるだけ性能を落とさずに済むような工...
***[[解決>深層学習のテクニック#f5d40509]] [#cb59f056]
***実装 [#l1e59d85]
-[[DNNの場合、>データマイニング(DM)- Python - DL#c86429...
-[[CNNの場合、>データマイニング(DM)- Python - CNN#yb34d...
**学習率の調整が難しい [#za4d873f]
***概要 [#o020c2dd]
学習率とは、
-一回の学習でどれだけ学習るか?~
=どれだけパラメタ更新するか?で、
-学習率が従来の機械学習の手法よりも大きく影響する。
-学習率が
--学習率が適切な場合、~
スムーズに学習が進行する。
--小さ過ぎると
---収束後は安定するものの、
---収束までに時間がかかり過ぎる。
--大き過ぎると
---素早く学習官僚するものの、
---発散(≒ 極小値周辺を行ったり来たり)する。
---著しく大きい場合、学習するほど誤差が増える。
***解決 [#tde6b511]
-調整
--一般的に、10^-1(0.1)~10^-6(0.000001)の間で調整。
--もしくは、学習率が自動調整されるような工夫がある。
**勾配消失問題が起こる [#id252e38]
[[誤差逆伝播法>深層学習の誤差逆伝播法]]の計算において入力...
***理由 [#nba07422]
-[[誤差逆伝播法>深層学習の誤差逆伝播法]]では奥にある出力...
-[[活性化関数>#m155734b]]に[[Sigmoid関数>#u0ac8472]]を使...
[[微分>DS:数学的基礎 - 微分・偏微分]]値が最大でも+0.25
-勾配の値は層を遡るほど[[連鎖律>DS:数学的基礎 - 微分・偏...
-このため、
--手前の層ほど学習の際に用いる勾配の値が小さくなり、
--手前の層ほど十分なパラメタの更新ができなくなる。
***解決 [#rc251dad]
-一時的に、[[事前学習>深層学習のテクニック#ebe9edcc]]と[[...
-その後、
--[[活性化関数>#m155734b]]を[[Sigmoid関数>#u0ac8472]]から...
--[[ドロップアウト(Dropout)>#cb59f056]]
--[[バッチ正規化(Batch Normalization)>#cb59f056]]
--[[ResNetのSkip Connectionで残差学習>畳み込みニューラル...
--ハードウェア性能の向上([[CPU、GPU、TPU>深層学習(deep ...
>により([[事前学習>深層学習のテクニック#ebe9edcc]]と[[フ...
*ニューラルネットワークの色々 [#p7254b04]
**一般的なフツーのニューラルネットワーク [#i29bfc40]
***順伝播型ニューラルネットワーク(FNN) [#mcd402f7]
(Feedforward Neural Network: FNN)
-[[DNN>#ge448516]]や[[CNN>#fb7864bd]]などは、FNNになる。
-多分、[[RNN>#sa1d8d21]]の登場で出来た区分
***ディープニューラルネットワーク(DNN) [#ge448516]
(Deep Neural Network: DNN)
DNNの説明は[[本項>ニューラルネットワーク]]で行われていま...
-ニューラルネットワーク内の層が多層(ディープ)化されてい...
-DNNを用いた近似は、非線形関数である活性化関数を何層にも~
組み合わせることで多種・多様な強い表現力を獲得することが...
-線形の座標変換(アフィン変換)をしたモノに対して目盛の振...
"重み"によって"新しい非線形の座標系"を変えることで、現象...
***[[畳み込みニューラルネットワーク(CNN)]] [#fb7864bd]
**[[再帰型ニューラルネットワーク(RNN)]] [#sa1d8d21]
***[[長短期記憶ニューラルネットワーク(LSTM)]] [#o836d6ff]
***[[RNN Encoder-Decoder(Sequence-to-Sequence)]] [#r88c...
**[[生成モデル>機械学習の理論#p3f4e303]]系の[[ニューラル...
***[[自己符号化器(AE:オートエンコーダ)]] [#l7546f0f]
***[[敵対的生成ネットワーク(GAN)]] [#b6b45e6b]
**制限ボルツマン・マシン(RBM) [#s93fc300]
***特徴 [#b22f8346]
-Restricted Boltzmann Machine
-ボルツマン・マシンは変数の組合せが~
どのような頻度で出現するかを確率分布で表現する。
-深層信念ネットワーク(2006, ジェフリー・ヒントン)
--AEに「制限付きボルツマンマシン」と言う手法を用いる。
--積層AEと同様に[[事前学習>#n519f0fb]]を用いた手法
***RBMでできること [#z6579cd2]
-音声認識ソフトウェアの性能の向上
**3D DNN [#lb526a13]
***アプローチ [#h628165c]
-2Dベースのアプローチを結集する2D based approach
--Complex YOLO
--YOLO 3D
-点群NNを適応するPoint cloud based approach
--PointNet
--PointNet++
--VoteNet
-画像から得た結果と点群NNをフュージョンするアプローチ
--Frustrum PointNets
-点群NNで点群を前処理(エンコード)した後に~
2Dベースのアプローチを適応するPointCloud+2Dアプローチ
--VoxelNet
--Pointpillars
***[[点群データ>画像処理とコンピュータビジョン#g606d9ca]]...
-順不同なデータ構造
-非自明な隣接関係(畳み込み
-回転・並進の取り扱いが難しい
***3D DNNでできること [#n7e966ed]
-[[物体検出>画像処理とコンピュータビジョン(AI)#j5d31a6f]]
--VoxelNet
--VoteNet
-[[領域検出>画像処理とコンピュータビジョン(AI)#o768dc51...
...
-[[特定物体検出>画像処理とコンピュータビジョン(AI)#d53f...
...
-把持位置検出~
PointNetGPD
**深層Qネットワーク(DQN) [#d10f2743]
(Deep Q-Network: DQN)
***特徴 [#t838a0a8]
-[[強化学習>機械学習(machine learning)#nbbca2a2]]に[[深...
--[[深層強化学習>機械学習(machine learning)#s6c0e580]]...
--[[強化学習>機械学習(machine learning)#nbbca2a2]]の構...
--連続値の行動とそれに伴う高い報酬(Q)が得られるように学...
-Q学習と呼ばれるアルゴリズムに基づいており、
--行動価値関数 Q (s,a) (状態sで行動αを選び、その後方策に...
--価値関数をDNNにより近似する手 法はDQNが登場するよりも古...
-DQNが解決に取り組んだ学習の不安定化要因は大きく3つ
--入力データが時系列データであり、入力データ間に独立性が...
---DQNでは「Experience Replay」を適用した。
---エージェントが経験した状態 行動 報酬遷移 先は一旦メモ...
---損失の計算を行う際には、メモリに保存した値からランダム...
--価値関数が小さく更新されただけでも方策が大きく変わって...
---DQNでは「Target Q-Network」を適用した。
---学習の目標値の計算に用いる価値関数を一定期間の学習の間...
---一定期間の学習の間、価値関数ネットワークのパラメタを固...
--与えられたタスクによって報酬のスケールが大きく異なる。
---DQNでは「報酬のクリッピング」を適用した。
---報酬の値を [-1, 1] の範囲に制限することで学習を安定さ...
---報酬の大小を区別できなくなるデメリットはあるものの学習...
***DQNでできること [#y5450203]
[[深層強化学習の事例>機械学習(machine learning)#s6c0e58...
*参考 [#w2783425]
-機械学習・深層学習についてのレポート~
https://www.osscons.jp/joho108j0-537/#_537
**Wikipedia [#r61af4f5]
-ニューラルネットワーク~
https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC...
-畳み込みニューラルネットワーク~
https://ja.wikipedia.org/wiki/%E7%95%B3%E3%81%BF%E8%BE%BC...
-敵対的生成ネットワーク~
https://ja.wikipedia.org/wiki/%E6%95%B5%E5%AF%BE%E7%9A%84...
**YouTube [#na0a1f80]
***[[深層学習、DNN>深層学習(deep learning)#y1f8375e]] [...
***[[RNN、CNN、>深層学習(deep learning)#y1f8375e]] [#n2...
***, etc. [#m260a2f3]
**Blog [#ie06e871]
***Neural networks and deep learning [#jfc150a0]
-ニューラルネットワークと深層学習~
https://nnadl-ja.github.io/nnadl_site_ja/
--ニューラルネットワークを用いた手書き文字認識~
https://nnadl-ja.github.io/nnadl_site_ja/chap1.html
--逆伝播の仕組み~
https://nnadl-ja.github.io/nnadl_site_ja/chap2.html
--ニューラルネットワークの学習の改善~
https://nnadl-ja.github.io/nnadl_site_ja/chap3.html
--ニューラルネットワークが任意の関数を表現できることの視...
https://nnadl-ja.github.io/nnadl_site_ja/chap4.html
***mizu-mi blog [#mdf23d5d]
-ニューラルネットワークの表現力を確かめる~
https://mzmlab.hatenablog.com/entry/neural-regress
-ニューラルネットワークと最小二乗法の違いについて考えてみ...
https://mzmlab.hatenablog.com/entry/neural-regress-sinc
**ゼロから作るDeep Learning [#w79e9c10]
Pythonで学ぶディープラーニングの理論と実装~
https://www.oreilly.co.jp/books/9784873117584/
***サンプル [#g7cdf646]
https://github.com/oreilly-japan/deep-learning-from-scratch
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
-https://github.com/oreilly-japan/deep-learning-from-scra...
***その他、参考 [#p227f4c9]
-『ゼロから作るDeep Learning』の学習ノート:記事一覧 - か...
https://www.anarchive-beta.com/entry/2020/06/01/192900
--[[1章 Python入門>https://www.anarchive-beta.com/entry/2...
--[[2章 パーセプトロン>https://www.anarchive-beta.com/ent...
--[[3章 ニューラルネットワーク>https://www.anarchive-beta...
--[[4章 ニューラルネットワークの学習>https://www.anarchiv...
--[[5章 誤差伝播法>https://www.anarchive-beta.com/entry/2...
--[[6章 学習に関するテクニック>https://www.anarchive-beta...
--[[7章 畳み込みニューラルネットワーク>https://www.anarch...
--[[8章 ディープラーニング>https://www.anarchive-beta.com...
-Qiita
--ゼロから作るDeep Learning~
https://qiita.com/okayu303/
---誤差逆伝播法の概要~
https://qiita.com/okayu303/items/b67ea27ae221fb5386d1
---Affineレイヤ~
https://qiita.com/okayu303/items/8931a9076d7b867109d4
---Softmax-with-Lossレイヤ~
https://qiita.com/okayu303/items/b67ea27ae221fb5386d1
--【学習メモ】ゼロから作るDeep Learning~
https://qiita.com/yakof11/items/
---~4章:https://qiita.com/yakof11/items/ffe4297d73ac4d7...
---5章:https://qiita.com/yakof11/items/5d37042f689760515...
---6章:https://qiita.com/yakof11/items/7c27ae617651e76f0...
---7章:https://qiita.com/yakof11/items/2e187f7d9f253b500...
--深層学習 / ゼロから作るDeep Learning
---3章:https://qiita.com/jun40vn/items/2104738dc3aa36e41...
---4章:https://qiita.com/jun40vn/items/be171ff7626d37007...
---5章:https://qiita.com/jun40vn/items/bd3f0ec0444a551e0...
---6章:https://qiita.com/jun40vn/items/5593e4f5cc3dc69f2...
---7章:https://qiita.com/jun40vn/items/be48afbdd9da19f1e...
--ゼロから作るDeep Learningで素人がつまずいたことメモ: ま...
https://qiita.com/segavvy/items/4e8c36cac9c6f3543ffd
---1章:https://qiita.com/segavvy/items/1945aa1a0f91a1473...
---2章:https://qiita.com/segavvy/items/d8e9e70437e35083a...
---3章:https://qiita.com/segavvy/items/6d79d0c3b4367869f...
---4章:https://qiita.com/segavvy/items/bdad9fcda2f0da918...
---5章:https://qiita.com/segavvy/items/8707e4e65aa7fa357...
---6章:https://qiita.com/segavvy/items/ca4ac4c9ee1a126bf...
---7章:https://qiita.com/segavvy/items/8541c6ae1868d9b2b...
---8章:https://qiita.com/segavvy/items/3eb6ea0ea2af68c96...
--「ゼロから作るDeep Learning」自習メモ~
---(1)ディレクトリー、フォルダの配置とか~
https://qiita.com/slow_learner/items/8272450c2b876fdc690c
---(2)2章 パーセプトロン、半加算器、全加算器~
https://qiita.com/slow_learner/items/7caefc9ff17b4f543b15
---(3)3.6.1 MNISTデータセットのダウンロード~
https://qiita.com/slow_learner/items/9447c5717d52d3e60930
---(4)3.6.2 ニューラルネットワークの推論処理~
https://qiita.com/slow_learner/items/d914454ecee154e98cd2
---(5)4章 ニューラルネットワークの学習~
https://qiita.com/slow_learner/items/4e799af75779e35abca9
---(6の2)Kaggleの猫と犬のデータセット~
https://qiita.com/slow_learner/items/95603dcbe8784036fadb
---(6の3)9未満か9以上か~
https://qiita.com/slow_learner/items/3b7d3b8f4c7821a2b617
---(7)なんで2分の1、なんでlog?~
https://qiita.com/slow_learner/items/efbe24999562c3630c93
---(8)6章のグラフをmatplotlibで描いてみた~
https://qiita.com/slow_learner/items/d770bc712c96f0ec3b69
---(9) MultiLayerNetクラス~
https://qiita.com/slow_learner/items/16b4cad06782abeb98d5
---(10)MultiLayerNetクラス~
https://qiita.com/slow_learner/items/cfca161fb2fb05216a74
---(10の2)重みの初期値~
https://qiita.com/slow_learner/items/d2e2e2094080d67e3e01
---(11)CNN~
https://qiita.com/slow_learner/items/d4c36e3701e16c5a9e77
---(12)ディープラーニング~
https://qiita.com/slow_learner/items/ed10b1964c33e76235f3
---(13)Google Colaboratoryを使ってみる~
https://qiita.com/slow_learner/items/ccf0a35bcb1a0d628669
---(14)Google Colaboratoryで4章のプログラムを動かして見...
https://qiita.com/slow_learner/items/c422bd3d06c86bf0beec
---(15)TensorFlowの初心者向けチュートリアル~
https://qiita.com/slow_learner/items/f9ba7f84053684da750a
---(16)SimpleConvNetをKerasで構築してみた~
https://qiita.com/slow_learner/items/28a8025c9b881491e3be
---(17)DeepConvNetをKerasで構築してみた~
https://qiita.com/slow_learner/items/675fbedc932e850db4e8
---(18)ワン!ニャン!Grad-CAM!~
https://qiita.com/slow_learner/items/a62421e5110cf925e503
---(読めない用語集)~
https://qiita.com/slow_learner/items/03eb3367119e98b5a22c
ページ名: