studylog/北の雲

chainer/python/nlp

出力層にdropoutは必要なのか

NNでdropoutを入れると過学習を防いでくれて精度が高まる、と理解しているのだけど、最後の出力層(推論層)にもdropoutを入れるべきかどうかがわからない

chainerのサンプルを見ると
ptbサンプル(RNN/LSTM)は出力層にもdropout。

    h1_in = model.l1_x(F.dropout(h0, train=train)) + model.l1_h(state['h1'])
    c1, h1 = F.lstm(state['c1'], h1_in)
    h2_in = model.l2_x(F.dropout(h1, train=train)) + model.l2_h(state['h2'])
    c2, h2 = F.lstm(state['c2'], h2_in)
    y = model.l3(F.dropout(h2, train=train))


mnistサンプル(ただのNN)は出力層には無い。

    h1 = F.dropout(F.relu(model.l1(x)),  train=train)
    h2 = F.dropout(F.relu(model.l2(h1)), train=train)
    y = model.l3(h2)

とまちまち。青い深層学習本(3章)を読むと、出力層(推論層)にはdropoutを入れずに全ユニットを使えと書いているように読めるけれど自信は無い。感覚的には出力層にまでdropoutは入れちゃダメな気もするんだが…。

あと青本によるとdropoutの比率は各層で変えてもいいらしい。

ユニットの選出確率pの値は各層で変わっていて構いません。例えば3.1の実験では入力層をp=0.9、中間層をp=0.5としています。 (深層学習 p32)

とのこと。入力層に近いほどdropout比率を高めにする事例が多いらしい。