Обучение нейронной сети. Алгоритм обратного распространения ошибок

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

Искусственная нейронная сеть обычно обучается с учителем. Это означает наличие обучающего набора (датасета), который содержит примеры с истинными значениями: тегами, классами, показателями.

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

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

Раньше люди генерировали признаки вручную. Чем больше признаков и точнее подобраны веса, тем точнее ответ. Нейронная сеть автоматизировала этот процесс.

Искусственная нейронная сеть состоит из трех компонентов:

  • Входной слой;
  • Скрытые (вычислительные) слои;
  • Выходной слой.

Происходит в два этапа:

  • ошибки.

Во время прямого распространения ошибки делается предсказание ответа. При обратном распространении ошибка между фактическим ответом и предсказанным минимизируется.


Прямое распространение

Зададим начальные веса случайным образом:

Умножим входные данные на веса для формирования скрытого слоя:

  • h1 = (x1 * w1) + (x2 * w1)
  • h2 = (x1 * w2) + (x2 * w2)
  • h3 = (x1 * w3) + (x2 * w3)

Выходные данные из скрытого слоя передается через нелинейную функцию (), для получения выхода сети:

  • y_ = fn(h1 , h2, h3)

Обратное распространение

  • Суммарная ошибка (total_error) вычисляется как разность между ожидаемым значением «y» (из обучающего набора) и полученным значением «y_» (посчитанное на этапе прямого распространения ошибки), проходящих через функцию потерь (cost function).
  • Частная производная ошибки вычисляется по каждому весу (эти частные дифференциалы отражают вклад каждого веса в общую ошибку (total_loss)).
  • Затем эти дифференциалы умножаются на число, называемое скорость обучения или learning rate (η).

Полученный результат затем вычитается из соответствующих весов.

В результате получатся следующие обновленные веса:

  • w1 = w1 — (η * ∂(err) / ∂(w1))
  • w2 = w2 — (η * ∂(err) / ∂(w2))
  • w3 = w3 — (η * ∂(err) / ∂(w3))

То, что мы предполагаем и инициализируем веса случайным образом, и они будут давать точные ответы, звучит не вполне обоснованно, тем не менее, работает хорошо.


Популярный мем о том, как Карлсон стал Data Science разработчиком

Если вы знакомы с рядами Тейлора, обратное распространение ошибки имеет такой же конечный результат. Только вместо бесконечного ряда мы пытаемся оптимизировать только его первый член.

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

Частные производные

Частные производные можно вычислить, поэтому известно, какой был вклад в ошибку по каждому весу. Необходимость производных очевидна. Представьте нейронную сеть, пытающуюся найти оптимальную скорость беспилотного автомобиля. Eсли машина обнаружит, что она едет быстрее или медленнее требуемой скорости, нейронная сеть будет менять скорость, ускоряя или замедляя автомобиль. Что при этом ускоряется/замедляется? Производные скорости.

Разберем необходимость частных производных на примере.

Предположим, детей попросили бросить дротик в мишень, целясь в центр. Вот результаты:

Теперь, если мы найдем общую ошибку и просто вычтем ее из всех весов, мы обобщим ошибки, допущенные каждым. Итак, скажем, ребенок попал слишком низко, но мы просим всех детей стремиться попадать в цель, тогда это приведет к следующей картине:

Ошибка нескольких детей может уменьшиться, но общая ошибка все еще увеличивается.

Найдя частные производные, мы узнаем ошибки, соответствующие каждому весу в отдельности. Если выборочно исправить веса, можно получить следующее:

Гиперпараметры

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

Скорость обучения (learning rate)

Скорость обучения является очень важным гиперпараметром. Если скорость обучения слишком мала, то даже после обучения нейронной сети в течение длительного времени она будет далека от оптимальных результатов. Результаты будут выглядеть примерно так:

С другой стороны, если скорость обучения слишком высока, то сеть очень быстро выдаст ответы. Получится следующее:

Функция активации (activation function)

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

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

Функция потери (loss function)

Функция потерь находится в центре нейронной сети. Она используется для расчета ошибки между реальными и полученными ответами. Наша глобальная цель — минимизировать эту ошибку. Таким образом, функция потерь эффективно приближает обучение нейронной сети к этой цели.

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

