機械学習の実践ノート (8): SGD + MLP + CNN + RNN の紹介

1. ミニバッチ確率的勾配降下法 (SGD)

ミニバッチ SGD によるトレーニング

  • wモデル パラメータ、bバッチ サイズ、η t \eta_tt時間 t における学習率
  • w 1 w_1をランダムに初期化するw1
  • 収束するまで t = 1,2… を繰り返す
    • I t ∈ 1 ,をランダムにサンプリングします. . , n I_t \in {1,...,n}tε1 . . . n withI t I_tt= b
    • update wt + 1 = wt − η t ▽ wtl ( w I t , y I t , wt ) w_{t+1} = w_t -\eta_t \triangledown_{w_t}l(w_{I_t},y_{I_t}, w_t)wt + 1=wttwtl ( wtytwt)

ハイパーパラメータbη t \eta_tに敏感t(SGD はバイアス b と学習率に非常に敏感です)

2. 線形手法 -> 多層知覚(MLP)

MLP の一般的な名詞
(1) a密集(全結合、または線形) レイヤーにはパラメーターW ∈ R m × n W \in R^{m\times n} がありますWεRm × n
出力を計算しますy = W x + b ∈ R my = Wx + b \in R^{m}y=×+bεRメートル
(2)線形回帰: 1 出力の密層
(3)ソフトマックス回帰: m 出力の密層 + ソフトマックス
(4)アクティベーションは要素ごとの非線形関数です
sigmoid ( x ) = 1 1 + exp ( − x ) sigmoid(x) = \frac{1}{1+exp(-x)}s i g m o i d ( x )=1+e x p ( x )1
relu = max ( x , 0 ) relu = max(x,0)r e lu u=m a x ( x ,0 )
(5) 複数の隠れ層 (高密度 + 活性化) を積み重ねて、より深いモデルを取得します
(6)ハイパーパラメータ: 隠れ層と各隠れ層の出力

3. 密層 --> 畳み込み層(CNN)

密集層の問題

(1) imageNet(1k クラスの 300*300 画像) を 10k 出力の単一の隠れ層を持つ MLP で学習します(パラメータが多すぎます

  1. 10 億の学習可能なパラメーターにつながりますが、これは大きすぎます!
  2. 完全接続 : 出力はすべての入力の加重合計です

(2) 画像内のオブジェクトを認識する:(画像認識問題、地域情報、翻訳問題)

  1. 平行移動の不変性: 同様の出力 (オブジェクトがどこにあっても)
  2. 局所性: ピクセルは近隣との関連性が高い

(3) 事前知識をモデル構造に組み込む(モデルに事前情報を追加してパラメーターの数を減らす

  1. より少ないパラメータで同じモデル容量を達成

畳み込み層

(1) locality : 出力は k*k 入力ウィンドウから計算されます (受容野)

(2) 翻訳不変 : 出力は同じ k*k weights(kernel) を使用します(翻訳不変性

(3)畳み込み層のモデルパラメータは入出力サイズに依存しない(パラメータに依存しない

(4)カーネルはパターンを識別することを学習するかもしれません(カーネルはパターンを学習します

"""Convolution with single input and output channels"""
# both input 'X' and weight 'K' are matrix
h,w = K.shape # the size of kernel:height and width
Y = torch.zeros((X.shape[0] - h + 1,X.shape[1] -w +1)) # the convolution result

for i in range(Y.shape[0]):
    for j in range(Y.shape[1]):
        Y[i,j] = (X[i:i+h,j:j+w]*K).sum()

プーリング層

(1) 畳み込みは位置に敏感です

  • 入力のピクセル シフトは、出力のピクセル シフトになります。

  • プーリング層は、k*k ウィンドウで平均/最大を計算します

# h,w: pooling window height and width
# mode: max or avg
Y = torch.zeros((X.shape(0)-h+1,X.shape[1]-w+1))
for i in range(Y.shape[0]):
    for j in range(Y.shape[1]):
        if mode=='max':
            Y[i,j] = X[i:i+h,j:j+w].max()
        elif mode=='avg':
            Y[i,j] = X[i:i+h,j:j+w].mean()

畳み込みニューラル ネットワーク (CNN): 参考文献があります。無料で売春を行うことができます

  1. ニューラル ネットワークは、畳み込み層のスタックを使用して特徴を抽出します

    • 活性化は各畳み込み層の後に適用されます
    • プーリングを使用して場所の感度を下げる
  2. 最新の CNN は、さまざまなハイパーパラメーターとレイヤー接続を備えたディープ ニューラル ネットワークです。

4. 密層 --> リカレントネットワーク(RNN)

密集層の問題

  1. 言語モデル: 次の単語を予測する

    • こんにちは --> 世界
    • ハローワールド --> !
  2. MLPを単純に使用すると、シーケンス情報がうまく処理されません

    • 入力/出力の長さが同じではありません

RNN と Gate RNN : 参考文献を参照

ハンズオン ディープ ラーニング (37) - サイクリック ニューラル ネットワーク

  1. 単純な RNN :
    ht = ϕ ( W hhht − 1 + W hx X t + bh ) h_t = \phi(W_{hh}h_{t-1} + W_{hx}X_t + b_h)時間t=ϕ ( W時間_時間t 1+Wh xバツt+b時間)
  1. Gated RNN (LSTM および GRU): 情報フローのより細かい制御

5. まとめ

  1. MLP : 非線形アクティベーションを使用して高密度レイヤーをスタックします。
  2. CNN : 畳み込み活性化層とプーリング層を積み重ねて空間情報を効率的に抽出する
  3. RNN : 非表示の状態を介して一時的な情報を渡すために再帰レイヤーをスタックします

おすすめ

転載: blog.csdn.net/jerry_liufeng/article/details/123673908