Tôi nên đặt các lớp bỏ học ở đâu trong mạng lưới thần kinh?


65

Có hướng dẫn chung nào về nơi đặt các lớp bỏ học trong mạng lưới thần kinh không?


1
Sử dụng quy trình bỏ học ngẫu nhiên sẽ vô hiệu hóa một số phần tế bào thần kinh trong một lớp ẩn. Trong thư viện Keras, bạn có thể thêm bỏ học sau bất kỳ lớp ẩn nào và bạn có thể chỉ định tỷ lệ bỏ học, xác định tỷ lệ phần trăm tế bào thần kinh bị vô hiệu hóa trong lớp trước.
khắc phục

nghiệp được phép ở đây?
khắc phục

4
@redress ai nuôi, và làm thế nào?
Franck Dernoncourt

Bạn đã giải quyết câu trả lời này?
Blaszard

Những loại mạng lưới thần kinh? CNN, RNN, khác?
Wayne

Câu trả lời:


34

Trong bài báo gốc đề xuất các lớp bỏ học, bởi Hinton (2012) , bỏ học (với p = 0,5) đã được sử dụng trên mỗi lớp được kết nối đầy đủ (đậm đặc) trước khi xuất ra; nó không được sử dụng trên các lớp chập. Điều này đã trở thành cấu hình được sử dụng phổ biến nhất.

Nhiều nghiên cứu gần đây đã cho thấy một số giá trị trong việc áp dụng bỏ học cũng cho các lớp chập, mặc dù ở mức thấp hơn nhiều: p = 0,1 hoặc 0,2. Bỏ học được sử dụng sau chức năng kích hoạt của từng lớp chập: CONV-> RELU-> DROP.


Vì vậy, chúng nên được đặt sau tất cả các lớp, hoặc chỉ những lớp có kích hoạt phi tuyến tính? Ví dụ, được cung cấp một tích chập 2D với relukích hoạt theo sau là một nhóm gộp tối đa, lớp bỏ qua (2D) sẽ đi ngay sau khi tích chập, hoặc sau lớp gộp tối đa, hoặc cả hai, hoặc nó không quan trọng?
z0r

1
Tôi đã cập nhật câu trả lời để làm rõ rằng trong công trình của Park và cộng sự, việc bỏ học được áp dụng sau RELUmỗi lớp CONV. Tôi không tin rằng họ đã điều tra hiệu quả của việc thêm bỏ học sau các lớp gộp tối đa.
4Oh4

Điều đáng chú ý là trong bài báo của Hinton, trên trang 10 (1938), họ viết rằng sử dụng bỏ học trên các lớp chập khi kiểm tra đối với tập dữ liệu Google Street View đã giảm lỗi phân loại.
Miki P

9

Trước mọi dự đoán tuyến tính. Tham khảo Srivastava et al. (2014) .


5
Các câu trả lời khác mô tả cách áp dụng bỏ học, nhưng đây là câu trả lời duy nhất trả lời cho câu hỏi OP về nơi áp dụng bỏ học.
cơn bão

3

Bài báo gốc đề xuất các lớp bỏ học được sử dụng trên mỗi lớp được kết nối đầy đủ (dày đặc) trước khi xuất ra; nó không được sử dụng trên các lớp chập.

Chúng ta không được sử dụng lớp bỏ qua sau lớp chập khi trượt bộ lọc qua chiều rộng và chiều cao của hình ảnh đầu vào, chúng ta tạo ra bản đồ kích hoạt 2 chiều cung cấp phản hồi của bộ lọc đó ở mọi vị trí không gian. Vì vậy, khi lớp bỏ học trung hòa (làm cho nó bằng không) các tế bào thần kinh ngẫu nhiên, có khả năng mất đi tính năng rất quan trọng trong một hình ảnh trong quá trình đào tạo của chúng tôi.


2

Nếu tôi không sai, bạn có thể thêm nó sau tính phi tuyến tính của mọi ô:

layer_1 = (1/(1+np.exp(-(np.dot(X,synapse_0)))))
if(do_dropout):
    layer_1 *= np.random.binomial([np.ones((len(X),hidden_dim))],1-dropout_percent)[0] * (1.0/(1-dropout_percent))

Dòng đầu tiên là chức năng kích hoạt và cuối cùng là thêm phần bỏ vào kết quả. Vui lòng tham khảo blog này . Hi vọng điêu nay co ich.

Hoặc bạn có thể đặt nó vào phần nhúng đầu vào như trong đoạn trích này:

class BahdanauAttnDecoderRNN(nn.Module):
    def __init__(self, hidden_size, output_size, n_layers=1, dropout_p=0.1):
        super(AttnDecoderRNN, self).__init__()

        # Define parameters
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.n_layers = n_layers
        self.dropout_p = dropout_p
        self.max_length = max_length

        # Define layers
        self.embedding = nn.Embedding(output_size, hidden_size)
        self.dropout = nn.Dropout(dropout_p)
        self.attn = GeneralAttn(hidden_size)
        self.gru = nn.GRU(hidden_size * 2, hidden_size, n_layers, dropout=dropout_p)
        self.out = nn.Linear(hidden_size, output_size)

    def forward(self, word_input, last_hidden, encoder_outputs):
        # Note that we will only be running forward for a single decoder time step, but will use all encoder outputs

        # Get the embedding of the current input word (last output word)
        word_embedded = self.embedding(word_input).view(1, 1, -1) # S=1 x B x N
        word_embedded = self.dropout(word_embedded)

        # Calculate attention weights and apply to encoder outputs
        attn_weights = self.attn(last_hidden[-1], encoder_outputs)
        context = attn_weights.bmm(encoder_outputs.transpose(0, 1)) # B x 1 x N

        # Combine embedded input word and attended context, run through RNN
        rnn_input = torch.cat((word_embedded, context), 2)
        output, hidden = self.gru(rnn_input, last_hidden)

        # Final output layer
        output = output.squeeze(0) # B x N
        output = F.log_softmax(self.out(torch.cat((output, context), 1)))

        # Return final output, hidden state, and attention weights (for visualization)
        return output, hidden, attn_weights

Nguồn: https://github.com/spro/prreal-pytorch/blob/master/seq2seq-translation/seq2seq-translation.ipynb

Về mặt kỹ thuật, bạn có thể thêm lớp bỏ học ở cuối khối, ví dụ sau khi tích chập hoặc sau mã hóa RNN.


GeneralAttn được định nghĩa ở đâu?
rafaelvalle
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.