GitHub — sinitskaya/Backpropagation: Backpropagation

GitHub - sinitskaya/Backpropagation: Backpropagation Для красоты

Описание разработанного программного кода

Рассмотрим класс network. Для того, чтобы обучить сеть, необходимо создать экземпляр класса network. Экземпляр класса содержит:

Функцияrun – пример использования класса network.

Функция run создает экземпляр класса network и вызывает функцию обучения fit.

run(num_hidden_neurons_v, epoch, batch, speed_train) показывает как можно обучить
нейронную сеть, используя данные MNIST и проверить результат на тренировочной и тестовой выборках.

Функция run принимает на вход:

  • num_hidden_neurons_v – число нейронов на скрытом слое
  • epoch – чило эпох
  • batch – размер батча
  • speed_train – скорость обучения

Функция fit обеспечивает обучение и тестирование сети, получая на вход выборки, размер пачек, скорость обучения и количество эпох.

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

Функция fit принимает на вход:

  • x_train – входные данные
  • y_train — правильные ответы(метки)
  • batch – размер пачки
  • speed_train – скорость обучения
  • epoch – количество эпох

Описание алгоритма[]

Файл:Neuro.PNG

Архитектура многослойного перцептрона

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

где

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

Если же j-й узел — не на последнем уровне, то у него есть выходы; обозначим их через Children(j). В этом случае

Ну а алгоритмом обратного распространения ошибки (backpropagation). Краткое резюме проделанной работы:

  • для узла последнего уровня
  • для внутреннего узла сети

Получающийся алгоритм представлен ниже. На вход алгоритму, кроме указанных параметров, нужно также подавать в каком-нибудь формате структуру сети. На практике очень хорошие результаты показывают сети достаточно простой структуры, состоящие из двух уровней нейронов — скрытого уровня (hidden units) и нейронов-выходов (output units); каждый вход сети соединен со всеми скрытыми нейронами, а результат работы каждого скрытого нейрона подается на вход каждому из нейронов-выходов. В таком случае достаточно подавать на вход количество нейронов скрытого уровня.

Cигмоидальные функции активации[]

Наиболее часто в качестве функций активации используются следующие виды сигмоид:

Функция Ферми (экспоненциальная сигмоида):

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

Если после суммирования в пороговой функции сразу можно начинать сравнение с определенной величиной (порогом), то в случае сигмоидальной функции активации — нужно расчитать сигмоид (затратить время в лучшем случае на три операции: взятие модуля, сложение и деление), и только потом сравнивать с пороговой величиной (например, нулем).

Если считать, что все простейшие операции расчитываются процессором за примерно одинаковое время, то работа сигмоидальной функции активации после произведенного суммирования (которое займет одинаковое время) будет медленее пороговой функции активации как 1:4.

Sgd с импульсом и nesterov accelerated gradient

Следующие две модификации SGD призваны помочь в решении проблемы попадания в локальные минимумы при оптимизации невыпуклого функционала.
image
Гладкая выпуклая функция
image
Функция с множеством локальных минимумов (источник)

Алгоритм[]

Алгоритм:BackPropagation

  1. Инициализировать маленькими случайными значениями.
  2. Повторить NUMBER_OF_STEPS раз:
    Для всех d от 1 до m:
    1. Подать на вход сети и подсчитать выходы каждого узла.
    2. Для всех
      .
    3. Для каждого уровня l, начиная с предпоследнего:
      Для каждого узла j уровня l вычислить
      .
    4. Для каждого ребра сети {i, j}
      .
  3. Выдать значения .
Дополнительно:  Ошибка е 25 посудомоечная машина Bosch | Слава созидателям

Виды градиентного спуска

  • Пакетный градиентный спуск (batch gradient descent).

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

  • Стохастический градиентный спуск (stochastic gradient descent)

    Этот подход подразумевает корректировку весов нейронной сети, используя аппроксимацию градиента функционала, вычисленную только на одном случайном обучающем примере из выборки. Метод привносит «шум» в процесс обучения, что позволяет (иногда) избежать локальных экстремумов. Также в этом варианте шаги обучения происходят чаще, и не требуется держать в памяти градиенты всех обучающих примеров. Под SGD часто понимают подразумевают описанный ниже.

  • Mini-batch градиентный спуск

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

imageИсточник

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

Внешние ссылки[]

  1. Копосов А.И., Щербаков И.Б., Кисленко Н.А., Кисленко О.П., Варивода Ю.В. и др.Отчет по научно-исследовательской работе «Создание аналитического обзора информационных источников по применению нейронных сетей для задач газовой технологии». — Москва: ВНИИГАЗ, 1995.
  1. Миркес Е. М., Нейроинформатика: Учеб. пособие для студентов с программами для выполнения лабораторных работ. Красноярск: ИПЦ КГТУ, 2002, 347 с. Рис. 58, табл. 59, библиогр. 379 наименований. ISBN 5-7636-0477-6

Вторая модификация

Nesterov accelerated gradient отличается от метода с импульсом, его особенностью является вычисление градиента при обновлении v(t)

На картинке изображены различия этих двух методов.

image
источник

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

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

Предполагается, что вы знакомы с понятием нейронной сети, вы имеете представление, какие задачи можно решать с помощью этого алгоритма машинного обучения и что такое параметры (веса) нейронной сети. Также, важно понимать, что градиент функции  —  это направление наискорейшего роста функции, а градиент взятый с минусом это направление наискорейшего убывания. - nabla_theta J(theta)
где thetaJ(theta)

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

где teta

Литература[]

  1. Уоссермен Ф.Нейрокомпьютерная техника: Теория и практика. — М.: «Мир», 1992.
  1. Хайкин С. Нейронные сети: Полный курс. Пер. с англ. Н. Н. Куссуль, А. Ю. Шелестова. 2-е изд., испр. — М.: Издательский дом Вильямс, 2008, 1103 с.

Локальные минимумы[]

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

Дополнительно:  Триколор ошибка 5: способ устранения самостоятельно

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

Метод обратного распространения ошибки

Метод обратного распространения ошибки определяет стратегию выбора параметров сети 𝑤 с использованием градиентных методов оптимизации в предположении, что целевая функция 𝐸(𝑤) непрерывна.
Градиентные методы на каждом шаге уточняют значения параметров, по
которым проводится оптимизация, согласно формуле:

𝑤(𝑘 1) = 𝑤(𝑘) ∆𝑤,

где ∆𝑤 = 𝜂𝑝(𝑤) определяет сдвиг значений параметров, 𝜂, 0 < 𝜂 < 1 – скорость обучения – параметр обучения, который определяет «скорость» движения в направлении минимального значения функции, 𝑝(𝑤) – направление в многомерном пространстве параметров нейронной сети.

В классическом методе обратного распространения ошибки направление движения совпадает с направлением антиградиента 𝑝(𝑤) = −∇𝐸(𝑤).

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

В данной работе была выбрана инициализация весов Ксавье:

нужно умножить случайную инициализацию на:

Далее метод работает для каждого примера обучающей выборки.

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

  2. Вычисление значения функции ошибки и градиента этой функции.

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

  4. Повторение этапов 1 – 3 до момента выполнения критериев остановки. В качестве критериев остановки используется число итераций метода (количество проходов), либо достигнутая точность.

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

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

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

В качестве функции активации на скрытом слое используется функция LReLU.

В качестве функции активации на втором слое используется функция softmax.

В качестве функции ошибки используется крос-энтропия.

Псевдокод:

Недостатки алгоритма[]

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

Паралич сети[]

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

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

Первая модификация

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

Дополнительно:  Эпсон л355 мигает капля и бумага — Dudom

v(t)talpha in [0,1]0.9

Постановка задачи

Реализация метода обратного распространения ошибки для двухслойной полносвязной сети.

  1. Изучение общей схемы метода обратного распространения ошибки.
  2. Вывод математических формул для вычисления градиентов функции ошибки по параметрам нейронной сети и формул коррекции весов.
  3. Проектирование и разработка программной реализации.
  4. Тестирование разработанной программной реализации.
  5. Подготовка отчета, содержащего минимальный объем информации по каждому этапу
    выполнения работы.

Примечания[]

  1. Werbos P. J., Beyond regression: New tools for prediction and analysis in the behavioral sciences. Ph.D. thesis, Harvard University, Cambridge, MA, 1974.
  2. Галушкин А. И. Синтез многослойных систем распознавания образов. — М.: «Энергия», 1974.
  3. 3,03,1Rumelhart D.E., Hinton G.E., Williams R.J., Learning Internal Representations by Error Propagation. In: Parallel Distributed Processing, vol. 1, pp. 318—362. Cambridge, MA, MIT Press. 1986.
  4. Барцев С. И., Охонин В. А. Адаптивные сети обработки информации. Красноярск : Ин-т физики СО АН СССР, 1986. Препринт N 59Б. — 20 с.
  5. Барцев С. И., Гилев С. Е., Охонин В. А., Принцип двойственности в организации адаптивных сетей обработки информации, В кн.: Динамика химических и биологических систем. — Новосибирск: Наука, 1989. — С. 6-55.
  6. Миркес Е. М.,  — Новосибирск: Наука, Сибирская издательская фирма РАН, 1999. — 337 с. ISBN 5-02-031409-9 Другие копии онлайн: [1]
  7. Wasserman P. D. Experiments in translating Chinese characters using backpropagation. Proceedings of the Thirty-Third IEEE Computer Society International Conference.. — Washington: D. C.: Computer Society Press of the IEEE, 1988.
  8. Горбань А. Н. Обучение нейронных сетей.. — Москва: СП ПараГраф, 1990.

Размер шага[]

Внимательный разбор доказательства сходимости[3] показывает, что коррекции весов предполагаются бесконечно малыми. Ясно, что это неосуществимо на практике, так как ведет к бесконечному времени обучения.

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

Функция оценки работы сети[]

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

Метод наименьших квадратов далеко не всегда является лучшим выбором оценки.

Тщательное конструирование функции оценки позволяет на порядок поысить эффективность обучения сети, а также получать дополнительную информацию — «уровень уверенности» сети в даваемом ответе[6].

Заключение

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

Данная статья была написана в преддверии старта курса «Математика для Data Science» от OTUS.

Приглашаю всех желающих записаться на demo day курса, в рамках которого вы сможете подробно узнать о курсе и процессе обучения, а также познакомиться с экспертами OTUS

ЗАПИСАТЬСЯ НА DEMO DAY

Вывод математических формул

Подробнее в отчете otchet.pdf

Оцените статью
Добавить комментарий