Deep Learning 15 лучших книг по глубинному обучению


Оглавление (нажмите, чтобы открыть):

Глубокое обучение (Deep Learning): краткий туториал

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

Нейронная сеть (искусственная нейронная сеть) — это попытка воспроизведения работы человеческого мозга на компьютере при помощи слоев нейронов.

Искусственный интеллект — способность машины или программы находить решения при помощи вычислений.

Во время первых исследований в области ИИ ученые пытались воспроизвести человеческий интеллект для решения конкретных задач — например, игры с человеком. Было введено большое количество правил, которым должен следовать компьютер. На основе этих правил компьютер принимал решения в согласии с конкретным списком возможных действий.

Машинное обучение — это попытка научить компьютеры самостоятельно обучаться на большом количестве данных вместо жестко постулированных правил.

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

Контролируемое и неконтролируемое обучение

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

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

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

Неконтролируемое обучение (обучение без учителя, unsupervised learning) — это машинное обучение с использованием наборов данных без определенной структуры.

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

Глубокое обучение

Теперь вы подготовлены к изучению того, что такое глубокое обучение и как оно работает.

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

Разница между машинным и глубоким обучением

Рассмотрим, как работает глубокое обучение, на примере сервиса по оценке стоимости авиабилета. Мы будем обучать его контролируемым образом.

Мы хотим, чтобы наш сервис предсказывал цену на авиабилет по следующим входным данным:

  • аэропорт вылета;
  • аэропорт назначения;
  • дата отбытия;
  • авиакомпания.

Нейронные сети глубокого обучения

Давайте заглянем внутрь нашей модели. Как и у животных, искусственная нейронная сеть содержит взаимосвязанные нейроны. На диаграмме они представлены кругами:

Глубокая нейронная сеть (с двумя скрытыми слоями)

Нейроны сгруппированы в три различных типа слоев:

  • входной слой;
  • скрытый слой (слои);
  • выходной слой.

Входной слой принимает входные данные. В нашем случае имеется четыре нейрона на входном слое: аэропорт вылета, аэропорт назначения, дата вылета и авиакомпания. Входной уровень передает эти данные в первый скрытый слой.

Скрытые слои выполняют математические вычисления со входными данными. Одна из задач при создании нейронных сетей — определение количества скрытых слоев и нейронов на каждом слое.

Слово «глубина» в термине «глубокое обучение» означает наличие более чем одного скрытого слоя.

Выходной слой выдает результат. В нашем случае это прогноз цены на билет.

Итак, как же вычисляется цена? Здесь вступает в силу магия глубокого обучения. Нейроны связаны между собой с определенным весом. Вес определяет важность элемента входных данных. Исходные веса задаются случайным образом.

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

Каждый нейрон имеет функцию активации. Ее смысл трудно понять без привлечения математических рассуждений. Одной из ее целей является «стандартизация» данных на выходе из нейрона.

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

Обучение глубокой сети

Обучение нейросети — самая сложная часть глубокого обучения. Почему?

  • Вам нужен большой набор данных.
  • Вам нужно большое количество вычислительной мощности.

Для оценки стоимости билета нужно найти исторические данные о ценах на билеты. Из-за большого количества возможных комбинаций аэропортов и дат вылета нам нужен очень большой список цен на билеты.

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

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

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

Как уменьшить значение функции потерь?

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

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

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

Для минимизации функции потерь нужно многократно перебирать данные. Именно поэтому нам требуется большая вычислительная мощность. Уточнение весов с помощью градиентного спуска выполняется автоматически. В этом и состоит магия глубокого обучения!

После обучения можно использовать разработанный нами сервис для прогнозирования цен на авиабилеты.

В сухом остатке:

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

Книги по машинному обучению

Книги – это замечательная инвестиция. Вы получаете годы опыта всего лишь за несколько десятков долларов.

Я люблю книги и читаю каждую книгу по машинному обучению, которая попадается мне под руку.

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

В этом руководстве вы найдете лучшие книги по машинному обучению.

Желание читать книги по машинному обучению возникает по ряду причин. Поэтому я сгруппировал и перечислил книги по машинному обучению несколькими разными способами, например:

  • Тип: учебники, научно-популярные и т.п.
  • Тема: Python, глубокое обучение и т.п.
  • Издатель: Packt, O’Reilly и т.п.

На все книги есть ссылки на Amazon, так что вы сможете узнать о них больше и даже сразу же купить.

Я буду обновлять это руководство, так что добавляйте его в закладки и регулярно возвращайтесь.

Как пользоваться этим руководством

  1. Найдите тему или вопрос, который наиболее вас интересует.
  2. Просмотрите книги в выбранном вами разделе.
  3. Купите книгу.
  4. Прочтите её от корки до корки.
  5. Повторите.

Иметь книгу – это не то же самое, что и знать её содержание. Читайте книги, которые покупаете.

Читали ли вы когда-нибудь книги по машинному обучению?
Поделитесь прочтённым в комментариях ниже.

Книги по машинному обучению, сортированные по их типу

Научно-популярные книги по машинному обучению

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

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

Лучшая книга из этого списка: The Signal and the Noise. [«Сигнал и шум»]

Среди этих книг против оптимизации выступает Weapons of Math Destruction: How Big Data Increases Inequality and Threatens Democracy [«Оружие математического поражения: как «большие данные» усугубляют неравенство и угрожают демократии»]

Книги по машинному обучению для начинающих

Существует много книг по машинному обучению, предназначенных для начинающих.

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

  • Data Science for Business: What You Need to Know about Data Mining and Data-Analytic Thinking [«Наука о данных для бизнеса: Всё, что вам надо знать об интеллектуальном анализе данных и аналитическом мышлении»]
  • Data Smart: Using Data Science to Transform Information into Insight [«Много цифр. Анализ больших данных при помощи Excel»]
  • Data Mining: Practical Machine Learning Tools and Techniques [«Интеллектуальный анализ данных: практические инструменты и техники машинного обучения»]
  • Doing Data Science: Straight Talk from the Frontline [«Наука о данных: откровенно с передовой»]

Лучшей книгой из этого списка может быть: Data Mining: Practical Machine Learning Tools and Techniques [«Интеллектуальный анализ данных: практические инструменты и техники машинного обучения»].

Вводные книги по машинному обучению

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

Они охватывают широкий спектр тем по машинному обучению, концентрируясь скорей на вопросе «КАК?», чем на теории, и на мотивации использования тех или иных методов.

  • Machine Learning for Hackers: Case Studies and Algorithms to Get You Started [«Машинное обучение для хакеров: разбор практических примеров и алгоритмы для начинающих»].
  • Machine Learning in Action [«Машинное обучение на практике»]
  • Programming Collective Intelligence: Building Smart Web 2.0 Applications [«Программируем коллективный разум: создание интеллектуальных приложений для Web 2.0.»]
  • An Introduction to Statistical Learning: with Applications in R [«Введение в статистическое обучение с примерами на языке R»]
  • Applied Predictive Modeling [«Прикладное прогнозное моделирование»]
  • Лучшей книгой из этого списка может быть: An Introduction to Statistical Learning: with Applications in R [«Введение в статистическое обучение с примерами на языке R»].

Учебники по машинному обучению

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

  • The Elements of Statistical Learning: Data Mining, Inference, and Prediction [«Элементы статистического обучения: интеллектуальный анализ данных, логические выводы и прогнозирование»]
  • Pattern Recognition and Machine Learning [«Распознавание образов и машинное обучение»]
  • Machine Learning: A Probabilistic Perspective [«Машинное обучение с точки зрения вероятностей»]
  • Learning From Data [«Обучение на данных»]
  • Machine Learning [«Машинное обучение»]
  • Machine Learning: The Art and Science of Algorithms that Make Sense of Data [«Машинное обучение: Наука и искусство построения алгоритмов, которые извлекают знания из данных»]
  • Foundations of Machine Learning [«Основы машинного обучения»]
  • Лучшей книгой из этого списка может быть: The Elements of Statistical Learning: Data Mining, Inference, and Prediction [«Элементы статистического обучения: интеллектуальный анализ данных, логические выводы и прогнозирование»].

Книги по машинному обучению, сортированные по теме

Машинное обучение на R

Список книг по прикладному машинному обучению на языке R

  • R for Data Science: Import, Tidy, Transform, Visualize, and Model Data [«Платформа R для науки о данных: импорт, упорядочивание, трансформация, визуализация и моделирование данных»]
  • Machine Learning with R. [«Машинное обучение на языке R»]
  • Machine Learning With R Cookbook – 110 Recipes for Building Powerful Predictive Models with R. [«Машинное обучение с книгой рецептов для R – 110 рецептов для создания мощных моделей прогнозирования»]
  • R Machine Learning By Example. [«Машинное обучение на языке R на основе примеров»]
  • R Machine Learning Essentials. [«Основы машинного обучения на языке R»]
  • Mastering Machine Learning with R [«Осваиваем машинное обучение на языке R»]
  • An Introduction to Statistical Learning: with Applications in R. [«Введение в статистическое обучение с примерами на языке R»]
  • Practical Data Science with R [«Практическая наука о данных на языке R»]
  • Applied Predictive Modeling. [«Прикладное прогнозное моделирование»]
  • R and Data Mining: Examples and Case Studies [«R и интеллектуальный анализ данных: примеры и их разбор»]

Лучшая книга из этого списка: Applied Predictive Modeling. [«Прикладное прогнозное моделирование»]

Машинное обучение на Python

