[最下層からの深さ学習]#14レッスンはコーディネートにぴったり

5406 ワード

ふさわしい


パラメータの個数が学習データの個数より相対的に多い場合に発生するのに適している.

Regularization


NNに研修データの重要な情報のみを含ませ,副次的,偶発的または特殊な情報を含ませない方法

Weight Decay


罰は重み付け値の和であるため,学習時に罰を下げることは情報を失う役割を果たす.しかし、あまり重要でない(少ない)情報は、より重要な(多い)情報に比べて、より多くの情報を残すことはありません.

練習問題1






練習問題


L=Lc+Lpは理解し、w 1に微分しなければならない.
Lpをw 1に微分するのは難しい.
ただし,式でLpをwに微分する値はw自体で決定されることを覚えておく必要がある.また,Lpをbに微分すると,変数が0になることも知らなければならない.




きかがくてきかいせき


L 2 regの等位線を平面に描くと円になります.
L 1 regの等位線を平面に描くと四角い.
赤い線は勾配の反対方向です.

Dropout


学習に関連するパラメータはありません.ReLU,Softmax,損失なし.
Affine、Batch Normalization(gamma、beta)には学習するパラメータがあります.
ランダムにシャットダウンするため、新しいモデルを引き続き使用するようにEnsembleと同じ効果を得ることができます.
関係を断ち切る方法でネット詐欺を防ぐ.

コード実装

class Dropout:
    def __init__(self, dropout_ratio = 0.5):
        self.dropout_ratio = dropout_ratio
        self.mask = None
        
    def forward(self, x, train_flg=True):
        if train_flg:
            # dropout_ratio와 행렬의 원소를 비교해서 True, False로 이루어진 행렬을 만든다.
            # rand는 0~1의 값이다.
            self.mask = np.random.rand(*x.shape) > self.dropout_ratio
            # 인풋에 mask를 씌워준다.
            return x * self.mask
        else:
            # 전체적인 feature의 스케일을 학습시와 맞춰주기 위해서 사용한다.
            # rescaling이다.
            return x * (1.0 - self.dropout_ratio)
    
    def backward(self, dout):
        # 순전파에서 죽인 자리에 맞춰서, 흘러 들어온 미분을 죽인다.
        # ReLU층의 역전파와 threshold 빼곤 동일하다.
        return dout * self.mask