Итерационный метод нахождения локального экстремума (минимума и максимума) функции с помощью движения вдоль градиента. Тестирование стандартного стохастического градиентного спуска как популярного алгоритма для широкого спектра моделей машинного обучения.
Аннотация к работе
Министерство образования и науки РФ Федеральное государственное автономное образовательное учреждениеСтохастический градиентный спуск с импульсом запоминает обновления на каждой итерации, и определяет следующее обновление в виде линейной комбинации градиента и предыдущего обновления: Что приводит к: где параметр , который сводит к минимуму , должен быть оценен и размер шага (иногда называемый скоростью обучения в машинном обучении). X_train, y_train = shuffle(X_train, y_train) for i in range(0, X_train.shape[0], batch_size): X_train_mini = X_train[i:i batch_size] y_train_mini = y_train[i:i batch_size] model = sgd_step(model, X_train_mini, y_train_mini) return model Выглядит она так: def sgd_step(model, X_train, y_train): grad = get_batch_grad(model, X_train, y_train) model = model.copy() for layer in grad: model[layer] = learning_rate * grad[layer] return model Выглядит она так: def get_batch_grad(model, X_train, y_train): xs, hs, errs = [], [], [] for x, cls_idx in zip(X_train, y_train): h, y_pred = forward(x, model) y_true = np.zeros(n_class) y_true[int(cls_idx)] = 1. err = y_true - y_pred xs.append(x) hs.append(h) errs.append(err) return backward(model, np.array(xs), np.array(hs), np.array(errs)) Функция momentum приведена ниже: def momentum(model, X_train, y_train, batch_size): velocity = {k: np.zeros_like(v) for k, v in model.items()} gamma =.9 batches = get_batch(X_train, y_train, batch_size) for iter in range(1, n_iter 1): idx = np.random.randint(0, len(batches))Из сравнительного анализа понятно, что при использовании большого значения скорости обучения, методы с адаптивной скоростью обучения выигрывают у методов с постоянной скоростью обучения.