Список лучших книг по машинному обучению на Python и SciPy

  • Python Machine Learning [«Машинное обучение на Python»]
  • Data Science from Scratch: First Principles with Python [«Наука о данных с нуля: первые принципы работы с Python»]
  • Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques for Building Intelligent Systems [«Прикладное машинное обучение на Scikit-Learn and TensorFlow: концепции, инструменты и техники для создания интеллектуальных систем »]
  • Introduction to Machine Learning with Python: A Guide for Data Scientists [«Введение в машинное обучение на Python: руководство для занимающихся наукой о данных»]
  • Vital Introduction to Machine Learning with Python: Best Practices to Improve and Optimize Machine Learning Systems and Algorithms [«Введение в машинное обучение на Python: как улучшить и оптимизировать системы машинного обучения и алгоритмы»]
  • Machine Learning in Python: Essential Techniques for Predictive Analysis [«Машинное обучение в Python: основные методы прогнозного анализа»]
  • Python Data Science Handbook: Essential Tools for Working with Data [«Руководство по машинному обучению на Python: инструменты, необходимые для работы с данными»]
  • Introducing Data Science: Big Data, Machine Learning, and more, using Python tools [«Основы Data Science и Big Data. Python и наука о данных»]
  • Real-World Machine Learning [«Машинное обучение для применения на реальных данных»]

Лучший выбор: Python Machine Learning. [«Машинное обучение на Python»]

Глубокое обучение

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

  • Deep Learning [«Глубокое обучение»]
  • Deep Learning: A Practitioner’s Approach [«Глубокое обучение: практический подход»]
  • Fundamentals of Deep Learning: Designing Next-Generation Machine Intelligence Algorithms [«Основы глубокого обучения: создание алгоритмов искусственного интеллекта нового поколения »]
  • Learning TensorFlow: A guide to building deep learning systems [«Изучение TensorFlow: руководство по созданию систем глубокого изучения»]
  • Machine Learning with TensorFlow [«Машинное обучение на TensorFlow»]
  • TensorFlow Machine Learning Cookbook [«Книга рецептов по изучению машинного обучения на TensorFlow»]
  • Getting Started with TensorFlow [«Начало работы с TensorFlow»]
  • TensorFlow for Machine Intelligence: A Hands-On Introduction to Learning Algorithms [«TensorFlow для искусственного интеллекта: практическое введение в изучение алгоритмов»]
  • Очевидно лучшая книга из этого списка: Deep Learning. [«Глубокое обучение»]

Прогнозирование временных рядов

Список книг по прогнозированию временных рядов.

На сегодняшний день в прикладном аспекте прогнозирования временных рядов господствующее положение занимает R.

  • Time Series Analysis: Forecasting and Control [«Анализ временных рядов: прогнозирование и контроль»]
  • Practical Time Series Forecasting with R: A Hands-On Guide [«Практическое прогнозирование временных рядов на R: руководство»]
  • Introduction to Time Series and Forecasting [«Введение в теорию временных рядов и прогнозирование»]
  • Forecasting: principles and practice [«Прогнозирование: принципы и практика»]

Лучшая вводная книга – это Forecasting: principles and practice [«Прогнозирование: принципы и практика»].

Лучшая книга о временных рядах – это Time Series Analysis: Forecasting and Control [«Анализ временных рядов: прогнозирование и контроль»].

Книги по машинному обучению, сортированные по издателю

Есть три издательства, которые детально исследуют машинное обучение и буквально пачками печатают книги на эту тему.

Они называются: «O’Reilly», «Manning» и «Packt».

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

Книги по машинному обучению издательства «O’Reilly»

У «O’Reilly» есть сотни книг, связанных с их инициативой в информационной сфере, большинство из них связаны с машинным обучением.

Перечислить их все здесь невозможно, так что переходите по ссылкам по теме. Ниже приведены несколько бестселлеров.

  • Programming Collective Intelligence: Building Smart Web 2.0 Applications [«Программируем коллективный разум: создание интеллектуальных приложений для Web 2.0.»]
  • Introduction to Machine Learning with Python: A Guide for Data Scientists [«Введение в машинное обучение на Python: руководство для занимающихся наукой о данных»]
  • Deep Learning: A Practitioner’s Approach [«Глубокое обучение: практический подход»]
  • Fundamentals of Deep Learning: Designing Next-Generation Machine Intelligence Algorithms [«Основы глубокого обучения: создание алгоритмов искусственного интеллекта нового поколения»]
  • Data Science from Scratch: First Principles with Python [«Наука о данных с нуля: первые принципы работы с Python»]
  • Python Data Science Handbook: Essential Tools for Working with Data [«Руководство по машинному обучению на Python: инструменты, необходимые для работы с данными»]

Возможно, книга Programming Collective Intelligence: Building Smart Web 2.0 Applications [«Программируем коллективный разум: создание интеллектуальных приложений для Web 2.0.»] заложила фундамент этого направления. Она популярна уже длительное время.

Ссылки по теме

Книги по машинному обучению издательства «Manning»

Книги издательства «Manning» практичны и имеют достойное качество. У них нет каталога из сотен книг (пока), как у «O’Reilly» и «Packt».

  • Machine Learning in Action [«Машинное обучение на практике»]
  • Real-World Machine Learning [«Машинное обучение для применения на реальных данных»]
  • Introducing Data Science: Big Data, Machine Learning, and more, using Python tools [«Основы Data Science и Big Data. Python и наука о данных»]
  • Practical Data Science with R [«Практическая наука о данных на языке R»]

В каталоге «Manning» особо выделяется Machine Learning in Action [«Машинное обучение на практике»]. Возможно, опять-таки потому, что она была первой в каталоге их книг по машинному обучению.

Ссылки по теме

Книги по машинному обучению издательства «Pact»

Кажется, словно «Packt» не выпускает ничего кроме книг по науке о данных и машинному обучению.

У них есть много книг об эзотерических языках программирования, а также множество книг на такие популярные темы, как R или Python.

Ниже представлены одни из самых популярных книг.

Дополнительные ресурсы

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

Я попытался составить самый большой и самый полный список книг по машинному обучению.

Читали ли вы какую-либо книгу из этого руководства? Какую? И что вы о ней думаете?

Книги и учебные ресурсы по машинному обучению

Посоветуйте какие-нибудь хорошие книги по математике и машинному обучению. Желательно в доступной для понимания форме.

Дописывайте, если есть что добавить в общий ответ.

2 ответа 2

Прежде чем заниматься конкретно машинным обучением, рекомендуем ознакомиться с книгами

Стюарт Рассел, Питер Норвиг Искусственный интеллект. Современный подход источник

Джордж Ф. Люгер Искусственный интеллект. Стратегии и методы
решения сложных проблем
источник

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

  • Саймон Хайкин Нейронные сети. Полный курсисточник

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

Борис Миркин Введение в анализ данных. Учебник и практикум источник

Марина Архипова, Татьяна Дуброва Анализ данных. Учебник источник

Уэс Маккинни Python и анализ данных источник (практика)

Роберт И. Кабаков R в действии. Анализ и визуализация данных на языке R источник (практика)

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

Стивен Х. Строгац Удовольствие от x. Увлекательная экскурсия в мир математики от одного из лучших преподавателей в мире источник

Юрий Шиханович Введение в современную математику. Начальные понятия источник

Рональд Л. Грэхем, Дональд Эрвин Кнут Конкретная математика. Математические основы информатики источник

Юрий Пухначев Математика без формул книга1, книга2

Тарасов Л.В. Азбука математического анализа. Беседы об основных понятиях. Учебное пособие источник

Анатолий Мышкис Лекции по высшей математике источник

Рихард Курант, Герберт Роббинс Что такое математика? источник

Потом уже можно браться за стандартный учебник математического анализа

  • Фихтенгольц Г.М.Основы математического анализаисточник

Книги на русском языке

Джеймс Г., Уиттон Д., Хасти Т., Тибширани Р. Введение в статистическое обучение с примерами на языке R источник, Оглавление и отрывки из глав

Себастьян Рашка Python и машинное обучение источник

Хенрик Бринк, Джозеф Ричардс Машинное обучение источник

Хараламбос Марманис, Дмитрий Бабенко Алгоритмы интеллектуального Интернета. Передовые методики сбора, анализа и обработки данных источник

Мастер Йода рекомендует:  Visual Studio Code стал частью Python-дистрибутива Anaconda

К. В. Воронцов Математические методы обучения по прецедентам (теория обучения машин) источник

Мерков А.Б. Введение в методы статистического обучения источник

Аркадий Гелиг, Алексей Матвеев Введение в математическую теорию обучаемых распознающих систем и нейронных сетей. Учебное пособие источник

Мерков А.Б. Построение и обучение вероятностных моделей источник

Ричарт В., Коэльо П.Л. Построение систем машинного обучения на языке Python источник, Оглавление и отрывки из глав (тут больше практика по машинному обучению)

Вьюгин В. Математические основы машинного обучения и прогнозирования источник

Червоненкис А.Я. Теория обучения машин

Ричард С. Саттон, Эндрю Г. Барто Обучение с подкреплением источник

Андреас Мюллер, Сара Гвидо Введение в машинное обучение с помощью Python. Руководство для специалистов по работе с данными источник

Дэви Силен, Арно Мейсман Основы Data Science и Big Data. Python и наука о данных источник

Лепский А.Е., Броневич А.Г. Математические методы распознавания образов: Курс лекций источник

Местецкий Л.М. Математические методы распознавания образов Курс лекций источник

Кристофер Д. Маннинг, Прабхакар Рагхаван Введение в информационный поиск источник

Юре Лесковец, Ананд Раджараман Анализ больших наборов данных источник, оглавление и отрывки из глав

Гудфеллоу Я., Бенджио И., Курвилль А. Глубокое обучение источник, оглавление и отрывки из глав

Шлезингер М.И. Десять лекций по статистическому и структурному распознаванию образов источник

Джулли А., Пал С. Библиотека Keras — инструмент глубокого обучения источник оглавление и отрывки из глав

Шарден Б., Массарон Л., Боскетти А. Крупномасштабное машинное обучение вместе с Python источник оглавление и отрывки из глав

