Warstwa Dropout w Sieciach Neuronowych


Co to jest Dropout?

Warstwa Dropout to zaawansowana technika regularyzacji wykorzystywana w trakcie treningu sieci neuronowych, mająca na celu zapobieganie zjawisku przeuczenia/ overfittingu. Przeuczenie to sytuacja, w której model zbyt dokładnie dostosowuje się do danych treningowych, co sprawia, że traci zdolność do skutecznego generalizowania na nowe, nieznane dane.

W praktyce, Warstwa Dropout działa poprzez losowe wyłączanie pewnej części jednostek (neuronów) w danej warstwie w każdej iteracji treningowej. Procent jednostek, które są losowo wyłączane, określa się za pomocą parametru dropout rate. Na przykład, jeśli ustawimy dropout rate na 0.5, to 50% neuronów danej warstwy zostanie losowo zdezaktywowanych podczas każdego kroku treningowego.

Cel

Celem Warstwy Dropout jest utrudnienie sieci neuronowej zapamiętywania konkretnych zależności z danych treningowych, co prowadzi do bardziej zrównoważonego i skutecznego modelu. Poprzez losowe eliminowanie pewnych neuronów, sieć jest zmuszona do poszukiwania bardziej ogólnych i trwałych wzorców w danych, co z kolei poprawia jej zdolność do generalizacji na nowe, nieznane dane.

Jak dokładnie działa Dropout?

Podczas fazy treningu, każdy neuron w warstwie Dropout może być aktywowany lub wyłączony z określonym prawdopodobieństwem (np. 0.5). Co ważne, w każdej iteracji treningowej inny zestaw neuronów zostanie wyzerowany, co prowadzi do stworzenia wielu “podmodeli”‘ w trakcie treningu. W fazie testowania, wszystkie jednostki są aktywowane.

Przyjrzyjmy się jak to dokładnie wygląda w czasie trenowania modelu w fazie forward i backward propagation.

  • Forward Propagation (Przód): Podczas forward propoagation danych przez sieć neuronową, każdy neuron w warstwie dropout ma szansę na “wyłączenie” z określonym prawdopodobieństwem (dropout rate). W praktyce, dla każdego neuronu, generowany jest losowy numer z zakresu od 0 do 1, a jeśli ten numer jest mniejszy niż dropout rate, to neuron jest “wyłączany” (aktywacja ustawiana na 0), w przeciwnym razie jest “włączany” (aktywacja nie zmieniana). Neurony, które zostały “wyłączone”, nie uczestniczą w przekazywaniu sygnałów w przód. Ich aktywacje są zerowane.
  • Backward Propagation (Wstecz): W trakcie wstecznej propagacji, gradienty są propagowane z warstw wyjściowych do warstw wejściowych, aż do samego początku sieci. Neurony, które były “wyłączone” podczas forward propagation, nadal są ignorowane podczas obliczeń gradientów wstecznych.

Zastosowanie Dropoutu jest jak tworzenie zespołu modeli w jednym. Każda iteracja treningowa prowadzi do stworzenia nowego “podmodelu”, który może specjalizować się w pewnych aspektach danych. Te różnice działają jak zrównoważona rada ekspertów, gdzie każdy z nich ma swoje mocne strony, tworząc zespołowy efekt.

Należy pamiętać, że Dropout powinien działać tylko w trybie treningu modelu, a w trybie ewaluacji być wyłączony. Tryb ewaluacji modelu odnosi się do fazy, w której przeprowadzane są oceny i prognozy na rzeczywistych danych, aby sprawdzić, jak dobrze model radzi sobie z nowymi, nie widzianymi wcześniej danymi. Wówczas wszystkie neurony są aktywowane, a model działa bez żadnych losowych wyłączeń. Włączanie dropoutu w tej fazie mogłoby wprowadzić niepożądaną losowość naszych wyników.

Korzyści z używania Dropoutu

  1. Zmniejszenie Overfittingu: Dropout pomaga w zapobieganiu przeuczeniu poprzez uniemożliwienie modelowi zbyt mocnego dostosowania się do danych treningowych.
  2. Poprawa Generalizacji: Dzięki losowemu wyłączaniu neuronów, model staje się bardziej odporny na zmienność danych, co poprawia jego zdolność do generalizacji na nowe dane.
  3. Lepsza reprodukowalność: Ponieważ Dropout działa na zasadzie losowości, powtarzanie treningu modelu daje różne “widzenia” danych, co poprawia stabilność modelu.

