Вот пример алгоритма градиентного спуска, реализованного на Python:
import numpy as np
def gradient_descent(X, y, learning_rate=0.01, num_iterations=100):
m = len(y) # number of training examples
n = X.shape[1] # number of features
theta = np.zeros((n, 1)) # initialize parameters to zeros
cost_history = []
for iteration in range(num_iterations):
# Calculate predictions
predictions = np.dot(X, theta)
# Calculate error
error = predictions - y
# Calculate gradients
gradients = (1 / m) * np.dot(X.T, error)
# Update parameters
theta = theta - learning_rate * gradients
# Calculate cost
cost = (1 / (2 * m)) * np.sum(np.square(error))
cost_history.append(cost)
return theta, cost_history
В этом коде Xпредставляет матрицу признаков, yпредставляет целевой вектор, learning_rate— скорость обучения алгоритма и num_iterations— количество выполняемых итераций. Функция возвращает оптимизированные параметры thetaи историю значений стоимости cost_historyво время обучения.
Вот еще несколько вариантов и методов градиентного спуска, которые могут оказаться вам полезными:
-
Стохастический градиентный спуск (SGD). Вместо использования всего обучающего набора для расчета градиентов SGD случайным образом выбирает один обучающий пример на каждой итерации для обновления параметров. Это может быть более эффективно с точки зрения вычислений для больших наборов данных.
-
Мини-пакетный градиентный спуск: это компромисс между пакетным градиентным спуском и SGD. Вместо использования всего обучающего набора или одного примера мини-пакетный градиентный спуск использует небольшое случайно выбранное подмножество (мини-пакет) обучающего набора для расчета градиентов.
-
Импульс: Импульс помогает ускорить градиентный спуск, накапливая часть предыдущих градиентов для определения следующего обновления. Это может помочь преодолеть локальные минимумы и ускорить сходимость.
-
График скорости обучения. Вместо использования фиксированной скорости обучения на протяжении всего обучения графики скорости обучения корректируют скорость обучения с течением времени. Общие графики включают снижение скорости обучения линейно, экспоненциально или на основе заранее определенной функции.
-
Адаптивная скорость обучения. Такие методы, как AdaGrad, RMSprop и Adam, адаптируют скорость обучения для каждого параметра на основе их исторических градиентов. Эти методы могут улучшить сходимость и обрабатывать объекты разного масштаба.