Эффекты рандомизации порядка входов в нейронную сеть - PullRequest
4 голосов
/ 12 ноября 2011

Для моего класса Advanced Algorithms и Data Structures мой профессор попросил нас выбрать любую интересующую нас тему.Он также сказал нам исследовать это и попытаться найти в нем решение.Я выбрал Neural Networks, потому что это то, чему я давно хотел научиться.

Я смог реализовать AND, OR и XOR, используя нейронную сеть, чьи нейроны используют пошаговую функцию для активатора.После этого я попытался внедрить обратно распространяющуюся нейронную сеть, которая учится распознавать оператор XOR (используя сигмовидную функцию в качестве активатора).Я смог заставить это работать в 90% случаев, используя сеть 3-3-1 (1 смещение на входном и скрытом слоях, с произвольно инициализированными весами).В других случаях кажется, что он застревает в том, что я считаю локальными минимумами, но я не уверен (раньше я задавал вопросы по этому поводу, и люди говорили мне, что не должно быть локальных минимумов).

90% времени, когда он работал, я последовательно представлял свои входные данные в следующем порядке: [0, 0], [0, 1], [1, 0], [1, 0] с ожидаемым выходным значением, установленным на [0, 1, 1, 0].Когда я последовательно представляю значения в одном и том же порядке, сеть, в конце концов, изучает шаблон.На самом деле не имеет значения, в каком порядке я его отправляю, поскольку это точно такой же порядок для каждой эпохи.

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

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

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

1 Ответ

7 голосов
/ 12 ноября 2011

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

Например, предположим, что у вас есть 150 наблюдений, включающих ваш обучающий набор, и для каждой переменной отклика является одна из трех меток класса (класс I, II или III), например,что наблюдения 1-50 находятся в классе I, 51-100 в классе II и 101-50 в классе III.То, что вы не хотите делать, это представить их в сети в таком порядке.Другими словами, вы не хотите, чтобы сеть видела все 50 наблюдений в классе I, затем все 50 в классе II, а затем все 50 в классе III.

Что произошло во время тренировки вашего классификатора?Ну, изначально вы представляли четыре наблюдения в вашей сети, неупорядоченные [0, 1, 1, 0].

Интересно, каково было расположение входных векторов в тех случаях, когда ваша сеть не сходилась?Если это было [1, 1, 0, 0] или [0, 1, 1, 1], это согласуется с этим хорошо документированным эмпирическим правилом, которое я упоминал выше.

С другой стороны, мне интересно, применимо ли это правило даже в вашем случае.Причина в том, что у вас так мало обучающих экземпляров, что даже если порядок равен [1, 1, 0, 0], обучение в течение нескольких эпох (что, я уверен, вы должны выполнять) будет означать, что этот порядок выглядит более «рандомизированным».а не пример, который я упоминал выше (то есть [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0] - это то, как сеть будет представлена ​​с данными обучения за три эпохи),Некоторые предложения по диагностике проблемы:

  1. Как я упоминал выше, посмотрите на порядок ваших входных векторов в случаях не сходимости - сортируются ли они по переменной ответа?

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

...