Я не видел вопроса, сформулированного именно в этих терминах, и поэтому я задаю новый вопрос.
Что мне интересно знать, так это не определение нейронной сети, а понимание реальной разницы с глубокой нейронной сетью.
Для большего контекста: я знаю, что такое нейронная сеть и как работает обратное распространение. Я знаю, что DNN должен иметь несколько скрытых слоев. Однако 10 лет назад в классе я узнал, что наличие нескольких слоев или одного слоя (не считая входного и выходного слоев) было эквивалентно с точки зрения функций, которые может представлять нейронная сеть (см. Теорему Кибенко об универсальном приближении ), и что больше слоев сделали его более сложным для анализа без увеличения производительности. Очевидно, что это уже не так.
Я полагаю, возможно, ошибочно, что различия заключаются в алгоритме обучения и свойствах, а не в структуре, и поэтому я был бы очень признателен, если бы ответ мог подчеркнуть причины, которые сделали возможным переход на DNN (например, математическое доказательство или случайная игра с сетями). ?) и желательно (например, скорость сходимости?)
источник
Ответы:
Давайте начнем с тривиализации: глубокая нейронная сеть - это просто сеть прямой связи со многими скрытыми слоями.
Это более или менее все, что можно сказать об определении. Нейронные сети могут быть периодическими или связанными; Те, у которых есть прямая связь, не имеют никаких петель на графике и могут быть организованы в слои. Если есть «много» слоев, то мы говорим, что сеть глубокая .
Как много слоев делает сеть должна иметь для того , чтобы квалифицировать в качестве глубоко? На это нет однозначного ответа (это немного похоже на вопрос, сколько зерен образует кучу ), но обычно наличие двух или более скрытых слоев считается глубоким. Напротив, сеть только с одним скрытым слоем обычно называется «мелкой». Я подозреваю, что здесь будет происходить некоторая инфляция, и через десять лет люди могут подумать, что что-нибудь с менее чем, скажем, десятью слоями будет мелким и пригодным только для упражнений в детском саду. Неформально «глубокий» говорит о том, что с сетью сложно справиться.
Вот иллюстрация, адаптированная отсюда :
Но реальный вопрос, который вы задаете, - это, конечно, почему было бы полезно иметь много слоев?
Я думаю, что несколько удивительный ответ заключается в том, что на самом деле никто не знает. Есть некоторые общие объяснения , которые я кратко рассмотрю ниже, но ни один из них не было убедительно продемонстрировано , чтобы быть правдой, и никто не может даже быть уверен , что наличие многих слоев является действительно полезным.
Я говорю, что это удивительно, потому что глубокое обучение пользуется огромной популярностью, каждый год побивает все рекорды (от распознавания изображений, до воспроизведения Go, до автоматического перевода и т. Д.), Привыкает к индустрии и т. Д. И т. Д. И мы все еще не совсем уверены, почему это работает так хорошо.
Я основываю свое обсуждение на Deep Learning книги Гудфельего, Bengio и Courville , который вышел в 2017 году и широко считается книгой по глубокому обучению. (Он свободно доступен в Интернете.) Соответствующий раздел - 6.4.1 Свойства и глубина универсальной аппроксимации .
Вы написали это
Вы, должно быть, имеете в виду так называемую теорему универсального приближения , доказанную Цибенко в 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 года, поэтому некоторые из приведенных ниже комментариев больше не применяются.]
источник
Хороший ответ до сих пор, хотя здесь есть пара вещей, о которых никто не упомянул, вот мои 0.02 $
Я просто отвечу в форме рассказа, должен сделать вещи веселее и понятнее. Нет TLDR здесь. В процессе вы должны быть в состоянии понять, в чем разница.
Есть несколько причин, по которым DNN вспыхнули, когда они это сделали (звезды должны были выровняться, как и все подобные вещи, это просто вопрос правильного места, правильного времени и т. Д.).
Одной из причин является доступность данных, много данных (помеченных данных). Если вы хотите иметь возможность обобщать и изучать что-то вроде «универсальных априоров» или «универсальных априоров» (то есть базовых строительных блоков, которые можно повторно использовать между задачами / приложениями), то вам нужно много данных. И дикие данные, могу добавить, а не стерильные наборы данных, тщательно записанные в лаборатории с контролируемым освещением и все такое. Механический турок сделал это (маркировка) возможным.
Во-вторых, возможность обучать большие сети быстрее с использованием графических процессоров ускорила эксперименты. Модули ReLU также ускорили вычислительные процессы и обеспечили их регуляризацию, поскольку вам нужно было использовать больше модулей в одном слое, чтобы иметь возможность сжимать одну и ту же информацию, поскольку теперь слои стали более разреженными, поэтому с выпадением также все прошло хорошо. Кроме того, они помогли решить важную проблему, возникающую при укладке нескольких слоев. Подробнее об этом позже. Различные трюки, улучшающие производительность. Как использование мини-пакетов (что на самом деле вредно для окончательной ошибки) или свертки (которые на самом деле не отражают столько различий, как локальные рецептивные поля), но вычислительно быстрее.
Тем временем люди спорили, нравится ли им тощий или более пухлый, маленький или высокий, с веснушками или без них и т. Д. Оптимизация была такой же, как у нее или у нее не получилось, так что исследования были направлены на более сложные методы обучения, такие как градиент сопряжения. и метод ньютонов, наконец они все поняли, что нет бесплатного обеда. Сети отрыгивали.
Что замедлило ситуацию, так это исчезнувшая проблема градиента . Люди ходили как: Вау, это далеко, чувак! Короче говоря, это означает, что было трудно отрегулировать ошибку на слоях ближе к входам. Когда вы добавляете больше слоев на торт, становится слишком шатким. Вы не можете распространять значимую ошибку обратно на первые слои. Чем больше слоев, тем хуже становится. Облом.
Некоторые люди поняли, что использование кросс-энтропии в качестве функции потерь (ну, опять же, классификация и распознавание изображений) обеспечивает некоторую регуляризацию и помогает против насыщения сети, и, в свою очередь, градиент не может скрыть это хорошо.
То, что также сделало возможным, была предварительная подготовка за слой, используя неконтролируемые методы. По сути, вы берете кучу авто-кодеров и изучаете все менее абстрактные представления по мере увеличения степени сжатия. Веса из этих сетей были использованы для инициализации контролируемой версии. Это решило проблему исчезающего градиента по-другому: вы уже начинаете тренировку под наблюдением с гораздо лучшей стартовой позиции. Все остальные сети встали и начали бунтовать. Но сети все равно нуждались в контроле, иначе было бы невозможно сохранить большие данные.
Теперь, для последней части, которая, в конечном счете, приводит к вашему ответу, который слишком сложен, чтобы выразить его в двух словах: почему больше слоев, а не только один. Потому что мы можем! и потому что контекстные и инвариантные дескрипторы признаков. и бассейны.
Вот пример: у вас есть набор данных изображений, как вы собираетесь обучать план NN, используя эти данные? Ну, наивно, вы берете, скажем, каждую строку и объединяете ее в один длинный вектор, и это ваш вклад. Что ты изучаешь? Ну, некоторые нечеткие бессмысленные функции, которые могут не выглядеть как-либо, из-за множества типов отклонений, которые содержат объекты на изображении, и вы не можете различить релевантные и не относящиеся к делу вещи. И в какой-то момент сеть должна забыть, чтобы иметь возможность заново изучать новые вещи. Так что есть проблема с емкостью. Это скорее нелинейная динамика, но интуиция заключается в том, что вам нужно увеличить количество нейронов, чтобы иметь возможность включать больше информации в вашу сеть.
Итак, дело в том, что если вы просто вводите изображение в виде одного куска, добавление дополнительных слоев не делает для вас слишком много, так как вы не можете изучать абстракции , что очень важно. Таким образом, целостная работа не работает так хорошо, если вы не делаете с сетью более простые вещи, такие как фокусирование на объекте определенного типа, поэтому вы ограничиваете себя одним классом и выбираете некоторые глобальные свойства в качестве цели классификации.
Так что же тут делать? Посмотрите на край экрана и попробуйте прочитать этот текст. Проблема? Как бы глупо это не звучало, вам нужно посмотреть, что вы читаете. В противном случае это слишком нечетко / недостаточно разрешения / детализации. Давайте назовем зону фокусировки восприимчивым полем. Сети должны быть в состоянии сосредоточиться тоже. По сути, вместо использования всего изображения в качестве входных данных, вы перемещаете скользящее окно вдоль изображения и затем используете его в качестве входных данных для сети (немного менее стохастично, чем то, что делают люди). Теперь у вас также есть возможность фиксировать корреляции между пикселями и, следовательно, объектами, и вы также можете различить сонного кота, сидящего на диване, и перевернутого банджи-джампа. Аккуратная, вера в человечество восстановлена. Сеть может изучать локальные абстракции в изображении на нескольких уровнях. Сеть изучает фильтры,
Итак, подведем итоги: рецептивные поля / свертки, неконтролируемая инициализация, выпрямленные линейные единицы, выпадение или другие методы регуляризации. Если вы очень серьезно относитесь к этому, я рекомендую вам взглянуть на глубокое обучение Шмидхубера в нейронных сетях: обзор, вот URL для препринта http://arxiv.org/abs/1404.7828
И помните: большое обучение, глубокие данные. Слово.
источник
С точки зрения непрофессионала, основное отличие от классических нейронных сетей состоит в том, что они имеют гораздо больше скрытых слоев.
Идея состоит в том, чтобы добавить метки к слоям, чтобы создать несколько слоев абстракции:
Например, глубокая нейронная сеть для распознавания объектов :
Вы можете найти хорошее объяснение на этот вопрос в Quora .
И, если вы заинтересованы в этом предмете, я бы рекомендовал взглянуть на эту книгу .
источник
В начале меня также немного смутило различие между нейронными сетями (NN) и глубокими нейронными сетями (DNN), однако, к сожалению, «глубина» относится только к числу параметров и слоев. Вы можете воспринимать это как своего рода ребрендинг в рамках так называемой «канадской мафии».
Несколько лет назад у меня также были Нейронные сети как часть класса, и мы делали распознавание цифр, волновое приближение и подобные приложения, используя NN, у которого было несколько скрытых слоев и выходов и весь этот джаз, который есть у DNN. Однако то, чего у нас тогда не было, было вычислительной мощностью.
Причиной, которая сделала переход на DNN возможным и желательным, являются успехи в разработке аппаратного обеспечения. Проще говоря, теперь мы можем вычислять больше, быстрее и более параллельно (DNN на графических процессорах), тогда как раньше время было узким местом для NN.
Как указано на странице глубокого обучения в Википедии , «глубокая» часть относится, главным образом, к тому, что функции взаимодействуют нелинейным образом на нескольких слоях, следовательно, выполняя извлечение и преобразование объектов. Это также было сделано в стандартных NN, но в меньшем масштабе.
На той же странице, здесь у вас есть определение "глубокая нейронная сеть (DNN) является искусственной нейронной сети (ИНС) с несколькими скрытыми слоями блоков между входным и выходным слоями.
источник
Насколько я знаю, то, что сегодня называется Глубокая Нейронная Сеть (DNN), не имеет ничего принципиально или философски отличного от старой стандартной Нейронной Сети (NN). Хотя теоретически можно аппроксимировать произвольное NN, используя неглубокое NN только с одним скрытым слоем, однако это не означает, что две сети будут работать одинаково при обучении с использованием одного и того же алгоритма и обучающих данных. На самом деле растет интерес к обучению неглубоких сетей, которые работают аналогично глубоким сетям. Однако это делается путем обучения сначала глубокой сети, а затем тренировки мелкой сети для имитацииокончательный вывод (т. е. вывод предпоследнего слоя) глубокой сети. Понимаете, что делает глубокую архитектуру благоприятной, так это то, что современные методы обучения (обратное распространение) работают лучше, когда нейроны расположены в иерархической структуре.
Другой вопрос, который может быть задан: почему нейронные сети (в частности DNN) стали такими популярными внезапно. Насколько я понимаю, магические ингредиенты, которые сделали DNN такими популярными в последнее время, заключаются в следующем:
A. Улучшенные наборы данных и возможности обработки данных
1. Стали доступны крупномасштабные наборы данных с миллионами разнообразных изображений.
2. Быстрая реализация GPU стала общедоступной
B. Улучшенные алгоритмы обучения и сетевые архитектуры
1. Выпрямленные линейные единицы (ReLU) вместо сигмовидной или tanh
2. Глубокие сетевые архитектуры развивались на протяжении многих лет
A-1) До недавнего времени, по крайней мере в Computer Vision, мы не могли обучать модели миллионам помеченных изображений; просто потому, что маркированные наборы данных такого размера не существовали. Оказывается, что помимо количества изображений, гранулярность набора меток также является очень важным фактором успеха DNN (см. Рисунок 8 в этой статье , Azizpour et al.).
A-2) Много инженерных усилий было направлено на то, чтобы сделать возможным обучение DNN, которые хорошо работают на практике, в частности, появлением реализаций графических процессоров. Одна из первых успешных реализаций DNN на GPU работает на двух параллельных GPU; тем не менее, требуется около недели, чтобы обучить DNN на 1,2 миллиона изображений 1000 категорий с использованием высокопроизводительных графических процессоров (см. эту статью, Крижевский и др.).
B-1) Использование простых выпрямленных линейных единиц (ReLU) вместо сигмоидальных и танховых функций, вероятно, является самым большим строительным блоком в обеспечении возможности обучения DNN. Обратите внимание, что функции сигмоида и танга почти везде имеют почти нулевой градиент , в зависимости от того, как быстро они переходят с низкого уровня активации на высокий; в крайнем случае, когда переход происходит внезапно, мы получаем ступенчатую функцию с нулевым наклоном везде, кроме одной точки, где происходит переход.
Б-2) История о том, как архитектуры нейронных сетей развивались на протяжении многих лет, напоминает мне о том, как эволюция меняет структуру организма в природе. Совместное использование параметров (например, в сверточных слоях), регуляризация отсева, инициализация, расписание скорости обучения, пространственное объединение, подвыборка в более глубоких слоях и многие другие приемы, которые в настоящее время считаются стандартными в обучающих DNN, были разработаны, разработаны и завершены с учетом годы, чтобы сделать обучение глубоких сетей возможным, как сегодня.
источник
Разница между «Глубоким» NN и стандартным NN является чисто качественной: нет определения того, что означает «Глубокий». «Глубокий» может означать что угодно, от чрезвычайно сложных архитектур, используемых Google, Facebook и другими компаниями, которые имеют 50-80 или более слоев, до 2 скрытых (всего 4 слоя) архитектур. Я не удивлюсь, если вы даже найдете статьи, в которых утверждается, что вы углубляете обучение с помощью одного скрытого слоя, потому что «глубокий» не значит много.
«Нейронная сеть» - это также слово, которое не имеет очень точного значения. Он охватывает чрезвычайно большой ансамбль моделей, от случайных машин Больцмана (которые являются неориентированными графами) до последовательных архитектур с различными функциями активации. Большинство NN будут обучаться с использованием backprop, но это не обязательно так, даже алгоритмы обучения не очень однородны.
В целом, глубокое изучение, глубокие NN и NN - все стали всеобъемлющими словами, которые охватывают множество подходов.
Для хороших вводных ссылок на «что изменилось»: Углубленное изучение представлений: взгляд вперед , Bengio, 2013 - хороший обзор + перспектива на будущее. Также посмотрите, действительно ли глубокие сети должны быть глубокими? Ba & Caruana, 2013, которые иллюстрируют, что глубокое понимание может быть полезно не для представления, а для обучения.
источник
Чтобы расширить ответ Дэвида Гаскеса, одно из главных отличий между глубокими нейронными сетями и традиционными нейронными сетями состоит в том, что мы не просто используем обратное распространение для глубоких нейронных сетей.
Почему? Поскольку обратное распространение обучает более поздние слои более эффективно, чем более ранние, - чем раньше вы работаете в сети раньше, тем меньше ошибки и становятся более рассеянными. Таким образом, десятиуровневая сеть будет в основном состоять из семи слоев случайных весов, за которыми следуют три слоя подходящих весов, и будет состоять из трехслойной сети. Смотрите здесь для получения дополнительной информации.
Таким образом, концептуальный прорыв состоит в том, чтобы рассматривать отдельные проблемы (помеченные слои) как отдельные проблемы - если мы сначала попытаемся решить проблему создания общего хорошего первого уровня, а затем попытаемся решить проблему создания общего хорошего второго слоя, в конце концов у нас будет глубокое пространство возможностей, которое мы можем использовать для решения нашей актуальной проблемы.
источник
NN:
DNN:
Переход на DNN связан с тремя независимыми прорывами, которые произошли в 2006 году.
Относительно теорем о NN вопрос, на который ссылается вопрос, таков:
источник
Я думаю, вам следует отступить назад и увидеть, что это привело к возрождению мелкого ИИ - например, мешок слов для анализа настроений и других языковых приложений и визуальный пакет слов были ведущим подходом к распознаванию изображений до DNN. Никто не говорит, что мешок слов - это настоящая модель языка, но это эффективное инженерное решение. Так что я бы сказал, что DNN - лучший «визуальный пакет слов» - см., Например, Szegedy et al. 2013 Интригующие свойства нейронных сетей и Nguyen et al. Глубокие нейронные сети легко одурачить: предсказания с высокой степенью достоверности для неузнаваемых изображений, когда ясно, что не изучаются структуры более высокого порядка и т. Д. (Или что-либо, что заявлено для DNN).
источник
Источник: Арно Кандель
источник