Нейронная сеть расходится, а не сходится

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

Но вместо того, чтобы сходится, он расходится (выход становится бесконечным)

Вот еще некоторые подробности о том, что я пробовал:

  • Я установил начальные веса равными 0, но, поскольку они расходились, я рандомизировал начальные веса.
  • Я читал, что нейронная сеть может расходиться, если скорость обучения слишком высока, поэтому я уменьшил скорость обучения до 0,000001.
  • Я пытаюсь добавить две функции: 3 * i + 7 * j+9 и j*j + i*i + 24 (я даю слой i и j в качестве входных данных)
  • Ранее я реализовал его как один слой, и это могло бы лучше аппроксимировать полиномиальные функции.
  • Я думаю о внедрении импульса в эту сеть, но я не уверен, что это поможет ей научиться
  • Я использую линейную (как нет) функцию активации
  • В начале есть колебания, но выход начинает расходиться в тот момент, когда любой из весов становится больше 1.

Я проверил и перепроверил свой код, но, похоже, с ним нет никаких проблем.

Итак, вот мой вопрос: что здесь происходит не так?

Любой указатель будет оценен.


person Shayan RC    schedule 01.08.2013    source источник
comment
просто я правильно понимаю, вы хотели бы знать, почему ваш код, который вы не показали, сам реализующий алгоритм, который вы не описали, не сходится? Поставьте себя на мгновение на место и спросите себя, считаете ли вы, что на этот вопрос можно ответить или нет. Я голосую за закрытие этого, извините...   -  person talonmies    schedule 01.08.2013
comment
Я уверен, что с кодом все в порядке. и я считаю, что алгоритм (backprop) достаточно хорошо описан для всех, кто знаком с нейронными сетями. Что я хочу знать, так это то, что еще могло пойти не так. Я удаляю тег cuda, чтобы никого не вводить в заблуждение, заставляя думать, что это вопрос CUDA.   -  person Shayan RC    schedule 01.08.2013
comment
По моему опыту, это может произойти, когда ваши параметры выходят за пределы или некоторые функции возвращают бесконечность (например, логарифм, если вы используете функцию логистических потерь). Я бы сначала проверил числовые проблемы, например. с проверкой градиента. Но это слишком широко, поэтому я думаю, что мы не можем вам помочь с этим.   -  person Thomas Jungblut    schedule 01.08.2013
comment
Выход не становится бесконечностью внезапно, а постепенно после некоторых начальных колебаний. И он начинает расходиться только после того, как любой из весов станет больше единицы. Так что это не из-за того, что какая-то одна функция возвращает бесконечность. Я добавил еще немного информации. Надеюсь, поможет.   -  person Shayan RC    schedule 02.08.2013
comment
дубликат cs.stackexchange.com/ вопросы/13587/   -  person badp    schedule 13.06.2019


Ответы (2)


  1. Если проблема, которую вы пытаетесь решить, относится к классификационному типу, попробуйте 3-х слойную сеть (по Колмогорову достаточно 3) Соединения от входов A и B к скрытому узлу C (C = A*wa + B*wb) представляют собой линию в пространство АБ. Эта линия разделяет правильные и неправильные полупространства. Соединения от скрытого слоя к выходу помещают значения скрытого слоя в корреляцию друг с другом, давая вам желаемый результат.

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

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

  4. В начале каждого повторно инициализируйте свои веса со случайными (-0,5 - +0,5) значениями.

  5. Это действительно помогает наметить спуск по ошибке. Вы получите это "Ага!" фактор.

person Lex    schedule 02.08.2013
comment
У вас есть ссылка на правило Колмогорова о количестве слоев? - person Luis; 27.06.2016
comment
@Luis, у меня сложилось впечатление, что трехслойная вещь устарела, учитывая появление глубокого обучения. - person chris; 25.01.2018
comment
@ChrisAnderson Трехслойная вещь - это не вещь. Это математические размышления и анализ того, что вы хотите сделать, почему и какими методами. Конечно, вы можете размещать все больше и больше слоев (или множество узлов, если на то пошло), но это не гарантирует, что вы решаете свою проблему соответствующим образом. Вопрос о количестве слоев остается интересным, особенно для исходного вопроса: Я реализовал нейронную сеть (с использованием CUDA) с 2 слоями. (2 нейрона на слой). Я пытаюсь заставить его изучить 2 простые квадратичные полиномиальные функции, используя обратное распространение ошибки. - person Luis; 26.01.2018
comment
Ой, извини. Кажется, я видел, как кто-то рекомендовал что-то подобное в общем, что меня расстроило. То, что вы сказали, имеет смысл (я не обратил внимания на текст вопроса). - person chris; 27.01.2018

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

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

если это не так, то нам нужно увидеть код и ответить.

person sidquanto    schedule 04.10.2013