На предыдущих
занятиях мы с вами подробно познакомились с общей структурой полносвязной
нейронной сети прямого распространения:
в которой
использовалась исключительно пороговая функция активации:
и заранее
заданные весовые коэффициенты. Однако сразу указать нужные коэффициенты для
большинства нейронных сетей просто невозможно, так как они состоят из огромного
числа нейронов и еще большего числа связей. В результате возникает задача
нахождения (автоматического вычисления) весовых коэффициентов для связей. Этот
процесс называется обучением нейронной сети.
Одну и ту же
сеть можно обучить для самых разных задач. Например, классификации кошек и
собак, или классификации мужчин и женщин, или наличие и отсутствие аномалий на
рентгеновских снимках и так далее. Что конкретно будет делать сеть, зависит от
значений весов связей .
Но как их тогда подбирать? Для ответа на этот вопрос посмотрим на нейронную
сеть с несколько иного ракурса.
Пусть имеется следующая
двухслойная сеть:
с набором весов для
первого (скрытого слоя), -
для выходного слоя, и некоторыми функциями активации: -
для нейронов первого (скрытого) слоя; -
для нейронов выходного слоя. Работу такой сети математически можно записать следующим
образом:
где:
-
матрица весов связей скрытого слоя;
-
матрица весов связей выходного слоя.
Ту же самую
формулу, можно кратко представить в виде:
или в более
общей записи:
Здесь вектор содержит
все весовые коэффициенты НС. То есть, изображение нейронной сети – это всего
лишь удобная визуализация многомерного нелинейного функционала ,
отображающего входные данные в
выходные .
А конкретный вид этого функционала зависит от значений параметров .
И так можно представить любую нейронную сеть прямого распространения.
Но что нам это
дает? Смотрите. Если в нашем распоряжении будет множество различных входных
данных:
с известными
(требуемыми) выходными значениями:
то под эти
данные можно попытаться подобрать коэффициенты функционала
так,
чтобы он для каждого входного вектора выборки
выдавал
как можно более близкие значения к заданному вектору выборки
.
Например, для
ранее рассмотренной НС, можно было бы сформировать матрицы , для
всех возможных исходов и по этим данным подобрать весовые коэффициенты так,
чтобы эта НС корректно отображала все входы в требуемые (целевые) выходные
значения.
Напомню, что в
общем случае набор данных называется
обучающей выборкой, так как часто служит для обучения различных алгоритмов, в
том числе, и НС. Такой подход к обучению, когда имеются входные данные и
контролируются выходные значения, называется обучение с учителем. Он
используется в подавляющем числе случаев. И мы также будем придерживаться этого
подхода.
Хорошо, у нас
имеется обучающая выборка, заданная структура нейронной сети, но как по этим
данным вычислять весовые коэффициенты ?
Подходов существует множество. Однако чаще всего, в качестве основного, применяется
градиентный алгоритм.
Идея градиентного алгоритма обучения
О градиентном
алгоритме я уже подробно рассказывал в курсе по машинному обучению. Поэтому
здесь углубляться в его работу не стану. Принцип заключается в следующем. Вначале
НС имеет некие, скорее всего, не подходящие значения весовых коэффициентов. И,
пропуская произвольный входной вектор из
обучающей выборки ,
на выходе будет формироваться сигнал ,
отличающийся от требуемого (целевого) .
Для измерения
рассогласования между векторами и
вводится
функция потерь:
которая
минимальная (обычно 0), если векторы равны и увеличивается, при увеличении
рассогласования между и
.
Например, в
задачах регрессии часто используется квадратическая функция потерь:
А в задачах
бинарной (двухклассовой) классификации – бинарная кросс-энтропия:
где -
число (метка класса i-го образа); -
выходное числовое значение для i-го входного образа .
И так далее. Для
каждой текущей задачи подбирается своя, наиболее подходящая функция потерь.
Соответственно общий критерий качества работы НС по обучающей выборке можно
записать в виде:
То есть, весовые
коэффициенты нужно
подобрать так, чтобы величина была
как можно меньше. И, очевидно, этот функционал зависит от весовых
коэффициентов. Поэтому его также можно записать в виде:
Наверное,
некоторые из вас уже догадались, что точка минимума функционала в
пространстве весовых коэффициентов ,
как раз ищется с помощью градиентного алгоритма. В общем случае его можно
записать в виде рекуррентного выражения:
где -
некоторое небольшое положительное число (или вектор), определяющий скорость
сходимости градиентного алгоритма.
Расписывая
функционал качества, получим:
Или, учитывая,
что:
и
имеем:
Это общий вид
градиентного алгоритма для нахождения весовых коэффициентов НС.
И отсюда хорошо видно, чтобы его реализовать, функция должна
быть дифференцируемой, а значит, должны быть дифференцируемы и все функции
активации ,
используемые в нейронной сети. Поэтому пороговая функция:
не подходит для
реализации градиентного алгоритма обучения. Кроме того, ее производные до
порогового значения и после него равны нулю и из-за этого градиентный алгоритм
не сможет менять веса связей.
Какие же функции
выбрать? На сегодняшний день, одной из наиболее распространенных функций
активаций для скрытых слоев, является функция вида (ReLU):
На заре
нейронных сетей, в основном, применялись:
-
- сигмодиная
функция;
-
- гиперболический
тангенс.
А на выходном
слое часто используют следующие:
-
- линейная
функция активация; для задач регрессии;
-
- сигмодиная
функция активации; для задач бинарной классификации;
-
-
функция softmax для задач M-классовой
классификации.
Конечно, функций
активации огромное множество. С некоторыми из них мы с вами будем знакомиться
по мере прохождения этого курса.
Итак, чтобы
выполнить обучение НС с помощью градиентного алгоритма необходимо выбрать
дифференцируемые функции активации и дифференцируемую функцию потерь, на основе
которой определяются рассогласования между текущим выходным значением НС и
требуемым целевым .
На следующем занятии мы с вами подробно рассмотрим алгоритм обучения НС,
основанный на градиентном алгоритме, под названием back propagation.