Функция потерь одномерна и не является вектором, поскольку она оценивает, насколько хорошо нейронная сеть работает в целом.

Некоторые известные функции потерь:

  • Квадратичная (среднеквадратичное отклонение);
  • Кросс-энтропия;
  • Экспоненциальная (AdaBoost);
  • Расстояние Кульбака - Лейблера или прирост информации.

Cреднеквадратичное отклонение – самая простая фукция потерь и наиболее часто используемая. Она задается следующим образом:

Функция потерь в нейронной сети должна удовлетворять двум условиям:

  • Функция потерь должна быть записана как среднее;
  • Функция потерь не должна зависеть от каких-либо активационных значений нейронной сети, кроме значений, выдаваемых на выходе.

Глубокие нейронные сети

(deep learning) – это класс алгоритмов , которые учатся глубже (более абстрактно) понимать данные. Популярные алгоритмы нейронных сетей глубокого обучения представлены на схеме ниже.

Популярные алгоритмы нейронных сетей (http://www.asimovinstitute.org/neural-network-zoo)

Более формально в deep learning:

  • Используется каскад (пайплайн, как последовательно передаваемый поток) из множества обрабатывающих слоев (нелинейных) для извлечения и преобразования признаков;
  • Основывается на изучении признаков (представлении информации) в данных без обучения с учителем. Функции более высокого уровня (которые находятся в последних слоях) получаются из функций нижнего уровня (которые находятся в слоях начальных слоях);
  • Изучает многоуровневые представления, которые соответствуют разным уровням абстракции; уровни образуют иерархию представления.

Пример

Рассмотрим однослойную нейронную сеть:

Здесь, обучается первый слой (зеленые нейроны), он просто передается на выход.

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

Следовательно, чем больше число скрытых слоев, тем больше возможности обучения сети.

Не следует путать с широкой нейронной сетью.

В этом случае большое число нейронов в одном слое не приводит к глубокому пониманию данных. Но это приводит к изучению большего числа признаков.

Пример:

Изучая английскую грамматику, требуется знать огромное число понятий. В этом случае однослойная широкая нейронная сеть работает намного лучше, чем глубокая нейронная сеть, которая значительно меньше.

В случае изучения преобразования Фурье, ученик (нейронная сеть) должен быть глубоким, потому что не так много понятий, которые нужно знать, но каждое из них достаточно сложное и требует глубокого понимания.

Главное — баланс

Очень заманчиво использовать глубокие и широкие нейронные сети для каждой задачи. Но это может быть плохой идеей, потому что:

  • Обе требуют значительно большего количества данных для обучения, чтобы достичь минимальной желаемой точности;
  • Обе имеют экспоненциальную сложность;
  • Слишком глубокая нейронная сеть попытается сломать фундаментальные представления, но при этом она будет делать ошибочные предположения и пытаться найти псевдо-зависимости, которые не существуют;
  • Слишком широкая нейронная сеть будет пытаться найти больше признаков, чем есть. Таким образом, подобно предыдущей, она начнет делать неправильные предположения о данных.

Проклятье размерности

Проклятие размерности относится к различным явлениям, возникающим при анализе и организации данных в многомерных пространствах (часто с сотнями или тысячами измерений), и не встречается в ситуациях с низкой размерностью.

Грамматика английского языка имеет огромное количество аттрибутов, влияющих на нее. В машинном обучении мы должны представить их признаками в виде массива/матрицы конечной и существенно меньшей длины (чем количество существующих признаков). Для этого сети обобщают эти признаки. Это порождает две проблемы:

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

Компромисс

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

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

Действительно,

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

Следовательно, как правило, невозможно иметь маленькое смещение и маленькую дисперсию одновременно.

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

Алгоритмы обучения нейронных сетей

На этапе обучения происходит вычисление синаптических коэффициентов в процессе решения нейронной сетью конкретных задач. Контролируемое обучение нейронной сети можно рассматривать как решение оптимизационной задачи. Ее целью является минимизация функций ошибок (невязок) на данном множестве примеров путем выбора значений весов W.

Известно два вида обучения: с учителем и без учителя. Обучение с учителем предполагает предъявление сети последовательности обучающих пар (X i , D i), где X i – обучающий пример, D i – эталон, который должен быть получен на выходе сети. Для каждого X i вычисляется y i , который сравнивается с D i . Разница используется для корректировки синаптической матрицы. Обучение без учителя предполагает наличие только обучающих примеров X i . Синаптическая матрица настраивается так, чтобы близким входным векторам соответствовали одинаковые результирующие векторы.

Процесс обучения можно рассматривать как дискретный процесс, описываемый конечно-разностными уравнениями. Большинство методов обучения используют идею Хэбба, смысл которой заключается в повторении заучиваемого примера. Синаптический вес увеличивается если два нейрона – источник и приемник – активизированы. Наращивание веса определяется произведением уровней возбуждения двух нейронов, что можно записать так:

где – значения веса связи от i-го нейрона к j-му на предыдущей итерации обучения и текущей;

– скорость обучения ();

– выход нейрона i, являющийся входом для j-го нейрона на 0-й итерации;

– выход нейрона jна 0-й итерации.

Процесс обучения нейронной сети рассматривается как задача минимизации некоторой функции F(W) min, где W– синаптическая матрица сети.

Для решения такой задачи могут использоваться различные методы нелинейного программирования: градиентный, квазиньютоновский случайный поиск и др.

Общим для методов обучения сети является следующее: для некоторого начального состояния синаптической матрицы определяется направление уменьшения целевой функции F(W) и находится ее минимум в этом направлении. Для полученной точки опять вычисляется направление убывания функции и осуществляется одномерная оптимизация. В общем алгоритм можно представить как

где - величина шага на этапе 0;

Направление поиска на этапе 0.

Наиболее развитым методом обучения является алгоритм обратного распространения. Каких-либо ограничений на количество слоев и топологию сети не накладывается. Единственное требование состоит в том, чтобы функция возбуждения была всюду дифференцируема. Как правило, используется сигмоидная (логистическая) функция. Алгоритм обратного распространения является методом обучения с учителем (рис. 6.5).

Рис. 6.5. Схема обучения нейронной сети с учителем

Алгоритм обратного распространения представляет собой развитие обобщенного дельта-правила и является алгоритмом градиентного спуска, минимизирующим суммарную квадратичную ошибку. Главная цель состоит в том, чтобы вычислить чувствительность ошибки сети к изменению весов.

Пусть нейронная сеть соответствует схеме на рис. 6.2. Тогда алгоритм обучения можно описать :

1. Задать синаптические матрицы W, W * .

2. Для каждой обучающей пары (X i , D i) выполнить действия:

подать на вход скрытого слоя очередной набор обучающих данных ;

вычислить выход скрытого слоя :

;

вычислить выход выходного слоя:

.

между полученными выходными величинами сети и эталонными величинами;

для нейронов скрытого слоя.

Повторять шаги 2 и 3 до тех пор, пока ошибки не станут приемлемыми.

Пример 6.3. Пусть нейронная сеть соответствует схеме на рис. 6.2. При этом n=2, m=2,k=1 (рис. 6.6). Обучающее множество =(1;2), D=3. Необходимо обучить нейронную сеть складывать цифры 1 и 2. Все нейроны возбуждаются сигмоидной функцией. Заданы синаптические матрицы для скрытого слоя на первой итерации:

и вектор для выходного слоя

Рис. 6.6. Нейросеть с одним скрытым слоем

Вычислим взвешенную сумму

Взвешенный вход для выходного слоя

В то же время желаемое значение y (1) , преобразованное функцией возбуждения

D = F(3) = 0,952.

Поэтому среднеквадратическая ошибка (СКО):

Значения фактического выхода и желаемого не совпадают, поэтому синаптические веса следует изменить. Для этого следует выяснить, каким образом повлияют эти изменения на величину ошибки. Анализ, согласно алгоритму обратного распространения, выполняют начиная с выходного слоя сети и продвигаясь к входу:

1) прежде всего выясняют, как влияют на ошибку сети изменения на выходе. Для этого достаточно определить скорость изменения ошибки при данном значении выхода. Скорость определяется с помощью производной. Дифференцирование выполняется по аргументу y (1) .

