Содержание статьи
Сколько скрытых слоев и скрытых узлов необходимо в нейронной сети
0
Когда мы уделяем слишком много внимания деталям и прикладываем чрезмерные интеллектуальные усилия к проблеме, которая на самом деле довольно проста, мы упускаем «общую картину» и в итоге получаем решение, которое окажется неоптимальным. Аналогичным образом, перцептрон с избыточной вычислительной мощностью и недостаточными обучающими данными может использовать слишком специфическое решение вместо поиска обобщенного решения (пример показан на следующем рисунке), которое будет более эффективно классифицировать новые входные выборки.
Метод проб и ошибок – это хорошо, но вам понадобится обоснованная отправная точка. В той же книге, ссылка на которую приведена выше (на странице 159), доктор Хитон упоминает три практических правила для выбора размерности скрытого слоя. Я буду опираться на них, предлагая рекомендации, основанные на моей смутной интуиции в обработке сигналов.
Следует также помнить, что перегруженная нейронная сеть – это не просто напрасная трата ресурсов процессора и усилий на написание кода – она может на самом деле принести «положительный вред», делая сеть более восприимчивой к переобучению (перетренированности).
Итак, когда нам действительно нужно несколько скрытых слоев? Я не могу дать вам никаких рекомендаций из личного опыта. Лучшее, что я могу сделать, это передать опыт доктора Джеффа Хитона (смотрите страницу 158 текста по ссылке), который утверждает, что один скрытый слой позволяет нейронной сети аппроксимировать любую функцию, включающую «непрерывное преобразование из одного конечного пространства в другое».
До сих пор в этой серии статей, посвященной нейронным сетям, мы обсуждали нейросети перцептрон, многослойные нейросети и способы разработки таких нейросетей с использованием языка Python. Прежде чем мы перейдем к обсуждению того, сколько скрытых слоев и узлов вы можете выбрать для использования, ознакомьтесь с содержанием серии выше, в меню.
Как и следовало ожидать, на этот вопрос нет простого ответа. Однако самое важное, что нужно понять, это то, что перцептрон с одним скрытым слоем – это крайне мощная вычислительная система. Если вы не получаете адекватных результатов с одним скрытым слоем, попробуйте сначала другие усовершенствования – может быть, вам нужно оптимизировать скорость обучения, увеличить количество эпох обучения или расширить набор обучающих данных. Добавление второго скрытого слоя увеличивает сложность кода и время обработки.
Потиху изучаю нейронные сети. Принцип я понял, основные понятия вроде бы уловил. Даже самый простой прототипчик написал. Но вот какой вопрос у меня появился: Я вижу, что моя нейронная сеть недостаточно умна, сколько ни обучай, и понимаю, что нужно увеличить количество нейронов. Но каким образом мне увеличивать их количество? Увеличить количество на слое, или же увеличить количество слоёв? (Понятное дело, это нужно подбирать экспериментально, но из-за отсутствия опыта я не могу ссылаться на свои наблюдения как на валидные, а вопрос мучает уже сейчас). Если я правильно понимаю, можно представить аналогию с обработкой изображения: a) Допустим, мы изначально работали только с бинарного вида изображением. Ну, белый/чёрный пиксель. А потом хотим обрабатывать обычное черно-белое изображение (или цветное). Количество входных нейронов может не увеличиться, но мы-то понимаем, что усложнился один шаг, и поэтому можем добавить дополнительные нейроны в существующий слой. b) Мы хотим выделять резкие границы на изображении. Понятное дело, тут уже будет гораздо больше шагов, а не один объемный. Тут сначала нужно сделать из цветного изображения черно-белое, потом, к примеру, взять квадрат цвета, ну или что-то подобное, словом, задача не в один шаг. И тут мы уже увеличиваем именно количество слоёв в сети. Верен ли мой ход мысли? Может есть какие-то более конкретные сведения на эту тему, которые я упустил/не нашёл? P.S. ибо стала задача сделать ИИ для простенькой логической игры, и захотелось попробовать заставить компьютер обучаться, играя против компьютера. А так как процесс не быстрый, пытаюсь прикинуть необходимое количество слоёв сети для ИИ этой игры. Сам я пока что расцениваю сложность в пару скрытых слоёв, опираясь лишь на интуицию и примерный ход мыслей человека, играющего в это.