Wprowadzenie

Aby uzyskać precyzyjne i efektywne wyniki w obszarze głębokiego uczenia się i uczenia maszynowego, niezbędna jest optymalizacja parametrów modelu. Stworzono szereg algorytmów optymalizacyjnych mających na celu poprawę zbieżności treningu i prędkości.

AdaGrad (algorytm adaptacyjnego gradientu) to jeden z takich algorytmów, który dostosowuje szybkość uczenia się każdego parametru w oparciu o jego wcześniejsze gradienty.

W tym eseju zagłębimy się w wewnętrzne działanie AdaGrad, jego zalety i wszelkie potencjalne wady.

Potrzeba adaptacyjnych współczynników uczenia się

Gradient Descent i inne konwencjonalne techniki optymalizacji wykorzystują stałą szybkość uczenia się przez cały czas trwania szkolenia. Jednak ta jednolita szybkość uczenia się może nie być najlepszą opcją dla wszystkich parametrów, co może powodować problemy ze zbieżnością. Niektóre parametry mogą wymagać częstszych aktualizacji, aby przyspieszyć konwergencję, podczas gdy inne mogą wymagać mniejszych zmian, aby zapobiec przekroczeniu idealnej wartości.

Aby rozwiązać ten problem, opracowano algorytmy zapewniające elastyczne tempo uczenia się. Podejścia te umożliwiają algorytmowi efektywne poruszanie się po krajobrazie optymalizacji poprzez dostosowanie szybkości uczenia się dla każdego parametru w oparciu o jego poprzednie gradienty.

Przedstawiamy AdaGrad

Jednym z najwcześniejszych algorytmów adaptacyjnej szybkości uczenia się jest AdaGrad, który Duchi i in. wprowadzony w 2011 r. Jego głównym celem jest przyspieszenie konwergencji parametrów rzadkiego gradientu. Algorytm śledzi poprzednie informacje o gradiencie każdego parametru, który następnie modyfikuje szybkość uczenia się, jeśli to konieczne.

Jak działa AdaGrad

Główną zasadą AdaGrad jest skalowanie szybkości uczenia się każdego parametru zgodnie z sumą kwadratów gradientów obserwowanych podczas treningu.

Etapy algorytmu są następujące:

Krok 1: Zainicjuj zmienne

  1. Zainicjuj parametry θ i małą stałą ϵ, aby uniknąć dzielenia przez zero.
  2. Zainicjuj sumę kwadratów zmiennej gradientów G zerami, która ma taki sam kształt jak θ.

Krok 2: Oblicz gradienty

  1. Oblicz gradient funkcji straty w odniesieniu do każdego parametru, ∇θJ(θ)

Krok 3: Zbierz kwadratowe gradienty

  1. Zaktualizuj sumę kwadratów gradientów G dla każdego parametru i: G[i] += (∇θJ(θ[i]))²

Krok 4: zaktualizuj parametry

  1. Zaktualizuj każdy parametr, korzystając z adaptacyjnej szybkości uczenia się: θ[i] -= (η / (√(G[i]) + ϵ)) * ∇θJ(θ[i])

W powyższych równaniach η oznacza szybkość uczenia się, a ∇θJ(θ[i]) reprezentuje gradient funkcji straty względem parametru θ[i].

Zalety AdaGradu

  • AdaGrad dostosowuje szybkość uczenia się każdego parametru, aby umożliwić skuteczne aktualizacje w oparciu o znaczenie parametru w procesie optymalizacji. Metoda ta zmniejsza potrzebę ręcznego dostosowywania szybkości uczenia się.
  • Solidność: AdaGrad dobrze radzi sobie z rzadkimi danymi i zmiennymi o różnych rozmiarach. Zapewnia to, że parametry, które otrzymują niewiele aktualizacji, uzyskują większą szybkość uczenia się, co przyspiesza konwergencję.

Zastrzeżenia i ograniczenia

  • Akumulacja kwadratów gradientów: suma kwadratów gradientów AdaGrad może z czasem bardzo wzrosnąć, co może spowodować zbyt niski spadek szybkości uczenia się. W rezultacie algorytm może doświadczyć powolnej zbieżności lub nawet przedwczesnego przeciągnięcia.
  • Brak kontroli: AdaGrad nie zapewnia szczegółowej kontroli nad szybkością uczenia się poszczególnych parametrów, ponieważ globalnie gromadzi kwadraty gradientów dla wszystkich parametrów. Może to stanowić problem w okolicznościach, w których konieczne są różne prędkości uczenia się.
    Ulepszenia i zmiany

Warianty i ulepszenia

AdaGrad ma wiele wad, stąd też proponowano różne modyfikacje i udoskonalenia.

Niektóre z nich składają się z:

  1. RMSprop: Aby zapobiec zbyt małemu spadkowi szybkości uczenia się, w tej formie do kwadratów gradientów dodaje się składnik zanikający.
  2. AdaDelta: zamiast wykorzystywać sumę globalną, rozwiązuje problem monotonicznie spadającego tempa uczenia się AdaGrad, stosując malejącą średnią z wcześniej podniesionych do kwadratu gradientów.
  3. Adam: Aby skuteczniej zarządzać procesem aktualizacji, rozszerzenie RMSprop zawiera terminy dynamiki.

