Книги по бизнесу и учебники по экономике. 8 000 книг, 4 000 авторов

» » Читать книгу по бизнесу Основы глубокого обучения Nikhil Buduma : онлайн чтение - страница 1

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

Правообладателям!

Представленный фрагмент книги размещен по согласованию с распространителем легального контента ООО "ЛитРес" (не более 20% исходного текста). Если вы считаете, что размещение материала нарушает ваши или чьи-либо права, то сообщите нам об этом.

Читателям!

Оплатили, но не знаете что делать дальше?

  • Текст добавлен: 27 января 2020, 12:20

Текст бизнес-книги "Основы глубокого обучения"


Автор книги: Нихиль Будума


Раздел: Компьютеры: прочее, Компьютеры


Возрастные ограничения: +16

Текущая страница: 1 (всего у книги 3 страниц)

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

Научный редактор Андрей Созыкин


Издано с разрешения O’Reilly Media, Inc.


Все права защищены.

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


Authorized Russian translation of the English edition of Fundamentals of Deep Learning ISBN 9781491925614 © 2017 Nikhil Buduma.

This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.

© Nikhil Buduma, 2017

© Перевод на русский язык, издание на русском языке, оформление. ООО «Манн, Иванов и Фербер», 2020

* * *

Предисловие

С оживлением нейросетей в 2000-е годы глубокое обучение стало очень активно развивающейся областью исследований, основой передачи знаний с помощью машин. В этой книге приведены примеры и объяснения, которые помогут понять основные идеи этой сложной отрасли. Такие крупные компании, как Google, Microsoft и Facebook, уделяют внимание глубокому обучению и расширяют свои подразделения в этой области. Для всех прочих глубокое обучение остается сложным, многогранным и малопонятным предметом. В работах по этой теме много неясного жаргона, а разнообразные учебники, выложенные в сети, не дают четкого представления о том, как решаются задачи в данной области. Наша цель – восполнить этот пробел.

Требования и цели

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

Условные обозначения

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


Курсив

Новые термины, ссылки, названия и расширения файлов.


Моноширинный шрифт

Им оформлены программные элементы – названия переменных или свойств, базы данных, переменные среды, операторы и ключевые слова.


Моноширинный шрифт, полужирный

Команды или иной текст, вводимые пользователем.


Моноширинный шрифт, курсив

То, что нужно заменить пользовательскими значениями или такими, которые определяются контекстом (например, переменные в формулах).

Образцы кода

Дополнительный материал (образцы кода, примеры и т. д.) вы найдете по адресу https://github.com/darksigma/Fundamentals-of-Deep-Learning-Book.

Эта книга поможет вам в работе. Если приведен пример кода, его можно использовать в программах и документах. Не нужно получать у нас разрешение, если только вы не воспроизводите значительную часть кода. Например, написание программы, где использовано несколько кусков кода из этой книги, согласования не требует. Но необходимо разрешение на продажу или распространение CD-ROM с примерами из книг O’Reilly. Цитирование текста и кода из этой книги при ответах на вопросы разрешения не требует. На включение крупных фрагментов образца кода из этой книги в документацию вашего продукта необходимо разрешение.

Мы не требуем ссылок, но будем благодарны за них. Ссылка обычно включает название, автора и издательство. Например: Fundamentals of Deep Learning by Nikhil Buduma and Nicholas Locascio (O’Reilly). Copyright 2017 Nikhil Buduma and Nicholas Locascio.

Если вам кажется, что использование вами образцов кода выходит за установленные выше рамки, свяжитесь с нами по электронной почте [email protected].

Глава 1. Нейросеть

Создание умных машин

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

Мозг ребенка весит меньше полукилограмма, но как-то решает задачи, пока недоступные даже самым большим и мощным компьютерам. Всего через несколько месяцев после рождения дети способны распознавать лица родителей, отделять объекты от фона и даже различать голоса. За первый год у них развивается интуитивное понимание естественной физики, они учатся видеть, где находятся частично или полностью скрытые от них объекты, и ассоциировать звуки с их значениями. Уже в раннем возрасте они на высоком уровне овладевают грамматикой, а в их словаре появляются тысячи слов[1]1
  Kuhn D. et al. Handbook of Child Psychology. Vol. 2. Cognition, Perception, and Language. Wiley, 1998.


[Закрыть]
.

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

Ограничения традиционных компьютерных программ

Почему некоторые задачи компьютерам решать тяжело? Стандартные программы доказали свою состоятельность в двух областях: 1) они очень быстро ведут вычисления; 2) они неукоснительно следуют инструкциям. Если вы финансист и вам нужно провести сложные математические подсчеты, вам повезло. Типовые программы вам в помощь. Но представьте себе, что нам нужно сделать кое-что поинтереснее: например, написать программу для автоматического распознавания почерка. Возьмем за основу рис. 1.1.


Рис. 1.1. Изображение из массива рукописных данных MNIST[2]2
  LeCun Y., Bottou L., Bengio Y., Haffner P. Gradient-Based Learning Applied to Document Recognition // Proceedings of the IEEE. 1998. November. Vol. 86 (11). Pp. 2278–2324.


[Закрыть]


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

Начнем с простого. Например, укажем, что нулю соответствует изображение округлого замкнутого контура. Все примеры с рис. 1.1, кажется, удовлетворяют этому определению, но таких признаков недостаточно. Что, если у кого-то ноль – не всегда замкнутая фигура? И как отличить такой ноль (см. рис. 1.2) от шестерки?


Рис. 1.2. Ноль, алгоритмически трудноотличимый от шестерки


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

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

Механика машинного обучения

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

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

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

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


Рис. 1.3. Векторизация изображения для алгоритма машинного обучения


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

Чтобы интуитивно понимать модели машинного обучения, рассмотрим пример. Допустим, мы решили узнать, как предсказывать результаты экзаменов, если известно количество часов сна и учебы в день перед испытанием. Мы собираем массив данных и при каждом замере х = [x1 x2]T записываем количество часов сна (x1), учебы (x2) и отмечаем, выше или ниже они средних по классу. Наша цель – создать модель h(х) с вектором параметров θ = [θ0 θ1 θ2]T, чтобы:



По нашему предположению, проект модели h(х) будет таким, как описано выше (с геометрической точки зрения он описывает линейный классификатор, делящий плоскость координат надвое). Теперь мы хотим узнать вектор параметров θ, чтобы научить модель делать верные предсказания (−1, если результаты ниже среднего уровня, и 1 – если выше) на основании примерного входного значения x. Такая модель называется линейным персептроном и используется с 1950-х[3]3
  Rosenblatt F. The perceptron: A probabilistic model for information storage and organization in the brain // Psychological Review. 1958. Vol. 65. No. 6. P. 386.


[Закрыть]
. Предположим, наши данные соответствуют тому, что показано на рис. 1.4.


Рис. 1.4. Образец данных для алгоритма предсказания экзаменов и потенциального классификатора


Оказывается, при θ = [−24 3 4]T модель машинного обучения способна сделать верное предсказание для каждого замера:



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

Звучит разумно, но есть много очень серьезных вопросов. Во-первых, откуда берется оптимальное значение вектора параметров θ? Решение этой задачи требует применения метода оптимизации. Оптимизаторы стремятся повысить производительность модели машинного обучения, последовательно изменяя ее параметры, пока погрешность не станет минимальной.

Мы подробнее расскажем об обучении векторов параметров в главе 2, описывая процесс градиентного спуска[4]4
  Bubeck S. Convex optimization: Algorithms and complexity // Foundations and Trends® in Machine Learning. 2015. Vol. 8. No. 3–4. Pp. 231–357.


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

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


Рис. 1.5. По мере того как данные принимают более комплексные формы, нам становятся необходимы более сложные модели для их описания


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

Нейрон

Нейрон – основная единица мозга. Небольшой его фрагмент, размером примерно с рисовое зернышко, содержит более 10 тысяч нейронов, каждый из которых в среднем формирует около 6000 связей с другими такими клетками[5]5
  Restak R. M., Grubin D. The Secret Life of the Brain. Joseph Henry Press, 2001.


[Закрыть]
. Именно эта громоздкая биологическая сеть позволяет нам воспринимать мир вокруг. В этом разделе наша задача – воспользоваться естественной структурой для создания моделей машинного обучения, которые решают задачи аналогично. По сути, нейрон оптимизирован для получения информации от «коллег», ее уникальной обработки и пересылки результатов в другие клетки. Процесс отражен на рис. 1.6. Нейрон получает входную информацию по дендритам – структурам, напоминающим антенны. Каждая из входящих связей динамически усиливается или ослабляется на основании частоты использования (так мы учимся новому!), и сила соединений определяет вклад входящего элемента информации в то, что нейрон выдаст на выходе. Входные данные оцениваются на основе этой силы и объединяются в клеточном теле. Результат трансформируется в новый сигнал, который распространяется по клеточному аксону к другим нейронам.


Рис. 1.6. Функциональное описание биологической структуры нейрона


Мы можем преобразовать функциональное понимание работы нейронов в нашем мозге в искусственную модель на компьютере. Последняя описана на рис. 1.7, где применен подход, впервые введенный в 1943 году Уорреном Маккаллоу и Уолтером Питтсом[6]6
  McCulloch W. S., Pitts W. A logical calculus of the ideas immanent in nervous activity // The Bulletin of Mathematical Biophysics. 1943. Vol. 5. No. 4. Pp. 115–133.