Шитиков В.К., Мастицкий С.Э. Классификация, регрессия и другие алгоритмы Data Mining с использованием R источник , эл.версия

Дж. Вандер Плас Python для сложных задач. Наука о данных и машинное обучение источник

Даррен Кук Машинное обучение с использованием библиотеки Н2О источник оглавление и отрывки из глав

Открытый курс OpenDataScience по машинному обучению источник — статьи на Хабрахабре

Слайды лекций по курсу “Машинное обучение” источник

Лекция 2008 года Н.Ю. Золотых Как обучаются машины? источник, презентация к лекциям от 2020 г.

Тарик Рашид Создаем нейронную сеть источник

Николенко С. И., Кадурин А. А., Архангельская Е. О. Глубокое обучение источник

С. И. Николенко, А. Л. Тулупьев Самообучающиеся системы источник

Паттерсон Дж., Гибсон А. Глубокое обучение с точки зрения практика источник, оглавление и отрывки из глав

Орельен Жерон Прикладное машинное обучение с помощью Scikit-Learn и TensorFlow. Концепции, инструменты и техники для создания интеллектуальных систем источник, оглавление, отрывки из глав

П.Е. Овчинников Применение искусственных нейронных сетей для обработки сигналов. Учебно-методическое пособие. 2012г источник

Франсуа Шолле Глубокое обучение на R источник, оглавление, отрывки из глав

О`Нил, Шатт Data Science. Инсайдерская информация для новичков. Включая язык R источник

Шай Шалев-Шварц, Шай Бен-Давид Идеи машинного обучения источник, оглавление и отрывки из глав

Франсуа Шолле Глубокое обучение на Python источник

Пратик Джоши Искусственный интеллект с примерами на Python источник

Бенгфорт Б., Билбро Р., Охеда Т. Прикладной анализ текстовых данных на Python. Машинное обучение и создание приложений обработки естественного языка источник

Келлехер Дж., Мак-Нейми Б., д`Арси А. Основы машинного обучения для аналитического прогнозирования: алгоритмы, рабочие примеры и тематические исследования источник

Видео на русском языке

  • Высшая школа экономики «Введение в машинное обучение»источник Coursera
  • Специализация Машинное обучение и анализ данных включающая себя 6 курсов : источник Coursera
  • Видеолекции курса «Машинное обучение» от Школы анализа данных Яндекса источник на яндексе или источник на ютубе
  • Специализация Анализ Данных от Stepik (часть курсов из этой специализации отображена тут)
  • Курс Р.В. Шамина Машинное обучение и искусственный интеллект в математике и приложенияхисточник
  • Виктор Кантор МФТИ Машинное обучениеисточник
  • Курс от Stepik Нейронные сетиисточник
  • Видеолекциии (13шт.) Введение в анализ данныхисточник Mail.ru

Видеолекциии (1 семестр) Data Minig источник Mail.ru

Видеолекциии (2 семестр) Data Minig источник Mail.ru

Искусственный интеллект и машинное обучение (лекции) источник — сайт, ютуб

Канал OpenDataScience по машинному обучению и MLClass источник ютуб

Сергей Николенко Основы байесовского вывода источник ютуб

Технострим Mail.Ru Нейронные сети в машинном обучении (осень 2020) источник

Андрей Созыкин Онлайн курс Программирование глубоких нейронных сетей на Python источник сайт, ютуб

Биофармкластер «Северный» Машинное обучение 11 лекций на тему ML источник ютуб, к сожалению отдельного плейлиста нет, поэтому придется лекции не найденные через поиск искать в общем плейлисте самому.

Курс на 9 недель от ВШЭ и Яндекса Practical Reinforcement Learning (сами видео лекций и практических семинаров на русском языке найдете в разделе Materials каждой недели) источник github

Информационный поиск (осень 2020) источник

Ивахненко А.А. Введение в теорию нейросетей и глубокое обучение источник

Python для анализа данных источник Coursera

Семинары по машинному обучению JetBrains Research источник

Онлайн курсы, видеокурсы по математике и статистике

  • Высшая школа экономики, курс Линейная алгебраисточник Coursera
  • Лекториум Линейная алгебра и аналитическая геометрияисточник ютуб
  • Лекторий МФТИ Линейная алгебраисточник
  • МФТИ, курс Теория вероятностей для начинающихисточник Coursera
  • МФТИ, курс Математика для всехисточник Coursera
  • Курс от Stepik Основы статистикичасть1,часть2, часть3
  • Курс от Stepik Математическая статистикаисточник
  • Курс от Stepik Введение в дискретную математикуисточник
  • Курс от Stepik Ликбез по дискретной математикеисточник
  • Курс от Stepik Введение в математический анализисточник
  • Курс от Stepik Математический анализчасть1, часть2
  • Курс от Stepik Анализ данных в Rчасть1, часть2
  • Computer Science Center Анализ данных на R в примерах и задачах (весна 2020) источник ютуб
  • Computer Science Center Анализ данных на R в примерах и задачах, часть 2 (весна 2020) источник ютуб
  • Канал на ютубе Основы анализа данныхисточник
  • KhanAcademyRussian Теор. вероятн-ей и комбинаторикаисточник ютуб
  • Алгебра (133видео) источник KhanAcademyRussian
  • Р.В. Шамин. Математический анализ — лекцииисточник
  • кружок от ФПМИ МФТИ Школа глубокого обученияютуб, github, git2

На любителя:

Статистика, теория вероятностей:

Гнеденко Б.В., Хинчин А.Я. Элементарное введение в теорию вероятностей источник

Владимир Савельев Статистика и котики источник, немного почитать

Сара Бослаф Статистика для всех источник

Чарльз Уилан Голая статистика. Самая интересная книга о самой скучной науке источник

Эндрю Брюс, Питер Брюс Практическая статистика для специалистов Data Science источник , оглавление и фрагмент книги

Дж. Хей Введение в методы байесовского статистического вывода источник

Перечень будет периодически дополняться.

Топ лучших бесплатных книг по машинному обучению:

The Elements of Statistical Learning: Data Mining, Inference, and Prediction. В этой книге авторы попытались объединить много важных новых идей, связанных со статистическим обучением. Хотя в книге не хватает математических деталей, авторы неплохо объясняют именно основы концептов. Книга пригодится не только специалистам по статистике, но и людям, работающим в смежных областях.

Introduction To Machine Learning. Цель этой книги — введение в индуктивное логическое программирование, раздел науки на стыке машинного обучения и логического программирования. Книга будет полезна тем, кто изучает принципы работы с базами данных, дата-инжиниринг, ИИ, машинное обучение и логическое программирование.

Reinforcement Learning: An Introduction. Обучение с подкреплением — это один из способов машинного обучения, в ходе которого испытуемая система взаимодействует с некоторой средой и стремится получить максимальную награду за свои действия. В этой книге разбираются ключевые аспекты этого вида обучения, его история и сферы применения. Порогом вхождения в эту книгу является лишь базовый уровень знания принципов вероятностной модели.

Information Theory, Inference, and Learning Algorithms. В этой книге рассказывается о теории информации и о статистическом выводе. Эти темы лежат в основе таких областей современной науки, как коммуникация, теория обработки сигналов, data mining, машинное обучение, биоинформатика, криптография и многих других. Авторы удачно сочетают теоретические объяснения с практическими примерами и заданиями.

Gaussian Processes for Machine Learning. Эта книга посвящена гауссовским процессам и вопросу обучения с учителем. В книге приведено много алгоритмов, также разбираются сферы применения ГП в машинном обучении и статистике, например, в методе опорных векторов, нейронных сетях, сплайнах и прочем.

Bayesian Reasoning and Machine Learning. Эта книга пригодится студентам старших курсов с небольшим багажом знаний по линейной алгебре и матанализу. Материал в книге идёт от простого к сложному, используются графические модели.

A Course in Machine Learning. В этой книге приведен набор вводных материалов по большинству основных аспектов машинного обучения (обучение с учителем и без учителя, вероятностное моделирование, теория обучения и т.д.).

Machine Learning, Neural and Statistical Classification. Цель этой книги — рассказать о современных подходах к классификации. Они сравниваются по производительности и областям применения в реальных случаях. Как видно из названия, таких подходов три: статистический метод, метод машинного обучения и метод нейронных сетей.

Introduction To Machine Learning. В этой книге рассматриваются многие важные вопросы машинного обучения с 2006 года. Это и не учебник, и не задачник: цель книги — подготовить читателя к дальнейшему освоению этой темы.

Real-world Machine Learning. Henri Brink, Joseph W. Richards, Mark Fetherolf в данной книге авторы пытаются показать практическое применение машинного обучения в обыденных задачах, привести примеры их решения и собрать все важные знания для начинающего.

10 книг по машинному обучению — 3 книги

Год издания: 2020
Издательство: The MIT Press

Deep learning is a form of machine learning that enables computers to learn from experience and understand the world in terms of a hierarchy of concepts. Because the computer gathers knowledge from experience, there is no need for a human computer operator to formally specify all the knowledge that the computer needs. The hierarchy of concepts allows the computer to learn complicated concepts by building them out of simpler ones; a graph of these hierarchies would be many layers deep. This book introduces a broad range of topics in deep learning.

The text offers mathematical and conceptual background, covering relevant concepts in linear algebra, probability theory and information theory, numerical computation, and machine learning. It describes deep learning techniques used by practitioners in industry, including deep feedforward networks, regularization, optimization algorithms, convolutional networks, sequence modeling, and practical methodology; and it surveys such applications as natural language processing, speech recognition, computer vision, online recommendation systems, bioinformatics, and videogames. Finally, the book offers research perspectives, covering such theoretical topics as linear factor models, autoencoders, representation learning, structured probabilistic models, Monte Carlo methods, the partition function, approximate inference, and deep generative models.

