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! Zapraszam na skrót z minionych dwóch tygodni, który przyswoić możecie przy ciepłej herbatce w te mroczne, szare dni. W opublikowanym przez Google 14 listopada ostrzeżeniu wskazano kilka najważniejszych rodzajów oszustw internetowych. Uwagę zwrócono między na niebezpieczne techniki ataków typu cloaking, które nabierają nowego wymiaru dzięki wykorzystaniu sztucznej inteligencji. Cloaking polega na ukrywaniu przed użytkownikiem […]
  • Piotr Szymański

    Kategoria:

    Hejka po dłuższej przerwie! Zaczynamy świeżym tematem. Raptem kilkanaście godzin temu do użytkowników trafiła, zapowiedziana 25 lipca, funkcja SearchGPT od OpenAI, umożliwiająca, w przeciwieństwie do tradycyjnych modeli językowych, na integrację z internetem w czasie rzeczywistym. SearchGPT ma dostęp do aktualnych informacji z sieci, co pozwala na udzielanie odpowiedzi opartych na najnowszych danych. Ponadto SearchGPT dostarcza […]
  • Piotr Szymański

    Kategoria:

    Hejson! Dzisiejsza konsumpcja mediów ma to do siebie, że odbywa się na 5-6 calowym ekranie telefonu. Ma też to do siebie, że zanim zdjęcie dotrze do Ciebie, to przejdzie przez 6 konwersacji na jedynym słusznym messengerze, zatem zostanie 6-cio krotnie skompresowane. W międzyczasie, jak będziecie mieli pecha, to jakiś wujek zrobi screena, zamiast zapisać zdjęcie […]
  • Piotr Szymański

    Kategoria:

    Hej! Robimy bardzo dużo zdjęć, a co za tym idzie – wiele z nich jest niechlujnych, z zabałagnionym tłem. Możemy jednak chcieć wykorzystać je do pochwalenia się naszym ryjkiem na jakimś publicznym profilu, gdyż np. naturalne, miękkie światło korzystnie eksponuje naszą facjatę. Podejścia mogą być dwa – albo zdecydujemy się na blur bądź zupełne usunięcie […]
  • Piotr Szymański

    Kategoria:

    Strzałeczka. Nvidia przejęła OctoAI, startup specjalizujący się w optymalizacji modeli uczenia maszynowego. To już piąta akwizycja Nvidii w 2024 roku, co czyni aktualnie nam panujący rok rekordowym pod względem liczby przejęć. OctoAI, założone w 2019 roku przez Luisa Ceze, skupiło się na tworzeniu oprogramowania zwiększającego wydajność modeli uczenia maszynowego na różnych platformach sprzętowych. Oprogramowanie OctoAI […]