Очень хороший вопрос, поскольку точного ответа на этот вопрос пока нет. Это активная область исследований.
В конечном счете, архитектура вашей сети связана с размерностью ваших данных. Поскольку нейронные сети являются универсальными приближениями, пока ваша сеть достаточно велика, она может соответствовать вашим данным.
Единственный способ по-настоящему узнать, какая архитектура работает лучше всего, - это попробовать их все, а затем выбрать лучший. Но, конечно, с нейронными сетями это довольно сложно, так как каждая модель занимает довольно много времени для обучения. Некоторые люди сначала специально обучают модель, которая «слишком велика», а затем сокращают ее, удаляя веса, которые не вносят большой вклад в сеть.
Что делать, если моя сеть "слишком большая"
Если ваша сеть слишком большая, она может либо перегружаться, либо бороться за сближение. Интуитивно понятно, что ваша сеть пытается объяснить ваши данные более сложным способом, чем следовало бы. Это все равно что пытаться ответить на вопрос, на который можно ответить одним предложением с эссе на 10 страниц. Это может быть трудно структурировать такой длинный ответ, и может быть добавлено много ненужных фактов. ( См. Этот вопрос )
Что делать, если моя сеть "слишком мала"
С другой стороны, если ваша сеть слишком мала, это будет соответствовать вашим данным и, следовательно,. Это все равно, что ответить одним предложением, когда вы должны были написать 10-страничное эссе. Каким бы хорошим ни был ваш ответ, вам не хватит некоторых соответствующих фактов.
Оценка размера сети
Если вы знаете размерность ваших данных, вы можете определить, достаточно ли велика ваша сеть. Чтобы оценить размерность ваших данных, вы можете попробовать вычислить их ранг. Это основная идея того, как люди пытаются оценить размер сетей.
Однако это не так просто. Действительно, если ваша сеть должна быть 64-мерной, вы создаете один скрытый слой размером 64 или два слоя размером 8? Здесь я собираюсь дать вам некоторую интуицию относительно того, что произойдет в любом случае.
Идти глубже
Углубление означает добавление большего количества скрытых слоев. Что он делает, так это то, что он позволяет сети вычислять более сложные функции. Например, в сверточных нейронных сетях часто показано, что первые несколько слоев представляют элементы «низкого уровня», такие как ребра, а последние слои представляют элементы «высокого уровня», такие как грани, части тела и т. Д.
Как правило, вам нужно углубиться, если ваши данные очень неструктурированы (например, изображение) и должны быть обработаны довольно много, прежде чем из них можно извлечь полезную информацию.
Идти шире
Идти глубже - значит создавать более сложные функции, а «шире» - просто создавать больше этих функций. Возможно, ваша проблема объясняется очень простыми функциями, но их должно быть много. Обычно уровни становятся более узкими к концу сети по той простой причине, что сложные функции несут больше информации, чем простые, и поэтому вам не нужно так много.