gradient descent
Főnév
gradient descent (tsz. gradient descents)
- (informatika, mesterséges intelligencia, algoritmusok) A Gradient Descent egy numerikus optimalizációs módszer, amelyet széles körben használnak gépi tanulásban, mélytanulásban és általános optimalizációs problémák megoldására. Az algoritmus célja egy adott függvény minimumának (vagy maximumának) megtalálása azáltal, hogy az aktuális pontban kiszámítja a gradiens irányát, és abba az irányba mozog, ahol a függvényérték csökken.
Működési elv
- Kezdőpont kiválasztása:
- Válassz egy véletlenszerű kezdő pontot a függvény tartományában.
- Gradiens kiszámítása:
- Számítsd ki a függvény gradiensét ( ) az aktuális pontban.
- Lépésvégrehajtás:
- Mozogj a negatív gradiens irányába a következőképpen: ahol:
- : Lépésköz (tanulási ráta),
- : A gradiens az pontban.
- Mozogj a negatív gradiens irányába a következőképpen: ahol:
- Iterációk ismétlése:
- Ismételd, amíg el nem érsz egy előre meghatározott kritériumot (pl. a gradiens normája kicsi lesz, vagy a függvényérték változása elhanyagolható).
Matematikai alapok
A gradiens egy vektor, amely egy adott pontban a függvény legmeredekebb emelkedésének irányát adja meg. Ezért a gradiens negatív iránya a legmeredekebb csökkenés iránya.
Típusai
- Batch Gradient Descent:
- Az összes adatpontot felhasználja minden lépésben.
- Pontos, de nagy adathalmazok esetén lassú lehet.
- Stochastic Gradient Descent (SGD):
- Egyetlen adatpont alapján frissíti a paramétereket.
- Gyorsabb, de zajosabb konvergenciát eredményez.
- Mini-Batch Gradient Descent:
- Az adatokat kisebb csomagokra (batch-ekre) osztja, és ezek alapján frissíti a paramétereket.
- Az SGD és batch módszer közötti kompromisszum.
Paraméterek hatása
- Lépésköz ( ):
- Ha túl kicsi, az algoritmus lassan konvergál.
- Ha túl nagy, az algoritmus oszcillálhat vagy divergens lehet.
- Kezdőpont:
- Nem konvex függvények esetén a kezdőpont befolyásolhatja, hogy az algoritmus melyik lokális minimumhoz konvergál.
Előnyök
- Egyszerű implementáció.
- Alkalmas nagyméretű problémákhoz.
- Rugalmas, különböző variánsokkal testreszabható.
Hátrányok
- Lokális optimumok:
- Nem konvex függvényeknél elakadhat lokális optimumokban.
- Lassú konvergencia:
- Ha a függvény túl lapos, a konvergencia lassú lehet.
- Tanulási ráta érzékenysége:
- A helytelen lépésköz problémákhoz vezethet.
Példa
Optimalizálandó függvény:
Cél: a minimum helyének meghatározása.
Python implementáció
def gradient_descent(f_prime, start, learning_rate, iterations):
x = start
for i in range(iterations):
grad = f_prime(x)
x = x - learning_rate * grad
print(f"Iteráció {i+1}: x = {x:.4f}, f'(x) = {grad:.4f}")
return x
# Függvény deriváltja
f_prime = lambda x: 2*x - 4
# Paraméterek
start_point = 0.0
learning_rate = 0.1
max_iterations = 20
# Gradient descent futtatása
optimal_x = gradient_descent(f_prime, start_point, learning_rate, max_iterations)
print(f"Optimális x érték: {optimal_x:.4f}")
Kimenet:
Iteráció 1: x = 0.4000, f'(x) = -4.0000 Iteráció 2: x = 0.7600, f'(x) = -3.2000 Iteráció 3: x = 1.0080, f'(x) = -2.4800 ... Iteráció 20: x = 1.9999, f'(x) = -0.0002 Optimális x érték: 2.0000
C++ implementáció
#include <iostream>
#include <cmath>
using namespace std;
double gradient_descent(double (*f_prime)(double), double start, double learning_rate, int iterations) {
double x = start;
for (int i = 0; i < iterations; ++i) {
double grad = f_prime(x);
x = x - learning_rate * grad;
cout << "Iteráció " << i + 1 << ": x = " << x << ", f'(x) = " << grad << endl;
}
return x;
}
// Függvény deriváltja
double f_prime(double x) {
return 2 * x - 4;
}
int main() {
// Paraméterek
double start_point = 0.0;
double learning_rate = 0.1;
int max_iterations = 20;
// Gradient descent futtatása
double optimal_x = gradient_descent(f_prime, start_point, learning_rate, max_iterations);
cout << "Optimális x érték: " << optimal_x << endl;
return 0;
}
Kimenet:
Iteráció 1: x = 0.4, f'(x) = -4 Iteráció 2: x = 0.76, f'(x) = -3.2 ... Iteráció 20: x = 2, f'(x) = 0 Optimális x érték: 2
Alkalmazások
- Gépi tanulás:
- Súlyok és paraméterek optimalizálása neurális hálózatokban.
- Optimalizáció:
- Matematikai modellek illesztése adatokhoz.
- Adatelemzés:
- Függvények minimális hibájának megtalálása.
Összegzés
A Gradient Descent egy hatékony és egyszerű optimalizációs algoritmus, amely széles körben alkalmazható különböző területeken. Bár érzékeny a paraméterekre, megfelelő konfigurálás esetén robusztus eredményeket nyújt. Modern alkalmazásokban gyakran kombinálják továbbfejlesztett technikákkal, például adaptív tanulási rátával (Adam, RMSprop).
- gradient descent - Szótár.net (en-hu)
- gradient descent - Sztaki (en-hu)
- gradient descent - Merriam–Webster
- gradient descent - Cambridge
- gradient descent - WordNet
- gradient descent - Яндекс (en-ru)
- gradient descent - Google (en-hu)
- gradient descent - Wikidata
- gradient descent - Wikipédia (angol)