Zejście gradientu w Pythonie

Zejście gradientu w Pythonie
Zejście gradientu jest algorytmem, który pomaga nam znaleźć minimalny błąd lub gdzie wartość straty jest mniejsza. Wybieramy dowolny punkt funkcji, a następnie poruszamy się powoli w kierunku negatywnego, abyśmy mogli osiągnąć minimalny błąd. Ale podczas poruszania się, dbamy również o wartość błędu, która jest wartością odejmowaną od prognozy i wartości prawdy. Ponadto nie powinno stać się negatywne.

Możemy to lepiej zrozumieć z następującego przykładu:

Załóżmy, że maszyna przekształca kilometry na mile.

Ale nie mamy formuły przekształcania kilometrów na mile. Wiemy, że obie wartości są liniowe, co oznacza, że ​​jeśli podwoimy mile, to kilometry również podwójne.

Formuła jest prezentowana w ten sposób:

Mil = kilometry * c

Tutaj C jest stałą i nie znamy dokładnej wartości stałej.

Mamy jakąś uniwersalną wartość prawdy jako wskazówkę. Tabela prawdy podano poniżej:

Teraz będziemy używać losowej wartości C i określić wynik.

Tak więc używamy wartości C jako 0.5, a wartość kilometrów wynosi 100. To daje nam 50 jako odpowiedź. Jak wiemy bardzo dobrze, zgodnie z tabelą prawdy, wartość powinna wynosić 62.137. Więc błąd musimy dowiedzieć się, jak poniżej:

Błąd = prawda - obliczona

= 62.137 - 50

= 12.137

W ten sam sposób możemy zobaczyć wynik na poniższym obrazku:


Teraz mamy błąd 12.137. Jak wspomniano wcześniej, związek między milami i kilometrem jest liniowy. Jeśli więc zwiększy wartość losowej stałej C, możemy uzyskać mniej błędów.

Tym razem po prostu zmieniamy wartość C z 0.5 do 0.6 i osiągnij wartość błędu 2.137, jak pokazano na poniższym obrazku:

Teraz nasz poziom błędów poprawia się z 12.317 do 2.137. Nadal możemy poprawić błąd, używając większej liczby domysłu o wartości C. Domyślamy się, że wartość C wyniesie 0.6 do 0.7 i osiągnęliśmy błąd wyjściowy -7.863.

Tym razem błąd przecina tabelę prawdy i rzeczywistą wartość. Następnie przekraczamy minimalny błąd. Z tego błędu możemy powiedzieć, że nasz wynik 0.6 (błąd = 2.137) był lepszy niż 0.7 (błąd = -7.863).

Dlaczego nie próbowaliśmy z małymi zmianami lub szybkością uczenia się stałej wartości C? Po prostu zmienimy wartość C z 0.6 do 0.61, nie do 0.7.

Wartość C = 0.61, daje nam mniejszy błąd 1.137, co jest lepsze niż 0.6 (błąd = 2.137).


Teraz mamy wartość C, która wynosi 0.61 i daje błąd 1.137 tylko z prawidłowej wartości 62.137.

Jest to algorytm zejścia gradientu, który pomaga znaleźć minimalny błąd.

Kod Python:

Konwertujemy powyższy scenariusz w programowanie Pythona. Zainicjujemy wszystkie zmienne, których potrzebujemy do tego programu Python. Definiujemy również metodę Kilo_mile, w której przekazujemy parametr C (stała).


W poniższym kodzie definiujemy tylko warunki zatrzymania i maksymalną iterację. Jak wspomnieliśmy, kod zostanie zatrzymany albo po osiągnięciu maksymalnej iteracji lub wartości błędu większej niż precyzja. W rezultacie stała wartość automatycznie osiąga wartość 0.6213, który ma niewielki błąd. Tak więc nasze zejście gradientowe również będzie działać w ten sposób.

Zejście gradientu w Pythonie

Importujemy wymagane pakiety i wraz z wbudowanymi zestawami danych Sklearn. Następnie ustawiamy wskaźnik uczenia się i kilka iteracji, jak pokazano poniżej na zdjęciu:

Pokazaliśmy funkcję sigmoidów na powyższym obrazie. Teraz konwertujemy to w formę matematyczną, jak pokazano na poniższym obrazku. Importujemy również wbudowany zestaw danych Sklearn, który ma dwie funkcje i dwa centra.

Teraz możemy zobaczyć wartości x i kształtu. Kształt pokazuje, że całkowita liczba wierszy wynosi 1000, a dwie kolumny, które ustawiliśmy wcześniej.

Dodajemy jedną kolumnę na końcu każdego rzędu x, aby użyć stronniczości jako wartości do wyszkolonej, jak pokazano poniżej. Teraz kształt x to 1000 wierszy i trzy kolumny.

Zmieniamy również Y, a teraz ma 1000 wierszy i jedną kolumnę, jak pokazano poniżej:

Definiujemy macierz masy również za pomocą kształtu x, jak pokazano poniżej:

Teraz stworzyliśmy pochodną sigmoidu i założyliśmy, że wartość x będzie po przejściu przez funkcję aktywacji sigmoidów, którą pokazaliśmy wcześniej.

Następnie pętamy, aż do osiągnięcia liczby iteracji, które już ustaliliśmy. Dowiadujemy się, że po przejściu przez funkcje aktywacji sigmoidów. Obliczamy błąd i obliczamy gradient, aby zaktualizować wagi, jak pokazano poniżej w kodzie. Oszczędzamy również stratę na każdej epoce na liście historii, aby wyświetlić wykres strat.

Teraz możemy je zobaczyć na każdej epoce. Błąd maleje.

Teraz widzimy, że wartość błędu zmniejsza się w sposób ciągły. To jest algorytm zejścia gradientu.