В проекте реализован набор алгоритмов градиентной оптимизации для задач регрессии с единой архитектурой и поддержкой различных функций потерь и регуляризации.
Реализация включает:
- базовый градиентный спуск
- стохастические методы
- методы с иннерцией (momentum)
- адаптивные алгоритмы оптимизации (adam)
Особое внимание уделено модульности, расширяемости и единообразию интерфейсов.
Разработать универсальный фреймворк для оптимизации линейных моделей, позволяющий:
- легко переключаться между различными алгоритмами оптимизации
- использовать разные функции потерь
- добавлять регуляризацию без изменения основной логики
Реализованы следующие методы оптимизации:
- Vanilla Gradient Descent — классический полный градиент
- Stochastic Gradient Descent (SGD) — стохастическая оценка градиента по батчу
- Momentum Gradient Descent — ускорение с помощью накопления иннерции
- Adam (Adaptive Moment Estimation) — адаптивный алгоритм с моментами первого и второго порядка
Для каждого метода также доступна версия с L2-регуляризацией.
Поддерживаются несколько функций потерь:
- MSE (Mean Squared Error)
- MAE (Mean Absolute Error)
- Huber Loss
- Log-Cosh Loss
Это позволяет анализировать поведение различных алгоритмов в зависимости от свойств функции ошибки.
Проект построен на основе объектно-ориентированного подхода:
BaseDescent— базовый класс с общей логикой- отдельные классы для каждого алгоритма
- enum
LossFunctionдля выбора функции потерь - единый интерфейс:
step()— один шаг оптимизацииcalc_gradient()— вычисление градиентаupdate_weights()— обновление весов
Реализована стратегия убывающего learning rate:
Это позволяет:
- стабилизировать обучение
- уменьшать шаг по мере сходимости
Поддерживается L2-регуляризация:
- добавляется напрямую в градиент
- реализована через отдельный базовый класс
- легко комбинируется с любым методом оптимизации
step(x, y)— выполнить один шаг оптимизацииpredict(x)— получить предсказания моделиcalc_loss(x, y)— вычислить значение функции потерь
- единая система конфигурации (
get_descent) - поддержка различных стратегий обновления весов
- разделение логики вычисления градиента и обновления параметров
- расширяемая архитектура (возможность добавления новых алгоритмов)
- добавление новых методов оптимизации (RMSProp, Nesterov)
- поддержка мини-батчей в базовом классе
- визуализация процесса сходимости
- расширение на нелинейные модели
- Python - основной язык программирования
- pandas, numpy, scipy - хранение и обработка данных
- Jupyter Notebook - интерактивная среда для разработки проекта