Моя нейронная сеть не может даже изучить евклидово расстояние


9

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

Моими первыми экспериментами было обучение сети внедрению КИХ-фильтра и дискретного преобразования Фурье (обучение сигналам «до» и «после»), поскольку обе эти линейные операции могут быть реализованы одним слоем без функции активации. Оба работали нормально.

Тогда я хотел посмотреть, смогу ли я добавить abs()и выучить амплитудный спектр. Сначала я подумал о том, сколько узлов потребуется в скрытом слое, и понял, что для грубого приближения достаточно abs(x+jy) = sqrt(x² + y²)3 ReLU, поэтому я протестировал эту операцию отдельно для одиночных комплексных чисел (2 входа → 3 узла ReLU скрытый слой → 1 вывод). Изредка это работает:

3 RELU, реализующие евклидово расстояние в виде перевернутой гексагональной пирамиды

Но в большинстве случаев, когда я это пробую, он застревает в локальном минимуме и не может найти правильную форму:

3 РЛУ, образующие долинообразную сеть

потеря против эпох

Я перепробовал все оптимизаторы и варианты ReLU в Keras, но они не имеют большого значения. Есть ли что-то еще, что я могу сделать, чтобы простые сети, подобные этой, надежно сходились? Или я просто подхожу к этому с неправильным отношением, и вы должны просто отбросить больше узлов, чем необходимо, при решении проблемы, и если половина из них умрет, это не будет иметь большого значения?


1
Ваш график показывает то, что кажется несколькими различными экспериментами, некоторые из которых работают, а некоторые нет. Чем объясняются различия?
Sycorax говорит восстановить Монику

@Sycorax Это просто повторные испытания одного и того же. Иногда он находит решение гексагональной пирамиды, но обычно это не так.
эндолит

Вы пробовали с двумя скрытыми слоями и tanh в качестве функции активации?
Кетан

@KetanNo, почему? Я отправил более простой вариант здесь: stats.stackexchange.com/q/379884/11633
эндолиты

Вы можете посмотреть на это. stats.stackexchange.com/q/375655/27556 . Но можете ли вы объяснить, почему вы думаете, что вам нужно только 3 человека? «естественное» разложение будет одним скрытым слоем, чтобы выполнить квадратное приближение с relus, и другим слоем, чтобы сделать квадратный корень - в основном, relus делает кусочно-линейные приближения.
seanv507

Ответы:


6

Выходные данные, по-видимому, убедительно свидетельствуют о том, что один или несколько ваших нейронов погибли (или, возможно, гиперплоскость весов для двух ваших нейронов слилась). Вы можете видеть, что с 3 Relu вы получаете 3 теневых разделения в центре, когда вы подходите к более разумному решению. Вы можете легко проверить, верно ли это, проверив выходные значения каждого нейрона, чтобы увидеть, остается ли он мертвым для подавляющего большинства ваших выборок. В качестве альтернативы, вы можете построить все 2x3 = 6 весов нейронов, сгруппированных по их соответствующим нейронам, чтобы увидеть, не коллапсируют ли два нейрона в одну и ту же пару весов.

Я подозреваю, что одной из возможных причин этого является то, что наклонено к одной координате, например, , и в этом случае вы пытаетесь воспроизвести тождество, как тогда . Здесь действительно мало что можно сделать, чтобы исправить это. Один из вариантов - добавить больше нейронов, как вы уже пробовали. Второй вариант - попробовать непрерывную активацию, например сигмоид, или что-то неограниченное, например, экспоненциальную. Вы также можете попробовать выбыть (скажем, с вероятностью 10%). Вы можете использовать обычную реализацию dropout в keras, которая, будем надеяться, достаточно умна, чтобы игнорировать ситуации, когда выпадают все 3 ваших нейрона.x y a b s ( x + i y ) xx+iyxyabs(x+iy)x


1
+1, почти наверняка это. Когда вы используете ReLU с таким небольшим количеством гирь, мертвые нейроны почти всегда вступают в игру.
kbrose

1
Это правдоподобное предположение в случае ReLU. Но OP пишет, что они пробовали несколько разных вариантов ReLU - встречаются ли мертвые нейроны в таких вариантах, как ELU или Leaky Relu или PReLU?
Sycorax говорит восстановить Монику

3 shadowy splits in the center when you converge to the more reasonable solution.Да, это грубое приближение я имел в виду; перевернутая шестиугольная пирамида. or perhaps something unbounded like an exponential Я попробовал elu и selu, которые не работали намного лучше. two neurons collapse to the same pair of weightsАх, я не думал об этом; Я просто предположил, что они были мертвы.
эндолит

Я получил доступ к выводу скрытого слоя при использовании ReLU и подтвердил, что обычно один из нейронов мертв. Реже два пересекаются и делают одно и то же. Интересно, есть ли способ заставить нейроны «отталкивать» друг друга, чтобы они не устраивали лишние роли?
эндолит

1
@endolith Dropout явно создан для создания независимых нейронов. ELU никогда не «умирают», но они имеют исчезающий градиент слева.
Сикоракс говорит восстановить Монику
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.