Rozumiemy na praktycznym przykładzie:

Rozważmy przykład wykorzystania AdaGradu w szkoleniu sieci neuronowej do klasyfikacji obrazów.

Krok 1: Zaimportuj niezbędne biblioteki

import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adagrad

Krok 2: Załaduj i wstępnie przetwórz dane

Użyję zbioru danych MNIST, który zawiera obrazy cyfr pisanych odręcznie (0–9). Normalizujemy wartości pikseli do zakresu [0, 1] i konwertujemy etykiety na wektory zakodowane na gorąco.

# Load and preprocess the data
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
y_train = tf.keras.utils.to_categorical(y_train, num_classes=10)
y_test = tf.keras.utils.to_categorical(y_test, num_classes=10)

Krok 3: Zbuduj model sieci neuronowej

# Build the model
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(784,)))
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))

Krok 4: Skompiluj model za pomocą optymalizatora AdaGrad

# Compile the model with AdaGrad optimizer
learning_rate = 0.01
optimizer = Adagrad(learning_rate=learning_rate)
model.compile(optimizer=optimizer,
              loss='categorical_crossentropy',
              metrics=['accuracy'])

Krok 5: Wytrenuj model i oceń model

# Train the model
batch_size = 128
epochs = 10
model.fit(x_train.reshape(-1, 784), y_train,
          batch_size=batch_size,
          epochs=epochs,
          validation_data=(x_test.reshape(-1, 784), y_test))


# Evaluate the model on the test set
loss, accuracy = model.evaluate(x_test.reshape(-1, 784), y_test)
print(f"Test accuracy: {accuracy * 100:.2f}%")

Pytania i odpowiedzi dotyczące AdaGrad

P. Czy Adam jest lepszy od Adagradu?

Metody optymalizacji adaptacyjnej AdaGrad i Adam są stosowane w uczeniu maszynowym, chociaż stosują różne podejścia do zmiany wielkości kroku. Adam łączy zalety AdaGrad i RMSProp, uwzględniając zarówno pierwszy, jak i drugi moment gradientów, natomiast AdaGrad dostosowuje wielkość kroku w zależności od sumy kwadratów gradientów.

Ze względu na jego zdolność do zarządzania rzadkimi gradientami i odporność na wybór hiperparametrów, Adam jest często uważany za bardziej wydajny i częściej stosowany w rzeczywistości. Jednakże konkretne wyzwanie i zbiór danych zadecydują o tym, czy zastosować AdaGrad, czy Adam.

P. Co odróżnia Adagrad i Adadeltę od siebie?

Adadelta to dodatek do AdaGradu rozwiązujący problem wolnego tempa nauki. Adadelta aktualizuje rozmiar kroku za pomocą średniej ruchomej kwadratów gradientów, w przeciwieństwie do AdaGrad, który dostosowuje rozmiar kroku na podstawie sumy kwadratów gradientów. Dzięki temu Adadelta może uzyskać bardziej stabilne i elastyczne tempo uczenia się, co w pewnych okolicznościach może skutkować większą wydajnością i szybszą konwergencją.

P. W jaki sposób AdaGrad radzi sobie z rzadkimi gradientami?

Ponieważ AdaGrad dostosowuje wielkość kroku dla każdego parametru osobno, szczególnie dobrze nadaje się do zarządzania rzadkimi gradientami. W rezultacie często zmieniane parametry rzadkich gradientów będą miały większe rozmiary kroków, co umożliwi bardziej efektywną ich aktualizację. W przypadku problemów z rzadkimi gradientami ten adaptacyjny rozmiar kroku może skutkować większą wydajnością i szybszą zbieżnością.

P. Czy za pomocą AdaGrad można rozwiązać problemy związane z optymalizacją niewypukłą?

AdaGrad jest skuteczny w rozwiązywaniu niewypukłych problemów optymalizacyjnych. Według badań AdaGrad jest odporny na dobór hiperparametrów, ponieważ zbiega do punktu stacjonarnego w celu uzyskania gładkich, niewypukłych funkcji w najszybszym możliwym tempie. Dzięki AdaGrad można rozwiązywać różnorodne problemy optymalizacyjne, także niewypukłe.

Wniosek

Opracowanie wielu metod adaptacyjnego tempa uczenia się było możliwe dzięki rdzeniowemu algorytmowi optymalizacji AdaGrad. Chociaż w pewnych okolicznościach ma to duże zalety, zbieżność i precyzyjna kontrola szybkości uczenia się mogą być problematyczne. Naukowcy i praktycy prawdopodobnie będą szukać nowych odmian i udoskonaleń w miarę dalszego rozwoju głębokiego uczenia się w celu zwiększenia konwergencji szkoleń i szybkości.

Wybór najlepszej metody optymalizacji dla danego zadania uczenia maszynowego może być łatwiejszy, jeśli będziesz świadomy zalet i wad AdaGrad.

Jeśli uznasz moje notatki za wartościowe, będę wdzięczny za wsparcie w tworzeniu dodatkowych treści podobnego kalibru.

👋👋Bądźcie na bieżąco, miłej nauki i modelowania!!👋👋

Znajdź mnie tutaj👇

GitHub || Linkedin || Podsumowanie profilu || Instagram