Полученная реакция скорости изменения ошибки при данном значении выхода отрицательная, что указывает на необходимость увеличения значения на выходе;

2) определить, каким образом влияет на ошибку сети каждый из
входов выходного слоя. Для этого определим скорость изменения ошибки сети при изменении средневзвешенного входа выходного слоя V * (1) :

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

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

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

Обучение – это процесс, в котором свободные параметры нейронной сети настраиваются посредством моделирования среды, в которую эта сеть встроена. Тип обучения определяется способом подстройки этих параметров.

Это определение процесса обучения нейронной сети предполагает следующую последовательность событий:

  1. В нейронную сеть поступают стимулы из внешней среды.
  2. В результате первого пункта изменяются свободные параметры нейронной сети.
  3. После изменения внутренней структуры нейронная сеть отвечает на возбуждения уже иным образом.

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

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

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

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

Нейронная сеть без обратных связей - персептрон

Задачи для нейронных сетей

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

· Аппроксимация - построение функции по конечному набору значений (например, прогнозирование временных рядов)

· Построение отношений на множестве объектов (например, задачи распознавания образов и звуковых сигналов).

· Распределенный поиск информации и ассоциативная память (например, задачи нахождения неявных зависимостей в больших массивах данных).

· Фильтрация (например, выявление «видимых невооруженным глазом», но сложно описываемых аналитически изменений сигналов).

