Концептуальные вопросы обучения нейронной сети с оптимизацией роя частиц

У меня есть 4 входных и 3 выходных нейронных сети, обученных с помощью оптимизации роя частиц (PSO) со среднеквадратической ошибкой (MSE) в качестве функции пригодности с использованием базы данных IRIS, предоставленной MATLAB. Фитнес-функция оценивается 50 раз. Эксперимент заключается в классификации функций. У меня есть несколько сомнений

(1) Является ли PSO итераций / поколений = количество раз, когда фитнес-функция оценивается?

(2) Во многих статьяхТренировочная кривая Я видел, как тренировочная кривая MSE против поколений строилась на графике. На рисунке график (а) слева представляет собой модель, аналогичную NN. Это 4 входных-0 скрытых когнитивных карт выходного слоя-3. И график (b) - это NN, обученный тем же PSO. Целью данной работы было показать эффективность новой модели в (а) над NN.

Но они упоминают, что эксперимент проводится, скажем, Cycles = 100 раз с Generations =300. В этом случае Кривая обучения для (a) и (b) должна была быть MSE против циклов, а не MSE против PSO поколений? Например, цикл 1: итерация PSO 1-50 -> результат (весовые коэффициенты_1, отклонение_1, MSE_1, коэффициент классификации_1). Цикл 2: итерация PSO 1-50 -> Результат (весовые коэффициенты_2, смещение_2, MSE_2, коэффициент классификации_2) и т. Д. Для 100 циклов. Почему оси X в (a), (b) отличаются и что они означают?

(3) И наконец, при каждом независимом запуске программы (запуск файла m несколько раз независимо через консоль) я никогда не получаю одинаковую скорость классификации (CR) или одинаковый набор весов. Конкретно, когда я впервые запускаю программу, я получаю значения W (веса) и CR =100%. Когда я снова запускаю программу с кодом Matlab, я могу получить CR = 50% и другой набор весов!! Как показано ниже для примера,

%Run1 (PSO generaions 1-50) 
>>PSO_NN.m

Correlation =

     0

Classification rate = 25



FinalWeightsBias =

   -0.1156    0.2487    2.2868    0.4460    0.3013    2.5761

%Run2 (PSO generaions 1-50) 
>>PSO_NN.m
Correlation =

     1

Classification rate = 100

%Run3 (PSO generaions 1-50) 
>>PSO_NN.m
Correlation =

   -0.1260

Classification rate = 37.5

    FinalWeightsBias =

   -0.1726    0.3468    0.6298   -0.0373    0.2954   -0.3254

Какой должен быть правильный метод? Итак, какой набор веса мне, наконец, взять и как мне сказать, что сеть была обучена? Я знаю, что эволюционные алгоритмы из-за их случайности никогда не дадут одинакового ответа, но тогда как мне убедиться, что сеть обучена? Должен быть обязан для разъяснения.

1 ответ

Решение
  1. Как и в большинстве методов машинного обучения, число итераций в PSO - это количество обновлений решения. В случае PSO это количество раундов обновления для всех частиц. Функция стоимости здесь оценивается после обновления каждой частицы, так что это больше, чем количество итераций. Примерно, (# вызовы функций стоимости) = (# итераций) * (# частиц).
  2. Графики здесь сравнивают различные классификаторы, нечеткие когнитивные карты для графа (а) и нейронную сеть для графа (б). Таким образом, ось X отображает соответствующие меры обучения итераций для каждой.
  3. Каждый раз, когда вы запускаете свой NN, вы инициализируете его различными случайными значениями, поэтому результаты никогда не будут одинаковыми. Тот факт, что результаты сильно различаются от одного прогона к следующему, означает, что у вас есть проблема сходимости. Первое, что нужно сделать в этом случае, это попытаться запустить больше итераций. В целом конвергенция - довольно сложная проблема, и решения сильно различаются в зависимости от приложений (и внимательно прочитайте ответ и комментарии, которые Исаак дал вам по вашему другому вопросу). Если ваша проблема сохраняется после увеличения количества итераций, вы можете опубликовать ее как новый вопрос, предоставив образец ваших данных и фактический код, который вы используете для построения и обучения сети.
Другие вопросы по тегам