Основы глубокого обучения

Руководство непрофессионала по глубоким нейронным сетям

Нематематическое введение в глубокие нейронные сети с PyTorch

Прелюдия

Недавний A.I. Buzz создал достаточную осведомленность среди нейронных сетей в академических кругах и на предприятиях. Возможно, вы пересекались с контентом, в котором подчеркивается, что какая-то система искусственного интеллекта / нейронной сети обгонит ваш традиционный рабочий процесс. Я уверен, что вы наверняка слышали (хотя, возможно, не полностью осведомлены) о глубоких нейронных сетях и глубоком обучении.

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

Непрофессиональное определение глубоких нейронных сетей, также известных как Deep Learning

Дубль 1

Глубокое обучение - это подраздел машинного обучения в области искусственного интеллекта (ИИ), который занимается алгоритмами, основанными на биологической структуре и функционировании мозга, чтобы помочь машинам с интеллектом.

Звучит сложно? Давайте упростим его, разбив каждое слово в определении и снова сгустив определение. Сначала мы начнем с искусственного интеллекта, также известного как ИИ.

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

Здесь важно отметить, что этот интеллект явно запрограммирован, например, исчерпывающий список правил if-else. Инженер, спроектировавший систему, тщательно продумал все возможные комбинации и разработал систему, основанную на правилах, которая может принимать решения, проходя через определенный путь правила. Что, если нам нужно ввести интеллект в машину без явного программирования, возможно, что-то такое, чему машина может обучаться сама. Вот тогда мы и коснемся базы с помощью Машинного обучения.

Машинное обучение можно определить как процесс внедрения интеллекта в систему или машину без явного программирования.

- Эндрю Н.Г., адъюнкт-профессор Стэнфордского университета

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

Итак, какое место в этом контексте занимает Глубокое обучение? Бывает, что машинное обучение, хотя и очень хорошо работает для множества задач, не может преуспеть в некоторых конкретных случаях, которые были очень легкими для человека. Скажем, классификация изображения как кошки или собаки или различение аудиоклипов как мужского или женского голоса и т. Д. Машинное обучение в основном плохо работает с изображениями, аудио и другими неструктурированными типами данных. При исследовании причин такой плохой работы мысль о вдохновении привела к идее имитировать биологический процесс человеческого мозга, который состоит из миллиардов нейронов, связанных и организованных для адаптации к обучению новым вещам. Параллельно с этим, нейронная сеть уже была темой исследования в течение нескольких лет и достигла лишь ограниченного прогресса из-за вычислительных ограничений и ограничений данных в то время. Когда исследователи достигли пика машинного обучения и нейронных сетей, появилась область глубокого обучения, которая была основана на разработке глубоких нейронных сетей, то есть импровизированной нейронной сети с большим количеством слоев.

Теперь давайте предпримем еще одну попытку понять определение глубокого обучения.

Дубль 2

Глубокое обучение - это область машинного обучения и искусственного интеллекта (ИИ), которая занимается алгоритмами, вдохновленными человеческим мозгом для помощи машинам с интеллектом без явного программирования.

Разве теперь это не легче понять? :)

Глубокое обучение преуспело на новых рубежах, в которых машинное обучение отставало. Со временем дополнительные исследования и эксперименты привели к пониманию того, где можно использовать глубокое обучение для всех задач машинного обучения и ожидать повышения производительности при наличии избыточных данных. Таким образом, глубокое обучение стало повсеместной областью для решения задач прогнозирования, а не ограничивалось только областями компьютерного зрения, речи и т. Д.

Какие проблемы сегодня решает глубокое обучение?

С появлением экономичных вычислительных мощностей и хранилищ данных глубокое обучение стало применяться во всех цифровых уголках нашей повседневной жизни. Несколько примеров распространенных повседневных цифровых продуктов, основанных на глубоком обучении, - это популярные виртуальные помощники, такие как Siri / Alexa / Google Assistant, предложение отметить вашего друга на загруженной фотографии Facebook. , автономное вождение в Tesla, фильтр кошек в Snapchat, рекомендации по продуктам в Amazon и Netflix, недавний вирусный фото-приложения, такие как FaceApp и Prisma, и этот список можно продолжить. Возможно, вы уже использовали продукт, основанный на глубоком обучении, не осознавая этого.

