Regularyzacja i skalowanie funkcji w nauczaniu online?

15

Powiedzmy, że mam klasyfikator regresji logistycznej. Podczas normalnego uczenia wsadowego stosuję termin regulizujący, aby zapobiec nadmiernemu dopasowaniu i utrzymać moją wagę na niskim poziomie. Normalizowałbym również i skalował moje funkcje.

W ustawieniach do nauki online otrzymuję ciągły strumień danych. Z każdym przykładem wykonuję aktualizację spadku gradientu, a następnie ją odrzucam. Czy mam używać terminów skalowania i regulowania funkcji w nauczaniu online? Jeśli tak, jak mogę to zrobić? Na przykład nie mam zestawu danych treningowych do skalowania. Nie mam również ustawionego sprawdzania poprawności parametru regularyzacji. Jeśli nie, dlaczego nie?

Podczas nauki online stale otrzymuję strumień przykładów. Dla każdego nowego przykładu robię prognozy. Następnie w następnym kroku otrzymuję rzeczywisty cel i aktualizuję gradient zejścia.

siamii
źródło

Odpowiedzi:

9

Wabbit projektu open-source Wabbit zawiera implementację SGD online, która jest ulepszona przez obliczenia w locie (online) 3 dodatkowych czynników wpływających na aktualizacje wagi. Czynniki te można włączyć / wyłączyć za pomocą odpowiednich opcji wiersza poleceń (domyślnie wszystkie trzy są włączone, --sgdopcja wyłącza je wszystkie, tj .: wraca do „klasycznego” SGD).

3 opcje poprawy SGD to:

  • --normalized aktualizacje dostosowane do skali każdej funkcji
  • --adaptive używa gradientu adaptacyjnego (AdaGrad) (Duchi, Hazan, Singer)
  • --invariant aktualizacje ze świadomością ważności (Karampatziakis, Langford)

Razem zapewniają, że proces uczenia się online dokonuje 3-drożnej automatycznej kompensacji / korekty dla:

  • skalowanie według funkcji (duże i małe wartości)
  • zanikanie szybkości uczenia się dla poszczególnych funkcji na podstawie ważności funkcji
  • adaptacyjne dostosowanie szybkości uczenia się dla poszczególnych funkcji w odniesieniu do rozpowszechnienia / rzadkości cech w przykładach

Rezultatem jest to, że nie trzeba wstępnie normalizować ani skalować różnych funkcji, aby uczeń był mniej tendencyjny i bardziej skuteczny.

Dodatkowo wabpal wabbit implementuje również regulację online poprzez obcięte gradientowe zejście z opcjami regulowania:

  • --l1 (Norma L1)
  • --l2 (Norma L2)

Moje doświadczenia z tymi ulepszeniami wielu zestawów danych polegały na tym, że znacznie poprawiły one dokładność modelu i płynniejszą konwergencję, gdy każdy z nich został wprowadzony do kodu.

Oto kilka artykułów akademickich, aby uzyskać więcej szczegółów związanych z tymi ulepszeniami:

arielf
źródło
Arielf - Jeśli wyłączysz trzy ulepszenia (via --sgd), sgd zostanie pokazany na slajdzie 11 github.com/JohnLangford/vowpal_wabbit/wiki/v6.1_tutorial.pdf , aby następnie power_t i initial_t stały się istotne ?
B_Miner
1
B_miner: o ile rozumiem --power_ti --initial_tsą to opcje globalne (nie dla poszczególnych funkcji). --sgdpowraca tylko do „klasycznego” SGD. IOW: --sgdtylko anuluje --invariant, --normalizedi --adaptive(co oznacza oddzielne stawki uczenia się według funkcji)
arielf
Czy wiesz, czy istnieje sposób na wykonanie tych aktualizacji w sposób równoległy asynchroniczny (tak jak w przypadku asynchronicznego SGD)? Wygląda na to, że VW z wieloma pracownikami uśrednia model każdego pracownika na końcu każdego przejścia. Jakieś dokumenty / wskazówki dotyczące oprogramowania, jak to zrobić?
JC1
1

tak, z pewnością potrzebujesz regularyzacji ... pomaga to również zejściem gradientu (i zainicjalizować tempo uczenia się do 1 / C)

patrz np. artykuł SGD-QN http://leon.bottou.org/papers artykuły bottou

tak naprawdę nie wyjaśniłeś, co masz na myśli przez naukę online: np. za każdy punkt otrzymujesz wartość docelową? Nie wiem, jak byś to uwzględnił ... szukając C ... Myślę, że miałbyś wielu klasyfikatorów z różnymi warunkami regularyzacji i śledziłbyś błąd prognozy (przed aktualizacją wag)

seanv507
źródło
Poprzez naukę online otrzymuję jeden przykład i przewiduję. W następnym kroku otrzymam rzeczywisty cel dla mojego przykładu i wykonam aktualizację spadku gradientu.
siamii
więc powinno być tak, jak zasugerowałem - prowadzisz grupę klasyfikatorów z innym parametrem regularyzacji i śledzisz błędy prognoz każdego klasyfikatora.
seanv507
Nie jestem pewien, co masz na myśli, inicjalizując tempo uczenia się do 1 / C. Co to jest C? Czy mówisz o maszynach wspierających? Mówię o regresji logistycznej, w której regularyzator ma współczynnik lambda. Nie wiem, co to ma wspólnego ze wskaźnikiem uczenia się.
siamii
tak, parametr regulacyjny l2, C, lambda lub cokolwiek innego. jest to coś, co jest wspomniane na marginesie w sgdqn bottou, i przypuszczam, że lepiej wyjaśnione gdzie indziej. w zasadzie twój wskaźnik uczenia się powinien wynosić 1 / krzywiznę (odwrotność Hesji) twojej powierzchni błędu. teraz, jeśli twoja powierzchnia błędu to
seanv507
1
Czy muszę także skalować funkcje? Jak to zrobić w otoczeniu online?
siamii