Deep Learning can be used by undergraduate or graduate students planning careers in either industry or research, and by software engineers who want to begin using deep learning in their products or platforms. A website offers supplementary material for both readers and instructors.

Deep learning is a form of machine learning that enables computers to learn from experience and understand the world in terms of a hierarchy of concepts. Because the computer…

Глубинное обучение: основные понятия

Глубинное обучение не только может дать результат там, где другие методы не сработают, но и позволяет построить более точную модель или же сократить время на ее создание

Глубокие нейронные сети могут решать самые сложные задачи, но требуют значительных вычислительных мощностей и больших объемов данных.

Глубинное обучение (deep learning) – форма машинного обучения, которая предусматривает извлечение, или моделирование, признаков данных с использованием сложных многослойных фильтров. Поскольку глубинное обучение является весьма общим способом моделирования, оно способно решать сложные задачи, такие как компьютерное зрение и обработка естественного языка. Этот подход существенно отличен и от традиционного программирования, и от других методов машинного обучения.

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

Определяющая характеристика глубинного обучения — наличие более одного слоя между входом и выходом. Обычно, говоря о глубинном обучении, подразумевают использование глубоких нейронных сетей. Есть, однако, несколько алгоритмов, которые реализуют глубинное обучение, используя иные типы слоев.

Глубинное обучение против машинного обучения

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

В общем случае, алгоритмы классического обучения работают намного быстрее алгоритмов глубинного обучения: одного или нескольких процессоров будет достаточно для обучения классической модели. Для моделей глубинного обучения обычно требуются аппаратные ускорители: графические процессоры, тензорные процессоры, программируемые логические матрицы (FPGA). Без них создание модели может занимать месяцы.

Для многих задач находится классический алгоритм машинного обучения, который дает «достаточно хорошую» модель. Но для ряда задач классические алгоритмы машинного обучения работают не очень хорошо.

Приложения для глубинного обучения

Есть много задач, где для создания лучших моделей требуется именно глубинное обучение. Обработка естественного языка – одна из них.

Осенью 2020 года качество перевода Google Translate для англо-французских, англо-китайских и англо-японских языковых пар внезапно резко улучшилось: бессвязные фразы подстрочника заменили предложения, близких по качеству к профессиональному переводчику. Что произошло? Команды Google Brain и Google Translate обновили систему: от использования прежних алгоритмов статистического машинного перевода на основе фраз (один из видов классического машинного обучения) перешли к использованию глубокой нейронной сети, обученной с использованием библиотеки Google TensorFlow.

Это был непростой проект. Большой группе исследователей, включая значительное число обладателей ученых степеней, потребовались месяцы работы над моделями и тысячи недель вычислений на GPU для их обучения. Это даже подтолкнуло Google к созданию процессорной архитектуры нового типа, «тензорного» процессора Tensor Processing Unit (TPU), на которой бы работали нейронные сети масштаба, соразмерного Google Translate.

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

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

Прорывом в области нейронных сетей для зрения стала созданная Яном Лекуном в 1998 году LeNet-5, семиуровневая сверточная нейронная сеть (CNN) для распознавания рукописных цифр, на изображениях размером 32×32 (в пикселах). Для анализа изображений с более высоким разрешением количество нейронов и слоев в LeNet-5 нужно увеличить.

Сегодня лучшие модели глубокой классификации изображений способны распознавать различные цветные изображения в качестве HD. В дополнение к «чистым» глубоким нейронным сетям (DNNs) иногда используют гибридные модели зрения, которые сочетают глубинное обучение с классическими алгоритмами машинного обучения, которые выполняют конкретные подзадачи.

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

Классификация изображений может быть расширена до классификации видео путем извлечения отдельных кадров из видео и классификации каждого кадра. Обнаруженные объекты в видеоклипах можно отслеживать от кадра к кадру.


В книге «Deep Learning» Яна Гудфеллоу, Иошуа Бенджио и Аарона Курвилля, написанной в 2020 году, приведены примеры того, как глубинное обучение успешно используется для прогнозирования взаимодействия молекул, чтобы помочь фармацевтическим компаниям разрабатывать новые лекарства, искать субатомные частицы и автоматически анализировать изображения микроскопа, используемые для построения трехмерной карты человеческого мозга.

Нейронные сети

Идеи «искусственных» нейронных сетей восходят к 1940-м годам. Базовая концепция заключается в том, что сеть искусственных нейронов, построенных из взаимосвязанных пороговых переключателей, может научиться распознавать паттерны так же, как это делает мозг и нервная система животных, в частности, сетчатка глаза.

Обучение в глубоких нейронных сетях происходит путем закрепления связи между двумя нейронами, когда оба они одновременно активны во время обучения. В современном ПО нейросетей это чаще всего реализуется путем увеличения значений веса связей между нейронами, используя правило, называемое обратным распространением ошибки (backprop, BP).

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

В 1940-х и 1950-х годах искусственные нейроны использовали функцию ступенчатой активации и назывались перцептронами. Про современные нейронные сети можно сказать, что они используют перцептроны, но на самом деле они используют гладкие функции активации, такие как логистическая функция, или сигмоида, гиперболический тангенс и линейный выпрямитель (ReLU).

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

Топологии нейронных сетей

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

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

Обучение

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

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

Оптимизаторы

Оптимизаторы для нейронных сетей используют некоторую форму алгоритма градиентного спуска, чтобы управлять обратным распространением; при этом часто задействуется механизм, который помогает избежать застревания в локальных минимумах, таких как оптимизация случайно выбранных минипартий (стохастический градиентный спуск), и применения поправок импульса к градиенту. Некоторые алгоритмы оптимизации также адаптируют скорость обучения параметров модели, глядя историю градиентов (AdaGrad, RMSProp и Adam).

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

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

Глубокая нейронная сеть для реальной задачи может иметь более десяти скрытых слоев. Его топология может быть простой или довольно сложной.

Чем больше слоев в сети, тем больше характеристик она может распознать. Однако, чем больше слоев в сети, тем больше времени потребуется для расчета, и тем сложнее будет обучение.

Алгоритмы глубинного обучения

Как говорилось выше, «наиболее глубинное» обучение осуществляется с помощью глубоких нейронных сетей. Сверточные нейронные сети (CNN) часто используются для компьютерного зрения. Рекуррентные нейронные сети (RNN) часто используются в задачах естественного языка и для обработки других последовательностей, как и сети с долгой краткосрочной памятью (Long short-term memory; LSTM) и нейронные сети с механизмом внимания. Случайные леса (они же — леса случайных решений), нейронными сетями не являющиеся, полезны для целого ряда задач классификации и регрессии.

Сверточные нейронные сети

Сверточные нейронные сети обычно используют сверточные слои, слои объединения, ReLU слои, полностью связанные и потерянные слои для имитации зрительной коры. Сверточный слой в основном считает интегралы многих небольших перекрывающихся областей. Слой объединения выполняет какую-то форму нелинейной понижающей дискретизации. Слои ReLU применяют функцию активации f(x) = max (0,x). В полностью связанном слое нейроны имеют связи со всеми активациями в предыдущем слое. Уровень потерь вычисляет, как сетевое обучение исправляет отклонение между предсказанными и истинными метками, используя функцию Softmax или функцию потерь перекрестной энтропии для классификации или евклидову функцию потерь для регрессии.

RNN, LSTM и нейронные сети с механизмом внимания

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

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

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

Модули внимания – это обобщенные элементы, которые применяют веса к вектору входов. Иерархический нейронный кодировщик внимания использует несколько уровней модулей внимания для работы с десятками тысяч прошлых входов.

Случайные леса

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

Фреймворки для глубинного обучения

Писать программы глубинного обучения можно и с нуля, но гораздо эффективнее использовать фреймворки глубинного обучения, особенно учитывая, что они оптимизированы для использования с графическими процессорами и другими ускорителями. Вероятно лучшим фреймворком является Google TensorFlow. Предпочтительный высокоуровневый API для TensorFlow — Keras; его также можно использовать с другими серверными фреймворками.

PyTorch, созданный в Facebook при участии ряда других организаций, являющийся хорошей альтернативой TensorFlow, выделяется поддержкой динамических нейронных сетей, в которых топология сети может меняться от эпохи к эпохе. Fastai – это высокоуровневый сторонний API, который использует PyTorch в качестве серверного приложения.

Amazon MXNet является еще одной хорошей альтернативой TensorFlow, с претензией на лучшую масштабируемость. Gluon является предпочтительным высокоуровневым императивным API для MXNet.

Chainer разработки IBM и Intel послужил в некотором роде источником вдохновения для PyTorch, учитывая, что он определяет нейронную сеть путем запуска и поддерживает динамические нейронные сети.

Все упомянутые фреймворки в основном – для Python, а Deeplearning4j (первоначально созданный Sky Mind, а теперь являющийся проектом Apache) в первую очередь – для Java и Scala. DL4J совместим с Apache Spark и Hadoop.

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

Nvidia TensorRT – еще одна среда исполнения для моделей искусственного интеллекта, в частности, для использования графических процессоров Nvidia. ONNX может использовать TensorRT в качестве плагина.

Трансферное обучение

Трансферное обучение (transfer learning) – это процесс «приспособления» модели, обученной на одном наборе данных, к другом набору данных. Трансферное обучение намного быстрее обучения «с нуля» и требует гораздо меньше данных.

Google Cloud AutoML реализует глубинное трансферное обучения для задач компьютерного зрения, компьютерного перевода и обработки естественного языка. Платформа машинного обучения Microsoft Azure предлагает аналогичные сервисы.

Распределенная обработка для систем глубинного обучения