Implementacja Dropout

Tensorflow:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout

# Tworzenie modelu
model = Sequential([
    Dense(128, activation='relu', input_shape=(input_dim,)),
    Dropout(0.5),  # Dropout o prawdopodobieństwie 0.5 (50% neuronów zostaje wyzerowanych w następnej warstwie)
    Dense(64, activation='relu'),
    Dropout(0.3),
    Dense(output_dim, activation='softmax')
])

# Kompilacja modelu
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

Pytorch:

import torch
import torch.nn as nn

class CustomModel(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim, dropout_prob):
        super(CustomModel, self).__init__()
        self.layer1 = nn.Linear(input_dim, hidden_dim)
        self.dropout1 = nn.Dropout(p=dropout_prob)  ( p - procent neuronów, które będą losowo wyłączone z następnej warstwie)
        self.layer2 = nn.Linear(hidden_dim, output_dim)


    def forward(self, x):
        x = torch.relu(self.layer1(x))
        x = self.dropout1(x)
        x = torch.relu(self.layer2(x))
        return torch.softmax(x, dim=-1)

# Inicjalizacja modelu
model = CustomModel(input_dim, hidden_dim, output_dim, dropout_prob)

# Definicja funkcji kosztu i optymalizatora
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

Zobacz także:

  • Piotr Szymański

    Kategoria:

    Hejka naklejka! Google przeprowadza restrukturyzację swojego zespołu finansowego, kładąc większy nacisk na inwestycje w sztuczną inteligencję. Zmiany, o których poinformowała główna dyrektor finansowa Google, Ruth Porat, obejmują zwolnienia oraz przeniesienia pracowników i są odpowiedzią na spowolnienie wzrostu przychodów z reklam, jednocześnie stawiając na rosnącą rolę AI. CFO zaznaczyła, że restrukturyzacja jest częścią szerszej strategii przystosowania […]
  • Piotr Szymański

    Kategoria:

    Cześć! Zapraszam do podsumowania minionych 2 tygodni, wiadomości, które zaciekawiły mnie podczas surfowania po sieci telekomunikacyjnej Internet. Sekretarz Sił Powietrznych USA Frank Kendall ogłosił plany lotu myśliwcem F-16 sterowanym przez sztuczną inteligencję. Próba ma odbyć się wiosną tego roku i ma na celu zaprezentowanie potencjału sztucznej inteligencji w walce powietrznej, podkreślając przejście wojska w kierunku […]
  • Piotr Szymański

    Kategoria:

    Hejka naklejka! Świat jest podzielony. Jak zawsze, można by rzec. Wiecznie żywa reguła „dziel i rządź”, można by rzec. Świat podzielony na zwolenników sernika z rodzynkami, jak i bez rodzynków; wielbicieli sałatki jarzynowej jak i ludzi pozbawionych gustu; ludzi jeżdżących BMW, jak i masochistów, i tak dalej, i tym podobne. Przychodzę tu jednak ponad pewnymi […]
  • Piotr Szymański

    Kategoria:

    Siemson sportowe świry! Dumni po zwycięstwie, wierni po porażce. Tym razem jednak bez wstydu, hańby i kompromitacji. Nie podejrzewam naszego sztabu szkoleniowego o klasyczną inspirację rozwiązaniem stosowanym w Liverpoolu, natomiast nie miał bym nic przeciwko. We współpracy z Google DeepMind powstał bowiem TacticAI, model predykcyjny wspomagający wysiłki trenerów. Już w 2021 potrafił zgadnąć gdzie piłkarz […]
  • Piotr Szymański

    Kategoria:

    Hæ vinir! Dinozaury. Kto z nas nie byłby na pewnym etapie życia zafascynowany tymi uroczymi gadami. Nawet nie wiecie, ile Nas z nimi łączy! Nie tylko tak samo jesteśmy owodniowcami, ale i wyginiemy. Może nawet całkiem niedługo. Mrocznie się zrobiło, nie? Ale może zakończymy jakimś przyjemnym akcentem, więc bądźcie nastrojeni. Raport, stworzony przez Gladstone AI […]