Давайте начнем с тривиализации: глубокая нейронная сеть - это просто сеть прямой связи со многими скрытыми слоями.
Это более или менее все, что можно сказать об определении. Нейронные сети могут быть периодическими или связанными; Те, у которых есть прямая связь, не имеют никаких петель на графике и могут быть организованы в слои. Если есть «много» слоев, то мы говорим, что сеть глубокая .
Как много слоев делает сеть должна иметь для того , чтобы квалифицировать в качестве глубоко? На это нет однозначного ответа (это немного похоже на вопрос, сколько зерен образует кучу ), но обычно наличие двух или более скрытых слоев считается глубоким. Напротив, сеть только с одним скрытым слоем обычно называется «мелкой». Я подозреваю, что здесь будет происходить некоторая инфляция, и через десять лет люди могут подумать, что что-нибудь с менее чем, скажем, десятью слоями будет мелким и пригодным только для упражнений в детском саду. Неформально «глубокий» говорит о том, что с сетью сложно справиться.
Вот иллюстрация, адаптированная отсюда :
Но реальный вопрос, который вы задаете, - это, конечно, почему было бы полезно иметь много слоев?
Я думаю, что несколько удивительный ответ заключается в том, что на самом деле никто не знает. Есть некоторые общие объяснения , которые я кратко рассмотрю ниже, но ни один из них не было убедительно продемонстрировано , чтобы быть правдой, и никто не может даже быть уверен , что наличие многих слоев является действительно полезным.
Я говорю, что это удивительно, потому что глубокое обучение пользуется огромной популярностью, каждый год побивает все рекорды (от распознавания изображений, до воспроизведения Go, до автоматического перевода и т. Д.), Привыкает к индустрии и т. Д. И т. Д. И мы все еще не совсем уверены, почему это работает так хорошо.
Я основываю свое обсуждение на Deep Learning книги Гудфельего, Bengio и Courville , который вышел в 2017 году и широко считается книгой по глубокому обучению. (Он свободно доступен в Интернете.) Соответствующий раздел - 6.4.1 Свойства и глубина универсальной аппроксимации .
Вы написали это
10 лет назад в классе я узнал, что наличие нескольких слоев или одного слоя (не считая входного и выходного слоев) было эквивалентно с точки зрения функций, которые нейронная сеть может представлять [...]
Вы, должно быть, имеете в виду так называемую теорему универсального приближения , доказанную Цибенко в 1989 году и обобщенную различными людьми в 1990-х годах. В основном это говорит о том, что мелкая нейронная сеть (с 1 скрытым слоем) может аппроксимировать любую функцию, т.е. может в принципе чему-то научиться . Это верно для различных нелинейных активационных функций, включая выпрямленные линейные единицы, которые большинство нейронных сетей используют сегодня ( для этого результата в учебнике упоминается Leshno et al. 1993 ).
Если так, то почему все используют глубокие сети?
Ну, наивный ответ таков: они работают лучше. Вот рисунок из книги « Deep Learning», показывающий, что в одной конкретной задаче может быть больше слоев, но одно и то же явление часто наблюдается в разных задачах и областях:
Мы знаем, что мелкая сеть может работать так же хорошо, как и более глубокие. Но это не так; и они обычно не делают. Вопрос --- почему? Возможные ответы:
- Может быть, мелкой сети потребуется больше нейронов, чем глубокой?
- Может быть, мелкую сеть труднее обучать с помощью наших современных алгоритмов (например, она имеет более неприятные локальные минимумы, или скорость сходимости медленнее, или что-то еще)?
- Может быть, поверхностная архитектура не подходит для тех проблем, которые мы обычно пытаемся решить (например, распознавание объектов является типичным «глубоким», иерархическим процессом)?
- Что-то другое?
Книга Глубокого Обучения приводит аргументы в пользу пунктов № 1 и № 3. Во-первых, утверждается, что количество устройств в мелкой сети растет экспоненциально с ростом сложности задач. Таким образом, чтобы быть полезной, мелкая сеть может быть очень большой; возможно, намного больше, чем глубокая сеть. Это основано на ряде работ, доказывающих, что мелким сетям в некоторых случаях требуется экспоненциально много нейронов; но неясно, например, классификация MNIST или игра в Go. Во-вторых, книга говорит это:
Выбор глубокой модели кодирует очень общее убеждение, что функция, которую мы хотим изучить, должна включать в себя состав из нескольких более простых функций. Это может быть интерпретировано с точки зрения репрезентативного обучения как говорящего о том, что мы считаем, что проблема обучения заключается в обнаружении набора базовых факторов вариации, которые, в свою очередь, могут быть описаны в терминах других, более простых базовых факторов вариации.
Я думаю, что текущий «консенсус» заключается в том, что это комбинация пунктов № 1 и № 3: для задач реального мира глубокая архитектура часто выгодна, а поверхностная архитектура будет неэффективной и потребует намного больше нейронов для той же производительности.
Но это далеко не доказано. Рассмотрим, например, Загоруйко и Комодакис, 2016, Широкие остаточные сети . Остаточные сети со 150+ слоями появились в 2015 году и выиграли различные конкурсы по распознаванию изображений. Это был большой успех и выглядело как убедительный аргумент в пользу глубины; Вот один рисунок из презентации первого автора на остаточном сетевом документе (обратите внимание, что здесь время сбивает с толку налево):
Но статья, приведенная выше, показывает, что «широкая» остаточная сеть с «только» 16 слоями может превзойти «глубокие» с более чем 150 слоями. Если это правда, то весь смысл приведенного выше рисунка рушится.
Или рассмотрим Ba и Caruana, 2014: действительно ли глубокие сети должны быть глубокими? :
В этой статье мы приводим эмпирическое доказательство того, что мелкие сети способны изучать ту же функцию, что и глубокие сети, и в некоторых случаях с таким же количеством параметров, что и глубокие сети. Мы делаем это, сначала тренируя современную глубинную модель, а затем обучая неглубокую модель для имитации глубокой модели. Мимическая модель обучается с использованием схемы сжатия модели, описанной в следующем разделе. Примечательно, что с помощью сжатия моделей мы можем обучить мелкие сети быть такими же точными, как некоторые глубокие модели, хотя мы не можем обучить эти мелкие сети быть такими же точными, как и глубокие сети, когда мелкие сети обучаются непосредственно на оригинале. помечены данные обучения. Если мелкая сеть с таким же количеством параметров, что и глубокая сеть, может научиться имитировать глубокую сеть с высокой точностью,
Если это правда, это будет означать, что правильное объяснение - это скорее моя пуля № 2, а не № 1 или № 3.
Как я уже сказал, никто пока точно не знает.
Заключительные замечания
Степень прогресса, достигнутого в области глубокого обучения за последние ~ 10 лет, поистине поразительна, но большая часть этого прогресса была достигнута методом проб и ошибок, и нам все еще не хватает базового понимания того , что именно делает глубокие сети так хорошо работать. Даже список вещей, которые люди считают важными для создания эффективной глубокой сети, кажется, меняется каждые пару лет.
Возрождение глубокого обучения началось в 2006 году, когда Джеффри Хинтон (который работал над нейронными сетями более 20 лет без особого интереса со стороны кого-либо) опубликовал пару прорывных работ, предлагающих эффективный способ обучения глубоким сетям ( научная статья , статья по нейронным вычислениям ) , Хитрость заключалась в том, чтобы использовать предварительную подготовку без присмотра перед началом градиентного спуска. Эти документы произвели революцию в этой области, и в течение нескольких лет люди думали, что неконтролируемая предварительная подготовка является ключевым фактором.
Затем в 2010 году Мартенс показал, что глубокие нейронные сети можно обучать с помощью методов второго порядка (так называемых методов без гессиана) и могут превзойти сети, обученные с помощью предварительного обучения: глубокое обучение с помощью оптимизации без гессиана . Затем в 2013 году Sutskever et al. показал, что стохастический градиентный спуск с некоторыми очень умными уловками может превзойти методы без гессиана: о важности инициализации и импульса в глубоком обучении . Кроме того, около 2010 года люди поняли, что использование выпрямленных линейных единиц вместо сигмовидных единиц имеет огромное значение для градиентного спуска. Dropout появился в 2014 году. Остаточные сети появились в 2015 году. Люди продолжают придумывать все более и более эффективные способы обучения глубоких сетей ито, что казалось ключевой идеей 10 лет назад, сегодня часто считается неприятностью. Все это в значительной степени обусловлено методом проб и ошибок, и мало кто понимает, что заставляет некоторые вещи работать так хорошо, а другие - нет. Обучение глубоким сетям похоже на большую хитрость. Удачные трюки обычно рационализируются постфактум.
Мы даже не знаем, почему глубокие сети достигают плато производительности; всего 10 лет люди обвиняли локальные минимумы, но в настоящее время думают, что дело не в этом (когда на плато производительности градиенты имеют тенденцию оставаться большими). Это такой основной вопрос о глубоких сетях, и мы даже не знаем этого .
Обновление: это более или менее тема беседы Али Рахими NIPS 2017 о машинном обучении как алхимии: https://www.youtube.com/watch?v=Qi1Yry33TQE .
[Этот ответ был полностью переписан в апреле 2017 года, поэтому некоторые из приведенных ниже комментариев больше не применяются.]