В TensorFlow имеет собственный встроенный способ координации фабрики серверов, задействованных в распределенном обучении, более общим подходом является использование Open MPI. Horovod, созданная в Uber распределенная обучающая среда для TensorFlow, Keras и PyTorch, использует Open MPI, а также Nvidia NCCL. Эффективность масштабирования, обеспечиваемого Horovod, достигает в зависимости от модели, 90%.

Информационные ресурсы по глубинному обучению

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

Поделитесь материалом с коллегами и друзьями

Deep learning & Machine learning: в чем разница?

В чем разница между Deep learning и Machine learning? Насколько они похожи или отличаются друг от друга? Насколько они выгодны для бизнеса? Давайте разберемся!

Machine learning и Deep learning – это 2 подмножества искусственного интеллекта (ИИ), которые активно привлекают к себе внимание уже на протяжении двух лет. Если вы хотите получить простое объяснение их различий, то вы в правильном месте!

Прежде всего, давайте посмотрим на некоторые интересные факты и статистику Deep learning и Machine learning:

  • Оклад AI-специалиста приравнивается к стоимости Roll-Royce Ghost Series II 2020 года (согласно New York Times);
  • Есть ли вероятность потерять работу из-за прогресса AI? Согласно недавнему отчету PwC – возможно. Они предполагают, что примерно к 2030 г. 38% всех рабочих мест в США могут быть заменены искусственным интеллектом и технологиями автоматизации;
  • Первая AI-программа “The Logic Theorist” была создана в 1955 году компанией Newell & Simon (World Information Organization);
  • Исследователи прогнозируют, что к 2020 году 85% взаимодействия с клиентами будет осуществляться без участия человека (Gartner);
  • Рынок искусственного интеллекта или машинного обучения вырастет до 5,05 млрд долларов к 2020 году (Motley Fool);

Любопытно? Теперь попытаемся разобраться, в чем на самом деле разница между Deep learning и Machine learning, и как можно использовать их для новых бизнес-возможностей.

Deep learning & Machine learning

Должно быть, вы имеете элементарное представление о Deep learning и Machine learning. Для чайников представляем несложные определения:

Machine learning для чайников:

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

Deep learning для чайников:

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

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

Deep learning & Machine learning: в каких случаях используется Machine learning

Чтобы помочь алгоритму ML классифицировать изображения в коллекции в соответствии с двумя категориями (собаки и кошки), ему необходимо сначала представить эти изображения. Но как алгоритм узнает, какой из них какой?

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

Deep learning & Machine learning: в каких случаях используется Deep learning

Нейронные сети Deep learning будут использовать другой подход для решения этой проблемы. Основным преимуществом Deep learning является то, что тут не обязательно нужны структурированные / помеченные данные изображений для классификации двух животных. В данном случае, входные данные (данные изображений) отправляются через различные уровни нейронных сетей, причем каждая сеть иерархически определяет специфические особенности изображений.

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

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

Примечание . Это всего лишь пример, который поможет вам понять различия в том, как работают основы машинного и глубокого обучения. И Deep learning, и Machine learning на самом деле не применимы одновременно к большинству случаев, включая этот. Причину этого вы узнаете позже.

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

С другой стороны, сеть глубокого обучения смогла классифицировать изображения обоих животных по данным, обработанным в слоях сети. Для этого не потребовались какие-либо маркированные/структурированные данные, поскольку она опиралась на различные выходные данные, обрабатываемые каждым слоем, которые объединялись для формирования единого способа классификации изображений.

Что мы узнали:

  1. Основное различие между глубоким обучением и машинным обучением обусловлено тем, как данные представляются в систему. Алгоритмы машинного обучения почти всегда требуют структурированных данных, в то время как сети глубокого обучения полагаются на слои ANN (искусственные нейронные сети).
  2. Алгоритмы машинного обучения созданы для того, чтобы «учиться» действовать, понимая помеченные данные, а затем использовать их для получения новых результатов с большим количеством наборов данных. Однако, когда результат получается неверным, возникает необходимость их «доучивать».
  3. Сети глубокого обучения не требуют вмешательства человека, так как многоуровневые слои в нейронных сетях помещают данные в иерархии различных концепций, которые в конечном итоге учатся на собственных ошибках. Тем не менее, даже они могут быть ошибочными, если качество данных недостаточно хорошее.
  4. Данные все решают. Именно качество данных в конечном итоге определяет качество результата.

То, чего не было в примере, но стоит отметить:

  1. Поскольку алгоритмы машинного обучения требуют маркированных данных, они не подходят для решения сложных запросов, которые включают в себя огромное количество данных.
  2. Хоть в данном случае мы увидели применение Deep learning для решения незначительного запроса, — реальное применение нейронных сетей глубокого обучения происходит в гораздо большем масштабе. Фактически, учитывая количество слоев, иерархий и концепций, которые обрабатывают эти сети, Deep learning подходит только для выполнения сложных вычислений, а не простых.
  3. Оба эти подмножества ИИ так или иначе связаны с данными, что позволяет представлять собой определенную форму «интеллекта». Однако следует знать, что глубокое обучение требует гораздо больше данных, чем традиционный алгоритм машинного обучения. Причиной этого является то, что сети Deep learning могут идентифицировать различные элементы в слоях нейронных сетей только при взаимодействии более миллиона точек данных. Алгоритмы машинного обучения, с другой стороны, способны обучаться по заранее запрограммированным заданным критериям.

Надеемся, приведенный пример и его объяснение позволили вам понять различия между Machine learning и Deep learning. Т.к. это объяснение для чайников, то здесь не употреблялись профессиональные термины.

Теперь пришло время забить последний гвоздь. Когда следует использовать глубокое обучение или машинное обучение в своем бизнесе?

Когда использовать Deep learning в бизнесе?

  • Если у вас огромное количество данных;
  • Если вам приходится решать задачи, слишком сложные для машинного обучения;
  • Если у вас есть достаточно вычислительных ресурсов и возможность на управление оборудованием и программным обеспечением для обучения нейронных сетей Deep learning.

Когда использовать Machine learning в бизнесе?

  • Если у вас есть данные, которые можно структурировать и использовать для обучения алгоритмов Machine learning;
  • Если вы хотите использовать преимущества ИИ, чтобы обогнать конкурентов;
  • Лучшие решения Machine learning могут помочь автоматизировать различные бизнес-операции, включая проверку личности, рекламу, маркетинг и сбор информации, а также использовать большие возможности в будущем.

Подведем итоги:

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

Развитие искусственного интеллекта также порождает рост услуг по разработке программного обеспечения, приложений IoT и блокчейна. В настоящее время разработчики программного обеспечения изучают новые способы программирования, которые более склонны к глубокому обучению и машинному обучению.

Глубокое обучение: быстрый старт для разработчиков

Глубокое обучение считается чем-то вроде rocket science: звучит круто, выглядит сложно и содержит всякую математику. На самом деле все не так сложно. Вот вам перевод руководства по глубокому обучению «Deep Learning for Developers: Tools You Can Use to Code Neural Networks on Day 1» от Эмиля Волнера.

Текущая волна интереса к глубокому обучению началась лет пять назад. Экспоненциальный рост мощности компьютеров и истории успеха стали тому причиной. Глубокое обучение — технология, управляющая автомобилями, побеждающая людей в играх Atari и диагностирующая рак.

Приступая к изучению глубокого обучения, я потратил пару недель на исследования. Я выбирал инструменты, сравнивал облачные сервисы и просматривал онлайн-курсы. Оглядываясь назад, я понимаю, что мог бы начать создавать нейронные сети в первый же день. Вот об этом я и расскажу в этой статье.

Вам не нужна особая подготовка. Достаточно базового понимания Python, командной строки и Jupyter notebook.

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

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

Основная логика

Представьте машину, собранную из случайного набора шестеренок. Шестеренки собраны в слои и взаимодействуют друг с другом. Изначально машина не работает. Шестеренки настроены случайным образом, и их нужно перенастроить так, чтобы машина заработала.

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

Теперь инженер настраивает каждую шестеренку, основываясь на том, какую ошибку она дает, и пытается запустить машину снова. Он опять вычисляет ошибку и настраивает каждую шестеренку. Его задача — продолжать этот процесс, пока машина не заработает так, как требуется.

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

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

Мелкая искусственная нейронная сеть

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

Поиграйтесь с симулятором нейронной сети пару часов, чтобы примерно почувствовать, как это работает. Мы начнем с создания простой нейронной сети, чтобы познакомиться с синтаксисом TFlearn. Классическая проблема для начала — оператор OR. Хотя нейронные сети лучше подходят для других типов данных, для начала сойдет и такой вариант, чтобы понять, как это вообще работает.

Все программы глубокого обучения следуют одной логике:

  • Сперва подключаем библиотеки, импортируем и очищаем данные. Все входные данные интерпретируются как числа, неважно, изображения это, звуки или данные с сенсоров.
  • Эти длинные списки чисел — входные данные для нашей сети.
  • Теперь описываем нейронную сеть.
  • Выбираем тип и количество слоев сети.
  • Идет процесс обучения.
  • Сеть ищет корреляцию между входными данными и выходными.
  • Финальный шаг выводит предсказание, полученное обученной сетью.

Вот код нашей сети.

Строка 1
Комментарии начинаются с #

Строка 2
Подключаем библиотеку TFlearn, она позволит нам использовать функции глубокого обучения из Google Tensorflow.

Строки 5–6
Данные из таблицы сохраняются в списки. Точка в конце каждого числа преобразует их в числа с плавающей точкой. Это повысит точность вычисления.

Строка 9
Инициализируем сеть и определяем форму входных данных. Каждый оператор OR идет парой, таким образом имея форму, равную 2. None — дефолтное значение, представляющее размер серии.

Строка 10
Наш выходной слой. Параметр activation определяет функцию, отображающую выходные данные на слой. В нашем случае мы используем сигмоиду, которая отображает значение между 0 и 1.

