Обратное распространение эффективно обучает модель, что еще можно попробовать ??

В последнем посте я построил кастомную реализацию нейронной сети. Хотя лично я реализовал алгоритм обратного распространения также для сети, но я не показываю это здесь ... Есть много сообщений, которые демонстрируют с кодом, как обратное распространение работает как для базового, так и для матричного подхода. Но как насчет разработки модели? Часто говорят, что выбор дизайна или архитектуры модели - это искусство, которое приходит с опытом. В этом посте я собираюсь продемонстрировать, какие эксперименты я проводил при проектировании и обучении модели.

Нейронная сеть - это, по сути, комбинация непрерывных чисел, упорядоченных по формату и структуре, сопровождаемая некоторыми функциями активации и некоторыми смещениями уровней. Может быть несколько комбинаций различных значений, но некоторые из них приводят к тому, что нейронная сеть работает ужасно неправильно, а некоторые комбинации делают ее невероятно точной. С каждым набором таких значений связана соответствующая ошибка, которая рассчитывается на основе функции стоимости.

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

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

  • Оптимизация роя частиц (): этот алгоритм представляет собой алгоритм оптимизации непрерывных значений, который в основном создает несколько агентов, которые ищут по плоскости поверхности стоимости наиболее оптимизированный набор значений. Это используется для оптимизации каждой нейронной сети. Слишком много слов .. ?? Позволь мне объяснить.
    Если мы будем рассматривать матрицу весов нейронной сети как список чисел с плавающей запятой, который можно преобразовать обратно в матрицу весов. Тогда этот список можно назвать ДНК нейронной сети. Предполагая, что каждый элемент списка n весов представляет координату в n-мерной векторной плоскости, и каждая координата имеет связанное с ней значение стоимости, тогда задача оптимизации состоит в том, чтобы найти координату где стоимость минимальна.
    Алгоритм PSO использует несколько агентов, которые ищут в векторной плоскости и анализируют несколько решений, прежде чем перейти к глобальным минимумам.

  • Генетический алгоритм: используется для выбора дискретной части сети. То есть количество скрытых слоев, функций активации на слой, количество нейронов на слой было выбрано GA. Алгоритм будет генерировать различные комбинации как часть своей совокупности и пытаться сойтись к наилучшей возможной конфигурации сети.
    Соответствие каждого возможного решения определяется минимальными затратами, до которых модель может быть обучена с использованием алгоритма PSO .
    Мутации и пересечения происходят в структуре сетевых архитектур и выборе функций активации.

С помощью этого алгоритма я протестировал наборы данных для логических вентилей, особенно для вентилей XOR, которые линейно неразделимы. Я также протестировал набор данных MNIST (без использования сверточных нейронных сетей). Хотя меня не впечатлило время обучения ... потому что я использовал алгоритм barebones, который не был оптимизирован для умножения разреженных матриц, без поддержки графического процессора. Но количество архитектур, протестированных за одно и то же время, было поразительным.

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

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

Следующие шаги

Для меня следующими шагами было бы использование таких пакетов, как tensorflow или PyTorch, чтобы иметь возможность использовать возможности графического процессора и попытку оптимизировать алгоритм для эффективной работы с наборами данных.