· Сжатие информации (например, нейросетевые реализации алгоритмов сжатия звуков, статических и динамических изображений).

· Идентификация динамических систем и управление ими.


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

Схема может быть дополнена сумматором, объединяющим при необходимости выходные сигналы нейронов в один общий выход.

Количество слоев в персептроне может быть разным, в зависимости от сложности задачи. Математически доказано (теорема Колмогорова), что трех полноценных нейронных слоев достаточно, чтобы аппроксимировать любую математическую функцию (при условии возможности неограниченно наращивать количество нейронов в скрытом слое).

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

Теория персептронов является основой для многих других типов искусственных нейронных сетей, а сами персептроны являются логической исходной точкой для изучения искусственных нейронных сетей.

Обучить нейронную сеть - значит, сообщить ей, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку изображение буквы "А", мы спрашиваем его: "Какая это буква?" Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: "Это буква А". Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Мы будем повторять процесс предъявления букв снова и снова до тех пор, когда все 33 буквы будут твердо запомнены. Такой процесс называют "обучение с учителем " .

При обучении нейронной сети мы действуем совершенно аналогично. Предположим, у нас имеется таблица – база данных, содержащая примеры (кодированный набор изображений букв). Предъявляя изображение буквы "А" на вход нейронной сети, мы рассчитываем (в идеале), что уровень сигнала будет максимальным (=1) на выходе OUT1 (А – буква №1 в алфавите из 33-х букв) и минимальным (=0).

Таким образом, таблица, называемая обучающим множеством , будет иметь вид (в качестве примера заполнена только первая строка):

Буква Вектор входа Желаемый вектор выхода
X1 X2 X12 TARGET1 TARGET2 TARGET33
А
Б
Ю
Я

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

На практике необученная нейронная сеть будет работать не так, как мы ожидаем в идеале, то есть для всех или большинства примеров векторы ошибки будут содержать существенно отличающиеся от нуля элементы.

Алгоритм обучения нейронной сети - это набор математических действий, который позволяет по вектору ошибки вычислить такие поправки для весов нейронной сети, чтобы суммарная ошибка (для контроля процесса обучения обычно используют сумму квадратов ошибок по всем выходам) уменьшилась. Применяя эти действия снова и снова, добиваются постепенного уменьшения ошибки для каждого примера (А, Б, В и т. д.) обучающего множества.

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

В общем виде алгоритм обучения с учителем будет выглядеть следующим образом:

1. Инициализировать синаптические веса маленькими случайными значениями.

2. Выбрать очередную обучающую пару из обучающего множества; подать входной вектор на вход сети.

3. Вычислить выход сети.

4. Вычислить разность между выходом сети и требуемым выходом (целевым вектором обучающей пары).