[Закрыть]
. Как и биологические нейроны, искусственный получает некоторый объем входных данных – x1x2, …, xn, каждый элемент которых умножается на определенное значение веса – w1w2, …, wn. Эти значения, как и раньше, суммируются, давая логит нейрона: . Часто он включает также смещение (константа, здесь не показана). Логит проходит через функцию активации f, образуя выходное значение y = f(z). Это значение может быть передано в другие нейроны.


Рис. 1.7. Схема работы нейрона в искусственной нейросети


Математическое обсуждение искусственного нейрона мы закончим, выразив его функции в векторной форме. Представим входные данные нейрона как вектор x = [x1 x2xn], а веса нейрона как w = [w1 w2wn]. Теперь выходные данные нейрона можно выразить как y = f (x w + b), где b – смещение. Мы способны вычислить выходные данные из скалярного произведения входного вектора на вектор весов, добавив смещение и получив логит, а затем применив функцию активации. Это кажется тривиальным, но представление нейронов в виде ряда векторных операций очень важно: только в таком формате их используют в программировании.

Выражение линейных персептронов в виде нейронов

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



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



Рис. 1.8. Выражение результатов экзамена в виде нейрона


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

Нейросети с прямым распространением сигнала

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

Нейроны в человеческом мозге расположены слоями. Его кора, по большей части отвечающая за интеллект, состоит из шести слоев. Информация перетекает по ним, пока сенсорные данные не преобразуются в концептуальное понимание[7]7
  Mountcastle V. B. Modality and topographic properties of single neurons of cat’s somatic sensory cortex // Journal of Neurophysiology. 1957. Vol. 20. No. 4. Pp. 408–434.


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


Рис. 1.9. Простой пример нейросети с прямым распространением сигнала с тремя слоями (входной, скрытый, выходной) и тремя нейронами на каждый слой


На основе этих идей мы можем создать искусственную нейросеть. Она возникает, когда мы начинаем соединять нейроны друг с другом, со входными данными и выходными узлами, которые соответствуют ответам сети на изучаемую задачу. На рис. 1.9 показан простейший пример искусственной нейросети, схожей по архитектуре с той, что была описана в 1943 году в работе Маккаллоу и Питтса. В нижний слой поступают входные данные. Верхний (выходные узлы) вычисляет ответ. Средний слой (слои) нейронов именуется скрытым, и здесь  – вес соединения i-го нейрона в k-м слое с j-м нейроном в (k + 1) – м слое. Эти веса образуют вектор параметров θ, и, как и ранее, наша способность решать задачи при помощи нейросетей зависит от нахождения оптимальных значений для θ.

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

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

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

2. В этом примере у каждого слоя один набор нейронов, но это не необходимое и не рекомендуемое условие. Чаще в скрытых слоях нейронов меньше, чем во входном: так сеть обучается сжатому представлению информации. Например, когда глаза получают «сырые» пиксельные значения, мозг обрабатывает их в рамках границ и контуров. Скрытые слои биологических нейронов мозга заставляют нас искать более качественное представление всего, что мы воспринимаем.

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

4. Входные и выходные данные – векторные представления. Например, можно изобразить нейросеть, в которой входные данные и конкретные пиксельные значения картинки в режиме RGB представлены в виде вектора (см. рис. 1.3). Последний слой может иметь два нейрона, которые соотносятся с ответом на задачу: [1, 0], если на картинке собака; [0, 1], если кошка; [1, 1], если есть оба животных; [0, 0], если нет ни одного из них.

Заметим, что, как и нейрон, можно математически выразить нейросеть как серию операций с векторами и матрицами. Пусть входные значение i-го слоя сети – вектор x = [x1 x2xn]. Нам надо найти вектор y = [y1 y2 … ym], образованный распространением входных данных по нейронам. Мы можем выразить это как простое умножение матрицы, создав матрицу весов размера n × m и вектор смещения размера m. Каждый столбец будет соответствовать нейрону, причем j-й элемент сопоставлен весу соединения с j-м входящим элементом. Иными словами, y = ƒ(WTx + b), где функция активации применяется к вектору поэлементно. Эта новая формулировка очень пригодится, когда мы начнем реализовывать эти сети в программах.

Страницы книги >> 1 2 3 | Следующая

Правообладателям!

Представленный фрагмент книги размещен по согласованию с распространителем легального контента ООО "ЛитРес" (не более 20% исходного текста). Если вы считаете, что размещение материала нарушает ваши или чьи-либо права, то сообщите нам об этом.

Читателям!

Оплатили, но не знаете что делать дальше?


Топ книг за месяц
Разделы







Книги по году издания