Поэтому я пытаюсь научить себя нейронным сетям (для регрессионных приложений, а не для классификации изображений кошек).
Моими первыми экспериментами было обучение сети внедрению КИХ-фильтра и дискретного преобразования Фурье (обучение сигналам «до» и «после»), поскольку обе эти линейные операции могут быть реализованы одним слоем без функции активации. Оба работали нормально.
Тогда я хотел посмотреть, смогу ли я добавить abs()
и выучить амплитудный спектр. Сначала я подумал о том, сколько узлов потребуется в скрытом слое, и понял, что для грубого приближения достаточно abs(x+jy) = sqrt(x² + y²)
3 ReLU, поэтому я протестировал эту операцию отдельно для одиночных комплексных чисел (2 входа → 3 узла ReLU скрытый слой → 1 вывод). Изредка это работает:
Но в большинстве случаев, когда я это пробую, он застревает в локальном минимуме и не может найти правильную форму:
Я перепробовал все оптимизаторы и варианты ReLU в Keras, но они не имеют большого значения. Есть ли что-то еще, что я могу сделать, чтобы простые сети, подобные этой, надежно сходились? Или я просто подхожу к этому с неправильным отношением, и вы должны просто отбросить больше узлов, чем необходимо, при решении проблемы, и если половина из них умрет, это не будет иметь большого значения?