Эффекты рандомизации порядка входов в нейронную сеть

Для моего класса Advanced Algorithms and 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] . Когда я последовательно представляю значения в одном и том же порядке, сеть в конечном итоге узнает шаблон. На самом деле это не имеет значения, в каком порядке я его отправляю, если это точный порядок для каждой эпохи.

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

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

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

4

1 ответы

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

Например, предположим, что у вас есть 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], это согласуется с этим хорошо документированным эмпирическим правилом, упомянутым выше.

On the other hand, i have to wonder whether this rule even applies in your case. The reason is that you have so few training instances that even if the order is [1, 1, 0, 0], training over multiple epochs (which i am sure you must be doing) will mean that this ordering looks more "randomized" rather than the exemplar i mentioned above (i.e., [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0] is how the network would be presented with the training data over three epochs).

Some suggestions to diagnose the problem:

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

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

7
добавлено
Спасибо за информацию doug. Опять же, поскольку я новичок, я не очень хорошо знаком со всеми условиями. Что вы подразумеваете под «случаями отсутствия конвергенции»? Что касается весов, у меня есть два весовых вектора: один для ввода скрытого слоя и один для ввода выходного слоя.
добавлено автор Vivin Paliath, источник
Это была глупая ошибка, в которой я был. Входы не соответствовали выводам, которые гарантировали, что сеть ничего не узнает! Я также изменил свой алгоритм backpropagation, чтобы настроить весы только после того, как ошибка была рассчитана для всех узлов в сети.
добавлено автор Vivin Paliath, источник
Спасибо за эту ссылку; это выглядит очень полезно! Кроме того, спасибо за ваши предложения о том, как сделать мой код менее подверженным ошибкам!
добавлено автор Vivin Paliath, источник
@VivinPaliath «случаи отсутствия конвергенции» относятся только к тем случаям, когда сеть не сходилась на результате - то есть, какая точка данных заставляла его застревать. Позвольте мне предложить. Вы знаете о нейронной сети comp.ai FAQ? IMO, безусловно, лучший ресурс NN в любом месте - самый авторитетный, самый полный и удивительно легкий для чтения (полностью в формате часто задаваемых вопросов). faqs.org/faqs/ai-faq/neural- сетки/part1/preamble.html . Есть 7 частей, вы можете скачать все 7 в формате pdf.
добавлено автор doug, источник
@VivinPaliath рада узнать, как вы ее решаете. Таким образом, вы переупорядочиваете свои входные массивы, но забыли так же изменить порядок соответствующих целей - я сделал это, возможно, миллион раз. если вы используете python или matlab, один простой способ избежать этого, просто держите входы + цели вместе как одну двумерную («данные»), поэтому вместо привязки каждого к отдельной переменной (входам, целям) просто используйте index/slice нотация в объединенной матрице данных для обозначения либо, например, входных данных - это данные [:,: - 1], целевыми являются данные [:, - 1]
добавлено автор doug, источник
AI / Искусственный Интеллект
AI / Искусственный Интеллект
4 793 участник(ов)

Площадка для обсуждения нашего будущего во времена стремительно развивающихся технологий искусственного интеллекта. Для Data Scientists и всех-всех заинтересованных. Подробнее про проект и правила чата: https://t.me/ai_life/19 Связь/реклама: @dudeo

PRO стартапы, бизнес и технологии
PRO стартапы, бизнес и технологии
4 515 участник(ов)

Общение на темы: IoT, BigData, Нейросеть, AI, VR, Fintech, Блокчейн, Biotech, Космос, IT и интернет. Избранные новости из мира бизнеса и высоких технологий @startupnews и еженедельный дайджест @eventsMoscow Правила: http://telegra.ph/Pravila-chata-06-05

AI / Big Data / Machine Learning
AI / Big Data / Machine Learning
2 978 участник(ов)

Всё об AI, бигдата, о машинном обучении, и как правильно всё это готовить. For english: @bigdata_en По любым вопросам: @hitmaker Список интересных групп и каналов: https://github.com/goq/telegram-list

Data Science Chat
Data Science Chat
2 902 участник(ов)

Добро пожаловать в чат по анализу данных и машинному обучению. Вопросы или предложения по сотрудничеству: @ralovets Вакансии и реклама мероприятий разрешены только после согласования. Анти-спам бот для групп: @ProtectronBot

Нейронные сети (AI Community)
Нейронные сети (AI Community)
2 121 участник(ов)

Это чат про нейронные сети для членов AI Community.

AI Jobs and Projects Chat
AI Jobs and Projects Chat
1 324 участник(ов)

Chat for members of AI Community (www.ai-community.com) about Jobs and Projects. Invite link - https://telegram.me/joinchat/ABI4pz7v7KfJhb12XIkIUA

Нейронные сети (Microsoft Developer)
Нейронные сети (Microsoft Developer)
433 участник(ов)

О чём наш чат? Это чат про нейронные сети для всех, кто принимал участие в воркшопах по нейронным сетям с Димой Сошниковым, и не только. Первый из воркшопов проходил в рамках DevCon School в 2017 году: Часть 1: https://www.youtube.com/watch?v=uaBp0uiLvKQ Часть 2: https://www.youtube.com/watch?v=_sF8d9Yt7JI Часть 3: https://www.youtube.com/watch?v=N7hYq2dSY8A Лабы: https://github.com/shwars/NeuroWorkshop Здесь мы говорим про нейронные сети. Все общие вопросы вы можете задавать в чате @microsoftschool Правила чата Если вы хотите задать вопрос, сформулируйте его полностью, прежде чем задать. Уважайте время участников чата. Что запрещено? - Оскорбления, мат, реклама, флуд, флейм, спам, 18+ контент, оффтоп. Первое нарушение – предупреждение, второе – бан. Модераторы @shwars — Дмитрий Сошников @schvepsss — Елизавета Швец