Вот материал, который более подробно раскроет суть строк 9 и 10: tflearn.org/layers/core

Строка 11
Применяем регрессию. Параметр optimizer выбирает алгоритм минимизации функции потерь. Параметр learning rate определяет, как быстро нужно модифицировать сеть, и параметр loss определяет, как вычислять ошибку.

Строка 14
Выбираем, какую сеть использовать. Здесь же выбираем, где хранить логи обучения.

Строка 15
Тренируем сеть и модель. Выбираем входные данные (OR) и эталонную метку (Y_truth). Параметр n_epoch определяет, сколько раз мы прогоним данные через сеть. snapshot_epoch=True определяет, нужно ли валидировать модель после каждого прогона.

Строки 18–22
Вывод предсказания, сделанного обученной моделью. В нашем случае это вывод вероятности того, что вернется True/1.

Подробнее насчет строк 1422: tflearn.org/models/dnn

Вывод
Первый результат — комбинация [0.] & [0.], с вероятностью в 4% это true, и так далее. Выше можно увидеть, сколько обучений в итоге прошла модель. Поскольку данные помещаются в одну серию, это все равно что одна эпоха. Если данные слишком велики, чтобы поместиться в памяти, вам придется разбить их на части. loss — сумма ошибок по всем эпохам. SGD — стохастический градиентный спуск (Stochastic Gradient Descent), метод минимизации функции потерь. Iter показывает текущий кусок данных и общий размер данных.

Вы обнаружите подобную логику и синтаксис практически в любой сети, основанной на TFlearn. Лучший способ познакомиться с кодом поближе — изменить его и получить кучу ошибок.