Глубокое обучение проникло практически во все отрасли отрасли, такие как Здравоохранение с обнаружением рака и диабетической ретинопатии, Авиация с оптимизацией флота, Нефть и газ с прогнозирующим обслуживание оборудования, банковские и финансовые услуги с обнаружением мошенничества, розничная торговля и телекоммуникации с прогнозированием оттока клиентов и еще миллион. Андрей Н.Г. правильно процитировал, что AI - это новое электричество. Подобно тому, как электричество изменило все, ИИ в ближайшем будущем изменит почти все.

Разбор глубокой нейронной сети

Упрощенная версия глубокой нейронной сети представлена ​​как иерархическая (многоуровневая) организация нейронов (аналогичных нейронам в головном мозге), связанных с другими нейронами. Эти нейроны передают сообщение или сигнал другим нейронам на основе полученных входных данных и образуют сложную сеть, которая обучается с помощью некоторого механизма обратной связи. На следующей диаграмме представлена ​​N-слоистая глубокая нейронная сеть.

Как вы можете ссылаться на приведенный выше рисунок, входные данные потребляются нейронами в первом слое (не скрытом), которые затем предоставляют выход нейронам в следующем слое и т.д., что обеспечивает окончательный результат. Результатом может быть предсказание типа «Да» или «Нет» (представленное в виде вероятности). Каждый слой может иметь один или несколько нейронов, и каждый из них будет вычислять небольшую функцию, например функцию активации. Функция активации имитирует сигнал для передачи следующим подключенным нейронам. Если входящие нейроны приводят к значению, превышающему пороговое значение, выходной сигнал передается, иначе игнорируется. Связь между двумя нейронами последовательных слоев будет иметь связанный вес. Вес определяет влияние входа на выход для следующего нейрона и, в конечном итоге, на общий конечный результат. В нейронной сети все начальные веса будут случайными, но во время обучения модели эти веса обновляются итеративно, чтобы научиться предсказывать правильный результат. Разбивая сеть, мы можем определить несколько логических строительных блоков, таких как нейрон, слой, вес, вход, output, функцию активации и, наконец, весь механизм заработка (оптимизатор), который поможет нейронной сети постепенно обновлять веса (которые были инициализированы случайным образом) до более подходящий вес, который помогает правильно предсказать результат.

Для интуитивного понимания давайте рассмотрим пример того, как человеческий мозг учится распознавать разных людей. Когда вы встречаетесь с человеком во второй раз, вы сможете его опознать. Как это произошло? У людей есть сходство в их общем строении; два глаза, два уха, нос, губы и т. д. У всех одинаковое строение, но мы можем довольно легко различать людей, не так ли?

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

Точно так же нейронная сеть, показанная выше, пытается имитировать тот же процесс, используя математический подход. Входные данные потребляются нейронами первого слоя, и для каждого нейрона вычисляется функция активации. Основываясь на простом правиле, он пересылает выходной сигнал следующему нейрону, аналогичный отклонениям, усвоенным человеческим мозгом. Чем больше выход нейрона, тем большее значение будет иметь это входное измерение. Затем эти измерения объединяются в следующем слое, чтобы сформировать дополнительные новые измерения, что мы, вероятно, не можем понять. Но система узнает это интуитивно. Если умножить этот процесс в несколько раз, образуется сложная сеть с несколькими связями.

Теперь, когда структура нейронной сети понятна, давайте разберемся, как происходит обучение. Когда мы предоставляем входные данные в определенную структуру, конечным результатом будет прогноз (с серией умножения матриц), который может быть как правильным, так и неправильным. На основе выходных данных, если мы предоставляем сети обратную связь для улучшения, используя некоторые средства для лучшего прогнозирования, система учится, обновляя вес для подключений. Чтобы обеспечить обратную связь и определить следующий шаг для правильного внесения изменений, мы используем красивый математический алгоритм, называемый обратное распространение. Итерация процесса несколько раз, шаг за шагом, со все большим количеством данных помогает сети соответствующим образом обновлять веса, чтобы создать систему, в которой она может принимать решение для прогнозирования выходных данных на основе правил, которые она создала для себя с помощью весов и связей. .

