Pomyślmy o uczeniu maszynowym jako o sztuce tworzenia modeli, które dobrze przewidują wyniki na podstawie przyszłych, nieznanych danych. Okej, wydaje się proste, ale w tym kontekście zadać można sobie pytanie: na ile dokładnie chcemy nauczyć się danych obecnych? W praktyce to, że model działa świetnie na danych, na których go trenowaliśmy, nie musi wcale oznaczać, że równie dobrze będzie na tych, których nigdy wcześniej “nie widział”. Zjawisko zbytniego dopasowania do danych treningowych nazywamy przeuczeniem (ang. overfitting).
Tu na ratunek przychodzą różne techniki regularyzacji, które można porównać do zasad fair play w sporcie. Tak jak te zasady zapobiegają nieuczciwym praktykom i sprawiają, że gra jest bardziej ekscytująca, tak regularyzacja pomaga modelom nie “oszukiwać” i nie uczyć na pamięć szczegółów z danych, a raczej ogólnych zasad.
Funkcja kosztu
Regresja liniowa:
Funkcja kosztu (funkcja straty), jest miarą tego, jak dobrze wyznaczona przez nas linia przewiduje rzeczywiste wyniki. W przypadku regresji liniowej, najczęściej używa MSE (Mean Squared Error), czyli błędu średniokwadratowego. Matematycznie wygląda to tak:
J(\beta) = \frac{1}{2m} \sum_{i=1}^{m} (\hat{y}^{(i)} – y^{(i)})^2
I jest to po prostu średnia wartość kwadratów różnic pomiędzy rzeczywistymi a prognozowanymi wynikami, gdzie mniejsza wartość MSE oznacza lepsze dopasowanie modelu do danych. Podczas procesu uczenia algorytmu, staramy się więc tą wartość minimalizować.
Regresja logistyczna:
W przypadku regresji logistycznej, modelowana zmienna nie pochodzi już z rozkładu ciągłego, a zerojedynkowego. Musimy zatem dostosować także minimalizowaną funkcję kosztu. Najczęściej używana jest entropia krzyżowa, wyrażona wzorem:
J(\beta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\beta(x^{(i)})) + (1 – y^{(i)}) \log(1 – h_\beta(x^{(i)})) \right]
Ta funkcja, choć wydaje się nieco skomplikowana, mierzy po prostu różnicę pomiędzy rzeczywistymi etykietami (0 lub 1) a przewidywanymi prawdopodobieństwami. Minimalizowana jest średnia obliczonych wartości. Dla pojedynczej próbki, w zależności od otrzymanej wartości, wartość funkcji kosztu wygląda tak:
Techniki regularyzacji:
Regularyzacja L1 (Lasso)
Regularyzacja L1 polega w praktyce na dodaniu dodatkowego elementu do funkcji kosztu. Sprawia to, że niektóre współczynniki zaczynają się zbliżać do zera, co można interpretować jako eliminowanie mniej ważnych cech z modelu. Innymi słowy, zapobiegamy sytuacji, w której wartości współczynników /beta (nawet jeśli “rozwiązują” układ równań z niskim średnim błędem), przyjmują zbyt duże wartości.
Dla regresji liniowej, funkcja kosztu będzie zatem wyglądać następująco:
J(\beta) = \frac{1}{2m} \sum_{i=1}^{m} (\hat{y}^{(i)} – y^{(i)})^2 + \alpha \sum_{j=1}^{n} |\beta_j|
Zaś dla regresji logistycznej:
J(\beta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\beta(x^{(i)})) + (1 – y^{(i)}) \log(1 – h_\beta(x^{(i)})) \right] + \alpha \sum_{j=1}^{n} |\beta_j|
W obu przypadkach, do pierwotnej funkcji kosztu dodaliśmy po prostu dodatkowy element. Model jest zatem “karany” jeśli suma wartości współczynników rośnie.
Regularyzacja L2 (Ridge)
Regularyzacja L2 również dodaje dodatkowy element do funkcji kosztu, ale tym razem jest to suma kwadratów współczynników modelu. To nie eliminuje cech, ale wciąż “karze” je za zbyt duże wartości.
Regresja liniowa:
J(\beta) = \frac{1}{2m} \sum_{i=1}^{m} (\hat{y}^{(i)} – y^{(i)})^2 + \frac{\alpha}{2} \sum_{j=1}^{n} \beta_j^2
Regresja logistyczna:
J(\beta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\beta(x^{(i)})) + (1 – y^{(i)}) \log(1 – h_\beta(x^{(i)})) \right] + \frac{\alpha}{2} \sum_{j=1}^{n} \beta_j^2
Elastic Net
Elastic Net to połączenie obu powyższych tych technik. W praktyce oznacza to, że dodajemy do funkcji kosztu zarówno sumę absolutnych wartości współczynników (L1), jak i sumę ich kwadratów (L2). Funkcje kosztu będą zatem wyglądać następująco:
Regresja liniowa:
J(\beta) = \frac{1}{2m} \sum_{i=1}^{m} (\hat{y}^{(i)} – y^{(i)})^2 + \alpha \rho \sum_{j=1}^{n} |\beta_j| + \frac{\alpha (1-\rho)}{2} \sum_{j=1}^{n} \beta_j^2
Regresja logistyczna:
J(\beta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\beta(x^{(i)})) + (1 – y^{(i)}) \log(1 – h_\beta(x^{(i)})) \right] + \alpha \rho \sum_{j=1}^{n} |\beta_j| + \frac{\alpha (1-\rho)}{2} \sum_{j=1}^{n} \beta_j^2
W tym wszystkim pozostał jeszcze jeden nieomówiony element wzoru – alfa. Jest to współczynnik, dzięki któremu możemy sterować siłą regularyzacji. Im większa alfa tym bardziej bierzemy pod uwagę dodatkowy czynnik w funkcji kosztu.
Każda z omówionych powyżej technik ma swoje zalety i wady, a wybór między nimi zależy od konkretnego przypadku. Najważniejsze jest jednak to, że regularyzacja pomaga nam stworzyć modele, które są bardziej uogólnione, zatem lepiej działają na nowych danych. A chyba właśnie to jest naszym celem?