@lacredin
Программист

Как строить нейронную сеть?

Здравствуйте.
Мне необходимо разобраться в работе нейронных сетей для своей дипломной работы.
Прочитав несколько статей и часть книги, я так и не смог понять, как же они строятся.
Общий принцип работы понятен: множество входных данных, которые через весовые коэффициенты входят во все нейронны нейронного слоя сразу. В них сигналы складываются, потом преобразуются активационной функцией и идут на вход нейронов следующего нейронного слоя. В конце концов всё это активирует какой-то выходной нейрон(ы), которые и будут результатом работы.

Но вот сколько должно быть нейронов, сколько должно быть слоёв, несёт ли каждый из нейронов какую-то смысловую нагрузку(проверяет какой-то конкретный параметр исходя из входных данных) или всё случайно. На что опираться при подборе этого всего, не понятно!
Прошу помочь разобраться с этим на примере простой задачи.
Предположим что я хочу написать нейронную сеть для сложения/вычитания чисел от 0 до 9.
В этом случае(как я понимаю) у меня будет три входных нейрона(первое число, знак плюс или минус и второе число) и 28 выходных нейронов (числа от -9 до 18).
Но что должно быть по середине?
Сколько нейронов, сколько слоёв, по какому принципу надо подбирать это всё?
  • Вопрос задан
  • 695 просмотров
Пригласить эксперта
Ответы на вопрос 2
@rPman
Есть первое приближение, сложность задачи практически линейно влияет на количество нейронов, но вот как именно оценить численно эту сложность - зависит от задачи.
Есть предположение, что каждый последующий слой (для deep learning) это фактически отдельная задача преобразования данных в другую форму, выделение критериев, внутренняя классификация и т.п., а количество нейронов в слое - это сложность именно этого преобразования.
Если зависимость между входами и выходами имеет сложную форму (не просто если-то), то каждый лишний слой - определяет именно эту зависимость, но все они работают сразу для всех условий в зависимостях...

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

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

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

А еще фишкой последних лет является использование тензоров, для того чтобы обучать не саму нейронную сеть а ее упрощенный вариант (тензор, это я так понял, мы преобразовываем веса нейронной сети в упрощенное дерево, проводим обучение на его основе а затем результат приводим обратно к сети ) - это позволяет уменьшить требования ресурсов на обучение на порядок. К сожалению красивых примеров в русскоязычном сегменте интернета нет, да и на английском... только пара открытых библиотек имеет готовую реализацию по работе с тензорами, tensorflow от гугла и theano
Ответ написан
Комментировать
@FoxInSox
Как строить нейронную сеть?
Прочитав несколько статей и часть книги, я так и не смог понять, как же они строятся.

Прочитайте статьи еще раз и дочитайте книгу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы