Название | Основы глубокого обучения |
---|---|
Автор произведения | Нихиль Будума |
Жанр | Компьютеры: прочее |
Серия | МИФ Бизнес |
Издательство | Компьютеры: прочее |
Год выпуска | 2017 |
isbn | 978-5-00146-472-3 |
На каждом шаге движения перпендикулярно контуру нам нужно решать, как далеко мы хотим зайти, прежде чем заново вычислять направление. Это расстояние зависит от крутизны поверхности. Почему? Чем ближе мы к минимуму, тем короче должны быть шаги. Мы понимаем, что близки к минимуму, поскольку поверхность намного более плоская и крутизну мы используем как индикатор степени близости к этому минимуму. Но если поверхность ошибки рыхлая, процесс может занять много времени. Поэтому часто стоит умножить градиент на масштабирующий коэффициент – темп обучения. Его выбор – сложная задача (рис. 2.4).
Рис. 2.4. Если темп обучения слишком велик, возникают проблемы со сходимостью
Как мы уже говорили, если он будет слишком мал, возможно, процесс займет слишком много времени. Но если темп будет слишком высоким, то кончится это, скорее всего, тем, что мы отклонимся от минимума. В главе 4 мы поговорим о методах оптимизации, в которых используются адаптивные темпы обучения для автоматизации выбора.
Теперь мы готовы вывести дельта-правило для обучения линейного нейрона. Чтобы вычислить, как изменять каждый вес, мы оцениваем градиент: по сути, частную производную функции потерь по каждому из весов. Иными словами, нам нужен такой результат:
Применяя этот метод изменения весов при каждой итерации, мы получаем возможность использовать градиентный спуск.
Градиентный спуск с сигмоидными нейронами
В этом и следующем разделах мы будем говорить об обучении нейронов и нейросетей, использующих нелинейности. В качестве образца возьмем сигмоидный нейрон, а расчеты для других нелинейных нейронов оставим читателям как упражнение. Для простоты предположим, что нейроны не используют смещение, хотя наш анализ вполне можно распространить и на такой случай. Допустим, смещение – вес входа, на который всегда подается 1.
Напомним механизм, с помощью которого логистические нейроны вычисляют выходные значения на основе входных:
Нейрон определяет взвешенную сумму входящих значений – логит z. Затем он передает этот логит в нелинейную функцию для вычисления выходного значения y. К счастью для нас, эти функции имеют очень красивые производные, что значительно упрощает дело! Для обучения нужно вычислить градиент функции потерь по весам. Возьмем производную логита по входным значениям и весам:
Кроме того, как ни удивительно, производная выходного значения по логиту проста, если выразить ее через выходное значение:
Теперь можно использовать правило дифференцирования сложной функции, чтобы вычислить производную выходного значения по каждому из весов:
Объединяя полученные результаты, мы можем вычислить производную функции потерь по каждому весу:
Итоговое правило изменения весов будет выглядеть так: