Искусственная нейронная сеть PSO обучение

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

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

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

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

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

Я немного растерялся на данный момент

Спасибо

1 ответ

Решение

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

Когда я отлаживаю AI, мне часто бывает полезно сначала определить, виноват ли мой обучающий код или код оценки (в данном случае нейронная сеть). Возможно, вы захотите создать второго тренера для вашей сети. Затем вы можете убедиться, что ваш сетевой код правильно рассчитывает вывод. Вы могли бы даже сделать простой "альпинист холма". Выберите случайный вес и измените случайное небольшое количество (вверх или вниз). Ваша ошибка стала лучше? Сохраните изменение веса и повторите. Ваша ошибка ухудшилась, отмените изменение и попробуйте снова.

Другие вопросы по тегам