Название «Глубокие нейронные сети» произошло от использования большего количества скрытых слоев, что сделало их «глубокой» сетью для изучения более сложных шаблонов. Истории успеха глубокого обучения появились только в последние несколько лет, потому что процесс обучения сети требует больших объемов вычислений и больших объемов данных. Эксперименты наконец увидели свет только тогда, когда вычисления и хранилище данных стали более доступными и доступными.

Какие популярные фреймворки для глубокого обучения?

Учитывая, что внедрение глубокого обучения продвигается тревожными темпами, зрелость экосистемы также продемонстрировала феноменальные улучшения. Благодаря многим крупным техническим организациям и инициативам с открытым исходным кодом, теперь у нас есть множество вариантов на выбор. Эти структуры глубокого обучения предоставляют нам повторно используемые блоки кода, которые абстрагируют логические блоки, которые мы обсуждали выше, а также предоставляют несколько дополнительных удобных модулей для разработки модели глубокого обучения.

Мы можем классифицировать доступные варианты как низкоуровневую или высокоуровневую структуру глубокого обучения. Хотя это ни в коем случае не признанная в отрасли терминология, мы можем использовать это разделение для более интуитивного понимания фреймворков. Низкоуровневые фреймворки предоставляют более базовый блок абстракции, давая при этом массу возможностей для настройки и гибкости. Фреймворки высокого уровня дополнительно объединяют абстракцию, чтобы облегчить нашу работу, ограничивая при этом объем настройки и гибкость. Фреймворки высокого уровня используют фреймворк низкого уровня в качестве бэкэнда и обычно работают путем преобразования исходного кода в желаемую фреймворк низкого уровня для выполнения. Ниже приведены несколько популярных фреймворков для глубокого обучения.

Фреймворки низкого уровня

  1. TensorFlow
  2. MxNet
  3. PyTorch

Фреймворки высокого уровня

  1. Keras (использует TensorFlow в качестве бэкэнда)
  2. Gluon (использует mxnet в качестве бэкэнда)

На данный момент наиболее популярным выбором является Tensorflow (от Google). Keras также популярен благодаря простоте, которую он обеспечивает для быстрого создания прототипов моделей глубокого обучения. Однако PyTorch (от Facebook) - еще один популярный фреймворк, который догоняет гонку с поразительно высокой скоростью. PyTorch - отличный выбор для многих практиков искусственного интеллекта, у него более легкая кривая обучения, чем у TensorFlow, и его можно легко использовать от прототипирования до создания модели глубокого обучения.

В этом руководстве мы предпочтем использовать PyTorch для реализации детской нейронной сети. Вам следует изучить и изучить больше, прежде чем принять решение о выборе структуры. Этот пост от Skymind содержит подробное сравнение и подробные сведения, которые помогут выбрать структуру для ваших нужд.

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

Создание детской нейронной сети с помощью PyTorch

Получив базовый обзор предмета для непрофессионала, теперь мы можем начать с создания базовой нейронной сети в PyTorch. В этом примере мы генерируем фиктивный набор данных, который имитирует вариант использования классификации с 32 функциями (столбцами) и 6000 выборками (строками). Набор данных будет отрисован с использованием функции randn из PyTorch.

Этот код также доступен в Репозитории Github.

Заключительные мысли

Этот пост был нацелен на то, чтобы новички легко могли разобраться в предмете на очень простом языке. Абстрагирование математики и сосредоточение внимания на чисто функциональных способах использования глубокого обучения для современных корпоративных проектов. Большая часть контента была заимствована из главы 1 моей книги Изучение Keras для глубоких нейронных сетей.

В следующем посте я расскажу «Руководство для непрофессионала по сверточным нейронным сетям», и снова примеры будут в PyTorch.