5. Подкорректировать веса сети для минимизации ошибки.

6. Повторять шаги с 2 по 5 для каждой пары обучающего множества до тех пор, пока ошибка на всем множестве не достигнет приемлемого уровня.

Конкретный вид математических операций, выполняемых на этапе 5, определяет разновидность алгоритма обучения. Например, для однослойных персептронов применяют простейший алгоритм, основанный на т. н. дельта-правиле , для персептронов с любым количеством слоев широко используется процедура обратного распространения ошибки , известна группа алгоритмов с интересными свойствами, названными стохастическими алгоритмами обучения и т. д. Все известные алгоритмы обучения нейронных сетей являются по сути разновидностями градиентных методов оптимизации нелинейной функции многих переменных. Основная проблема, возникающая при их практической реализации заключается в том, что никогда нельзя знать наверняка, что найденная в результате комбинация синаптических весов является действительно самой эффективной с точки зрения минимизации суммарной ошибки на всем обучающем множестве. Эта неопределенность получила название «проблемы локальных минимумов функции цели».

Под функцией цели в данном случае понимается выбранный интегральный скалярный показатель , характеризующий качество отработки нейронной сетью всех примеров обучающего множества – например, сумма среднеквадратичных отклонений OUT от TARGET для каждой обучающей пары. Чем меньше достигнутое значение функции цели, тем выше качество работы нейронной сети на заданном обучающем множестве. В идеале (на практике достижимом лишь для самых простейших задач) удается найти такой набор синаптических весов, что .

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

Таким образом, если в результате попытки обучить нейронная сеть требуемая точность так и не была достигнута, то перед исследователем возникают две альтернативы:

1. Предположить, что процесс попал в ловушку локального минимума и попытаться для той же самой конфигурации сети применить какую-либо другую разновидность алгоритма обучения.

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

В задачах распознавания образов и классификации широко применяются алгоритмы, названные обучением без учителя . В этом случае перед сетью ставится задача самостоятельно найти в предъявляемом наборе примеров группы входных векторов «похожие друг на друга», вырабатывая высокий уровень на одном из выходов (не определяя заранее на каком именно). Но и при такой постановке задачи проблема локальных минимумов также имеет место, хотя и в неявном виде, без строгого математического определения функции цели (т. к. само понятие функции цели подразумевает наличие заданного эталонного отклика сети, т. е. «учителя») – «а действительно ли нейронная сеть научилась выделять кластеры входных векторов наилучшим образом из всех возможных при данной конкретной ее конфигурации?».

Требует обучения, в противном случае правильный результат вряд ли будет получен. Методов обучения нейросети существует несколько.

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

Этот метод является основным и имеет ещё одно название — Backpropagation, так как использует алгоритм градиентного спуска. То есть при помощи движения вдоль градиента рассчитывается локальный минимум и максимум функции. Понимание этого метода приведёт к тому, что следующий не вызовет затруднений.

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

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

Чтобы справиться с этой неприятностью необходимо установить нужное значение момента, которое позволит преодолеть часть графика и достигнуть нужной точки. Если это значение будет недостаточным, то преодолеть выпуклость не получится, в случае с установкой более высокого значения, чем нужно есть шансы проскочить глобальный минимум.

Кроме момента ускорения, есть ещё понятие, определяющее общую скорость обучения сети. Это значение, как и предыдущее представляет собой гиперпараметр и подбирается методом проб и ошибок. Оптимальный вариант заранее никогда не известен, узнать его можно только проведя несколько обучений и корректируя каждый раз значение в нужном направлении.

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

После того как результат получен вычисляется ошибка и на её сновании выполняем обратную передачу. Суть которой — последовательно изменить вес синапсов начиная с выходного и продвигаясь к входному слою. При этом значение веса меняется в сторону лучшего результата.

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

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

Затем необходимо произвести расчёт градиента для каждой исходящей связи. Затем имея все необходимые данные необходимо выполнить обновление весов и рассчитать благодаря функции МОР значение, которое станет величиной изменения.

При этом не стоит забывать про момент и скорость обучения.

Одна итерация МОР даёт небольшой процент уменьшения ошибки, поэтому повторять их необходимо снова и снова пока показатель ошибки не будет приближен к 0.

