Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
40_алгоритмов_Python.pdf
Скачиваний:
8
Добавлен:
07.04.2024
Размер:
13.02 Mб
Скачать

238

Глава 8. Алгоритмы нейронных сетей

Обратите внимание, что x — это nx-мерный вектор, где nx — количество входных переменных.

Эта нейронная сеть состоит из четырех слоев. Слои между входом и выходом называются скрытыми. Количество нейронов в первом скрытом слое обознача­ ется . Связи между различными узлами умножаются на параметры, называ­ емые весами. Обучение нейронной сети — это поиск правильных значений для весов.

Давайте узнаем, как обучить нейронную сеть.

ОБУЧЕНИЕ НЕЙРОННОЙ СЕТИ

Процесс построения нейронной сети с использованием заданного набора данных называется обучением нейронной сети. Рассмотрим анатомию типичной ней­ ронной сети. Когда мы говорим об обучении нейронной сети, мы говорим о вы­ числении наилучших значений для весов. Обучение проводится итеративно с использованием набора примеров в виде обучающих данных. Примеры в обу­ чающих данных содержат ожидаемые значения выходных данных для различных комбинаций входных значений. Процесс обучения нейронных сетей отличает­ ся от способа обучения традиционных моделей (которые обсуждались в главе 7).

Анатомия нейронной сети

Давайте разберем, из чего состоит нейронная сеть.

zz Слои. Основные строительные блоки нейронной сети. Каждый слой пред­ ставляет собой модуль обработки данных, который действует как фильтр. Он принимает один или несколько входных сигналов, обрабатывает их определенным образом, а затем выдает один или несколько выходных сиг­ налов. Каждый раз, когда данные проходят через слой, они проходят этап обработки и демонстрируют закономерности, имеющие отношение к бизнесвопросу‚ на который мы пытаемся ответить.

zz Функция потерь. Обеспечивает сигнал обратной связи, используемый на различных итерациях процесса обучения. Функция потерь высчитывает от­ клонение для одного примера.

zz Функция стоимости. Это функция потерь в полном наборе примеров.

zz Оптимизатор. Определяет, как будет интерпретироваться сигнал обратной связи, предоставляемый функцией потерь.

Обучение нейронной сети

239

zz Входные данные. Данные, которые используются для обучения нейронной сети. Они определяют целевую переменную.

zz Веса. Рассчитываются путем обучения сети. Веса приблизительно соответ­ ствуют важности каждого из входных сигналов. Например, если конкретный входной сигнал более важен, чем другие, после обучения ему присваивается большее значение веса, действующее как множитель. Даже слабый сигнал при этом будет усилен благодаря большому значению веса. Таким образом, вес изменяет сигналы в соответствии с их важностью.

zzФункция активации. Значения умножаются на различные веса, а затем агрегируются. То, как именно они будут агрегированы и как будет интер­ претироваться их значение, определяется типом выбранной функции ак­ тивации.

Рассмотрим, как происходит процесс обучения нейронных сетей.

При обучении нейронных сетей мы перебираем примеры один за другим. Для каждого примера с помощью еще не обученной модели генерируются выход­ ные данные. Далее вычисляется разница между ожидаемым и предсказанным результатами. Для каждого отдельного примера эта разница называется потерей. В совокупности потери по всему обучающему набору данных называ­ ются стоимостью. Продолжая тренировать модель, мы стремимся найти те значения весов, которые приведут к наименьшим потерям. На протяжении всего обучения значения весов продолжают корректироваться, пока не обна­ ружится набор значений, приводящий к минимально возможной общей стоимости. Как только мы достигнем минимальной стоимости, модель счи­ тается обученной.

Градиентный спуск

Цель обучения модели нейронной сети — найти верные значения весов. Обуче­ ние стартует со случайными или стандартными значениями весов. Затем ите­ ративно используется алгоритм оптимизатора, например градиентный спуск, чтобы изменить веса в целях улучшения прогнозов.

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

Следующая схема объясняет логику алгоритма градиентного спуска (рис. 8.4).

240 Глава 8. Алгоритмы нейронных сетей

 

Вектор признаков Х

Веса

Слой (преобразование

данных)

 

 

 

 

Предсказанное

Фактическое

 

целевое значение, Y’

целевое значение

 

 

Градиент

 

Функция

 

стоимости

Стоимость

Рис. 8.4

На схеме входными данными является вектор признаков X. Фактическое значение целевой переменной равно Y, а ее предсказанное — Y'. Мы опреде­ ляем отклонение фактического значения от предсказанных значений, обнов­ ляем веса и повторяем шаги до тех пор, пока стоимость не будет сведена к минимуму.

Изменение веса на каждой итерации алгоритма зависит от двух факторов.

zz Направление. В каком направлении необходимо двигаться, чтобы получить минимум в функции потерь.

zzСкорость обучения. Насколько значительными должны быть изменения в выбранном нами направлении.

Простой итерационный процесс показан на следующей схеме (рис. 8.5).

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

Обучение нейронной сети

241

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 8.5

Важно выбрать правильное значение для параметра скорости обу­ чения. Если значение слишком низкое, то решение задачи займет много времени; если оно слишком высокое — задача не сойдется. На предыдущей схеме точка, представляющая наше текущее решение, будет продолжать колебаться между двумя противолежащими частями кривой на графике.

Теперь минимизируем градиент. Возьмем только две переменные, x и y. Гради­ ент x и y рассчитывается следующим образом:

Чтобы минимизировать градиент, можно использовать следующий подход:

while(gradient!=0):

if (gradient < 0); move right if (gradient > 0); move left

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

Обратите внимание, что расчет градиентного спуска выполняется в обратном направлении по всей сети. Сначала мы вычисляем градиент последнего слоя, затем предпоследнего, затем всех предыдущих, пока не достигнем первого. Это

метод обратного распространения ошибки (backpropagation), предложенный Хинтоном, Уильямсом и Румельхартом в 1985 году.

Далее рассмотрим функции активации.