Кривая потерь показывает количество ошибок на каждом шаге обучения. С Tensorboard вы можете визуально наблюдать за каждым экспериментом и развивать чувство того, какие параметры меняют обучение. Вот несколько вариаций изначального эксперимента, с которыми вы можете поиграться самостоятельно. Советую потратить несколько часов на то, чтобы освоиться с окружением и параметрами TFlearn.

  • Увеличьте количество обучений и эпох
  • Попробуйте поменять или добавить все возможные параметры к каждой функции, руководствуясь документацией: например, вместо tflearn.fullyconnected(g, 1, activation=’sigmo >Python и Tensorflow — самая распространенная связка для глубокого обучения. TFlearn — фреймворк высокого уровня, построенный поверх Tensorflow. Другой распространенный фреймворк — Keras. У него больше возможностей, но я нахожу синтаксис TFlearn более простым и понятным. Оба фреймворка работают поверх Tensorflow.

Вы можете запускать простые нейронные сети, используя CPU вашего ПК. Но многие эксперименты потребуют часов или даже недель на выполнение. Поэтому большинство используют современные GPU, часто в виде облачных сервисов.

Простейшее решение для облачной обработки на GPU — FloydHub. Если вы хотя бы немного умеете обращаться с командной строкой, у вас уйдет не больше пяти минут на запуск.

Установите floyd-cli, пользуясь документацией. Кроме того, у FloydHub есть чат в Intercom, на случай, если вы застряли на каком-то этапе. Давайте запустим вашу первую сеть в FloydHub, используя TFlearn, Jupyter Notebook, и Tensorboard. После установки и входа в FloydHub, скачайте необходимые файлы:

В браузере откроется дашборд FloydHub, и вам предложат создать новый проект под названием 101. Когда вы закончите с этим, вернитесь в терминал и повторите последнюю команду.

Теперь вы готовы к запуску сети на FloydHub.

Команда запуска проекта принимает различные параметры. Сейчас наши действия таковы:

  • Примонтируем датасет к FloydHub, используя параметр —data emilwallner/datasets/cifar-10/1:data. Мы можем просмотреть датасет (и вообще большинство публичных датасетов) прямо на FloydHub.
  • Используем облачный GPU с параметром —gpu
  • Подключаем Tensorboard с параметром —tensorboard
  • Запускаем задачу в режиме Jupyter Notebook с параметром —mode jupyter

Как только команда инициализирует Jupyter в браузере, откройте файл с именем start-here.ipnyb. Это простая нейронная сеть для знакомства с синтаксисом TFlearn. Мы подробно разобрались с ней выше.

В меню выберите Kernel > Restart & Run All. Если вы увидите сообщение, значит все работает. Зайдите в проект на FloydHub, и там вы найдете ссылку на Tensorboard.

Глубокая нейронная сеть

Глубокая сеть — сеть с несколькими скрытыми слоями. Работа сверточных сетей подробно разбирается в руководствах:

  • How Convolutional Neural Networks work, Youtube
  • CS231n Convolutional Neural Networks for Visual Recognition
  • CS231n Winter 2020: Lecture 7: Convolutional Neural Networks, Youtube

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

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

Если сеть обучилась недостаточно, она остается недообученной. В противном случае она переобучена, когда сеть слишком полагается на данные обучения.

Регуляризация — процесс уменьшения переобучения путем забывания определенных сигналов из тренировочных данных. Чтобы лучше понять этот принцип, мы используем датасет CIFAR-10. Это 60 тысяч изображений в десяти категориях, таких как автомобили, грузовики и птицы. Цель — определить категории изображений.

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

Входной слой — изображение, представленное в числовой форме. Выходной слой классифицирует изображение по категориям. Скрытые слои — смесь сверточных, соединительных слоев и слоев подвыборки.

Выбор количества слоев

Давайте посмотрим, как отличается сеть с одним и тремя наборами слоев. Каждый набор состоит из слоев свертки, подвыборки и соединительного слоя. Первые два эксперимента — experiment-0-few-layers.ipynb и experiment-0-three-layer-sets.ipynb.

Глядя на графики в Tensorboard, мы заметим, что сеть с одним набором примерно на 15% аккуратнее сети с несколькими наборами. Дело в том, что сеть с несколькими наборами недообучена.

Посмотрите на графики Accuracy и Accuracy/Validation. Наилучший подход в глубоком обучении — разделить датасет пополам, одну половину используя в обучении, а вторую для валидации. Так вы определите, как хорошо нейронная сеть справляется с предсказанием на новых данных, то есть с ее способностью к обобщению.

Как мы видим, точность тренировочных данных выше точности данных для валидации. Фоновый шум и детали мешают сети хорошо работать на новых данных.

Для борьбы с переобучением вы можете ограничивать сложные функции и вводить шум в нейронную сеть. Общие методы регуляризации — ограничение функций и исключающие слои.

Исключающие слои

Регуляризация исключением похожа на демократию: вместо использования нескольких мощных нейронов мы распределяем мощность по всей сети.

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

В каждом слое сети нейроны работают независимо друг от друга. Некоторые нейроны вносят большее влияние, чем остальные. Исключающий слой случайным образом отбрасывает нейроны. Таким образом, каждый нейрон внесет свой вклад.

Второй популярный метод предотвращения переобучения — применение L1/L2 регуляторной функции на каждый слой.

L1 и L2 регуляризация

Скажем, вы хотите описать признаки лошади. Если описание будет слишком конкретным, вы исключите из выборки много лошадей. Однако если описание будет слишком размытым, в выборку попадут и другие животные. L1/L2 регуляризация помогает сети определить это различие.

Если мы сделаем сравнение сетей, аналогичное предыдущему эксперименту, мы получим похожий результат.

Нейронная сеть с регуляризацией показывает себя лучше сети без регуляризации.

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

Размер серии

Еще один важный параметр — размер серии, количество данных на каждый шаг обучения. Ниже — сравнение результатов при большой и малой серии.

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

Большая серия сделает меньше шагов, но расход времени и памяти на каждый шаг больше.

Скорость обучения

Финальный эксперимент — сравнение сетей с малой, средней и высокой скоростью обучения.

Скорость обучения часто считается одним из важнейших параметров, учитывая ее влияние. Она определяет то, как корректируется изменение прогноза на каждом шаге. Если скорость слишком велика или низка, сеть может вообще не выдавать правильного результата, как мы видим на графике выше.

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

Когда вы закончите с экспериментами, не забудьте остановить инстанс на FloydHub, выбрав в меню Cancel.

Следующие шаги

В официальном репозитории TFlearn вы найдете примеры хороших сверточных сетей. Разберитесь с тем, как они устроены, и попробуйте улучшить свою сеть. Лучший результат на сегодняшний день — 96.43% (Graham, 2015).

Прим. переводчика: в репозитории http://rodrigob.github.io/are_we_there_yet собрана таблица лидеров по разным датасетам, в том числе по CIFAR-10.

Кроме того, я рекомендую получше познакомиться с Python и командной строкой. Это поможет меньше отвлекаться на код и больше сосредоточиться на дизайне самой сети. Начните с курса по Python на Codeacademy, и курса по командной строке. Это займет у вас дня три, если вы возьметесь за это всерьез.

Об авторе (Эмиль Воллнер)

Это первая статья из серии статей о глубоком обучении. Я потратил десять лет на изучение человеческого обучения. Работаю в бизнес-школе Оксфорда, инвестировал в образовательные стартапы и построил бизнес в сфере технологического обучения. В прошлом году я поступил в Ecole 42, чтобы найти применение своим знаниям в сфере машинного обучения.

Вы можете следить за моим прогрессом в Твиттере. Если у вас есть вопросы или пожелания, оставьте комментарий в Медиум.

Первоначально публиковалось в блоге FloydHub.

Глубокое обучение считается чем-то вроде rocket science: звучит круто, выглядит сложно и содержит всякую математику. На самом деле все не так сложно. Вот вам перевод руководства по глубокому обучению «Deep Learning for Developers: Tools You Can Use to Code Neural Networks on Day 1» от Эмиля Волнера.

Текущая волна интереса к глубокому обучению началась лет пять назад. Экспоненциальный рост мощности компьютеров и истории успеха стали тому причиной. Глубокое обучение — технология, управляющая автомобилями, побеждающая людей в играх Atari и диагностирующая рак.

Приступая к изучению глубокого обучения, я потратил пару недель на исследования. Я выбирал инструменты, сравнивал облачные сервисы и просматривал онлайн-курсы. Оглядываясь назад, я понимаю, что мог бы начать создавать нейронные сети в первый же день. Вот об этом я и расскажу в этой статье.

Вам не нужна особая подготовка. Достаточно базового понимания Python, командной строки и Jupyter notebook.

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

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

Основная логика

Представьте машину, собранную из случайного набора шестеренок. Шестеренки собраны в слои и взаимодействуют друг с другом. Изначально машина не работает. Шестеренки настроены случайным образом, и их нужно перенастроить так, чтобы машина заработала.

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

Теперь инженер настраивает каждую шестеренку, основываясь на том, какую ошибку она дает, и пытается запустить машину снова. Он опять вычисляет ошибку и настраивает каждую шестеренку. Его задача — продолжать этот процесс, пока машина не заработает так, как требуется.

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

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

Мелкая искусственная нейронная сеть

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

Поиграйтесь с симулятором нейронной сети пару часов, чтобы примерно почувствовать, как это работает. Мы начнем с создания простой нейронной сети, чтобы познакомиться с синтаксисом TFlearn. Классическая проблема для начала — оператор OR. Хотя нейронные сети лучше подходят для других типов данных, для начала сойдет и такой вариант, чтобы понять, как это вообще работает.

Все программы глубокого обучения следуют одной логике:

  • Сперва подключаем библиотеки, импортируем и очищаем данные. Все входные данные интерпретируются как числа, неважно, изображения это, звуки или данные с сенсоров.
  • Эти длинные списки чисел — входные данные для нашей сети.
  • Теперь описываем нейронную сеть.
  • Выбираем тип и количество слоев сети.
  • Идет процесс обучения.
  • Сеть ищет корреляцию между входными данными и выходными.
  • Финальный шаг выводит предсказание, полученное обученной сетью.

Вот код нашей сети.

Строка 1
Комментарии начинаются с #

Строка 2
Подключаем библиотеку TFlearn, она позволит нам использовать функции глубокого обучения из Google Tensorflow.

Строки 5–6
Данные из таблицы сохраняются в списки. Точка в конце каждого числа преобразует их в числа с плавающей точкой. Это повысит точность вычисления.

Строка 9
Инициализируем сеть и определяем форму входных данных. Каждый оператор OR идет парой, таким образом имея форму, равную 2. None — дефолтное значение, представляющее размер серии.

Строка 10
Наш выходной слой. Параметр activation определяет функцию, отображающую выходные данные на слой. В нашем случае мы используем сигмоиду, которая отображает значение между 0 и 1.

Вот материал, который более подробно раскроет суть строк 9 и 10: tflearn.org/layers/core

Строка 11
Применяем регрессию. Параметр optimizer выбирает алгоритм минимизации функции потерь. Параметр learning rate определяет, как быстро нужно модифицировать сеть, и параметр loss определяет, как вычислять ошибку.

Строка 14
Выбираем, какую сеть использовать. Здесь же выбираем, где хранить логи обучения.

Строка 15
Тренируем сеть и модель. Выбираем входные данные (OR) и эталонную метку (Y_truth). Параметр n_epoch определяет, сколько раз мы прогоним данные через сеть. snapshot_epoch=True определяет, нужно ли валидировать модель после каждого прогона.

Строки 18–22
Вывод предсказания, сделанного обученной моделью. В нашем случае это вывод вероятности того, что вернется True/1.

Подробнее насчет строк 1422: tflearn.org/models/dnn

Вывод
Первый результат — комбинация [0.] & [0.], с вероятностью в 4% это true, и так далее. Выше можно увидеть, сколько обучений в итоге прошла модель. Поскольку данные помещаются в одну серию, это все равно что одна эпоха. Если данные слишком велики, чтобы поместиться в памяти, вам придется разбить их на части. loss — сумма ошибок по всем эпохам. SGD — стохастический градиентный спуск (Stochastic Gradient Descent), метод минимизации функции потерь. Iter показывает текущий кусок данных и общий размер данных.

Вы обнаружите подобную логику и синтаксис практически в любой сети, основанной на TFlearn. Лучший способ познакомиться с кодом поближе — изменить его и получить кучу ошибок.

Кривая потерь показывает количество ошибок на каждом шаге обучения. С Tensorboard вы можете визуально наблюдать за каждым экспериментом и развивать чувство того, какие параметры меняют обучение. Вот несколько вариаций изначального эксперимента, с которыми вы можете поиграться самостоятельно. Советую потратить несколько часов на то, чтобы освоиться с окружением и параметрами TFlearn.

  • Увеличьте количество обучений и эпох
  • Попробуйте поменять или добавить все возможные параметры к каждой функции, руководствуясь документацией: например, вместо tflearn.fullyconnected(g, 1, activation=’sigmo >Python и Tensorflow — самая распространенная связка для глубокого обучения. TFlearn — фреймворк высокого уровня, построенный поверх Tensorflow. Другой распространенный фреймворк — Keras. У него больше возможностей, но я нахожу синтаксис TFlearn более простым и понятным. Оба фреймворка работают поверх Tensorflow.

Вы можете запускать простые нейронные сети, используя CPU вашего ПК. Но многие эксперименты потребуют часов или даже недель на выполнение. Поэтому большинство используют современные GPU, часто в виде облачных сервисов.

Простейшее решение для облачной обработки на GPU — FloydHub. Если вы хотя бы немного умеете обращаться с командной строкой, у вас уйдет не больше пяти минут на запуск.

Установите floyd-cli, пользуясь документацией. Кроме того, у FloydHub есть чат в Intercom, на случай, если вы застряли на каком-то этапе. Давайте запустим вашу первую сеть в FloydHub, используя TFlearn, Jupyter Notebook, и Tensorboard. После установки и входа в FloydHub, скачайте необходимые файлы:

В браузере откроется дашборд FloydHub, и вам предложат создать новый проект под названием 101. Когда вы закончите с этим, вернитесь в терминал и повторите последнюю команду.

Теперь вы готовы к запуску сети на FloydHub.

Команда запуска проекта принимает различные параметры. Сейчас наши действия таковы:

  • Примонтируем датасет к FloydHub, используя параметр —data emilwallner/datasets/cifar-10/1:data. Мы можем просмотреть датасет (и вообще большинство публичных датасетов) прямо на FloydHub.
  • Используем облачный GPU с параметром —gpu
  • Подключаем Tensorboard с параметром —tensorboard
  • Запускаем задачу в режиме Jupyter Notebook с параметром —mode jupyter

Как только команда инициализирует Jupyter в браузере, откройте файл с именем start-here.ipnyb. Это простая нейронная сеть для знакомства с синтаксисом TFlearn. Мы подробно разобрались с ней выше.

В меню выберите Kernel > Restart & Run All. Если вы увидите сообщение, значит все работает. Зайдите в проект на FloydHub, и там вы найдете ссылку на Tensorboard.

Глубокая нейронная сеть

Глубокая сеть — сеть с несколькими скрытыми слоями. Работа сверточных сетей подробно разбирается в руководствах:

  • How Convolutional Neural Networks work, Youtube
  • CS231n Convolutional Neural Networks for Visual Recognition
  • CS231n Winter 2020: Lecture 7: Convolutional Neural Networks, Youtube

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

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

Если сеть обучилась недостаточно, она остается недообученной. В противном случае она переобучена, когда сеть слишком полагается на данные обучения.

Регуляризация — процесс уменьшения переобучения путем забывания определенных сигналов из тренировочных данных. Чтобы лучше понять этот принцип, мы используем датасет CIFAR-10. Это 60 тысяч изображений в десяти категориях, таких как автомобили, грузовики и птицы. Цель — определить категории изображений.

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

Входной слой — изображение, представленное в числовой форме. Выходной слой классифицирует изображение по категориям. Скрытые слои — смесь сверточных, соединительных слоев и слоев подвыборки.

Выбор количества слоев

Давайте посмотрим, как отличается сеть с одним и тремя наборами слоев. Каждый набор состоит из слоев свертки, подвыборки и соединительного слоя. Первые два эксперимента — experiment-0-few-layers.ipynb и experiment-0-three-layer-sets.ipynb.

Глядя на графики в Tensorboard, мы заметим, что сеть с одним набором примерно на 15% аккуратнее сети с несколькими наборами. Дело в том, что сеть с несколькими наборами недообучена.

Посмотрите на графики Accuracy и Accuracy/Validation. Наилучший подход в глубоком обучении — разделить датасет пополам, одну половину используя в обучении, а вторую для валидации. Так вы определите, как хорошо нейронная сеть справляется с предсказанием на новых данных, то есть с ее способностью к обобщению.

Как мы видим, точность тренировочных данных выше точности данных для валидации. Фоновый шум и детали мешают сети хорошо работать на новых данных.

Для борьбы с переобучением вы можете ограничивать сложные функции и вводить шум в нейронную сеть. Общие методы регуляризации — ограничение функций и исключающие слои.

Исключающие слои

Регуляризация исключением похожа на демократию: вместо использования нескольких мощных нейронов мы распределяем мощность по всей сети.

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

В каждом слое сети нейроны работают независимо друг от друга. Некоторые нейроны вносят большее влияние, чем остальные. Исключающий слой случайным образом отбрасывает нейроны. Таким образом, каждый нейрон внесет свой вклад.

Второй популярный метод предотвращения переобучения — применение L1/L2 регуляторной функции на каждый слой.

L1 и L2 регуляризация

Скажем, вы хотите описать признаки лошади. Если описание будет слишком конкретным, вы исключите из выборки много лошадей. Однако если описание будет слишком размытым, в выборку попадут и другие животные. L1/L2 регуляризация помогает сети определить это различие.

Если мы сделаем сравнение сетей, аналогичное предыдущему эксперименту, мы получим похожий результат.

Нейронная сеть с регуляризацией показывает себя лучше сети без регуляризации.

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

Размер серии

Еще один важный параметр — размер серии, количество данных на каждый шаг обучения. Ниже — сравнение результатов при большой и малой серии.

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

Большая серия сделает меньше шагов, но расход времени и памяти на каждый шаг больше.

Скорость обучения

Финальный эксперимент — сравнение сетей с малой, средней и высокой скоростью обучения.

Скорость обучения часто считается одним из важнейших параметров, учитывая ее влияние. Она определяет то, как корректируется изменение прогноза на каждом шаге. Если скорость слишком велика или низка, сеть может вообще не выдавать правильного результата, как мы видим на графике выше.

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

Когда вы закончите с экспериментами, не забудьте остановить инстанс на FloydHub, выбрав в меню Cancel.

Следующие шаги

В официальном репозитории TFlearn вы найдете примеры хороших сверточных сетей. Разберитесь с тем, как они устроены, и попробуйте улучшить свою сеть. Лучший результат на сегодняшний день — 96.43% (Graham, 2015).

Прим. переводчика: в репозитории http://rodrigob.github.io/are_we_there_yet собрана таблица лидеров по разным датасетам, в том числе по CIFAR-10.

Кроме того, я рекомендую получше познакомиться с Python и командной строкой. Это поможет меньше отвлекаться на код и больше сосредоточиться на дизайне самой сети. Начните с курса по Python на Codeacademy, и курса по командной строке. Это займет у вас дня три, если вы возьметесь за это всерьез.

Об авторе (Эмиль Воллнер)

Это первая статья из серии статей о глубоком обучении. Я потратил десять лет на изучение человеческого обучения. Работаю в бизнес-школе Оксфорда, инвестировал в образовательные стартапы и построил бизнес в сфере технологического обучения. В прошлом году я поступил в Ecole 42, чтобы найти применение своим знаниям в сфере машинного обучения.

Вы можете следить за моим прогрессом в Твиттере. Если у вас есть вопросы или пожелания, оставьте комментарий в Медиум.

Первоначально публиковалось в блоге FloydHub.

Книга Deep Learning. Глубокое погружение

Для тех, кому хочется действительно разобраться в том, что такое машинное обучение (его ещё почему-то любят называть искусственным интеллектом) я настоятельно рекомендую книгу отечественных авторов Николенко, Кадурин, Архангельская: «Глубокое обучение. Погружение в мир нейронных сетей».

Это прекрасная книга для университетского курса по технологиям ИИ. Даже если вы просто попробуете по этой теме найти хоть что-то на русском языке, то обнаружите, что вам хватит пальцев одной руки. Но книжка действительно достойная. По крайней мере меня она впечатлила 🙂

Актуальное изложение. TensorFlow и Keras

Во-первых, это актуальный срез области на конец 2020 года.

Во-вторых, изложение идёт сверху вниз: от идеи к конкретным архитектурам и реализации. Т.е. авторы действительно хотят донести информацию, а не нафигачить бессмысленного текста.

В третьих, практические примеры приведены на TensorFlow (и Keras) — фреймворке, который фактически становится стандартом для области благодаря Google. Ну и да, я уже был знаком с ним, поэтому для меня это было прям то, что надо. К сожалению, TensorFlow обновился с момента выхода книги, поэтому примеры нуждаются в корректировке кода. В интернете нетрудно найти репозиторий, где ответственные читатели уже это сделали. Искать по названию книги (удивительно, почему это не сделали сами авторы).

И, наконец, что важно было для меня, книга содержит математические выкладки и теорию, причём в объёме ровно необходимом для досконального понимания. В противовес дебильной моде «упрощать тему» в иностранной литературе, когда тебе начинают втирать по производные прибегая к аллегориям. К сожалению, эта палка о двух концах: местами математически корректное изложение «укатывает» россыпями греческого алфавита. (На фотке ниже как раз очень понятное место, если знаком с математическими основами оптимизации, градиентными методами и не падаешь в обморок от упоминания Ньютона, Якоби и Гессе. Авторы в принципе последовательно описали основы оптимизации, но не уверен, что смог бы разобраться, если б не имел образования в этой области).

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

Отмечу что мне особенно понравилось в книге.

TensorFlow и графы вычислений

Изучая TensorFlow самостоятельно, я не осознал глубокой мысли о том, что граф вычислений необходим для взятия производных. Авторы меня заставили об этом задуматься и часть «магии TensorFlow» была развеяна. Это был важный кусочек пазла.

Разные архитектуры глубоких сетей для разных задач

Обычно в книжках бывает сильный упор в задачи одного вида, а на остальных автор «отдыхает». Тут же, авторы смогли удовлетворить моё любопытство практически по всем направлениям. От классического перцептрона до современных конкурирующих нейронных сетей (generative adversarial network, GAN).

Свёрточные сети и Автокодировщики

Честно говоря, если б не знал заранее, что такое свёртки и пулинг, не уверен, что смог бы въехать по авторским описаниям. Но зато архитектуры и идеи применения свёрточных сетей для меня были очень понятны. Ну и MNIST (классический набор изображений для машинного обучения) по книге используется «и в хвост и в гриву».

Заключение

Эта книжка — моё лучшее приобретение в этом году однозначно. Она доставила мне столько удовольствия, заставила встряхнуть багаж университетских знаний. Если бы в моём студенчестве у меня была такая книга, то сейчас бы этот обзор за меня писал искусственный интеллект :))

