TGViewer
Data Science | Вопросы собесов Data Science | Вопросы собесов @easy_ds · 4.89K subscribers
Post #2609 414
🤔 Как работает градиентный спуск?

Это фундаментальный алгоритм оптимизации, используемый для минимизации функции потерь в машинном обучении и статистической оптимизации. Этот метод основан на идее, что если вы хотите найти минимум функции, вы должны двигаться в направлении, противоположном градиенту функции в данной точке.

🚩Основные шаги алгоритма

1⃣Инициализация
Начните с случайного значения параметра(ов) \( \theta \) (например, веса в линейной регрессии).

2⃣Вычисление градиента
Определите градиент функции потерь в текущей точке \( \theta \). Градиент показывает направление наискорейшего увеличения функции, поэтому для минимизации мы движемся в противоположном направлении.

3⃣Обновление параметра
Обновите параметр, двигаясь в направлении, противоположном градиенту:
\theta := \theta - \eta \nabla_{\theta} J(\theta)
где \( \eta \) — это скорость обучения, которая определяет размер шага.

4⃣Повторение
Повторяйте шаги 2 и 3, пока не будет достигнут критерий остановки (например, когда изменение \( \theta \) становится незначительным или количество итераций превышает предел).

🚩Важные аспекты

🟠Скорость обучения \( \eta \)
Если скорость обучения слишком велика, может произойти "перепрыгивание" минимума, если слишком мала — процесс обучения будет очень медленным.

🟠Выбор начальной точки
Начальная точка может существенно повлиять на то, достигнет ли процесс локального минимума, глобального минимума или застрянет в плато.

🟠Нормализация данных
При работе с многомерными данными рекомендуется нормализовать данные, чтобы обеспечить равномерное масштабирование признаков. Это ускоряет сходимость градиентного спуска.

import numpy as np

def gradient_descent(x, y, lr=0.01, epochs=1000):
m, b = 0, 0 # начальные параметры
n = len(y) # количество данных
for _ in range(epochs):
f = y - (m*x + b) # функция потерь
# Градиенты по m и b
dm = -2 * np.sum(x * f) / n
db = -2 * np.sum(f) / n
# Обновление параметров
m -= lr

* dm
b -= lr * db
return m, b

# Пример данных
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])

m, b = gradient_descent(x, y, lr=0.01, epochs=1000)
print(f"Наклон m: {m}, Пересечение b: {b}")


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_ds
  1. Oct 11, 2026🤔 Что такое декоратор? Это функция, модифицирующая или расширяющая поведение другой функц…
  2. Oct 11, 2026Post #2699
  3. Oct 11, 2026🤔 Как валидировать временные ряды ? Валидация временных рядов требует специальных подходо…
  4. Oct 10, 2026Post #2697
  5. Oct 10, 2026🤔 Что такое переобучение модели? Переобучение (overfitting) происходит, когда модель слиш…
  6. Oct 9, 2026Post #2695
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →