Гослото 4 из 20 / Нейронные сети и лотерея

Обучение по нейронной сети. Обратный метод распространения ошибок.

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

Нейронные сети и лотерея 1

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

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

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

Правило дельты (правило Видроу-Хоффа).

Определить ошибку Нейронные сети и лотерея 2:

Нейронные сети и лотерея 3

Здесь у нас есть Нейронные сети и лотерея 4 - ожидаемый (истинный) выход сети, а Нейронные сети и лотерея 5 - реальный выход (активность) выходной части. Помимо выходной части ошибки, вы можете найти все части скрытого уровня нейронной сети, об этом мы поговорим чуть позже.

Дельта-правило состоит из следующего: измените значение весового коэффициента подписчика так, чтобы оно равнялось:

Нейронные сети и лотерея 6

где Нейронные сети и лотерея 7 - скорость обучения. Мы сами установили это число до начала тренировок. Нейронные сети и лотерея 8 - это сигнал от части k от части j . E Нейронные сети и лотерея 9 - ошибка части k .

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

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

Способ распространения ошибки распространения.

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

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

Я, вероятно, не буду делать выводы и математические вычисления (несмотря на мою любовь к арифметике 🙂), чтобы не перегружать статью, мы ограничимся конечными результатами:

Нейронные сети и лотерея 10

Функция является функцией частичной активности. Мы используем логистическую функцию, для этого:

Замена предыдущей формулы и получение ошибки:

  • - частичная ошибка с индексом
  • - подходящий индекс для уровня, который отправляет ошибку «назад»
  • - комбинированный ввод части
  • - деятельность части

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

На самом деле, давайте идти дальше и двигаться дальше.

Перед обучением сети необходимо установить начальные значения весов - обычно они инициализируются небольшими случайными значениями, например, из интервала (-0,5, 0,5). Но для нашего примера возьмем целые числа для удобства.

Рассмотрим нейронную сеть и вручную выполнить расчеты для прямых и циркулирующих «потоков» в сети.

На входе у нас есть действительный файл прототипа, пусть он будет (0.2, 0.5) . Ожидаемый выход сети составляет 0,4 . Скорость обучения составляет 0,85 . Все расчеты делаем постепенно. Кстати, я совсем забыл, в свойстве функции Activity мы будем использовать логистическую функцию:

Рассчитывает объединенный ввод частей 2 , 3 и 4 :

Деятельность этих частей:

комбинированный ввод 5-й части:

Активность 5-й части и одновременно выход нейронной сети:

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

Таким образом, ошибки для частей 2 , 3 и 4 соответственно:

Здесь значения -0.014, -0.028 и -0.056 получены в результате передачи ошибки выходной части - 0.014 при взвешенные весовые передние звенья к частям 2 , 3 и 4 соответственно.

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

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

Теперь новые веса будут равны сумме пройденных значений и стоимости изменения.

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

По просьбе читателей блога я решил добавить краткий пример онлайн-обучения с двумя скрытыми уровнями:

Итак, давайте добавим в нашу сеть две новые части (X и Y), которые теперь будут играть роль ввода. Мы также вставляем прототип (0.2, 0.5) во входные данные. Рассмотрим метод в этой версии:

1. Плавное прохождение сети. Все точно так же, как в сети со скрытым уровнем. Плодом будет значение .

2. Рассчитать ошибку вывода:

3. Теперь нам нужно вычислить погрешности частей 2, 3 и 4:

4. Рассчитаем корректировочное значение веса подключения:

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

5. Определить ошибки частей 1-го скрытого уровня (0 и 1):

Разница здесь в том, что мы должны суммировать ошибки частей 2, 3 и 4, которые «возвращаются» к частям 0 и 1 с учетом связей между частями.

6. Правильный вес ссылки:

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

7. Определите оставшиеся значения регулировки веса:

Так как части X и Y вставлены, здесь мы используем значения 0,2 и 0,5, которые соответствуют образцу, подаваемому на вход.

8. На самом деле, эта редакция завершена =)

На этом мы скоро увидимся!

Статьи по теме:

У вас есть статья? Поделись с друзьями!

Спасибо! Осторожный! Что ж, мы ждем увлекательный пример нашей деятельности и реализации программного обеспечения на QT

Теория и арифметика очень интересны 🙂 Как использовать Embedded на практике? например, на STM32 или BeagleBone, Black Raspberry Pi

Честно говоря, я не уверен, что, например, STM32 вызовет сложные проблемы с INS)

Очень любопытно, напишите примеры, где можно использовать ИИ

В основной задаче систематизации определение образцов. Кроме того, прогнозирование задач.

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

Будет очень полезно дать код
. Хотя я понимаю формулы, в некотором смысле это будет еще проще и понятнее в моем родном C

Может быть, я ошибаюсь, но объединенные входные данные частей 2.3 и 4 рассчитываются в примере как 0,8, 0,7 и -0,4 соответственно, а их действия обозначены как 0,31, 0,33 и 0, 60, но если функция активации заменяется значениями 0,8, 0,7 и -0,4, итоговые значения составят 0,68, 0,67 и 0,40 соответственно. Вопрос в том, как появились значения 0,31, 0,33 и 0,60.
П.С. Поймите, что 0,31 = 1-0,68 и т.д.

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

по моему мнению, та же самая ошибка осталась для пятой части:
a 3. 63, функция активации подлежит 0. 974

Мне очень понравилась статья, единственное, что я пока не могу сделать, это попробовать значение этой формулы (вычислить)
f '(net_j) = f (net_j) * (1-f (net_j))
Пожалуйста, объясните.

Это производная от функции f (net_j), если мы вычислим производную, будет выдано выражение, которое можно выразить через начальную функцию.

> Здесь значения 0,009, 0,018 и 0,036 получаются в результате прохождения ошибки выходной части 0,009 через взвешенные соединения в передней части соответственно к частям 2, 3 и 4.

Конечно, это означало
Здесь значения -0.014, -0.028 и -0.056 являются результатом прохождения ошибок выходной части -0.014 через взвешенные соединения в передней части соответственно частям 2, 3 и 4.

Да, спасибо, я исправлюсь

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

Я не вижу его только в той статье, из которой получена формула для вычисления ошибки на уровне выхода δ5 при

δ5 = (y0-y) * f (нетто5) (1-f (нетто5)) [1]

, после чего δ5 = -0,014

если следовать формуле для вычисления δj δk
δj = f (net-j) * (1-f (net-j)) * Σwk * δk [2]

поэтому, чтобы δ5 покинул формулу [1] из формулы [2], необходимо взять j = 5, k = 6: получается, что мы добавляем тип фиктивного выхода 6 с входным нейроном 5 с w6 = 1 и ошибкой δ6 = y0-y

другой вариант: просто постулировать формулу [1] для расчета погрешности выходного уровня

3-й вариант - допускает ошибку для выходного уровня δ5 = (y0-y), как показано в начале статьи, но в этой версии вычисления в статье не соответствуют действительности

В формуле [2] часть под символом суммы является ошибкой на выходе из нейрона j, и для выходного нейрона оказывается, что мы понимаем эту ошибку именно из критериев задачи, поскольку цель это получить некоторую ценность на выходе сети. Поэтому, в принципе, мы можем предположить, что мы добавляем «виртуальную» часть со значением 1 и что она будет обеспечивать ту же ошибку, что и выходной нейрон.

Я написал реализацию сети с обучением на Java, я взял δ5 = (y0-y), все работает, я думаю, аспект не принципиален, оба варианта пойдут.

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

Я пытаюсь выучить обычный XOR, два входа, два покрытых нейрона, один выход.

Очевидно, что сам метод распространения ошибок работает, но можно ли как-то научить сеть принимать больше вариаций входных характеристик одновременно?

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

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

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

И есть возможность связаться с вами в социальных сетях. сеть и общение в нейронных сетях? Я был бы очень признателен.

Да, конечно, вот группа веб-сайтов - https://vk.com/microtechnics, вы можете зайти туда, ну, там есть ссылка на мою страницу, вы можете просто просмотреть сообщения)

Можете ли вы привести пример, пример для 3-4-уровневой сети? В действительности, регулировка весов за S-образным слоем входит в ступор

Хорошего дня!
Добавлено небольшое описание в конце статьи.

5. Определить ошибки частей 1-го скрытого уровня (0 и 1):

Как я понял во второй формуле, действительное f (net1)

Да, все правильно, большое спасибо, правильно.

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

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

Похоже, что ошибки в формулах дельты. W_ (k, j) - вес от k до j. И с примерами возьмите точно все дельты, куда приходят стрелки. Короче говоря, в формулах для дельты истина - это не w (k, j), а w (j, k). Это неправда?

Хорошего дня!
Вес связи между нейронами является только значением, а не векторной величиной, то есть, по сути, разницы нет: w (1, 2) = w (2,1). Но чтобы улучшить восприятие вашего варианта, мне очень нравится, я изменю его в статье.
Спасибо за комментарий!

Привет, это точно? Я понимаю, что если у нас теперь есть новые веса, то с учетом их, выход сети должен быть 0,4? Или мы должны искать новые веса еще много раз, пока выход сети не станет равным 0,4?

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

Ну, например, я всегда буду давать только 0,2 и 0,5 на входе, а я смотрю 0,4 с выхода сети. Получается в отрывке, не работает 0.4 get? Нужно ли, как говорится, проходить регулировку лестницы?

Да, в проходе это не будет работать.

Здравствуйте. Я создал нейронную сеть на C, у меня есть только 1 входная часть, 1 скрытая, 1 выходная. Ищите ожидаемый результат, но не все входные значения и не все входные веса. Как следовать идее, что начальные веса уместны для определения? И еще вопрос, имеет ли смысл такая маленькая сеть, которую я сделал, или лучше сразу начать с 2 входов, 2 скрытых частей и 1 выхода?

Хорошего дня!
Как правило, нет точных правил - для каждой реализации все подбирается лично во время экспериментов. Количество входов и выходов зависит от цели. Например, если у нас есть функция двух переменных f (x, y) и мы хотим обучить сеть этой функции, то, следовательно, будет два входа и один выход.
И веса часто инициализируются небольшими случайными значениями, например, от -0,5 до 0,5.

Лотерея русское лото отзывы форум
Лучшие лотереи москвы
Государственные лотереи вакансии
Русский лото сегодня прямой
Русское лото где забрать выигрыш в воронеже