Метод упругого распространения

Следующий метод обучения сети Resilient propagation или Rprop. Предыдущий способ обучения, представленный выше имеет недостаток в виде больших временных затрат на процесс обучения неуместных в случае необходимости получить быстрый результат.

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

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

Если на этом этапе расчётов производная меняет свой знак, значит, изменение было слишком большим и локальный минимум был упущен и нужно произвести откат, то есть вес вернуть в обратную позицию, а величину изменения уменьшить.

Если знак производной не изменился, то величина изменения веса, наоборот, увеличивается для большей сходимости.

Если основные параметры коррекции веса зафиксировать, то настройки глобальных параметров можно избежать. И это станет ещё одним преимуществом текущего метода над предыдущим. Для этих параметров есть рекомендуемые значения, однако, никаких ограничений на их выбор не накладывается.

Чтобы вес не принимал слишком большие или малые значения используются установленные ограничения величины коррекции. Значение коррекции также вычисляется по определённому правилу.

То есть если производная функции в конкретной точке меняет знак с плюса на минус, означает, что ошибка возрастает и вес требует коррекции и происходит его уменьшение, в противном случае — увеличение.

Последовательность действий в этом случае следующая: инициализируется величина коррекции, вычисляются частные производные, подсчитывается новое значение коррекции значений весов, корректируются веса, если условие остановки алгоритма не выполняются процесс переходит к вычислению производных и заново повторяет цикл. Такой подход позволяет добиться сходимости нейросети быстрее в несколько раз в отличие от предыдущего варианта обучения.

Генетический Алгоритм

Третий наиболее интересный алгоритм обучения искусственных нейронных сетей — Genetic Algorithm. Он представляет собой упрощённую интерпретацию природного алгоритма, основанного на скрещивании результатов. То есть, по сути, происходит скрещивание результатов, выбор наилучших и формирование на их основе нового поколения.

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

При этом вес кодируется двоичным кодом и каждый результат определяется полным набором веса. Оценка качества происходит методом вычисления ошибки на выходе.

Другие вариации обучения

Кроме вышеперечисленных методов, есть ещё разновидности с учителем и без него. Обучение с учителем чаще всего применимо к регрессиям и классификациям.

В этом случае тренер выступает в роли учителя, а созданная сеть — ученика. Тренер задаёт входные данные и требующийся результат, соответственно сеть понимает к какому именно результату необходимо стремиться при заданных параметрах.

Обучение без учителя носит несколько иной характер и встречается реже. При таком раскладе нейронная сеть не получает желаемого результата. Такая тренировка подходит сетям, задача которых кластеризация данных по заданным параметрам. То есть, проанализировав большой объем входных данных, сеть разделяет их на категории по определённым признакам.

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

То есть путём определённого поощрения нейронной сети каждый раз, когда полученный результат максимально приближен к желаемому мы дадим ей возможность искать любые пути решения проблемы, пока она будет давать нужные результаты.

Благодаря этому сеть будет искать наилучшие способы достижения цели без данных от тренера.

Есть ещё несколько методов обучения:

  • стохастический метод вкратце можно описать так, нашлась величина обновления, значит, сразу же необходимо обновить соответствующий ей вес;
  • пакетный метод суммирует значения всех величин в конкретном цикле и только по завершении проводит обновление, что значительно экономит время, однако, при этом страдает точность;
  • мини-пакетный метод совмещает в себе плюсы вышеописанных методов, веса в свободном порядке распределяются по выбранным группам и меняются на сумму коэффициента коррекции всех весов группы.

В процессе любого обучения приходится применять гиперпараметры, подбор которых выполняется вручную, при этом они не являются переменными в определённом уравнении. Это уже упомянутые выше момент и скорость обучения.

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

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

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

Нейронные сети — очень перспективное направление разработки. Создав нейронную сеть можно обучить её многому, в частности тому, что человек привык делать бессознательно, а соответственно алгоритм чего ему неизвестен.

Считается, что нейросети являются аналогом человеческого мозга, возможно, это и так, но стоит помнить — это всего лишь копия, отдалённо напоминающая свой прототип.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: