Обновление весов в двухслойной нейронной сети

Я пытаюсь смоделировать ворота XOR, используя нейронную сеть, подобную этой:

введите здесь описание изображения

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

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

Как мы должны принять решение о правильных обновлениях веса?

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


person Clement Attlee    schedule 05.06.2016    source источник


Ответы (1)


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

Вы на самом деле не «решаете» это, типичные MLP не «срабатывают», они выводят реальные значения. Есть нейронные сети, которые действительно срабатывают (например, RBM), но это совершенно другая модель.

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

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

L(theta) = SUM_i l(f(x_i), y_i)

где l — некоторая функция потерь, f(x_i) — ваш текущий прогноз, а y_i истинное значение. Вы делаете это с помощью градиентного спуска, поэтому вы пытаетесь вычислить градиент L и пойти против него.

grad L(theta) = grad SUM_i l(f(x_i), y_i) = SUM_i grad l(f(x_i), y_i)

то, что вы сейчас называете «одним обновлением», — это grad l(f(x_i) y_i) для одной тренировочной пары (x_i, y_i). Обычно вы не используете это, а вместо этого суммируете (или берете среднее) обновлений по всему набору данных, так как это ваш истинный градиент. Однако на практике это может быть невыполнимо с вычислительной точки зрения (обучающая выборка обычно довольно велика), кроме того, эмпирически было показано, что чем больше «шума» при обучении, тем лучше. Таким образом, появился еще один метод обучения, называемый стохастическим градиентным спуском, который, короче говоря, показывает, что при некоторых несложных предположениях (таких как функция аддитивных потерь и т. д.) вы действительно можете делать свои «небольшие обновления» независимо, и вы все равно будете сходиться к локальным минимумам! Другими словами, вы можете делать свои обновления «точечно» в случайном порядке, и вы все равно будете учиться. Всегда ли будет одно и то же решение? Нет. Но это также верно для вычисления всего градиента — оптимизация невыпуклых функций почти всегда недетерминирована (вы найдете некоторое локальное решение, а не глобальное).

person lejlot    schedule 05.06.2016
comment
Спасибо за объяснение. Я новичок, так что извините за невежество. В частности, в случае этого простого вентиля XOR (в качестве базового метода) следует ли мне брать среднее значение всех обновленных весов узла в каждом раунде обратного распространения в наборе данных? - person Clement Attlee; 06.06.2016
comment
как подробно описано в ответе: вы можете сделать и то, и другое, вы можете взять среднее значение этих четырех обновлений или обновить, используя одну точку, затем вычислить ошибку для следующего (с обновленными весами) и обновить ее, и так далее. Первый известен как градиентный спуск, а второй – как стохастический градиентный спуск. - person lejlot; 06.06.2016
comment
Можете ли вы подробнее объяснить, почему это так: «Обычно вы не использовали бы это, а вместо этого суммировали бы (или усредняли) обновления по всему набору данных» - person Matt R O'Connor; 04.07.2017
comment
В этом предложении я имел в виду, что такой градиент не является допустимым градиентом минимизируемой функции. Можно показать, что это его несмещенная оценка действительно высокой дисперсии (при некоторых предположениях относительно l). Вот и все, на практике можно делать много чего промежуточного (таким образом, мини-пакетные обновления и т. д.), чтобы извлечь выгоду из обеих крайностей. - person lejlot; 04.07.2017