Книга рекомендуется лицам обладающим математической подготовкой, программистам, студентам технических специальностей.

Об авторе

Александр Миловский — известный специалист в области компьютерной графики 2D и 3D. Автор многочисленных статей, лектор, инструктор. Вы можете попасть на курсы Александра в центре 3D Master.

Основные разделы

Контакты

Самый простой способ связаться с автором — через центр 3D Master.

Глубокое обучение PDF

  • Объем: 654 стр.
  • Жанр:L iteratura educativa extranjera, I nformática e ingeniería informática, M atemáticas, L ibros de texto y materiales d >м ашинное обучение, н ейронные сети, п рикладная информатика, п рикладная математика

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

Издание предназначено студентам вузов и аспирантам, а также опытным программистам, которые хотели бы применить глубокое обучение в составе своих продуктов или платформ.

  • Возрастное ограничение: 12+
  • Дата выхода на ЛитРес: 25 декабря 2020
  • Дата перевода: 2020
  • Дата написания: 2020
  • Объем: 654 стр.
  • ISBN: 978-5-97060-618-6
  • Общий размер: 14 MB
  • Общее кол-во страниц: 654
  • Размер страницы:
  • Переводчик:
  • Правообладатель: ДМК Пресс

Нового ничего в книге не увидела. Америку не откроет книга, если вы учились на технической специальности. Все ранее было описано и прочитано в других учебниках. Причем доступных и бесплатных. Единственный плюс книги – собрано то, что сейчас актуально и может быть убрано устаревшее.

Если для тех, кто ранее не сталкивался с IT, то минус огромный, что по тем же матрицам, например, не приведены примеры практические с цифрами. Если человек не в теме, то голая теория не поможет.

Не знаю, не однозначное впечатление от книги. Вроде все хорошо, но супер пользы и целевой аудитории не вижу.

Deep learning

Когда решил почитать свою дипломную работу

Дубликаты не найдены

Такой маленький, а уже болит!

Так каким, по вашему, он от холода становится должен?

Гуглит, как лечить цистит.

С головой ушёл в диплом

Обучение методом полного погружения.

Но говно не тонет.

Подобны плоду огурца

Мои научные труды

В них 95 процентов

Мне пришлось уменьшать. Это была беда. Когда написал все очень старательно и качественно, а потом бац! — слишком много, и ты не знаешь что из этого удалить вообще.

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

Ну как всегда: скопипастили с другого ресурса заплюсованную шутеечку, а смысл даже и не поняли)

Не поднимай волну, всё равно смешно же.

Да он просто воду мутит.

Ну шутейка из поста тоже вполне подходит

А шутейка из названия работает, как бонусная шутейка

Да и шутка про машинное обучение намного смешнее. Про диплом сильно избито уже.

Про диплом сильно избито уже

А про Льва Толстого?

Это ещё мало воды, моего диплома хватит на озеление Марса

Значит ли это, что на самом деле у поста в данный момент всего 15 плюсов?

Чем больше в книге воды тем она глубже. © Андрей Кнышев

Чтобы не отвлекаться по малой нужде.

Не сыпь мне соль на рану.

Видимо он буквально понял пословицу и потому наполняет себя водой, чтобы потом лить воду на экзамене.

Это слезы. Он читает и умиляется доброму сердцу аттестационной комиссии принявший этот бред.

Учись даже если ты под водой.

Один джентльмен пару лет назад делал пост на эту тему, суть такова — выделяешь какую-нибудь свободную область на листе и пишешь что-то рандомное, но осмысленное, например сочинение «Как я провела выходные» и делаешь буквы белыми.

оо, спасибо, попробую))

А какой требуют % оригинальности? Тоже пишу

Ну что, как защитились?)

И у меня тоже легко прошло) не за что)

По-моему, он объявления о работе читает.

Комментарий дня

Хех) Заболел палец указательный пару лет назад. Начал нарывать на кончике. Пошел к врачу,вскрыли, извлекли кусочек тонкого стекла. Был в шоке. Позвонил,рассказал матери,а она вспомнила,что я в возрасте лет трёх разбил градусник и порезался осколками.

Мастер Йода рекомендует:  jQuery-плагин для создания слайд-шоу Javascript
Добавить комментарий