Нейросети книга: книги, статьи и последние исследования / Блог компании Neurodata Lab / Хабр
книги, статьи и последние исследования / Блог компании Neurodata Lab / Хабр
Что делать, если хочется побольше узнать про нейронные сети, методы распознавания образов, компьютерное зрение и глубокое обучение? Один из очевидных вариантов — подыскать для себя какие-либо курсы и начать активно изучать теорию и решать практические задачи. Однако на это придется выделить значительную часть личного времени. Есть другой способ — обратиться к «пассивному» источнику знаний: выбрать для себя литературу и погрузиться в тему, уделяя этому всего полчаса-час в день.
Поэтому, желая облегчить жизнь себе и читателям, мы сделали краткую подборку из книг, статей и текстов по направлению нейросетей и глубокого обучения, рекомендуемых к прочтению резидентами GitHub, Quora, Reddit и других платформ. В неё вошли материалы как для тех, кто только начинает знакомство с нейротехнологиями, так и для коллег, желающих расширить свои знания в этой области или просто подобрать «легкое чтение» на вечер.
/ Flickr / Giuseppe Milo / CC
Актуальный контекст
Любой предложенный список, сколь бы длинным он ни был, будет обладать главной и определяющей чертой — неполнотой. Потому что жизнь не стоит на месте: и научная мысль, и технологии развиваются, многие постановки задач описываются, а полученные решения — раскрываются в отчетных публикациях конференций, в журналах и сборниках. Для тех, кто задается вопросом, что происходит в настоящий момент и чем живет сообщество, стоит порекомендовать следить за материалами профильных мероприятий — ICML и NIPS.
И всё же, с чего начать?
Neural Networks and Deep Learning
Это бесплатная онлайн-книга ученого и программиста Майкла Нильсена (Michael Nielsen). Автор раскрывает тему глубокого обучения нейронных сетей и отвечает на такие вопросы, как: «Почему нейросети сложно тренировать?», «Как работает алгоритм обратного распространения ошибки?».
Автор книги: Tariq Rashid
Make Your Own Neural Network
Книга раскрывает математические принципы, лежащие в основе нейронных сетей, и предлагает написать собственную нейросеть на Python. Сеть будет распознавать написанные от руки цифры. Цель книги — дать читателю четкое понимание того, как работают нейросистемы, сделать информацию доступнее.
A Brief Introduction to Neural Networks
Автор книги, специалист по анализу данных и машинному обучению, простым языком объясняет принципы работы нейронных сетей. После прочтения можно самому начать работать с нейросистемами и разбираться в чужом коде. Книга постоянно улучшается, в обновленных версиях, на основании фидбека от читателей.
An Introduction to Statistical Learning
Книга-введение в методы статистического обучения. Целевая аудитория — студенты и выпускники вузов, в том числе нематематических специальностей. Всё очень доступно и с туториалами на R.
Programming Collective Intelligence
Книга рассказывает, как анализировать пользовательский опыт и человеческое поведение на основании информации, получаемой нами ежедневно. Предложенные алгоритмы сопровождаются кодом, который можно сразу использовать на веб-сайте или в приложении. Каждая глава включает практические упражнения, задача которых — усилить, отшлифовать алгоритмы.
Neural Networks: A Systematic Introduction
Общая теория о создании искусственных нейронных сетей. Каждая глава содержит примеры, иллюстрации и библиографию. Книга подойдет для тех, кто хочет углубить свои знания в этой сфере, но также может служить неплохой базой для курсов по нейровычислениям.
Deep Learning: Methods and Applications
Книга от Microsoft Research с основными методологиями глубокого обучения. Авторы рассказывают о том, как нейросети используются в задачах обработки сигналов и информации. Рассматриваются области, в которых глубокое обучение уже нашло активное применение, а также сферы, где оно может оказать значительное влияние в долгосрочной перспективе.
Deep Learning Tutorial
Издание Монреальского университета (Канада). Здесь собраны руководства по наиболее важным алгоритмам глубокого обучения. В книге показано, как реализовать их с помощью библиотеки Theano. Как отмечают авторы, читатель должен иметь представление о Python и NumPy, а также пройти курс по обращению с Theano.
Pattern Recognition and Machine Learning
Это первый учебник по распознаванию образов, представляющий Байесовский метод. В книге собраны алгоритмы приближенного вывода для ситуаций, в которых точные ответы получить невозможно. Информация подкрепляется графическими моделями для описания распределения вероятностей. Книга подходит каждому, поскольку для её свободного чтения не требуется доскональное знание концепций машинного обучения и распознавания паттернов.
Автор книги: Simon S Haykin
Neural Networks and Learning Machines
В книге разбираются концепции и принципы работы нейронных сетей и самообучающихся машин. На сегодняшний день выпущено уже третье издание.
Hands-On Machine Learning
С помощью наглядных примеров, минимума теории и двух production-ready фреймворков для Python автор помогает понять, как строятся интеллектуальные системы. Вы узнаете о различных техниках: начиная с простой линейной регрессии и заканчивая глубоким обучением. В каждой главе предусмотрены упражнения для закрепления приобретенных знаний.
Руководство хакера по нейронным сетям
Андрей Карпаты (Andrej Karpathy), заведующий разработкой ИИ в Tesla, предлагает заглянуть в прошлое нейронных сетей и начать знакомство с технологией real-valued circuits. Автор также является преподавателем курса CS231 в Стэнфорде, материалы которого тесно связаны с этой статьей. Слайды можно найти по ссылке. А заметки – тут.
Глубокое обучение, обработка естественного языка и представление данных
Как использовать глубокие нейронные сети для обработки естественного языка (NLP). Автор также старается дать ответ на вопрос, почему работают нейронные сети.
Глубокое обучение: Руководство
Java-разработчик Иван Васильев представляет ключевые концепции и алгоритмы, стоящие за глубоким обучением, используя для этого язык программирования Java. Библиотека Java для глубокого обучения находится здесь.
Происхождение глубокого обучения
Эта публикация — исторический обзор развития глубоких моделей обучения. Авторы начинают повествование с того, как появились нейронные сети, и плавно переходят к технологиям последнего десятилетия: глубоким сетям доверия, сверточным и рекуррентным нейронным сетям.
Глубокое обучение с подкреплением: Обзор
Материал посвящен последним достижениям в отрасли глубокого обучения с подкреплением (RL). Сперва авторы обращаются к принципам глубокого обучения и обучения с подкреплением, а затем переходят к проблемам их реальной применимости: играм (AlphaGo), робототехнике, чат-ботам и др.
/ Flickr / Brandur Øssursson / PD
Продвинутое чтение
Neural Networks for Applied Sciences and Engineering
Обзор архитектур нейронных сетей для непосредственного анализа данных. В отдельных главах авторы рассуждают о применимости самоорганизующихся карт для кластеризации нелинейных данных, а также об использовании рекуррентных сетей в науке.
Нейронные сети. Полный курс
В книге рассматриваются парадигмы искусственных нейронных сетей с иллюстрациями и примерами конкретных задач. Анализируется роль нейронных сетей при решении задач распознавания образов, управления и обработки сигналов. Книга будет полезна для инженеров, специалистов в области компьютерных наук, физиков, а также для всех, кто интересуется искусственными нейронными сетями.
Самоорганизующиеся карты
Самоорганизующиеся карты, вместе с их разновидностями, представляют собой одну из наиболее популярных нейросетевых архитектур, ориентированных на обучение без учителя. В книге дается детальное изложение математического аппарата и применений для самоорганизующихся карт. Подходит для специалистов в области нейромоделирования, а также студентов и аспирантов университетов.
Автор книги: Ian Goodfellow
Deep Learning (Adaptive Computation and Machine Learning series)
«Deep Learning» является единственной исчерпывающей книгой в этой области», — это слова Илона Маска, соучредителя Tesla и SpaceX. В тексте аккумулирован математический бэкграунд, рассматриваются важные концепции линейной алгебры, теории вероятностей, теории информации и машинного обучения.
Neural Networks for Pattern Recognition
В книге приведены техники для моделирования функций плотности вероятности. Рассматриваются алгоритмы минимизации функции ошибок, а также Байесовский метод и его применение. Кроме того, авторы собрали под этой обложкой более ста полезных упражнений.
Быстрый обучающий алгоритм для глубоких сетей доверия
Авторы статьи предлагают алгоритм, способный обучать глубокие сети доверия (DBM) по одному слою за раз. Также стоит обратить внимание на видеоруководство по глубоким сетям доверия от одного из авторов — Джеффри Хинтона (G. E. Hinton).
Обучение представлений методом обратного распространения ошибки
Считается основой концепции обучения нейронных сетей. Исторический экскурс и реализация. Рекомендуется к прочтению.
Учимся генерировать кресла, столы и автомобили с помощью сверточных сетей
Статья показывает, что генеративные сети могут находить сходства между объектами, обладая более высокой производительностью, по сравнению с конкурентными решениями. Концепция, представленная в этой статье, также может использоваться для генерации лиц.
Завершение изображений с глубоким обучением в TensorFlow
Статья рассказывает, как использовать глубокое обучение для завершения изображений, используя DCGAN. Пост рассчитан на техническую аудиторию с бэкграундом в машинном обучении. Весь исходный код автор выложил на GitHub.
Генератор лиц в Torch
Автор реализует генеративную модель, которая превращает случайный «шум» в изображения лиц. Делается это с помощью генеративной состязательной сети (GAN).
Практическое руководство по тренировке ограниченных машин Больцмана
Обзор ограниченных машин Больцмана. Авторы приводят множество рецептов по отладке и улучшению работы системы: назначению весов, мониторингу, выбору числа скрытых узлов.
Улучшение нейронных сетей путем предотвращения коадаптации детекторов признаков
Когда крупная нейронная сеть обучается на небольшом тренировочном наборе данных, она обычно выдает плохие результаты. Авторы предлагают способ, который должен решить проблему «переобучения», научив нейроны определять признаки, помогающие сгенерировать корректный ответ.
YOLO: обнаружение объектов в реальном времени
Авторы демонстрируют подход к распознаванию объектов — YOLO (You Only Look Once). По их задумке, с изображением работает одна нейронная сеть, которая делит его на регионы. Регионы очерчиваются граничными рамками и «взвешиваются» на основании предсказанных вероятностей. Как реализовать «миниверсию» YOLO для работы на мобильных устройствах под iOS вы можете узнать из этой статьи.
Как предсказать нераспознаваемые изображения
Одно из недавних исследований показало, что изменение изображения (незаметное для человека) способно обмануть глубокие нейронные сети, заставив последнюю установить неверный маркер. Эта работа проливает свет на интересные различия между человеческим и машинным зрением.
Deep Voice: преобразование «текст-в-речь» в реальном времени
Авторы представляют систему Deep Voice для преобразования текста в речь, построенную на глубоких нейронных сетях. По уверениям ученых, за каждый компонент отвечает своя нейросеть, поэтому их система гораздо быстрее традиционных решений. Стоит пощупать.
PixelNet: Представление пикселей, пикселями и для пикселей
Авторы исследуют принципы генерализации на пиксельном уровне, предлагая алгоритм, адекватно показывающий себя в таких задачах, как семантическая сегментация, выделение границ и оценка нормалей к поверхностям.
Генеративные модели от OpenAI
Этот пост описывает четыре проекта, которые адаптируют генеративные модели. Авторы рассказывают, что это такое, где они используются и почему важны.
Учимся генерировать кресла с помощью сверточных нейронных сетей
Здесь описан процесс тренировки генеративной сверточной нейронной сети для генерации изображений объектов по типу и цвету. Сеть умеет интерполировать ряды изображений и заполнять «пустые места» недостающими элементами.
Генеративно-состязательная сеть в 50 строках кода
Как натренировать генеративную состязательную сеть (GAN)? Нужно лишь взять PyTorch и написать 50 строчек кода. Попробуем на досуге.
And last but not least
Какая книга лежит на столах у многих сотрудников Neurodata Lab и может считаться одной из любимых?
Авторы книги: Amit Konar, Aruna Chakraborty
Emotion Recognition. A Pattern Analysis Approach
Прекрасный материал, грамотно структурированный и опирающийся на большой объем источников и данных. Книга подходит для всех, кто увлечен проблематикой детекции и распознавания эмоций с технической точки зрения, и тем кто просто ищет захватывающее чтение.
P.S. Мы понимаем, что осветить все доступные материалы на эту тему в рамках одной статьи невозможно. Поэтому если вам интересно, то можете уделить толику своего внимания подборкам на GitHub и прочих платформах. Вот некоторые из них:
Книги для самостоятельного изучения нейронных сетей
Подборка рассчитана на новичков без элементарных знаний. Читая их последовательно, вы сможете изучить основы информатики, а в конце – построить самостоятельно нейронную сеть на Python.
Нейронные сети продолжают менять мир настолько быстро, что нужно не только учиться использовать новые технологии, но и жить среди них. Появляются и новые высокооплачиваемые специальности. К примеру – специалист, умеющий создавать искусственные нейронные сети под различные прикладные задачи.
Но путь к освоению перспективной IT профессии – долгий. Начинать нужно с математики, затем переходить к статистике и т.д.
Курсов и книг, посвященных этой теме достаточно много. В этой статье мы хотим поделиться несколькими книгами, которые изучили сами и расскажем почему вам тоже их стоит прочесть:
1. Петцольд Ч. «Код. Тайный язык информатики»
Если вы не изучали программирование и не погружались с головой в высшую математику, а ваша специальность далека от компьютерных технологий, то эта книга – для вас. Автор начинает с азов компьютерной истории, сложные вещи объясняются на пальцах, но без примитивизма.
Для того чтобы познакомить с кодированием информации автор приводит в пример шрифт Брайля и азбуку Морзе (рассказывает о передачи информации на расстоянии, используя фонарики), а затем, ближе к концу книги переходит к объяснению языка ассемблера и машинного кода.
Используя лампочки и батарейки, автор рассказывает о совсем простых устройствах, и, постепенно переходит к объяснению устройства стационарного компьютера. Преимущества этой книги — последовательность и простое изложение сложных вещей. Оценят даже гуманитарии. Она помогает настроить инженерное мышление у читателя. Ведь хорошая база знаний и понимание принципов работы компьютерных технологий – это первый большой шаг на пути к востребованным знаниям.
2. Томас Х. Корман. «Алгоритмы. Построение и анализ»
Эту мне книгу посоветовали уже опытные ИТ-специалисты. Напоминает справочник, объемом больше 1000 страниц. Рекомендую изучать частями (каждая глава – относительно самодостаточна).
В книге автор рассматривает самые разнообразные алгоритмы. Они описаны простым человеческим языком и с применением псевдокода, который понятен тому, кто знаком с программированием.
Описание алгоритмов на естественном языке дополняется псевдокодом, (это дает возможность реализовать алгоритм на любом языке программирования, который вам знаком). Обилие теоритического материала сопровождается большим количеством иллюстраций, элементарными рассуждениями и простыми приближенными оценками.
Это не художественная литература, поэтому новичкам, особенно тем, кто не знаком с математическим анализом советую — неспешное вдумчивое прочтение.
3. Рашид Тарик «Создаем нейронную сеть»
Книга разделена на две части: теория и практика.
Автор достаточно просто объясняет теоретические аспекты. Их знание необходимо для понимания принципов функционирования нейронных сетей и написания соответствующих программных инструкций. Во второй части рассматривается пример создания собственной сети, умеющей распознавать рукописный текст с точностью до 98% (с использованем языка Python). Расматриваются этапы – подготовки тренировочных данных, тестирование нейросети, улучшение результатов.
Автор показывает нам, что изначально строит скелет кода. И важно понимать, что он будет изменен в процессе тестирования для улучшения результатов.
Все повествование сопровождается иллюстрациями (это плюс для тех, кто лучше воспринимает визуальную информацию).
Если вы только начинаете разбираться в этой области – рекомендуем.
Что читать о нейросетях / Блог компании Mail.ru Group / Хабр
Нейросети переживают второй Ренессанс. Сначала еще казалось, что сообщество, решив несколько прикладных задач, быстро переключится на другую модную тему. Сейчас очевидно, что спада интереса к нейросетям в ближайшем будущем не предвидится. Исследователи находят новые способы применения технологий, а следом появляются стартапы, использующие в продукте нейронные сети.
Стоит ли изучать нейросети не специалистам в области машинного обучения? Каждый для себя ответит на этот вопрос сам. Мы же посмотрим на ситуацию с другой стороны — что делать разработчикам (и всем остальным), которые хотят больше знать про методы распознавания образов, дискриминантный анализ, методы кластеризации и другие занимательные вещи, но не хотят расходовать на эту задачу лишние ресурсы.
Ставить перед собой амбициозную цель, с головой бросаться в онлайн-курсы — значит потратить много времени на изучение предмета, который, возможно, вам нужен лишь для общего развития. Есть один проверенный (ретроградный) способ, занимающий по полчаса в день. Книга — офлайновый источник информации. Книга не может похвастаться актуальностью, но за ограниченный период времени даст вам фундаментальное понимание технологии и способов ее возможной реализации под ваши задачи.
Если у вас уже есть базовые знания в области машинного обучения, и вы хотите двигаться дальше, то авторы «Neural Network Toolbox для MATLAB» предложат вам четкое и подробное погружение в фундаментальные основы архитектуры нейронных сетей и методов обучения. Методы обучения приводятся как для нейронных сетей прямого распространения (включая многослойные и радиальные сети), так и для рекуррентных сетей. Дополнительно к книге можно получить иллюстрации и код для примеров (сайт).
Священная книга сверточных нейронных сетей и глубокого обучения — без шуток, это действительно очень важная книга, которую рекомендуют многие успешные разработчики… и не только они. «Написанная тремя экспертами, «Deep Learning» является единственной всеобъемлющей книгой в этой области», — так сказал Илон Маск, и если вы верите в надежность автопилота Tesla и перспективы проекта OpenAI, то ему можно верить. 🙂
Книга предлагает математический инструментарий и фундаментальные основы, охватывающие линейную алгебру, теории вероятностей и теории информации, численные методы и непосредственно машинное обучение. В «Deep Learning» описываются методы глубокого обучения, используемые специалистами-практиками в промышленности, в том числе глубокие сети прямого распространения, алгоритмы оптимизации, сверточные сети, методы Монте-Карло, построение сетевой модели и т.д. Кроме того, вы узнаете много интересного про обработку естественного языка, распознавание речи, компьютерное зрение, системы рекомендаций, биоинформатику и даже игры. Проще сказать, чего в этой книге нет… хотя и это сложно — если вы чего-то не найдете на 800 страницах, есть еще сайт к книге с дополнительными материалами.
P.S. Электронная версия книги выложена в открытый доступ.
Классика жанра, фундаментальный труд 1996 года из эры до глубокого обучения. Если вы хотите не только познакомиться с предметом машинного обучения, но и стать специалистом в этой области, стоит познакомиться и с таким взглядом на проблематику. В книге меньше (по сравнению с другими в этой подборке) чистой математики, вместо этого делается попытка дать читателю интуитивное понимание концепции нейронных сетей. Делается это за счет глубины подхода — нет попыток сходу написать свою сеть; автор сначала предлагает изучить теоретические законы и модели на примере биологии. Не будем забывать, что каждый человек обладает своей собственной нейронной сетью. На простых примерах показывается, как изменяются свойства моделей, когда вводятся общие вычислительные элементы и сетевые топологии.
Если вам понравится предыдущая книга из подборки, то можете усилить знания схожим по концепции изданием 2006 года. «Распознавание образов и машинное обучение» стал первым учебником по распознаванию образов, представляющим Байесовский метод (хотя сама формула Байеса была опубликована аж в 1763 году). В книге представлены алгоритмы вывода, которые позволяют быстро найти ответы в ситуациях, когда точные ответы невозможны. Автор Кристофер Бишоп, директор лаборатории Microsoft Research Cambridge, первым дал пояснение графическим моделям для описания вероятностных распределений.
P.S. В 2013 году подразделение Microsoft Research выпустила в открытый доступ отдельную книгу Deep Learning.
Одна из лучших книг по основам машинного обучения (в связке с Python), написанная за несколько лет до того, как нейросети обрели культовый статус. Но возраст ей не помеха — методы коллаборативной фильтрации, байесовская фильтрация, метод опорных векторов сохраняют актуальность. Затрагиваются принципы работы поисковых систем (поисковые роботы, индексы, механизмы запросов и алгоритм PageRank), алгоритмы оптимизации, неотрицательная матричная факторизация и другие темы.
Пошаговое путешествие по математике нейронных сетей к созданию собственных сеток с помощью Python. Большой плюс книги — заниженные требования к объему знаний читателя. В области математики потребуются лишь школьные знания (без глубокого погружения). Авторы поставили себе цель дать представление о нейросетях самому широкому кругу читателей. Похвально, учитывая, как много книг написано для продвинутых специалистов.
После прочтения вы сможете сделать главное: писать код на Python, создавать свои собственные нейронные сети, обучая их распознавать различные изображения, и даже создавать решения на базе Raspberry Pi. Математика в книге тоже есть, но она не заставит кричать от ужаса (что возможно, если область вашей деятельности сильно далека от алгоритмов) — математические идеи, лежащие в основе нейронных сетей, даются с большим количеством иллюстраций и примеров.
P.S. Если вы заинтересовались, но не можете заниматься по книге, рекомендуем одноименный блог с большим количеством полезных статей.
«Машинное обучение на Python» это сборник полезных советов для начинающих специалистов по машинному обучению. Почему Python? Так автор захотел, просто ему язык нравится. Себастьян Рашка объясняет самые общие концепции, дополняет их необходимым математическим аппаратом для понимания темы на внутрисистемном уровне, приводит примеры и объясняет способы реализации. Также есть репозиторий на GitHub с общей информацией и примерами кода. Планируется перевод книги на русский язык.
Эта книга кратко познакомит вас с миром машинного обучения. Кроме того, читателям предоставляется бесплатный доступ к онлайн-главам, которые постоянно обновляются в соответствии с тенденциями в области машинного обучения. Это книга рекомендуется тем, кто только-только начал знакомиться с предметом и не понимает, что значит высказывание «обучение на массиве данных».
Авторы соблюдают баланс между теоретической и практической частью машинного обучения. Эта книга используется в качестве учебного пособия в Калифорнийском технологическом институте, Политехническом институте Ренсселера (США) и Национальном университете Тайваня. Авторы также активно консультируются с финансовыми и коммерческими компаниями по приложениям, использующим машинное обучение.
Популярная книга от известных авторов Stuart Russell и Peter Norvig, которая пережила уже третье издание. Полное, современное введение в теорию и практику искусственного интеллекта, предназначенное для учащихся первых курсов вуза. Книга используется в качестве введения в тему на огромном количестве курсов по Data science и ИИ. Если вас интересует применение нейросетей именно для создания искусственного интеллекта, с нее можно начать путь в этой увлекательной и очень сложной области.
Artificial Intelligence: A Modern Approach есть в открытом доступе.
Эта «книга» не совсем книга — у нее даже обложки нет. Но перед вами действительно полноценное издание, выложенное в открытый доступ (по ссылке выше). Майкл Нильсен дает отличное введение в нейронные сети в серии пошаговых примеров, посвященных проблемам распознавания рукописных цифр. Книга хорошо подходит для тех, у кого уже есть опыт машинного обучения, и хочется глубже вникнуть в нейронные сети.
Заключение
Теперь даже программисты, которые почти ничего не знают о технологии глубокого машинного обучения, могут использовать простые и эффективные инструменты для создания самообучающихся программ.
Что касается книг по нейросетям на русском, то отзывы о них противоречивые. «Нейронные сети. Полный курс» Саймона Хайкина отличается повышенной сложностью и неоднозначным переводом (но если вас не пугает, можете ознакомиться). Найти книгу, которая была бы на таком же уровне качества, как и другие издания в подборке, нам так и не удалось. Если вы можете что-то порекомендовать, напишите в комментариях.
15 лучших книг по глубинному обучению
Интересуетесь нейросетями и машинным обучением? Собрали подборку из 15 книг по глубинному обучению, которые помогут освоить эти технологии.
Ловите свежую подборку книг Deep Learning, которая поможет свернуть горы!
Гудфеллоу Я., Бенджио И., Курвилль А. − Глубокое обучение, 2017 г.
Эта книга считается «Библией», одной из лучших книг по глубинному обучению. Несмотря на то, что она написана техническим языком, её сможет осилить и технологический новичок.
Внутри рассказывается о математических и концептуальных основах, линейной алгебре, теории вероятностей и теории информации, численных вычислениях и машинном обучении. Она описывает методы глубокого обучения, используемые практиками в отрасли. Сюда входят сети с прямой связью, регуляризация, алгоритмы оптимизации, сверточные сети, моделирование последовательностей и практическая методология. Кроме того, вы узнаете об обработке естественного языка, распознавании речи, компьютерном зрении, системе онлайн-рекомендаций, биоинформатике и видеоиграх.
Франсуа Шолле − Глубокое обучение на Python, 2018 г.
Это учебник по моделям глубокого обучения с использованием языка Python и мощной библиотеки Keras. Написанная создателем Keras и исследователем Google AI Франсуа Шолле, эта книга укрепит понимание технологии через объяснения и практические примеры. Вы исследуете сложные концепции и попрактикуетесь с приложениями в области компьютерного зрения, обработки естественного языка и генеративных моделей. К тому времени, как вы закончите, у вас будут знания и практические навыки для применения глубокого обучения в ваших собственных проектах.
Орельен Жерон − Прикладное машинное обучение с помощью Scikit-Learn и TensorFlow, 2018 г.
Эта книга предполагает, что вы почти ничего не знаете о машинном обучении. Её цель − дать вам концепции, знания и инструменты для реализации программ, способных учиться на данных. Здесь рассматривается большое количество методов. Например, линейная регрессия или олимпиадные способы решения задач.
Вместо того, чтобы реализовывать собственные игрушечные версии каждого алгоритма, авторы используют существующие готовые к работе платформы Python вроде Scikit-Learn и TensorFlow.
Ричард Саттон, Эндрю Барто − Обучение с подкреплением, 2017 г.
Ричард Саттон и Эндрю Барто дают ясное и простое описание ключевых идей и алгоритмов обучения с подкреплением. Оно основано на том, что агент пытается максимизировать получаемый выигрыш, действуя в сложной среде с высоким уровнем неопределенности. Предназначена для специалистов в области искусственного интеллекта, нейросетевого моделирования и управления, а также студентов и аспирантов.
Ясер Абу-Мостафа, Малик Магдон-Исмаил, Сюань-Тянь Линь − Learning From Data, 2012 г.
Следующий материал в подборке книг по глубинному обучению распространяется вместе со специально подготовленными онлайн-материалами. Здесь вы найдете введение в машинное обучение, что позволяет вычислительным системам улучшать свою производительность с помощью накопленного опыта. Это короткий курс, поэтому ждите качественно структурированной информации Здесь основные темы, которые должен знать каждый. Важно, что читателям также доступны электронные, регулярно обновляемые главы книги.
Адриан Роузброк − Deep Learning for Computer Vision with Python, 2017 г.
Эта книга не только для начинающих. Специалисты разного уровня с помощью этой книги смогут создавать обычное программное обеспечение, обрабатывать естественные языки, рисовать графики, производить сложные математические вычисления, составлять фото-роботы, а также создавать программы компьютерного зрения с помощью глубокого обучения.
Это руководство познакомит вас с основами компьютерного зрения, библиотеками и лучшими практиками.
Эндрю Траск − Grokking Deep Learning
Книга научит вас строить нейронные сети глубокого обучения с нуля. Эндрю Траск расскажет об устройстве технологии изнутри. Особенно полезна тем, кто уже знаком с математикой и программированием на среднем уровне. В процессе изучения вы узнаете о том, как учатся нейронные сети, построите сети, которые смогут распознавать и анализировать изображения, играть в видеоигры, переводить текст между языками и даже писать, как Шекспир.
Андрей Бурков − The Hundred-Page Machine Learning Book, 2019 г.
Эта книга является введением в машинное обучение от специалиста мирового уровня и суперзвезды LinkedIn Андрея Буркова. Она позволит начать работу с ML в течение нескольких дней. Достаточно первых пяти глав, а остальные понравятся практикующим инженерам, желающим использовать ML в своей повседневной работе, не тратя огромное количество времени на прохождение длинных курсов.
Максим Лапань − Deep Reinforcement Learning Hands-On, 2018 г.
Это ещё одна из популярных книг по глубинному обучению. Использование алгоритмов Google в играх, победы роботов над человеком заставили технических специалистов по всему миру начать следить за технологиями машинного обучения ещё пристальнее.
Книга является исчерпывающим руководство по самым последним инструментам deep learning. Вы будете оценивать методы, включая перекрестную энтропию, учиться применять их в реальных условиях.
А ещё вы познаете основы обучения с подкреплением, сделаете робота для торговли акциями и научитесь применять естественный язык для развития чат-ботов.
Сергей Николенко, А. Кадурин, Екатерина Архангельская − Глубокое обучение. Погружение в мир нейронных сетей, 2018 г.
Одна из немногих книг по глубинному обучению на русском. Внутри много математики, теории, основ и рассуждений, охватывающих большую часть того, что касается машинного обучения. По сути, это всеобъемлющее руководство для новичков, которые желают разобраться в вопросах работы с нейронными сетями.
Джуда Перл − The Book of Why, 2018 г.
Книга от всемирно известного ученого-компьютерщика Джуды Перл. Совместно с коллегами, он развеял стереотипы о причинно-следственной связи и объяснил, как мышление позволяет исследовать существующий и возможные миры, разобрал сущность человеческого и искусственного интеллекта. Как говорят авторы, книга нужна для того, чтобы показать ширину мышления.
Сандро Сканси − Introduction to Deep Learning, 2018 г.
Краткое, лёгкое и доступное введение в машинное обучение. Преимущество этой книги перед другими в простых примерах для новичков. В ней вы найдёте популярные алгоритмы и архитектурные решения, интуитивно понятные любому начинающему разработчику. Книга охватывает важные темы: от обучения нейронных сетей, обработки языка, нейронных сетей с обратной связью, до математических предпосылок и истории искусственного интеллекта. Все примеры на языке программирования Python.
Эндрю Ын − Machine Learning Yearning, 2018 г.
Эта книга посвящена не алгоритмам машинного обучения, а тому, как заставить работать эти алгоритмы.
Чему она научит? Например, расстановке приоритетов, диагностике ошибок в системе машинного обучения, обучению систем в тестовом режиме. А ещё настройке проектов и сравнению их результатов с подобными, которые выполнены вручную человеком. Читатели узнают, когда и как применять сквозное, трансферное и многозадачное обучение.
Кристоф Молнар − Interpretable Machine Learning, 2019 г.
Книга о том, как сделать модели машинного обучения и их решения понятными.
Вы узнаете о простых, интерпретируемых моделях. Например, о деревьях решений, правилах принятия решений и линейной регрессии. Все методы интерпретации подробно объясняются: сильные и слабые стороны, техническое устройство, варианты интерпретации результатов.
Кому подходит эта книга? В первую очередь, она ориентирована на практиков машинного обучения − учёных статистиков. Но будет полезна всем, кто заинтересован в том, чтобы сделать модели машинного обучения понятными.
Майкл Нильсен − Neural Networks and Deep Learning, 2015 г.
Нейронные сети − одна из самых крутых парадигм программирования. В традиционном подходе к программированию мы разбиваем большие задачи на множество мелких и понятных. Это помогает компьютеру быстрее их выполнять. Нейронные сети учатся сами решать поступающие проблемы. По этой причине, сегодня всё больше крупных технологических компаний начинают применять технологии машинного обучения
Цель книги − помочь вам освоить основные понятия нейронных сетей, включая современные методы глубокого обучения. В процессе изучения книги, вы будете писать код, использующий нейронные сети и глубокое обучение для решения сложных задач. Таким образом, авторы рассчитывают сформировать у читателей фундаментальные навыки работы с технологией.
Понравилась подборка 15 лучших книг по глубинному обучению? Возможно, вас заинтересует следующее:
Источник: Подборка книг по глубинному обучению, которые стоит прочитать в 2019 году на FloydHub
Серия: Вселенная eve online (Миры eve online)
Очередной попаданец. Рубка
управления патрульного крейсера
империи Аратан. Патрулирование
пограничных систем проходила в
штатном режиме, не чего не
обычного в ближайшее время произойти не должно. Их маршрут
проходил по закрытым системам… … Полная аннотация
Третья книга о землянине, попавшем в средневековый магический мир, откуда он отправился путешествовать по мирам Содружества … Полная аннотация
Как стать пилотом космического истребителя, галактическим пиратом и торговцем? И что потом делать? Читайте в остросюжетном романе по мотивам EVE и Мирам Содружества. … Полная аннотация
Фантастика – Нейросети, импланты, космос, земля, другие планеты Неудачи получаются в результате страха, покоя, изнеженности и беспечности. Устранение страха создаёт уверенность и изобилие. Встаньте и вооружитесь, пусть слабые получают милостыню! … Полная аннотация
Фанфик-«альтернативное продолжение» произведения К.Н. Муравьева «Перешагнуть пропасть», «подхватывающее» оригинальное изложение событий главы 1 первой книги, глав 33 и 97+N четвертой книги, при N>10. Имеются отсылки к сюжетам повести «Живучий»,… … Полная аннотация
Хочу почитать какой-нибудь выверт с элементами мира ЕВА, нейросети, компьютеры, корабли, инопланетяне и корабли древних. Лень искать по моему вкусу, напишу себе книгу сам! … Полная аннотация
Теперь Макс уже не простой смертный. Он владелец множества компаний, муж и счастливый отец. Но всему этому счастью может прийти конец. Вся галактика оказалась на грани уничтожения в ходе глобальной войны. Оставит ли это так наш герой? Или попытается… … Полная аннотация
Две подруги нашли непонятную штукенцию. А штукенция возьми, да и установи им нейросети и импланты. Ну а дальше оно как-то само… … Полная аннотация
ЧЕРНОВИК. Главы с 1 по 36. Приключения Беса и Меробса переносятся в космос их задача долететь до ближайших обжитых мест. Женщины, девушки, только за описание любви сильно не бейте. … Полная аннотация
Давным давно, в одной далекой предалекой галактике жила раса хтоираимов. Они очень многого достигли в науке: им покорилась своя звездная система, затем часть галактики, в конце концов вся галактика, пусть она была небольшой по меркам космоса. Но им… … Полная аннотация
Сплав магии и космоса с отголосками EVE, но в умеренном количестве. Итак, взвод солдат, отправившихся марш-броском через дебри тайги, оказывается неизвестно где… Лейтенант, отведёте этих олухов к начальнику складами. Экипировка по полной… … Полная аннотация
Десять тысяч лет жизни это много или мало? Все относительно, так говорит Эйнштейн. Если считать относительно человеческой жизни, то это бесконечно долго, а если относительно жизни Вселенной, то это лишь всего краткий миг. Как вы себя будете… … Полная аннотация
Конечно плохо оказаться в новом мире, почти без всех своих способностей. Но ты сам выбрал этот путь, никто тебя не заставлял, поэтому нытья и усталости твоя жизнь не приемлет. У тебя только одна дорога -вперед и ни шагу назад … Полная аннотация
Знакомство с простейшей нейронной сетью и ее пошаговая реализация / Habr
Однажды я наткнулся на книгу под названием «Создай свою нейросеть», под авторством Тарика Рашида. В отличие от многих других книг по нейронным сетям, в этой все подавалось простым языком, c достаточным количеством примеров и советов
Вдохновившись этой книгой, я хочу пройтись по ней пошагово- а именно по практической ее части — написанию кода простейшей нейронной сети.
Эта статья для тех, кто хочет заниматься нейронными сетями и машинным обучением, но пока с трудом понимает эту удивительную область науки. Ниже будет описан самый простой скелет кода нейронной сети, чтобы многие поняли простейший принцип построения и взаимодействия всего того, из чего состоит эта нейронная сеть.
Теории по машинному обучению и нейронным сетям на хабре и так достаточно. Но если кому-то это необходимо, некоторые ссылки я оставлю в конце статьи. А сейчас, приступаем непосредственно к написанию кода, причем писать мы будем на Python, при написании кода рекомендую использовать Jupyter-Notebook
Шаг 1. Инициализация сети
Сначала нам, конечно же, надо инициализировать все действующие компоненты нашей сети
#импортируем numpy — это библиотека языка Python, добавляющая поддержку больших многомерных массивов и матриц
import numpy
# импортируем scipy.special , -scipy содержит модули для оптимизации, интегрирования, специальных функций, обработки изображений и многих других задач, нам же здесь нужна наша функция активации, имя которой - "сигмоида "
import scipy.special
#Вероятно, нам понадобится визуализировать наши данные
import matplotlib.pyplot
# Определяем класс нейронной сети
class neuralNetwork:
# Инициализация нашей нейронной сети
def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate): #В параметрах мы записываем входные данные, данные скрытого слоя, выходные данные ,скорость обучения соответственно)
# устанавливаем количество узлов входного , скрытого слоя, выходного слоя
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
# Тут обозначены веса матрицы, wih - вес между входным и скрытым слоем , а так же who- вес между скрытым и выходным слоем
self.wih = numpy.random.rand(self.hnodes, self.inodes)
self.who = numpy.random.rand(self.onodes, self.hnodes)
# Скорость обучения -это наш гиперпараметр, то есть, параметр , который мы подбираем ручками, и в зависимости от того, как нам это удобно нам, и , конечно же, нейронной сети
self.lr = learningrate
# Наша Сигмоида- функция активации
self.activation_function = lambda x: scipy.special.expit(x)
Сигмоида
Эта функция относится к классу непрерывных функций, принимает на вход произвольное вещественное(т.е не обязательно целое) число и на выходе дает вещественное число в интервале от 0 до 1.
В частности, большие (по модулю) отрицательные числа превращаются в ноль, а большие положительные – в единицу.
Выход ее хорошо интерпретируется, как уровень активации нейрона: от отсутствия активации (0) до полностью насыщенной активации (1).
Сигмоида выражается формулой:
График сигмоидальной функции в соответствии с рисунком ниже:
Сигмоидальная функция является:
- непрерывной;
- монотонно возрастающей;
- дифференцируемой.
В данном коде сигмоида присутствует, как вы можете видеть, под именем expit(x)
Немного о том, как выглядит узел в нейронной сети
На картинке изображен самый, что ни на есть узел, только представлен он обычно в виде круга, а не прямоугольника. Как мы видим, внутри прямоугольника(ну или круга) — это все абстрактно, находятся 2 функции:
1-я Функция занимается тем, что получает все входные, с учетом весов, данные, и иногда даже с учетом нейрона смещения(специальный нейрон, который просто позволяет графикам подвинуться, а не смешиваться в одну некрасивую кучу, вот и все)
2-я Функция принимает в качестве параметра то самое значение, которое суммировала первая функция, и эта вторая функция называется функцией активации. В нашем случае —cигмоида
Продолжаем:
Часть 2. Тренировка Нейронной Сети
def train(self, inputs_list, targets_list):
# Конвертируем наш список в двумерный массив
inputs = numpy.array(inputs_list, ndmin=2).T # поступающие на вход данные input
targets = numpy.array(targets_list, ndmin=2).T #целевые значения targets
# Подсчет сигнала в скрытом слое
hidden_inputs = numpy.dot(self.wih, inputs)
# Подсчет сигналов, выходящих из скрытого слоя к выходному слою. Тут в нашем узле, куда поступали все данные в переменную hidden_inputs (1я функция), эта переменная подается как параметр в Сигмоиду - функцию активации (2я функция)
hidden_outputs = self.activation_function(hidden_inputs)
# Подсчет сигналов в конечном(выходном) слое
final_inputs = numpy.dot(self.who, hidden_outputs)
# Подсчет сигналов, подающихся в функцию активации
final_outputs = self.activation_function(final_inputs)
# Значение ошибки (Ожидание - Реальность)
output_errors = targets - final_outputs
# Ошибка скрытого слоя становится ошибкой ,которую мы получили для <b>ошибки выходного слоя</b>, но уже <b>распределенные по весам между скрытым и выходным слоями</b>(иначе говоря с учетом умножения соответствующих весов)
hidden_errors = numpy.dot(self.who.T, output_errors)
# Обновление весов между скрытым слоем и выходным (Явление того, что люди зовут ошибкой обратного распространения)
self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)), numpy.transpose(hidden_outputs))
# Обновление весов между скрытым слоем и входным(Та же ошибка ошибка обратного распространения в действии)
self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), numpy.transpose(inputs))
И вот мы приближаемся к концу
Часть 3. Опрос нейронной сети
#Создаем функцию , которая будет принимать входные данные
def query(self, inputs_list):
# Конвертируем поданный список входных данных в двумерный массив
inputs = numpy.array(inputs_list, ndmin=2).T
# Подсчет сигналов в скрытом слое
hidden_inputs = numpy.dot(self.wih, inputs)
# Подсчет сигналов, поданных в функцию активации
hidden_outputs = self.activation_function(hidden_inputs)
#Подсчет сигналов в конечном выходном слое
final_inputs = numpy.dot(self.who, hidden_outputs)
#Подсчет сигналов в конечном выходном слое, переданных в функцию активации
final_outputs = self.activation_function(final_inputs)
return final_outputs
Доводим дело до конца
#Подаем конкретное значение для входного , скрытого ,выходного слоев соответственно(указываем количество <b>нод</b>- узлов в ряду входного, скрытого, выходного соответственно
input_nodes = 3
hidden_nodes = 3
output_nodes = 3
# Возьмем коэффициент обучения - скорость обучения равной, например... 0.3!
learning_rate = 0.3
# Создаем нейронную сеть(n это объект класса neuralNetwork , при его создании запустится конструктор __init__ , и дальше все будет включаться по цепочке
n = neuralNetwork(input_nodes,hidden_nodes,output_nodes, learning_rate)
P.S
Выше была представлена способная на вычисления, простейшая модель нейронной сети. Но какого-то конкретного применения показано не было.
При желании, можно пойти дальше, добавив возможность распознавания рукописного текста в код MNIST, для этого вы можете полностью разобраться(и просто позабавиться), имея этот jupyter-файл , моя же задача была продемонстрировать код и по возможности разжевать что в сети присутствует и за что отвечает
P.P.S
Ниже вы найдете полезные ссылки:
1.Cсылка на Github Тарика ->
2.Его книга ->
3.Теория по машинному обучению ->
4.Теория по машинному обучению ->
5.Теория по машинному обучению ->
Нейросети научились судить о книге по обложке / Habr
Устойчивое выражение «не суди книгу по ее обложке» предостерегает от оценки чего-либо или кого-либо по одному только внешнему виду. Но когда читатель видит книгу, это все равно происходит: знакомство обычно начинается с обложки. Именно она оставляет первое впечатление о содержании и начинает рисовать историю в сознании человека. Хорошие обложки просто созданы для того, чтобы по ним судили.
Люди отлично справляются с определением жанра, едва взглянув на визуальное оформление книги. Согласитесь, что выбрать кулинарную книгу, биографию или путеводитель, просто посмотрев на обложку – довольно легко. Тогда возникает интересный вопрос: может ли искусственный интеллект так же успешно судить о книге по обложке, как и человек?
Ответ на него попытались получить ученые из Университета Кюсю в Японии. Они поставили перед сверточной нейронной сетью (CNN) задачу изучить книжные обложки и определить категорию, к которой они относятся. Метод обучения оказался довольно простым: исследователи скачали более 13,5 тысяч обложек с сайта Amazon.com вместе с названием, именем автора и жанром книги. Помимо определения категории, этот набор данных может в дальнейшем пригодиться для обучения нейронных сетей распознаванию и анализу шрифтов и решению других задач, связанных с дизайном. В своем эксперименте ученые использовали только жанры, отбросив все остальные данные из набора. Нейросеть разбиралась в 20 возможных жанрах. Если книга повторялась сразу в нескольких категориях, ученые просто указывали самый первый.
Затем группа исследователей использовала 80% набора данных, чтобы обучить нейронную сеть распознавать жанр в зависимости от изображения на обложке. Нейросеть, которую они использовали в своем эксперименте, состояла из четырех слоев, в каждом из которых насчитывалось 512 нейронов. Вместе они учились определять корреляцию между дизайном обложки и жанром. Еще 10% набора данных ушли на проверку сети. На заключительном этапе использовались оставшиеся 10%, чтобы определить, насколько хорошо сеть может классифицировать незнакомые изображения.
Результат оказался довольно интересным. Алгоритм корректно определял наиболее часто встречающуюся ему тройку жанров в 40% случаях. Со всеми остальными жанрами точность составила порядка 20%. Это значительно лучше, чем просто случайность. Относительно корректная работа нейросети показывает, что классификация книг по обложкам реальная, хотя и трудновыполнимая задача.
Некоторые жанры оказалось легче распознать, чем другие. Например, туристические книги или книги о компьютерах и технологиях сравнительно легко поддаются определению, поскольку дизайнеры обычно используют схожие по смыслу изображения для обложки. Кроме того, ученые установили, что нейросеть с легкостью узнавала кулинарные книги, если при их оформлении используются фотографии еды.
Однако нейросеть начинала сомневаться, стоило только появиться на обложке фотографии повара или другие объекты, косвенно связанные с приготовлением блюд.
Биографии и мемуары также вызвали у нейросети затруднения: очень часто такие книги отправлялись в категорию исторических. Интересно, что для многих подобных книг вторичным жанром на Amazon.com оказывалась именно история. Поэтому нельзя сказать, что алгоритм ошибся на 100%.
Еще CNN перепутала детские книжки с комиксами и графическими романами, а также медицинские книги с учебниками по математике. Это неудивительно, учитывая определенное сходство между этими категориями. Ошиблась сеть и с разными по сути, но близкими по оформлению книгами по праву и религии. Обычно их обложки выполнены либо в одном цвете без каких-либо рисунков, либо с абстрактными изображениями.
В работе, представленной японскими учеными, есть один существенный недостаток. Они не сравнивали производительность их нейронной сети со способностью человека определять жанры по обложкам. Получился бы интересный эксперимент, который было бы легко организовать силами краудсорсинговых онлайн-платформ. И до тех пор, пока этот эксперимент не будет осуществлен, мы не узнаем, справляется ли искусственный интеллект с поставленной задачей лучше, чем человек. Но несмотря на это досадное упущение, независимо от того, насколько хорошо мы можем определять жанры по обложке, машины однажды смогут сделать это быстрее. Это лишь вопрос времени.
Тем не менее, результат этого исследования заслуживает внимания. Он может помочь дизайнерам улучшить свои навыки, когда дело доходит до книжных обложек. Можно пойти еще дальше и обучать технику проектировать обложки без участия человека. В будущем это может означать, что создание человеком дизайна обложки – еще одна задача, которая отправится в архивы истории.
Графический дизайн стал объектом для машинного обучения сравнительно недавно. Самый известный опыт практического применения нейронных сетей связан, в первую очередь, с распознаванием художественного стиля известных авторов картин и дальнейшим его переносом на другие изображения. Исследователи из Университета Кюсю преследовали похожую цель, но зашли немного дальше: они попытались выявить скрытый смысл, который кроется за стилем оформления. Если говорить о классификации, уже были попытки научить нейросети сортировать музыку, картины, тексты по жанрам.
Научная работа опубликована на arXiv.org (ArXiv:1610.09204 [cs.CV])
Глава 7 Интерпретация нейронной сети
- Интерпретируемое машинное обучение
- Предисловие
- 1 Введение
- 1,1 Время истории
- Молния никогда не ударяет дважды
- Доверие Падение
- Скрепки Ферми
- 1,2 Что такое машинное обучение?
- 1,3 Терминология
- 1,1 Время истории
- 2 Интерпретируемость
- 2.1 Важность интерпретируемости
- 2,2 Таксономия методов интерпретации
- 2.3 Объем интерпретируемости
- 2.3.1 Прозрачность алгоритма
- 2.3.2 Глобальная целостная интерпретируемость модели
- 2.3.3 Интерпретируемость глобальной модели на модульном уровне
- 2.3.4 Локальная интерпретируемость для одного прогноза
- 2.3.5 Локальная интерпретируемость группы прогнозов
- 2,4 Оценка интерпретируемости
- 2,5 Свойства пояснений
- 2,6 Объяснения, понятные для человека
- 2.6.1 Что такое объяснение?
- 2.6.2 Какое хорошее объяснение?
- 3 Наборы данных
- 3.1 Прокат велосипедов (регресс)
- 3,2 Спам-комментарии YouTube (текстовая классификация)
- 3,3 Факторы риска рака шейки матки (классификация)
- 4 Интерпретируемые модели
- 4.1 Линейная регрессия
- 4.1.1 Интерпретация
- 4.1.2 Пример
- 4.1.3 Визуальная интерпретация
- 4.1.4 Объясните индивидуальные прогнозы
- 4.1.5 Кодирование категориальных признаков
- 4.1.6 Есть ли у линейных моделей хорошее объяснение?
- 4.1.7 Разреженные линейные модели
- 4.1.8 Преимущества
- 4.1.9 Недостатки
- 4,2 Логистическая регрессия
- 4.2.1 Что не так с линейной регрессией для классификации?
- 4.2.2 Теория
- 4.2.3 Устный перевод
- 4.2.4 Пример
- 4.2.5 Преимущества и недостатки
- 4.2.6 Программное обеспечение
- 4.3 GLM, GAM и др.
- 4.3.1 Негауссовские результаты — GLM
- 4.3.2 Взаимодействия
- 4.3.3 Нелинейные эффекты — GAM
- 4.3.4 Преимущества
- 4.3.5 Недостатки
- 4.3.6 Программное обеспечение
- 4.3.7 Дополнительные расширения
- 4,4 Схема принятия решений
- 4.4.1 Интерпретация
- 4.4.2 Пример
- 4.4.3 Преимущества
- 4.4.4 Недостатки
- 4.4.5 Программное обеспечение
- 4.5 Decision Rules
- 4.5.1 Изучение правил из одной функции (OneR)
- 4.5.2 Последовательное покрытие
- 4.5.3 Списки байесовских правил
- 4.5.4 Преимущества
- 4.5.5 Недостатки
- 4.5.6 Программное обеспечение и альтернативы
- 4.6 RuleFit
- 4.6.1 Интерпретация и пример
- 4.6.2 Теория
- 4.6.3 Преимущества
- 4.6.4 Недостатки
- 4.6.5 Программное обеспечение и альтернатива
- 4,7 Другие интерпретируемые модели
- 4,7.1 Наивный байесовский классификатор
- 4.7.2 Ближайшие соседи K
- 4.1 Линейная регрессия
- 5 Модельно-независимые методы
- 5.1 График частичной зависимости (PDP)
- 5.1.1 Примеры
- 5.1.2 Преимущества
- 5.1.3 Недостатки
- 5.1.4 Программное обеспечение и альтернативы
- 5,2 Индивидуальные условные ожидания (ICE)
- 5.2.1 Примеры
- 5.2.2 Преимущества
- 5.2.3 Недостатки
- 5.2.4 Программное обеспечение и альтернативы
- 5,3 График накопленных местных эффектов (ALE)
- 5.1 График частичной зависимости (PDP)
.
Прикладное глубокое обучение — Часть 1: Искусственные нейронные сети | Автор: Арден Дертат
Добро пожаловать в серию руководств по прикладному глубокому обучению. Мы проведем подробный анализ нескольких методов глубокого обучения, начиная с искусственных нейронных сетей (ИНС), в частности нейронных сетей прямого распространения. Что отличает это руководство от остальных, которые вы можете найти в Интернете, так это то, что мы используем практический подход с большим количеством примеров кода и визуализацией. Я не буду вдаваться в математику и теорию этих моделей, чтобы сосредоточиться на применении.
Мы будем использовать фреймворк глубокого обучения Keras, который представляет собой высокоуровневый API поверх Tensorflow. Керас в последнее время становится суперпопулярным из-за своей простоты. Создавать сложные модели и быстро выполнять итерацию очень легко. Я также использовал barebone-систему Tensorflow, и на самом деле я немного боролся. Попробовав Керас, я не вернусь.
Вот содержание. Сначала краткий обзор ИНС и интуиции, лежащей в основе этих глубоких моделей. Затем мы начнем с логистической регрессии, в основном, чтобы познакомиться с Keras.Затем мы обучим глубокие нейронные сети и продемонстрируем, насколько они превосходят линейные модели. Мы сравним модели как на наборах данных двоичной, так и на многоклассовой классификации.
- Обзор ИНС
1.1) Введение
1.2) Интуиция
1.3) Рассуждения - Логистическая регрессия
2.1) Линейно разделяемые данные
2.2) Сложные данные — Луны
2.3) Сложные данные — Круги - Искусственные нейронные сети (ИНС)
3.1) Сложные данные — спутники
3.2) Сложные данные — круги
3.3) Комплексные данные — синусоида - Мультиклассовая классификация
4.1) Softmax Regression
4.2) Deep ANN - Заключение
Код для этой статьи доступен здесь в виде записной книжки Jupyter, не стесняйтесь загрузить и опробовать его сами.
Думаю, вы многому научитесь из этой статьи. Вам не нужно иметь предварительные знания о глубоком обучении, только некоторые базовые знания об общем машинном обучении. Итак, приступим …
1.1) Введение
Искусственные нейронные сети (ИНС) — это многослойные полносвязные нейронные сети, которые выглядят как на рисунке ниже.Они состоят из входного слоя, нескольких скрытых слоев и выходного слоя. Каждый узел в одном слое связан со всеми остальными узлами следующего слоя. Мы делаем сеть глубже, увеличивая количество скрытых слоев.
Рисунок 1
Если мы увеличим масштаб до одного из скрытых или выходных узлов, то мы увидим рисунок ниже.
Рисунок 2
Данный узел берет взвешенную сумму своих входов и передает ее через нелинейную функцию активации. Это выход узла, который затем становится входом другого узла в следующем слое.Сигнал проходит слева направо, и конечный результат вычисляется путем выполнения этой процедуры для всех узлов. Обучение этой глубокой нейронной сети означает изучение весов, связанных со всеми ребрами.
Уравнение для данного узла выглядит следующим образом. Взвешенная сумма его входов прошла через нелинейную функцию активации. Его можно представить в виде векторного скалярного произведения, где n — количество входов для узла.
Я опустил термин смещение для простоты.Смещение является входом для всех узлов и всегда имеет значение 1. Это позволяет сдвинуть результат функции активации влево или вправо. Это также помогает модели обучаться, когда все входные функции равны 0. Если сейчас это звучит сложно, можно смело игнорировать условия смещения. Для полноты приведенное выше уравнение выглядит следующим образом с учетом смещения.
До сих пор мы описали прямой проход , что означает, что при заданном вводе и взвешивании вычисляется вывод. После завершения обучения мы запускаем только прямой проход, чтобы делать прогнозы.Но сначала нам нужно обучить нашу модель, чтобы фактически узнать веса, и процедура обучения работает следующим образом:
- Произвольно инициализируйте веса для всех узлов. Существуют умные методы инициализации, которые мы рассмотрим в другой статье.
- Для каждого обучающего примера выполните прямой проход с использованием текущих весов и вычислите выходной сигнал каждого узла, проходящего слева направо. Конечный результат — это значение последнего узла.
- Сравните окончательный результат с фактическим целевым значением в данных обучения и измерьте ошибку с помощью функции потерь .
- Выполните обратный проход справа налево и распространите ошибку на каждый отдельный узел, используя обратное распространение . Рассчитайте вклад каждого веса в ошибку и соответствующим образом скорректируйте веса, используя градиентный спуск . Распространите градиенты ошибок обратно, начиная с последнего слоя.
Обратное распространение с градиентным спуском — это буквально «волшебство», стоящее за моделями глубокого обучения. Это довольно длинная тема и включает в себя некоторые вычисления, поэтому мы не будем вдаваться в подробности в этой серии прикладных программ глубокого обучения.Подробное описание градиентного спуска см. Здесь. Базовый обзор обратного распространения ошибки доступен здесь. Подробную математическую обработку см. Здесь и здесь. Более подробные алгоритмы оптимизации можно найти здесь.
В мире стандартного машинного обучения эта архитектура с прямой связью известна как многослойный персептрон . Разница между ИНС и перцептроном состоит в том, что ИНС использует нелинейную функцию активации, такую как сигмоид , но перцептрон использует ступенчатую функцию.И эта нелинейность придает ИНС огромную силу.
1.2) Интуиция
Уже многое происходит, даже с базовым пасом вперед. Теперь давайте упростим это и поймем интуицию, стоящую за этим.
По сути, каждый слой ИНС выполняет нелинейное преобразование входных данных из одного векторного пространства в другое.
Давайте возьмем ИНС на рисунке 1 выше в качестве примера. У нас есть трехмерный вход, соответствующий вектору в трехмерном пространстве.Затем мы пропускаем его через два скрытых слоя по 4 узла в каждом. И окончательный результат — одномерный вектор или скаляр.
Итак, если мы визуализируем это как последовательность векторных преобразований, мы сначала сопоставляем входные данные 3D с векторным пространством 4D, затем выполняем другое преобразование в новое пространство 4D, а окончательное преобразование сокращает его до 1D. Это всего лишь цепочка умножений матриц. Прямой проход выполняет эти матричные скалярные произведения и поэлементно применяет функцию активации к результату.На рисунке ниже показаны только используемые весовые матрицы (но не активации).
Рисунок 3
Входной вектор x имеет 1 строку и 3 столбца. Чтобы преобразовать его в четырехмерное пространство, нам нужно умножить его на матрицу 3×4 . Затем в другое четырехмерное пространство мы умножаем его на матрицу 4×4 . И, наконец, чтобы уменьшить его до одномерного пространства, мы используем матрицу 4×1 .
Обратите внимание, как размеры матриц представляют входные и выходные размеры слоя.Связь между слоем с 3 узлами и 4 узлами представляет собой матричное умножение с использованием матрицы 3×4 .
Эти матрицы представляют собой веса, определяющие ИНС. Чтобы сделать прогноз с использованием ИНС на заданном входе, нам нужно знать только эти веса и функцию активации (и смещения), не более того. Мы обучаем ИНС с помощью обратного распространения ошибки, чтобы «узнать» эти веса.
Если сложить все вместе, то это выглядит как на рисунке ниже.
Рисунок 4
Полностью связанный слой между 3 узлами и 4 узлами — это просто матричное умножение входного вектора 1×3 (желтые узлы) на весовую матрицу 3×4 W1 .Результатом этого скалярного произведения является вектор 1×4 , представленный синими узлами. Затем мы умножаем этот вектор 1×4 на матрицу 4×4 W2, , в результате чего получаем вектор 1×4 , зеленые узлы. И, наконец, используя матрицу 4×1 W3 , мы получаем результат.
Для простоты мы опускаем функцию активации на рисунках выше. На самом деле после каждого умножения матрицы мы применяем функцию активации к каждому элементу полученной матрицы.Более формально
Уравнение 2
Выход матричного умножения проходит через функцию активации f . В случае сигмоидной функции это означает взятие сигмоида каждого элемента в матрице. Мы можем более отчетливо видеть цепочку умножений матриц в уравнениях.
1.3) Рассуждения
До сих пор мы говорили о том, что такое глубокие модели и как они работают, но зачем нам вообще нужно углубляться?
Мы видели, что слой ИНС просто выполняет нелинейное преобразование своих входных данных из одного векторного пространства в другое.Если мы возьмем задачу классификации в качестве примера, мы хотим разделить классы, нарисовав границу решения. Входные данные в заданной форме неразделимы. Выполняя нелинейные преобразования на каждом уровне, мы можем проецировать входные данные в новое векторное пространство и рисовать границу комплексного решения для разделения классов.
Давайте визуализируем то, что мы только что описали, на конкретном примере. Учитывая следующие данные, мы можем видеть, что он не разделен линейно.
Итак, мы проецируем его в пространство более высоких измерений, выполняя нелинейное преобразование, и затем оно становится линейно разделимым.Зеленая гиперплоскость — это граница решения.
Это эквивалентно рисованию границы комплексного решения в исходном пространстве ввода.
Итак, главное преимущество более глубокой модели — это возможность выполнять больше нелинейных преобразований входных данных и рисовать более сложные границы решения.
Таким образом, ИНС — это очень гибкие, но мощные модели глубокого обучения. Это универсальные аппроксиматоры функций, то есть они могут моделировать любую сложную функцию.В последнее время наблюдается невероятный всплеск их популярности по нескольким причинам: хитрые приемы, которые сделали возможным обучение этих моделей, огромное увеличение вычислительной мощности, особенно графических процессоров и распределенного обучения, а также огромное количество обучающих данных. Все это в совокупности позволило глубокому обучению получить значительную поддержку.
Это было краткое введение, в Интернете есть масса отличных руководств, посвященных глубоким нейронным сетям. Для справки я очень рекомендую эту статью. Это фантастический обзор глубокого обучения, а раздел 4 посвящен ИНС.Еще один отличный справочник — эта книга, доступная в Интернете.
Несмотря на свое название, логистическая регрессия (LR) представляет собой двоичный алгоритм классификации . Это самый популярный метод классификации 0/1. На двумерных (2D) данных LR попытается провести прямую линию для разделения классов, отсюда и происходит термин линейная модель . LR работает с любым количеством измерений, а не только с двумя. Для 3D-данных он попытается нарисовать 2D-плоскость, чтобы разделить классы.Это обобщается на N-мерные данные и N-1-мерный гиперплоскостной разделитель. Если у вас есть проблема контролируемой двоичной классификации с учетом входных данных с несколькими столбцами и двоичного результата 0/1, LR — это первый метод, который следует попробовать. В этом разделе мы сосредоточимся на 2D-данных, поскольку их легче визуализировать, а в другом руководстве мы сосредоточимся на многомерном вводе.
1.1) Линейно разделяемые данные
Сначала давайте начнем с простого примера. 2D линейно разделяемые данные. Мы используем метод scikit-learn make_classification для генерации наших данных и вспомогательную функцию для их визуализации.
В scikit-learn доступен классификатор LogisticRegression , я не буду вдаваться в подробности здесь, поскольку наша цель — изучить построение моделей с помощью Keras. Но вот как обучить модель LR, используя функцию fit , как и любую другую модель в scikit-learn. Мы видим границу линейного решения как зеленую линию.
Как мы видим, данные линейно разделимы. Теперь мы обучим ту же модель логистической регрессии с помощью Keras, чтобы предсказать членство в классе каждой входной точки.Чтобы не усложнять задачу, мы не будем выполнять стандартные методы разделения данных на обучающие и тестовые наборы или выполнять k-кратную перекрестную проверку.
У Keras отличная документация, ознакомьтесь с ней, чтобы получить более подробное описание его API. Вот код для обучения модели, давайте рассмотрим его шаг за шагом ниже.
Мы будем использовать API модели Sequential , доступный здесь. Последовательная модель позволяет нам создавать глубокие нейронные сети, накладывая слои один на другой.Поскольку сейчас мы строим простую модель логистической регрессии, у нас будут входные узлы, напрямую подключенные к выходному узлу, без каких-либо скрытых слоев. Обратите внимание, что модель LR имеет вид y = f (xW) , где f — сигмовидная функция. Наличие одного выходного слоя, непосредственно подключенного к входу, отражает эту функцию.
Быстрое разъяснение для устранения неоднозначности используемых терминов. В литературе по нейронным сетям принято говорить о входных и выходных узлах.На первый взгляд это может показаться странным, что такое входной «узел»? Когда мы говорим «узлы ввода», мы говорим об особенностях данного обучающего примера. В нашем случае у нас есть 2 функции, координаты x и y точек, которые мы построили выше, поэтому у нас есть 2 входных узла. Вы можете просто представить его как вектор из двух чисел. А как насчет выходного узла? Результатом модели логистической регрессии является одно число, вероятность принадлежности точки входных данных к классу 1. Другими словами P (class = 1) .Тогда вероятность того, что входная точка принадлежит классу 0, равна P (class = 0) = 1 − P (class = 1) . Таким образом, вы можете просто представить выходной узел как вектор с одним числом (или просто скаляром) между 0 и 1.
В Keras мы не добавляем слои, соответствующие входным узлам, мы делаем только для скрытых и выходных узлов. . В нашей текущей модели у нас нет скрытых слоев, входные узлы напрямую связаны с выходным узлом. Это означает, что в нашем определении нейронной сети в Keras будет только один слой с одним узлом, соответствующий узлу вывода.
model = Sequential ()
model.add (Dense (units = 1, input_shape = (2,), activate = 'sigmoid'))
Функция Dense в Keras автоматически создает полностью связанный уровень нейронной сети инициализация весов как смещений. Это очень полезная функция, которую вы увидите везде. Аргументы функции определены следующим образом:
- единиц : Первый аргумент, представляющий количество узлов на этом уровне. Поскольку мы создаем выходной слой и сказали, что у него только один узел, это значение равно 1.
- input_shape : первый слой в моделях Keras должен указать входные размеры. Для последующих слоев (которых у нас здесь нет, но мы будем в следующих разделах) не нужно указывать этот аргумент, потому что Keras может автоматически определять размеры. В этом случае наша входная размерность равна 2, координаты x и y. Параметр input_shape ожидает вектор, поэтому в нашем случае это кортеж с одним числом.
- активация : Функция активации модели логистической регрессии — это логистическая функция или, альтернативно, ее можно назвать сигмоидной .Мы рассмотрим различные функции активации, где их использовать и почему, в другом руководстве.
model.compile (optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['precision'])
Затем мы компилируем модель с помощью функции compile . Это создает модель нейронной сети, определяя детали процесса обучения. Модель еще не обучена. Прямо сейчас мы просто объявляем оптимизатор для использования и функцию потерь для минимизации. Аргументы для функции компиляции определены следующим образом:
- оптимизатор : Какой оптимизатор использовать, чтобы минимизировать функцию потерь.Существует множество различных оптимизаторов, большинство из которых основаны на градиентном спуске. Мы рассмотрим различные оптимизаторы в другом руководстве. Сейчас мы будем использовать оптимизатор adam , который люди предпочитают использовать по умолчанию.
- потеря : функция потерь для минимизации. Поскольку мы создаем двоичный классификатор 0/1, минимизируемая функция потерь — binary_crossentropy . В следующих разделах мы увидим другие примеры функций потерь.
- метрики : Какая метрика сообщать статистику, для проблем классификации мы устанавливаем ее как точность .
history = model.fit (x = X, y = y, verbose = 0, epochs = 50)
Теперь самое интересное — обучение модели с использованием функции fit . Аргументы следующие:
- x : входные данные, мы определили их как X выше. Он содержит координаты x и y входных точек.
- y : не путать с координатой y входных точек. Во всех руководствах по машинному обучению и относятся к меткам, в нашем случае к классу, который мы пытаемся предсказать: 0 или 1.
- подробный : Распечатывает потери и точность, установите значение 1, чтобы увидеть результат.
- эпох : количество раз, чтобы просмотреть все данные обучения. При обучении моделей мы проходим через обучающие данные не один раз, а несколько раз.
plot_loss_accuracy (history)
Результатом метода подгонки являются потери и точность для каждой эпохи. Затем мы строим график, используя нашу пользовательскую функцию, и видим, что потери со временем уменьшаются почти до 0, а точность повышается почти до 1.Большой! Мы успешно обучили нашу первую модель нейронной сети с помощью Keras. Я знаю, что это было долгое объяснение, но я хотел подробно объяснить, что мы делаем в первый раз. Как только вы поймете, что происходит, и пару раз попрактикуетесь, все это станет вашей второй натурой.
Ниже представлен график границы решения. Различные оттенки синего и красного представляют вероятность того, что гипотетическая точка в этой области принадлежит классу 1 или 0. Верхняя левая область классифицируется как класс 1 с синим цветом.Правая нижняя область классифицируется как класс 0, окрашена в красный цвет. И есть переход вокруг границы принятия решения. Это отличный способ визуализировать границу принятия решения, которую изучает модель.
Отчет о классификации показывает точность и отзывчивость нашей модели. Мы приближаемся к 100% точности. Значение, указанное в отчете, должно быть 0,997, но оно было округлено до 1,0.
Матрица путаницы показывает нам, сколько классов было правильно классифицировано по сравнению с ошибочной.Цифры на диагональной оси представляют количество правильно классифицированных точек, остальные — неверно классифицированные. Эта конкретная матрица не очень интересна, потому что модель неверно классифицирует только 3 точки. Мы можем видеть одну из неправильно классифицированных точек в верхней правой части матрицы путаницы, истинное значение — класс 0, но предсказанное значение — класс 1.
2.2) Сложные данные — Луны
Предыдущий набор данных был линейно разделимым, поэтому Для нашей модели логистической регрессии разделение классов было тривиальным делом.Вот более сложный набор данных, который нельзя разделить линейно. Простая модель логистической регрессии не сможет четко различать классы. Мы используем метод make_moons программы scikit-learn для создания данных.
Давайте построим еще одну модель логистической регрессии с теми же параметрами, что и раньше. На этом наборе данных мы получаем точность 86%.
Текущая граница принятия решения не выглядит такой чистой, как предыдущая. Модель попыталась отделить классы от середины, но есть много неверно классифицированных точек.Нам нужен более сложный классификатор с нелинейной границей решения, и мы скоро увидим пример этого.
Точность модели 86%. На бумаге это выглядит хорошо, но мы легко сможем получить 100% с помощью более сложной модели. Вы можете представить себе изогнутую границу решения, которая будет разделять классы, и сложная модель должна быть в состоянии аппроксимировать это.
Отчет о классификации и матрица неточностей выглядят следующим образом.
2.3 Сложные данные — круги
Давайте посмотрим на последний пример, когда модель лайнера не работает.На этот раз с помощью функции make_circles в scikit-learn.
Построение модели с такими же параметрами.
Граница решения снова переходит из середины данных, но теперь у нас гораздо больше неправильно классифицированных точек.
Точность составляет около 50%, как показано ниже. Независимо от того, где модель проводит линию, она неверно классифицирует половину точек из-за характера набора данных.
Матрица неточностей, которую мы видим здесь, является примером матрицы плохого классификатора.В идеале мы предпочитаем, чтобы матрицы путаницы выглядели так, как мы видели выше. Высокие числа по диагоналям означают, что классификатор был правильным, и низкие числа везде, где классификатор был неправильным. В нашей визуализации синий цвет представляет большие числа, а желтый — меньшие. Поэтому мы бы предпочли видеть синий на диагоналях и желтый везде. Синий цвет везде — плохой знак, означающий, что наш классификатор запутался.
Самый наивный метод, который всегда предсказывает 1, независимо от того, какой вводится, получит точность 50%.Наша модель также имеет точность 50%, так что она совершенно бесполезна.
Теперь мы обучим глубокие искусственные нейронные сети (ИНС), чтобы лучше классифицировать наборы данных, с которыми боролась модель логистической регрессии, луны и круги. Мы также классифицируем еще более сложный набор данных синусоидальной волны, чтобы продемонстрировать, что ИНС может формировать действительно сложные границы принятия решений.
3.1) Сложные данные — Луны
При построении моделей Keras для логистической регрессии, описанных выше, мы выполнили следующие шаги:
- Шаг 1: Определите последовательную модель.
- Шаг 2: Добавьте плотный слой с функцией активации сигмовидной кишки. Это был единственный слой, который нам нужен.
- Шаг 3: Скомпилируйте модель с оптимизатором и функцией потерь.
- Шаг 4: Подгоните модель к набору данных.
- Шаг 5: Анализ результатов: построение кривых потерь / точности, построение границы решения, просмотр отчета о классификации и понимание матрицы неточностей.
При построении глубокой нейронной сети нам нужно только изменить шаг 2 так, чтобы мы добавляли несколько плотных слоев один за другим.Выход одного слоя становится входом следующего. Keras снова выполняет большую часть тяжелой работы, инициализируя веса и смещения и соединяя выход одного слоя с входом следующего. Нам нужно только указать, сколько узлов мы хотим на данном слое, и функцию активации. Это так просто.
Сначала мы добавляем слой с 4 узлами и функцией активации tanh . Tanh — это часто используемая функция активации, и мы узнаем о ней больше в другом руководстве.Затем мы снова добавляем еще один слой с 2 узлами, используя активацию tanh. Наконец, мы добавляем последний слой с 1 узлом и сигмовидной активацией. Это последний слой, который мы также использовали в модели логистической регрессии.
Это не очень глубокая ИНС, у нее всего 3 слоя: 2 скрытых слоя и выходной слой. Но обратите внимание на пару шаблонов:
- Выходной слой по-прежнему использует сигмовидную функцию активации, поскольку мы работаем над проблемой двоичной классификации.
- Скрытые слои используют функцию активации tanh.Если бы мы добавили больше скрытых слоев, они также использовали бы активацию tanh. У нас есть несколько вариантов функций активации: сигмоид, tanh, relu и варианты relu. В другой статье мы рассмотрим плюсы и минусы каждого из них. Мы также продемонстрируем, почему использование сигмовидной активации в скрытых слоях — плохая идея. На данный момент использовать tanh безопасно.
- У нас меньше узлов в каждом последующем слое. Обычно количество узлов меньше, когда мы складываем слои друг на друга, что-то вроде треугольной формы.
Мы не построили здесь очень глубокую ИНС, потому что в этом не было необходимости. С этой конфигурацией мы уже достигли 100% точности.
.
Нейронные сети и глубокое обучение
Нейронные сети — одна из самых красивых парадигм программирования
когда-либо изобретал. В традиционном подходе к программированию мы говорим
компьютер, что делать, разбивая большие проблемы на множество мелких,
точно определенные задачи, которые компьютер может легко выполнить. По
напротив, в нейронной сети мы не говорим компьютеру, как решать
наша проблема. Вместо этого он учится на данных наблюдений, выясняя
свое собственное решение проблемы.
Автоматическое обучение на основе данных звучит многообещающе. Однако пока
2006 г. мы не знали, как обучать нейронные сети, чтобы превзойти больше
традиционные подходы, за исключением нескольких специализированных задач. какой
в 2006 году изменилось открытие методов обучения в
так называемые глубокие нейронные сети. Эти методы теперь известны как
глубокое обучение. Они получили дальнейшее развитие, и сегодня глубокие нейронные
сети и глубокое обучение обеспечивают выдающуюся производительность во многих
важные проблемы компьютерного зрения, распознавания речи и естественного
языковая обработка.Они развертываются в больших масштабах
такие компании, как Google, Microsoft и Facebook.
Цель этой книги — помочь вам овладеть основными концепциями
нейронные сети, включая современные методы глубокого обучения. После
работая над книгой, вы напишете код, использующий нейронные
сети и глубокое обучение для решения сложных задач распознавания образов
проблемы. И у вас будет основа для использования нейронных сетей и
глубокое обучение для решения проблем, придуманных вами.
Принципиально-ориентированный подход
Одно из убеждений, лежащих в основе книги, состоит в том, что лучше получить
твердое понимание основных принципов нейронных сетей и глубокое
обучение, а не смутное понимание длинного списка
идеи. Если вы хорошо поняли основные идеи, вы можете быстро
понимать другой новый материал. В терминах языка программирования подумайте
его как освоение основного синтаксиса, библиотек и структур данных
новый язык.Вы все еще можете «знать» лишь крошечную часть
общий язык — многие языки имеют огромные стандартные библиотеки —
но новые библиотеки и структуры данных можно понять быстро и
с легкостью.
Это означает, что книга категорически не является руководством по использованию некоторых
конкретная библиотека нейронной сети. Если вы в основном хотите выучить свой
в библиотеке, не читайте эту книгу! Найдите нужную библиотеку
изучать и работать с учебными пособиями и документацией. Но будь
предупреждал.Хотя это дает немедленное решение проблем, если вы
хотите понять, что на самом деле происходит в нейронных сетях, если вы
хотите получить информацию, которая будет актуальна и годы спустя, тогда это
недостаточно просто изучить какую-нибудь горячую библиотеку. Вы должны понимать
прочное и прочное понимание того, как работают нейронные сети.
Технологии приходят и уходят, но понимание — навсегда.
Практический подход
Мы изучим основные принципы нейронных сетей и
обучение путем атаки на конкретную проблему: проблема обучения
компьютер для распознавания рукописных цифр.Эта проблема крайне
сложно решить с помощью обычного подхода к программированию.
И все же, как мы увидим, ее можно довольно хорошо решить, используя простой
нейронная сеть с несколькими десятками строк кода и без специальных
библиотеки. Более того, мы улучшим программу через множество
итераций, постепенно включающих все больше и больше основных идей
о нейронных сетях и глубоком обучении.
Этот практический подход означает, что вам понадобится программирование.
опыт чтения книги.Но не нужно быть профессионалом
программист. Я написал код на Python (версия 2.7), который,
даже если вы не программируете на Python, это должно быть легко понять с
просто немного усилий. По ходу книги мы будем развивать
небольшую библиотеку нейронных сетей, которую вы можете использовать для экспериментов и
чтобы построить понимание. Весь код доступен для скачивания
Вот.
Когда вы дочитаете книгу или прочитаете ее, вы легко сможете выбрать
одну из наиболее полнофункциональных библиотек нейронных сетей, предназначенных
для использования в производстве.
Кстати, математические требования для чтения книги:
скромный. В большинстве глав есть немного математики, но обычно
просто элементарная алгебра и графики функций, которых я ожидаю больше всего
читатели будут в порядке. Иногда я использую более продвинутые
математике, но структурировали материал так, чтобы вы могли
если некоторые математические детали ускользают от вас. Одна глава, в которой
более тяжелая математика — это глава 2, которая
требует небольшого многомерного исчисления и линейной алгебры.Если те
не знакомы, я начинаю главу 2 с
обсуждение того, как ориентироваться в математике. Если ты найдешь это
действительно тяжелый, вы можете просто перейти к
резюме
основные результаты главы. В любом случае не о чем беспокоиться
это в самом начале.
Книга редко бывает одновременно ориентирована на принципы и
руки вверх. Но я считаю, что вы научитесь лучше, если мы построим
фундаментальные идеи нейронных сетей. Мы будем разрабатывать живой код, а не
просто абстрактная теория, код, который можно исследовать и расширять.Сюда
вы поймете основы, как в теории, так и на практике, и
будьте готовы расширить свои знания.
.
Базовое введение в нейронные сети
Базовое введение в нейронные сети
Простейшее определение нейронной сети, более правильное название которой — «искусственная нейронная сеть» (ИНС), дано изобретателем одного из первых нейрокомпьютеров,
Доктор Роберт Хехт-Нильсен. Он определяет нейронную сеть как:
«… вычислительная система, состоящая из числа
простой, тесно взаимосвязанной обработки
элементы, которые обрабатывают информацию своим
реакция динамического состояния на внешние входы.В «Учебнике по нейронным сетям: Часть I» Морин Кодилл, эксперта по искусственному интеллекту, февраль 1989 г.
ИНС — это устройства обработки данных (алгоритмы или реальное оборудование), которые слабо смоделированы по нейронной структуре коры головного мозга млекопитающих, но в гораздо меньших масштабах. Большая ИНС может иметь сотни или тысячи процессорных единиц, тогда как мозг млекопитающего состоит из миллиардов нейронов с соответствующим увеличением величины их общего взаимодействия и возникающего поведения. Хотя исследователи ИНС обычно не озабочены тем, точно ли их сети похожи на биологические системы, некоторых это не так.Например, исследователи точно смоделировали функцию сетчатки и довольно хорошо смоделировали глаз.
Хотя математика, связанная с нейронными сетями, не является тривиальной задачей, пользователь может довольно легко получить хотя бы практическое понимание
их структуры и функции.
Нейронные neworks обычно организованы по слоям. Слои состоят из ряда взаимосвязанных «узлов», которые содержат «функцию активации». Паттерны передаются в сеть через «входной слой», который связывается с одним или несколькими «скрытыми слоями».
где фактическая обработка осуществляется через систему взвешенных «связей».Затем скрытые слои связываются с «выходным слоем», где выводится ответ, как показано на рисунке ниже.
Большинство ИНС содержат некоторую форму «правила обучения», которое изменяет веса соединений в соответствии с входными шаблонами, с которыми они представлены. В некотором смысле ИНС учатся на примерах, как и их биологические аналоги; ребенок учится
узнавать собак по примерам собак.
Хотя нейронные сети используют множество различных типов правил обучения, эта демонстрация касается только одного; правило дельты.Правило дельты часто используется в наиболее распространенном классе ИНС, который называется «нейронными сетями обратного распространения» (BPNN). Backpropagation — это аббревиатура для обратного распространения ошибки.
С правилом дельты, как и с другими типами обратного распространения, «обучение» — это контролируемый процесс, который происходит с каждым циклом или «эпохой» (т. Е. Каждый раз, когда сеть представляет новый входной шаблон) через прямой поток активации выходов, и обратное распространение ошибок корректировок веса.Проще говоря, когда нейронная сеть изначально представлена шаблоном, она делает случайное «предположение» относительно того, что это может быть. Затем он видит, насколько далек его ответ от фактического, и вносит соответствующие изменения в его связь.
веса. Более наглядно процесс выглядит примерно так:
Также обратите внимание, что внутри каждого узла скрытого слоя есть сигмоидальная функция активации, которая поляризует сетевую активность и помогает ей стабилизироваться.
Обратное распространение выполняет градиентный спуск в векторном пространстве решения к «глобальному минимуму» вдоль самого крутого вектора поверхности ошибки.Глобальный минимум — это теоретическое решение с минимально возможной ошибкой. Поверхность ошибки сама по себе является гиперпараболоидом, но редко
«гладкий», как показано на рисунке ниже. В самом деле, в большинстве задач пространство для решения весьма неровно с многочисленными «ямами» и «холмами», которые
может привести к тому, что сеть остановится в «локальном минимуме», что не является лучшим общим решением.
Поскольку природа пространства ошибок не может быть известна заранее,
Анализ нейронной сети часто требует большого количества отдельных прогонов для определения лучшего решения.Большинство правил обучения имеют встроенные математические термины для помощи в этом процессе, которые контролируют «скорость» (бета-коэффициент) и «импульс» обучения. Скорость обучения — это на самом деле скорость сходимости между текущим решением и глобальным минимумом. Momentum помогает сети преодолевать препятствия (локальные минимумы) на поверхности ошибки и устанавливаться на уровне глобального минимума или около него.
Когда нейронная сеть «обучена» до удовлетворительного уровня, ее можно использовать в качестве
аналитический инструмент по другим данным.Для этого пользователь больше не указывает какие-либо обучающие прогоны и вместо этого позволяет сети работать только в режиме прямого распространения. Новые входные данные представляются входному шаблону, где они фильтруются и обрабатываются средними уровнями, как если бы происходило обучение, однако,
на этом этапе вывод сохраняется и обратного распространения не происходит. Результатом прогона прямого распространения является прогнозируемая модель для данных, которая затем может
использоваться для дальнейшего анализа и интерпретации.
Также возможно перетренировать нейронную сеть, что означает, что сеть была обучена точно реагировать только на один тип ввода; что очень похоже на механическое запоминание.Если это должно произойти, то обучение больше не может происходить, и на жаргоне нейронных сетей сеть называется «прародительницей». В реальных приложениях эта ситуация не очень полезна, поскольку для каждого нового типа ввода потребуется отдельная родительская сеть.
Чтобы лучше понять искусственные нейронные вычисления, важно сначала узнать, как обычный «последовательный» компьютер и его программное обеспечение обрабатывают информацию. Последовательный компьютер имеет центральный процессор, который может обращаться к массиву ячеек памяти, где хранятся данные и инструкции.Вычисления производятся процессором, считывающим инструкцию, а также любые данные, которые требуются инструкции из адресов памяти, затем инструкция выполняется, и результаты сохраняются в указанной области памяти по мере необходимости. В последовательной системе (а также стандартной параллельной) этапы вычислений являются детерминированными, последовательными и логическими, и состояние заданной переменной можно отслеживать от одной операции к другой.
Для сравнения, ИНС не являются последовательными или обязательно детерминированными.Нет сложных центральных процессоров, скорее есть много простых, которые обычно не делают ничего, кроме как принимают взвешенную сумму своих входных данных от других процессоров. ИНС не выполняют запрограммированные инструкции; они реагируют параллельно (моделируемые или фактические) на представленную им схему входных данных.
Также нет отдельных адресов памяти для хранения данных. Вместо этого информация содержится в общем «состоянии» активации сети. Таким образом, «знание» представлено самой сетью, которая в буквальном смысле больше, чем сумма ее отдельных компонентов.
Нейронные сети — универсальные аппроксиматоры, и они работают лучше всего, если система, для моделирования которой вы их используете, имеет высокую устойчивость к ошибкам. Поэтому не рекомендуется использовать нейронную сеть для балансировки чековой книжки! Однако
они очень хорошо работают для:
- захвата ассоциаций или обнаружения закономерностей в наборе шаблонов;
- , где объем, количество переменных или разнообразие данных очень велико;
- отношения между переменными неясны; или,
- отношения трудно описать адекватно с помощью традиционных подходов.
У анализа нейронных сетей есть много преимуществ и ограничений, и для правильного обсуждения этого предмета нам нужно будет рассмотреть каждый отдельный тип сети, что не является необходимым для этого общего обсуждения. Однако, что касается сетей обратного распространения, потенциальные пользователи должны знать о некоторых специфических проблемах.
- Нейронные сети обратного распространения (и многие другие типы сетей)
в известном смысле «черные ящики». Помимо определения общей архитектуры сети и, возможно, первоначального заполнения ее случайными числами, у пользователя нет другой роли, кроме как вводить его, наблюдать, как он тренируется, и ждать выхода.Фактически, было сказано, что при обратном распространении «вы почти не знаете, что делаете». Некоторые программные пакеты, доступные в свободном доступе (NevProp, bp, Mactivation), действительно позволяют пользователю измерять «прогресс» сети через регулярные промежутки времени, но само обучение происходит само по себе. Конечным продуктом этой деятельности является обученная сеть, которая не предоставляет никаких уравнений или коэффициентов, определяющих взаимосвязь (как в регрессии) за пределами ее собственной внутренней математики. Сеть «ЯВЛЯЕТСЯ» окончательным уравнением отношений. - Сети обратного распространения также обычно медленнее обучаются, чем сети других типов, и иногда требуют тысячи эпох. При запуске на действительно параллельной компьютерной системе эта проблема не является проблемой, но если BPNN моделируется на стандартной последовательной машине (то есть на одном SPARC, Mac или ПК), обучение может занять некоторое время. Это связано с тем, что центральный процессор машины должен отдельно вычислять функцию каждого узла и соединения, что может быть проблематичным в очень больших сетях с большим объемом данных.Однако скорость большинства современных машин такова, что это обычно не проблема.
В зависимости от природы приложения и мощности внутренних шаблонов данных обычно можно ожидать, что сеть будет обучаться достаточно хорошо. Это относится к проблемам, в которых отношения могут быть довольно динамичными или нелинейными. ИНС представляют собой аналитическую альтернативу обычным методам, которые часто ограничиваются строгими предположениями о нормальности, линейности, независимости переменных и т. Д.Поскольку ИНС может фиксировать многие виды отношений, она позволяет пользователю быстро и относительно легко моделировать явления, которые иначе было бы очень трудно или невозможно объяснить.
Для получения дополнительной информации о нейронных сетях в Интернете.
Вернуться на главную страницу
См. Пример нейронной сети.
.