You are on page 1of 481

ББК 32.973.236
УДК 004.8
Н63

Николенко С., Кадурин А., Архангельская Е.
Н63 Глубокое обучение. — СПб.: Питер, 2018. — 480 с.: ил. — (Серия «Библиотека
программиста»).
ISBN 978-5-496-02536-2
Перед вами — первая книга о глубоком обучении, написанная на русском языке. Глубокие модели
оказались ключом, который подходит ко всем замкам сразу: новые архитектуры и алгоритмы обучения,
а также увеличившиеся вычислительные мощности и появившиеся огромные наборы данных привели
к революционным прорывам в компьютерном зрении, распознавании речи, обработке естественного
языка и многих других типично «человеческих» задачах машинного обучения. Эти захватывающие
идеи, вся история и основные компоненты революции глубокого обучения, а также самые современные
достижения этой области доступно и интересно изложены в книге. Максимум объяснений, минимум
кода, серьезный материал о машинном обучении и увлекательное изложение — в этой уникальной
работе замечательных российских ученых и интеллектуалов.

16+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)

ББК 32.973.236
УДК 004.8

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

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

ISBN 978-5-496-02536-2 © ООО Издательство «Питер», 2018
© Серия «Библиотека программиста», 2018

Оглавление

Часть I. Как обучать нейронные сети
Глава 1. От биологии к информатике, или We need to go deeper . . . . . . . . . 6
1.1. Революция обучения глубоких сетей . . . . . . . . . . . . . . . . . . . . . . . 7
1.2. Искусственный интеллект и машинное обучение . . . . . . . . . . . . . . 11
1.3. Немного о словах: каким бывает машинное обучение . . . . . . . . . . . 17
1.4. Особенности человеческого мозга. . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5. Пределы нейробиологии: что мы на самом деле знаем? . . . . . . . . . . 26
1.6. Блеск и нищета современных нейронных сетей . . . . . . . . . . . . . . . . 30

Глава 2. Предварительные сведения, или Курс молодого бойца . . . . . . . . . 38
2.1. Теорема Байеса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.2. Функции ошибки и регуляризация . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.3. Расстояние Кульбака — Лейблера и перекрестная энтропия. . . . . . . 63
2.4. Градиентный спуск: основы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.5. Граф вычислений и дифференцирование на нем . . . . . . . . . . . . . . . 75
2.6. И о практике: введение в TensorFlow и Keras. . . . . . . . . . . . . . . . . . 81

Глава 3. Перцептрон, или Эмбрион мудрого компьютера . . . . . . . . . . . . . . 93
3.1. Когда появились искусственные нейронные сети . . . . . . . . . . . . . . 94
3.2. Как работает перцептрон . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.3. Современные перцептроны: функции активации. . . . . . . . . . . . . . .105
3.4. Как же обучаются настоящие нейроны . . . . . . . . . . . . . . . . . . . . . .113
3.5. Глубокие сети: в чем прелесть и в чем сложность? . . . . . . . . . . . . . .117
3.6. Пример: распознавание рукописных цифр на TensorFlow . . . . . . . .123

Часть II. Основные архитектуры
Глава 4. Быстрее, глубже, сильнее, или Об оврагах, долинах и трамплинах .137
4.1. Регуляризация в нейронных сетях . . . . . . . . . . . . . . . . . . . . . . . . .138
4.2. Как инициализировать веса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142
4.3. Нормализация по мини-батчам. . . . . . . . . . . . . . . . . . . . . . . . . . . .153
4.4. Метод моментов: Ньютон, Нестеров и Гессе . . . . . . . . . . . . . . . . . .164
4.5. Адаптивные варианты градиентного спуска . . . . . . . . . . . . . . . . . .169

Глава 5. Сверточные нейронные сети и автокодировщики,
или Не верь глазам своим . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
5.1. Зрительная кора головного мозга . . . . . . . . . . . . . . . . . . . . . . . . . .177
5.2. Свертки и сверточные сети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182
5.3. Свертки для распознавания цифр . . . . . . . . . . . . . . . . . . . . . . . . . .199
5.4. Современные сверточные архитектуры . . . . . . . . . . . . . . . . . . . . . .206
5.5. Автокодировщики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
5.6. Пример: кодируем рукописные цифры . . . . . . . . . . . . . . . . . . . . . .219

Глава 6. Рекуррентные нейронные сети,
или Как правильно кусать себя за хвост . . . . . . . . . . . . . . . . . . . .231
6.1. Мотивация: обработка последовательностей . . . . . . . . . . . . . . . . . .232
6.2. Распространение ошибки и архитектуры RNN . . . . . . . . . . . . . . . .236
6.3. LSTM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
6.4. GRU и другие варианты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
6.5. SCRN и другие: долгая память в обычных RNN . . . . . . . . . . . . . . . .253
6.6. Пример: порождаем текст символ за символом . . . . . . . . . . . . . . . .259

Часть III. Новые архитектуры и применения
Глава 7. Как научить компьютер читать,
или Математик − Мужчина + Женщина = ... . . . . . . . . . . . . . . . .278
7.1. Интеллектуальная обработка текстов . . . . . . . . . . . . . . . . . . . . . . .279
7.2. Распределенные представления слов: word2vec . . . . . . . . . . . . . . . .285
7.3. Русскоязычный word2vec на практике . . . . . . . . . . . . . . . . . . . . . .297
7.4. GloVe: раскладываем матрицу правильно . . . . . . . . . . . . . . . . . . . .305
7.5. Вверх и вниз от представлений слов . . . . . . . . . . . . . . . . . . . . . . . .313
7.6. Рекурсивные нейронные сети и синтаксический разбор . . . . . . . . .322

Глава 8. Современные архитектуры, или Как в споре рождается истина . . .330
8.1. Модели с вниманием и encoder-decoder . . . . . . . . . . . . . . . . . . . . .331
8.2. Порождающие модели и глубокое обучение . . . . . . . . . . . . . . . . . .341
8.3. Состязательные сети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348
8.4. Практический пример и трюк с логистическим сигмоидом . . . . . . .353
8.5. Архитектуры, основанные на GAN . . . . . . . . . . . . . . . . . . . . . . . . .359

Глава 9. Глубокое обучение с подкреплением,
или Удивительное происшествие с чемпионом . . . . . . . . . . . . . . .372
9.1. Обучение с подкреплением. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373
9.2. Марковские процессы принятия решений. . . . . . . . . . . . . . . . . . . .379
9.3. От TDGammon к DQN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .391
9.4. Бамбуковая хлопушка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399
9.5. Градиент по стратегиям и другие применения . . . . . . . . . . . . . . . . .405

Глава 10. Нейробайесовские методы,
или Прошлое и будущее машинного обучения . . . . . . . . . . . . . . .409
10.1. Теорема Байеса и нейронные сети . . . . . . . . . . . . . . . . . . . . . . . . .410
10.2. Алгоритм EM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .412
10.3. Вариационные приближения . . . . . . . . . . . . . . . . . . . . . . . . . . . .419
10.4. Вариационный автокодировщик . . . . . . . . . . . . . . . . . . . . . . . . . .426
10.5. Байесовские нейронные сети и дропаут. . . . . . . . . . . . . . . . . . . . .438
10.6. Заключение: что не вошло в книгу и что будет дальше . . . . . . . . . .446

Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .450

Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .451

Часть I

Как обучать нейронные сети

Глава 1
От биологии к информатике,
или We need to go deeper

TL;DR
Первая глава — вводная. В ней мы:

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

1.1. Революция обучения глубоких сетей 7

1.1. Революция обучения глубоких сетей
— А как повернулось дело? — задумчиво пробормотал он. —
Трах-та-бабах! Революция!
Ему стало весело. Он глотал пахнувший росой и яблоками
воздух и думал: «Столб, хлеб, дом, рожь, больница, базар — слова
все знакомые, а то вдруг — Революция! Бейте, барабаны!»

A. Гайдар. Бумбараш

Прежде всего, спросим себя, положив руку на сердце:
— Да есть ли у нас сейчас революция?..
Разве та гниль, глупость, дрянь, копоть и мрак, что происхо-
дит сейчас, — разве это революция? Революция — сверкающая
прекрасная молния, революция — божественно красивое лицо,
озаренное гневом Рока, революция — ослепительно яркая ра-
кета, взлетевшая радугой среди сырого мрака!.. Похоже на эти
сверкающие образы то, что сейчас происходит?..

А. Аверченко. Дюжина ножей в спину революции

Десять лет назад, в середине 2000-х годов, в машинном обучении началась револю-
ция. В 2005–2006 годах группы исследователей под руководством Джеффри Хин-
тона (Geoffrey Hinton) в университете Торонто и Йошуа Бенджи (Yoshua Bengio)
в университете Монреаля научились обучать глубокие нейронные сети. И это пе-
ревернуло весь мир машинного обучения! Теперь в самых разнообразных пред-
метных областях лучшие результаты получаются с помощью глубоких нейронных
сетей. Одним из первых громких промышленных успехов стало распознавание ре-
чи: разработанные группой Хинтона глубокие сети очень быстро радикально улуч-
шили результаты распознавания по сравнению с оттачивавшимися десятилетиями
классическими подходами, и сегодня любой распознаватель, включая голосовые
помощники вроде Apple Siri и Google Now, работает исключительно на глубоких
нейронных сетях. А сейчас, к 2017 году, люди научились обучать самые разные ар-
хитектуры глубоких нейронных сетей, и те решают абсолютно разные задачи: от
распознавания лиц до вождения автомобилей и игры в го.
Но идеи большинства таких моделей появились еще в 80–90-х годах XX ве-
ка, а то и раньше. Искусственные нейронные сети стали предметом исследований
очень давно; скоро мы увидим, что они были одной из первых хорошо оформ-
ленных идей искусственного интеллекта, когда и слов-то таких — «искусствен-
ный интеллект» — еще никто не слышал. Но с начала 90-х годов XX века до се-
редины нулевых этого1 нейронные сети были, мягко говоря, не в моде. Известный
1 Мы искренне надеемся, что написали хорошую книгу, но все-таки не будем здесь делать специ-

альных оговорок в расчете на читателей XXII века...

8 Глава 1. От биологии к информатике, или We need to go deeper

исследователь нейронных сетей Джон Денкер (John Denker) в 1994 году сказал:
«Нейронные сети — это второй лучший способ сделать практически что угодно».
И действительно, на тот момент уже было известно, что нейронная сеть теоретиче-
ски может приблизить любую функцию и обучиться решать любую задачу, а глубо-
кая нейронная сеть способна еще и более эффективно решить гораздо больше раз-
ных задач... Но обучать глубокие сети никому не удавалось, другие методы на кон-
кретных практических примерах работали лучше. Из общих методов машинного
обучения это были сначала «ядерные методы» (kernel methods), в частности метод
опорных векторов, а затем байесовские сети и в целом графические вероятностные
модели. Но вообще Денкер вел речь о том, что более простая вероятностная мо-
дель, разработанная специально с учетом специфики конкретной задачи, обычно
работала лучше, чем нейронная сеть «общего назначения», даже если выбрать ей
подходящую для задачи архитектуру. А глубокие нейронные сети обучаться никак
не хотели; о том, почему именно, мы подробно поговорим в разделе 3.5.
Решение, предложенное группой Хинтона в середине 2000-х годов, пришло
в виде предобучения без учителя, когда сеть сначала обучается на большом наборе
данных без разметки, а потом уже дообучается на размеченных данных, используя
это приближение. Например, если мы хотим распознавать человеческие лица, то
давайте сначала пообучаем нейронную сеть на фотографиях с людьми вообще, без
разметки (таких фотографий можно легко набрать сколь угодно много), а уже по-
том, когда сеть «насмотрится» на неразмеченные фотографии, дообучим ее на име-
ющемся размеченном наборе данных. Оказалось, что при этом конечный результат
становится намного лучше, а хорошие и интересные признаки сеть начинает выде-
лять еще на этапе предобучения без учителя. Именно таким образом произошел,
в частности, прорыв в распознавании речи. Конечно, здесь пока совершенно непо-
нятно, что сеть собственно должна делать с этими неразмеченными фотографиями,
и в этом и заключался прорыв середины нулевых годов. Мы немного поговорим об
этих методах в разделе 4.2, однако без подробностей, потому что сегодня эти мето-
ды уже практически не используются.
Почему? Потому что все неплохо работает и без них! Оказалось, что сейчас мы
можем успешно обучать нейронные сети, в том числе глубокие, фактически теми
же методами, которыми раньше это сделать никак не удавалось. Методы предобу-
чения без учителя оказались лишь «спусковым крючком» для революции глубо-
кого обучения. Второй важнейшей причиной стал, собственно, прогресс в вычис-
лительной технике и в размерах доступных для обучения наборов данных. С раз-
витием Интернета данных становилось все больше: например, классический на-
бор данных MNIST, о котором мы начнем подробный разговор в разделе 3.6 и на
котором добрый десяток лет тестировались модели компьютерного зрения, — это
70 тысяч изображений рукописных цифр размером 28 × 28 пикселов, суммарно
около 10 Мбайт данных; а современный стандартный датасет для моделей ком-
пьютерного зрения ImageNet содержит уже около 1,2 Тбайт изображений. В части

которые уже находят и другие применения. мы с этим не вполне согласны. Но. Техническое развитие позволило не только вернуться к идеям 80–90-х годов XX века. но и о числе ядер в процессоре. с двух лет до двух с половиной. Йошуа Бенджи и Аарона Курвилля (Aaron Courville) Deep Learning [184]. нейронные сети в обучении с подкрепле- нием (глава 9) привели к невиданным ранее прорывам. Конечно. нейробайесовские методы (глава 10) соединили нейронные сети и классический вероятностный вывод с по- мощью вариационных приближений. в кото- рой дается подробное и идейное введение в тему. в конце 2016 года... а общая производительность систем — пример- но каждые 18 месяцев. — сверточные сети и автокоди- ровщики (глава 5).1) и сети с памятью. Книг по обучению глубоких сетей пока не так уж много. кстати. вышла книга Иэна Гудфеллоу (Ian Goodfellow). Революция обучения глубоких сетей 9 вычислений помогают и закон Мура1 . Фактически сейчас есть только две известные книги об обучении глубоких сетей: в 2014 году вышла книга сотрудников Microsoft Research Ли Денга (Li Deng) и Донга Ю (Yu Dong) Deep Learning: Methods and Applications [117]. а закончить разговор прямо сейчас. сейчас речь идет уже не только о числе транзисторов в одной схеме. а в 1975-м стал более пессимистичным). но и при- думать много новых идей. А со- всем недавно. можно было бы никаких книг не писать. еще в 1965 году (точнее. мы ее всячески рекомендуем. по которому число транзисторов в инте- гральной схеме удваивается примерно каждые два года. Развивались и общие методы обучения нейронных сетей (о них мы поговорим в главе 4 и вообще в первой части книги).1. но поразительно.1. Если бы это было так. В основном мы. конечно. рекуррентные сети (глава 6). Вся глава 4 будет посвящена таким новшествам. то есть по сути на видеокартах). скажем пару слов об основных источниках. Прежде чем двигаться дальше. Как вы наверняка догадались. то есть для анализа изображений и речи. Эта идея появилась около 2006 года и стала важной частью революции глу- бокого обучения. наш прямой конкурент. насколько долго эта экспоненциальная зависимость сохраняет силу: закон Мура в на- ше время (2016–2017 годы) лишь немного замедлился. конечно. формально гово- ря. Некоторые считают. что компьютеры стали быстрее. в которой основной упор делается на при- ложения для обработки сигналов. содержание революции глубоких сетей не ограничивается тем. а нужды конкретных приложений привели в разработке таких новых архитектур. а просто эмпирическая закономерность. а данных стало больше. Правда. но будут и фактически чисто «железные» продвижения: обучение совре- менных нейронных сетей обычно происходит на графических процессорах (GPU. русский перевод 1 Гордон Мур (Gordon Moore) сформулировал свой закон. Но появлялись и совершенно но- вые архитектуры: порождающие состязательные сети (глава 8) сумели превратить нейронные сети в порождающие модели. тогда он предсказывал удвоение каждый год. которые позволяют обучать нейронные сети быстрее. будем говорить о продвижениях в самих алгоритмах обу- чения. и важные новшества. и классические архитектуры нейронных сетей. что часто позволяет ускорить процесс в десятки раз. это не закон природы. которым в основном посвящена вторая часть. . как сети с вниманием (раздел 8. что эта об- ласть еще не вполне устоялась и систематизировать ее пока не обязательно. Хотя эта книга.

От биологии к информатике. кото- рые до статуса книг не дотягивают.org. Но в некоторых областях arXiv стал стандартом де-факто. Нас ждет очень много инте- ресного.. иногда важными. но дают очень широкое представление о глубо- ком обучении: ранний обзор Бенджи [38] показывает состояние дел на 2009 год. и если вы не заходили на arXiv два-три месяца. Подобные библиотеки сделали обучение нейронных сетей общедоступным и стали важной компонентой взрыва интереса и быстрого развития нашей области. источников уже накопилось немало. что вообще такое искусственный интеллект и машинное обучение. ко- гда мы пишем эти слова.. главным образом TensorFlow и Keras. и более специальные обзоры для конкретных областей: обработ- ки изображений [107]. Правда.. может оказать- ся. есть целый ряд важных больших обзоров. . по которым это доказательство не должно работать. а вы и не заметили. Например. какие задачи можно ими решать. и рецензии на них. обычно еще до официальной публикации. Йошуа Бенджи и Яна ЛеКуна (Yann LeCun) [314]. На бо- лее специализированные источники мы будем ссылаться на протяжении всей этой книги: область молодая. в частности обучение глубоких сетей. как раз- вивались и как искусственные нейронные сети. связаны с естественными. как именно обучать нейронные сети. для «классической науки» совершенно немыслимые: там публи- куются статьи. Кроме того. стоит отметить. тревога ока- залась ложной. 1 Хранилище научных препринтов arXiv. как они появились. шансов мало: Александр Разборов уже указал соображения. А недавняя инициатива https://openreview. развивается она очень быстро. А в 2017-м появилось решение Норберта Блюма. и в решении нашлись ошибки. Есть. мы дойдем и до практики: почти каждый наш рассказ будет сопровождаться вполне рабочими примерами кода с использованием современных библиотек для обуче- ния нейронных сетей. следить за последними новостями глубокого обу- чения лучше всего на arXiv1 : новые работы по обучению глубоких сетей появляют- ся там постоянно. и в списке литературы. в которых речь идет об обучении глубоких сетей «вообще». главе мы начнем с того. можно выде- лить программную статью в Nature трех главных представителей глубокого обуче- ния: Джеффри Хинтона. с помощью которых вы эту книгу читаете. решение еще не опровергнуто — впрочем.net/ делает вещи. содержит ста- тьи по многим научным дисциплинам. а обзор Юргена Шмидхубера (Jurgen Schmidhuber) [475] дает очень подробный анализ истории основных идей глубокого обучения. в ко- торый мы старались помещать только действительно важные статьи. В этой книге мы поговорим о разных архитектурах нейронных сетей. и. К та- ким областям относится и машинное обучение. что поговорим о том. обработки естественных языков [182] и многих других.. ку- да выкладываются практически все серьезные статьи. А в этой. обзор Ли Денга сделан с уклоном в обработ- ку сигналов [115]. конечно. К сожалению. Более того. Кстати. предложенное Винаем Деодаликаром. что на arXiv нет никакого рецензирования. что в вашей области уже произошла какая-нибудь очередная мини-революция.10 Глава 1. еще только поданные на конференции. вводной. или We need to go deeper тоже уже существует. в 2010 году немало шума наделало опубликованное на arXiv решение проблемы P ̸= NP. расположенное по адресу http://arxiv. Из статей. его же более поздний обзор рассматривает глубокое обучение как обучение представ- лений (representation learning) [39]. которые мы рассматриваем в этой книге. так что совсем свежие статьи там могут оказать- ся и с ошибками. разберем.

. самосознание и изряд- ные когнитивные способности в куски глины. созданную Пигмалионом из мрамора. особо мудрые раввины могли и сами создавать големов — великанов. которых сначала нужно было построить в виде статуи из гли- ны и крови. автоматически рас- познавал среди прибывающих кораблей недружелюбные и бросал в них огромные камни. когда известный алхимик Альберт Великий изготовил искусственную говорящую голову. то есть умели распознавать речь и об- рабатывать естественный язык. он очень расстроил своего учителя Фому Аквинского. что у него появилась душа. по этому вопросу был согласен с иудейскими источниками. Примерно тогда же Афродита оживила Галатею. Позабыты хлопоты. Уже в греческих мифах искусственный интеллект мог решать задачи.1 А в наше просвещенное время он стал важной литературной темой практически одновременно с появле- нием научной фантастики как таковой: начиная с доктора Франкенштейна. Искусственный интеллект и машинное обучение До чего дошел прогресс — труд физический исчез. видимо.2. остановлен бег. Искусственный интеллект и машинное обучение 11 1. Энтин. идея создания тех или иных мыслящих существ в литературе появляется постоянно. Искусственный интеллект давно применялся и к играм: шахматный автомат «Турок» обыграл даже самого Наполеона I. Да и умственный заменит механический процесс. что искусственный интеллект как наука начался с теста Тьюринга. . это значило бы. а не человек. кстати. Гефест создавал роботов- андроидов. здесь быстро выяснилось. а душу не может вложить даже самый мудрый раввин. Поэтому. Големы могли выполнять команды своего создателя. постро- енного Гефестом гигантского человекоподобного робота Талоса Зевс позже пода- рил царю Миносу для охраны Крита. Вкалывают роботы. звучащие вполне современно: Талос трижды в день обегал весь остров. что искусственный интеллект не такой уж искусственный. Ю.. Из к/ф «Приключения Электроника» Идея искусственного интеллекта давно занимала людей. например. В иудейской традиции. так и по заказу. впрочем. Считается. а затем оживить подходящим артефактом или заклинанием. как для себя в качестве помощников. который. — это прерогатива Господа.1. а еще раньше Иегова и Аллах вдохнули жизнь. Но синтезировать речь не получалось: если бы го- лем мог разговаривать самостоятельно. Формулировка теста впервые появилась в знаменитой статье Computing Machinery 1 В наши дни в честь знаменитого автомата называется сервис Amazon Mechanical Turk.2. Часто «туркеры» как раз и занимаются разметкой наборов данных для моделей. о которых мы будем говорить в этой книге. на кото- ром живые люди выполняют небольшие и дешевые задания.

и его коллегами к тому времени уже как минимум лет десять. и представление знаний. . Тьюринг предложил сравнивать в этой игре результаты компью- тера и живых мужчин: тогда обе стороны вынуждены будут имитировать кого-то третьего. Во время Второй мировой войны Тьюринг был одним из ведущих криптоаналитиков Блетчли-парка и расшифровал ряд важнейших сообщений. кто есть кто. времена были отнюдь не толерантные) или цианид попал в пресловутое яблоко случайно (это. которую Алан Тьюринг1 выпустил в 1950 году [543]. было ли это самоубийством из-за назначенного Тьюрингу гормонального лечения гомосексуализма (увы.12 Глава 1. человекоподобных андроидов строить не нужно. в том числе и обучение на опыте. очевидно. Буквальная формули- ровка теста породила в наше время достаточно широко известную. в которой мужчина и женщина письменно общаются с судьей. к которому принадлежал и Алан. Тьюринг также стал основателем ис- кусственного интеллекта. что этот тест задуман крайне не- справедливо по отношению к несчастным компьютерным программам. являются ли машины мыслящими. Действительно. то есть в идеале решения судьи были бы неотличимы от бросания честной монетки). Поэтому исходная формулировка была основана на популярной тогда имитационной игре2 . 1912–1954) — английский математик и информатик. в котором человек попробовал бы выдать себя за компьютер. Иначе говоря. Тьюринг был одним из создателей современной теоретической информатики и теории вычислимости: он разработал конструкцию машины Тьюринга и доказал первые результаты о (не)вычислимости. что человеку в предложенной им схеме достаточно просто быть собой. Тьюринг погиб. многие читатели слышали основную канву теста Тьюринга: чтобы пройти тест. Статьи Тьюринга о ма- тематике криптоанализа были рассекречены только в 2012 году. К сожалению. Сам Тьюринг считал. Наверное. сто- ит отметить. человеком и компью- тером. что возможность создания «мыслящих машин» и наличия интеллекта у компьютеров обсуждалась и самим Тьюрингом. что к 2000 году компьютеры с гигабайтом памяти смогут играть в имитационную игру так. что исходная формулировка теста Тьюринга была несколько тонь- ше и интереснее. Тьюринг понимал. мы до сих пор не зна- ем. Впрочем. Любопытно. Задача мужчины — выдать себя за женщину. чтобы убеждать человека в 30 % случаев (наилучшим результатом было бы 50 %. От биологии к информатике. Однако тест Тьюринга сейчас практически не считается истинным тестом на то. сформулировав основные положения AI как науки. задача женщины — помочь судье правильно разобрать- ся. знаменитый тест Тьюринга. как ни странно. и умение делать выводы из полученных знаний. он мгновенно был бы раскрыт вопросом вроде «Сколько будет 7233 /271?». это была частая тема для дискуссий в английском Ratio Club. сколько всего нужно сделать. не дожив до 42-го дня рождения. 2 The Imitation Game — именно так называется и недавний биографический фильм о Тьюринге. или We need to go deeper and Intelligence. закодированных знаменитыми машинами «Энигма». но компью- тер должен стать неотличим от человека во владении естественным языком. компьютер должен успешно выдать себя за человека в письменном диалоге между судьей. а компьютеру надо выдавать себя за кого-то другого. вполне возможно). Если пред- ставить себе «обратный тест Тьюринга». но на самом деле 1 Алан Тьюринг (Alan Turing. чтобы суметь сконструировать искусственный интеллект: здесь и обработка естественного язы- ка. Тест Тьюринга помогает понять. в частности.

что суще- ственное продвижение в одной или более из этих проблем вполне возможно. Мы попытаемся понять. Гановер. под- держивает беседу на китайском языке. что писал там Джон Маккарти [431]: «Мы предлагаем исследование искусственного интеллекта сроком на два месяца с участием десяти человек летом 1956 года в Дартмутском колледже. правда? Не зря 50-е годы XX века — это золотой век классической научной фантастики. Заявка на проведение этого семинара была. чатбот. если специально подобранная группа ученых будет работать над этим в течение лета». что алгоритм. Но чатботы никогда даже не претендовали на то. и находящийся в комнате человек перекладывает бумажки согласно этому алгоритму. решать задачи. Роберт Хайнлайн и многие другие. формировать абстракции и концепции. и люди часто списывают на это ошибки в английском языке. Рэй Брэдбери. Кто или что «знает китайский» в этом примере? Можно ли сказать. Мы считаем. Марвин Минский (Marvin Minsky).. как обучить машины использо- вать естественные языки. Артур Кларк. Натаниэль Рочестер (Nathaniel Rochester) и Клод Шеннон (Claude Shannon) — организовали Дарт- мутский семинар. А в философском контексте это смыкается с известной конструкцией так на- зываемой китайской комнаты Джона Сёрля [477]: представьте себе комнату. Оказывается. что комната с бумажками начала «обладать сознанием»?.1. пожалуй. что всякий аспект обучения или любое дру- гое свойство интеллекта может в принципе быть столь точно описано. он просто перекладывает бумажки. сейчас подвластные только людям. Впечатляет. к примеру. знаменитую летнюю школу в Дартмуте. наце- ленных на поддержание разговора с человеком1 . Иссле- дование основано на предположении. . которая еще в 60-е годы XX века могла вести беседу в стиле классического психоаналитика. созданный тремя русскоязычными программистами. К этому времени 1 Сейчас для разработки чатботов и диалоговых систем тоже применяют глубокие нейронные се- ти — об этом мы вкратце поговорим в разделе 8. Нью-Гемпшир. что машина сможет его имитировать. На ее стенах записан очень сложный алго- ритм перекладывания бумажек. чтобы «действительно понимать» человеческий язык со всеми контекстами.2. Вот посмотрите. что тест Тьюринга успешно прошел «Женя Густман» (Eugene Goostman). недопонимания и недостаток знаний. Но человек не знает китайского и не понимает входов и выходов.1. получая на вход реплики и выдавая ответы на них. «Женя» представляется собеседникам 13-летним мальчиком из Одессы. Искусственный интеллект и машинное обучение 13 не слишком научную деятельность по созданию так называемых чатботов. А вот с самой наукой об искусственном интеллекте произошел достаточно редкий случай: мы. пол- ную бумажек со странными символами. можем проследить точное время и место рождения этой обла- сти. пожалуй. и улучшать самих себя. самой амбициозной грантозаявкой в истории ин- форматики. Одним из первых и самых извест- ных таких ботов была ELIZA [563]. А в 2014 году появилось (достаточ- но спорное) сообщение о том. В 1956 году четыре отца-основателя искусственного интеллекта — Джон Мак- карти (John McCarthy). когда свои лучшие произведения создавали Айзек Азимов. Но тест Тьюринга — это только одна из идей постановки конкретной задачи.

. понять и принять их к исполнению. переставлять геометрические фигуры в трехмерном пространстве и т. что заявленных целей за эти два месяца достичь не удалось. пожалуй. один из основоположников советской кибернетики) писали в «Вопросах философии» так: «Некоторые наши философы допустили серьезную ошибку: не разобравшись в су- ществе вопросов. G. или We need to go deeper относятся и знаменитые три закона робототехники Айзека Азимова. появились и само- обучающиеся машины. Сергей Львович). Вся эта наука тогда обычно называлась кибернетикой вслед за книгой Норберта Винера «Кибернетика. разворот на 180 градусов произошел быстро. быстро приводящая к комби- наторному взрыву и экспоненциальному перебору вариантов. что до реализации законов робототехники уже рукой подать. Например. не послужил основой для немедленных оргвыводов и не поставил крест на всем искусственном интеллекте. но только по сравнению с более сложными теориями. Самое удивительное в этой истории состоит в том. Первые програм- мы. Дело было поставлено со сталинским размахом.2 Тогда же. прослушавших курс математической логики. Но такие 1 Для читателей. От биологии к информатике. чем пройти тест Тьюринга (многие книги Азимова о робо- тах как раз на таких внутренних противоречиях и нечеткостях и основаны). . Однако быстро стало понятно. что некото- рые невежественные буржуазные журналисты занялись рекламой и дешевыми спекуляциями вокруг кибернетики. Китов и Ляпунов (не Александр Михайлович. что в начале 1950-х годов в СССР прошла массовая пропагандистская акция против кибернетики в понимании Винера. в частности перцептрон Розенблатта... вывод для кото- рых автоматически построить вполне реально. и советские алгоритмисты в общем-то всегда оставались на переднем крае науки. и уже в 1955 году выдающиеся математики Соболев (тот самый. которые продолжали начатую логиками тему ав- томатического логического вывода (automated theorem proving). Как видите. ко- нечно.) [392] могла строить вывод в си- стемах. что компьютеры — это всерьез и надолго. и людям начало казаться.. Началось все с исследований. 2 Широко известно.S. пытались стро- ить выводы в заданных исследователями формальных системах. а Алексей Андреевич. которые сами по себе звучат очень нечетко и противоречиво. что это как раз те формулы. они стали отрицать значение нового направления в науке. что заявка все-таки была удовлетво- рена. Они тут же получили широкую огласку. или Управление и связь в животном и ма- шине» [568].. что усиленное реакционное. на самом деле вычислительно это все равно весьма сложная процедура.14 Глава 1. состоящими из хорновских дизъюнктов. по- явившаяся в 1959 году программа с амбициозным названием «Универсальный ре- шатель задач» (General Problem Solver. заданных логическими формулами определенного вида1 .P. а тот факт. чтобы затормозить развитие нового важного научного направления в нашей стране». идеалистическое толкование кибернетики в популярной реакционной литературе было специально организовано с целью дезори- ентации советских ученых и инженеров. Не исключена возможность. создававшиеся как шаги на пути к искусственному интеллекту. Другие програм- мы того времени пытались оперировать более ограниченными предметными обла- стями. уточним: формулами. во второй половине 1950-х и начале 1960-х годов. где из бассейна вытекают навстречу друг другу два поезда со скоростью 40 км/ч каждый).. даже в «Фи- лософский словарь» 1954 года издания попало определение кибернетики как «реакционной лженауки». д. так называемыми микромирами (microworlds): решать словесные алгебра- ические задачи (те. Дартмутский семинар был проведен. Означенные читатели поймут. о котором мы будем много говорить в главе 3. даже сложнее. с тем. из-за того.

не 1 Вероятно. как началась первая «зима искусственного интеллекта».2. Затем исследователи снова вспомнили о нейронных сетях: к началу 1980-х го- дов был разработан алгоритм обратного распространения ошибки (его мы подроб- но обсудим в главе 2). К концу восьми- десятых уже появилась большая часть основных архитектур. Рассказывают. а затем делать выводы. чем у начинающих. Поэтому вторая волна увлечения искусственным интеллектом закончилась в начале девяностых. как мы уже упоминали выше. ес- ли услышат. рекуррентные сети. что открыло дорогу самым разнообразным архитектурам. которые до сих пор являются важной частью нау- ки об экспертных системах. . Одной из причин стал полный провал большого проекта по машинному переводу. что одним перцептроном много не сделать. пользуется не слишком доброй славой. В ней было около 600 правил. Суть здесь состоит в том. что им делать. Искусственный интеллект и машинное обучение 15 авансы искусственный интеллект тогда оправдать не мог. посвященная идентификации бактерий. и оценить свою уверенность в этой гипотезе. 494].. и существенно лучше. подобно че- ловеческому мозгу. что один из первых AI-отделов.1. многие математики недовольно поморщатся. В разделе 3.2 мы еще по- говорим о том. чтобы накопить достаточно большой набор правил и знаний о предметной области. Одним из ключевых понятий 1980-х годов был коннекционизм (connectionism): пришедшая из когнитивных наук идея о том. вызывающих серьезные инфекции. который адекватно сделать в те годы было невозможно. причем нейронные сети. основанных на знани- ях (knowledge-based systems). что нужно не пытаться задавать ак- сиоматические формальные системы для последующих рассуждений в них. Поэтому 1970-е годы стали временем расцвета систем. а стро- ить большие ансамбли параллельно работающих нейронов. как-нибудь сами разберутся. а затем рекоменду- ющая антибиотики [65. и ее результаты (она выдавала подходящий метод лечения в 69 % случаев) были не хуже. а говорить «машинное обучение»: так и точнее. А в целом в искусственном интеллекте начались первые коммерческие при- менения. о которых мы будем говорить в этой книге: сверточные сети. В 1990-е годы основной акцент сместился на машинное обучение и поиск зако- номерностей в данных. чем у опыт- ных врачей. очень серьезную по тем временам сумму. Более того. а другой — появившееся понимание того. Так что советуем этого словосочетания не употреблять. которые. На волне всеобщего увлечения искусственным интеллектом многие компании снова начали направо и налево раздавать обещания. как именно они пришли к тому или иному решению. Од- ним из самых ярких примеров таких проектов стала система MYCIN. что вы занимаетесь искусственным интеллектом. и безопаснее. именно с тех пор словосочетание «искусственный интеллект». такие системы могли объяснить. появившийся в компа- нии DEC (Digital Equipment Corporation).. автокодировщики. Позднее они стали прообразами графических вероятностных моделей. когда многие ком- пании не смогли оправдать завышенных ожиданий и лопнули1 . Однако и здесь исследователи и особенно «стартаперы» восьмидесятых не удержались. к 1986 году экономил компании око- ло 10 миллионов долларов в год. по крайней мере в рос- сийской науке.

отвечать на звонки. заверте. менее невинные команды. что нам с вами нечего будет делать и придется всю жизнь бесцель- но сибаритствовать или искать новый. если вы хотите прочитать действительно популярное изложение этих принципов. 579]. и изящные андроиды вот-вот будут прино- сить нам кофе. За- метная часть специалистов считает. Основные источники на эту тему принадлежат перу шведского философа Ника Бострома (Nick Bostrom). что искусственный интеллект заменит людей и при- ведет к тому.16 Глава 1. MIRI). сейчас уже никто не обещает. Yudkowsky). людям. грозит такое развитие событий. очень интересные рассуждения. что сильный искусственный интеллект (strong AI. одного из сооснователей Института исследова- ний машинного интеллекта (Machine Intelligence Research Institute. И это приводит к куда менее оптими- стичным рассуждениям о том. то есть искусственный интеллект человеческого уровня или выше) вполне мо- жет быть создан еще при нашей жизни [380]. становилось все больше.. Нет. автора известной книги «Искусственный интеллект: эта- пы. не проходите мимо книги Элиэзера Юдковского «Гарри Поттер и принципы рационального мышления» (Harry Potter and the Methods of Rationality) [580]. речь не идет о том. а скорее в философском смысле) Элиэзера Юд- ковского (Eliezer S. что улуч- шающий себя искусственный интеллект. чью цель опрометчиво определили как производство канцелярских скрепок. не высокая литература. и американского исследователя искусственного ин- теллекта (не в математическом. 1 Впрочем. Зато самих данных. Но это пока дело будущего. и все.. От биологии к информатике. Этому посвящена вся наша книга. конечно. угрозы. А сейчас пора переходить к настоящему: к тому. так что не станем пытаться вкратце повторить всю историю сейчас. . или We need to go deeper считались особенно перспективными. Это. какие задачи перед собой ставит и какие методы использует. компьютеры становились все быстрее. непродуктивный смысл жизни: этот сцена- рий звучит явно недостаточно катастрофически. но идеи изло- жены очень захватывающе. может для достижения этой цели ненавяз- чиво захватить власть над планетой и превратить ее целиком в фабрики по про- изводству скрепок и космических кораблей. совсем как в 1960-е годы. чем сегодня занимается машинное обучение. стратегии» [52]. особенно с развитием Интернета. 578. снова весьма оптимистично настроены по поводу искусственного интеллекта. В общем. а также обширного и очень интересного популярного изложения принципов раци- онального мышления [581]1 . Однако современные исследователи и футурологи. выносить мусор и выполнять все прочие. к ней быст- ро подтянулись другие. что мы вот-вот построим искусственный интеллект. Но что же все-таки с искусственным интеллектом? Как сейчас поживает из- вечная мечта человечества? Конечно. чем нам. В ито- ге в середине 2000-х годов очередная новая идея наконец-то сработала. как говорится. 206. предназначенных для превращения в скрепки остатка видимой Вселенной. Скорее речь идет о том. авто- ра ряда книг и обзоров об угрозах искусственного интеллекта [53. Начнем с очень краткого обзора всей области в целом.

Аристотель В дальнейшем в книге вы встретите много разных слов. не пугайтесь. Немного о словах: каким бывает машинное обучение Аристотель тоже везде ищет истину. если качество решения этих задач (относительно P ) улучшается с получением нового опыта». что эти части не сущности: ведь о том. централь- ное место в нем занимают не данные (хотя они тоже есть). было сказано. оно на са- мом деле позволяет прояснить некоторые важные моменты.3. а целевая функция. и даже в похожих задачах разные целевые функции могут привести к со- вершенно разным моделям. как части содержатся в каком-нибудь целом. при- мерно такое. собственно. что части сущностей находятся в целых как в подлежащих. которые могут оказать- ся для вас новыми. Выбор целевой функции полностью определяет всю дальнейшую работу. значит. Немного о словах: каким бывает машинное обучение 17 1. что такое. что-то предсказывать. Уметь правильно отвечать на вопросы по «прочитанному» тексту? Сделать синтаксический разбор . Интуитивно понятно. Но часть терминологии. общую канву и структуру машинного обучения. Например. Если вы еще не владеете этой терминологией. Начнем мы с того. как вы будете оцени- вать результаты. Например. Ф. было бы здорово «научить компьютер чи- тать». договориться о том. что находит- ся в подлежащем. заставляющей иной раз переходить к само- му настоящему словарю весьма дробной и утонченной термино- логии. собственно. А. стоит обсудить заранее. машинное обучение (machine learning). обычно все не так уж сложно.1. какое дает Томас Митчелл в классической книге «Машинное обуче- ние» [368]: «Компьютерная программа обучается по мере накопления опыта отно- сительно некоторого класса задач T и целевой функции P . что это. что «обучение» — это когда некая модель каким-то образом «обучается». крайне важно еще «на берегу» определить целевую функцию.3. Можно даже дать очень общее определение «обучаемости». Хотя это определение звучит чрезвычайно обобщенно и абстрактно. скорее всего. что оно находится в нем не так. а потом начинает выдавать результаты. чтобы нам не пришлось когда-нибудь утверждать. Но как? Только путем бесконечного расчленения понятий и путем выяснения тончай- шей терминологии. то есть. Лосев. История античной философии в конспективном изложении И пусть нас не смущает то. Когда вы начинаете решать любую практическую задачу. но сначала нужно определить. так сказать.

которая строит деревья синтаксического разбора предложений (какие слова от каких зависят) по набору деревьев. модель работать не будет.1. построенных людьми для конкретных пред- ложений. из чего оно состоит? Мы показали основную классифи- кацию задач машинного обучения на рис. Общая классификация постановок задач машинного обучения предложения? Показать самые релевантные данному тексту статьи «Википедии»? Разные ответы приводят к разным моделям и направлениям исследований. если лингви- сты размечали предложения на английском языке. и задача состоит в том. Например. Если это предположение нарушится. Два основных класса задач машин- ного обучения — это задачи обучения с учителем (supervised learning) и обучения без учителя (unsupervised learning). Предположение здесь в том. но синтаксис совершенно другой. ожидать от модели разумного поведения не стоит. чтобы продолжить уже известные ответы на новый опыт. что данные. Но все-таки определения Митчелла нам будет недостаточно. где буквы примерно те же. можно бу- дет применить и к новым предложениям. будут чем-то похожи на данные. Основное предположение здесь в том. .18 Глава 1. ко- торый обычно называют обучающим или тренировочным набором данных (training set или training sample — тренировочная выборка). 1. 1. и модель. обученную на некотором наборе деревьев разбора. не входящим в обучающий набор. а потом применили обученную модель к немецкому. От биологии к информатике. test sample). доступные для обучения. выраженный обычно в виде те- стового набора данных (test set. Для «чтения» текста пример обучения с учителем — это обучение мо- дели. При обучении с учителем на вход подается набор тренировочных примеров. иначе никакое обобщение будет невозможно. Какие бывают за- дачи машинного обучения. или We need to go deeper Рис. что деревья разбора строятся по одним и тем же законам. на которых потом придется применять обученную модель.1.

Эта задача чем-то похожа на задачу ре- грессии — нам так или иначе нужно предсказывать непрерывную целевую функ- цию. как можно более похожи. конечно. не укла- дывающиеся в эту несложную классификацию. можно лег- ко придумать «промежуточные» примеры (тот же разбор предложения — к какому классу отнести задачу «построить дерево»?). а точки из разных кластеров были бы как можно дальше друг от друга. по росту человека предсказать его вес. отнесенные к од- ному и тому же кластеру. Немного о словах: каким бывает машинное обучение 19 Задачи обучения с учителем обычно делятся на задачи классификации и регрес- сии. например. сделать прогноз завтрашней погоды. Если же размеченного набора данных. и это деление имеет содержательный смысл: меняются целевые функции и. пред- сказать цену акции или. собак. скажем. очень условно. В задаче классификации нужно поданный на вход объект определить в один из (обычно конечного числа) классов. как следствие. можно выделить семейства генов из последовательностей нуклеотидов. Это приводит к ряду интересных и специфических методов обучения. у которой обычно может быть бесконечно много разных значений.1.3. то воз- никают задачи обучения без учителя. кто из ваших друзей в социальной сети на ней изображен. расста- вить имеющиеся объекты в порядке убывания целевой функции (в поисковой си- стеме она называется релевантностью: насколько данный документ подходит. Типичнейший пример задачи обучения без учителя — это кластеризация (clustering): нужно разбить данные на заранее неиз- вестные классы по некоторой мере похожести так. выделить на фотографии прямоугольник. что- бы выдать его в ответ на данный запрос). или сег- ментировать медицинский снимок. А в задаче регрессии нужно предсказать значение некоей функ- ции. в которых надо «найти какой-нибудь смысл». Деление на регрессию и классификацию. когда входные данные имеют большую . Например. ту самую релевантность. в поисковых и рекомен- дательных системах часто встречается задача обучения ранжирования (learning to rank). чтобы затем эти прямоугольники подать на вход упомянутому выше классификатору. нет. Например. решив задачу кластеризации. соответствующего конкретной задаче. да они нам и не важны. в ко- тором находится человеческое лицо — сделать это необходимо. были как можно ближе друг к другу. процесс обучения. Например. или кластеризовать поль- зователей вашего веб-сайта и персонализовать его под каждый кластер. чтобы легко было понять. какую задачу мы решаем. чтобы точки. Но при этом значений самой функции в данных со- всем нет. разделить фотографии животных на кошек. то типичная задача классификации — это разметка слов по частям речи. Но обычно ясно. Если продол- жать пример с языком. где же там опухоль. как можно менее похожи. или по фотографии человеческого лица понять. Она ставится так: по имеющимся данным (в поисковой системе это будут тексты документов и прошлое поведение пользователей) отранжировать. Еще одна часто встречающаяся задача обучения без учителя — это снижение размерности (dimensionality reduction). лошадей и «все остальное». Имеют значение только результаты сравнения этой функции на разных объектах (какой документ будет выше другого в поиско- вой выдаче). а есть просто данные. А есть и откровенно иные виды задач.

к нейронным сетям. Например. а задача состоит в том. а хочется оценить рас- пределение p(x). . во все том же при- мере с синтаксическим разбором набрать сколько угодно неразмеченных текстов не представляет никакой сложности. третий и самый общий класс задач обучения без учителя — зада- ча оценки плотности: нам даны точки данных {x1 . А тем читателям. То есть. Или. а особенно в раз- деле 5. Это можно рассмат- ривать как частный случай общей задачи выделения признаков (feature extraction). какие-то априорные представления о том. и мы будем подробно говорить об этом на протяжении всей книги. по представлению меньшей размерности можно будет достаточно успеш- но реконструировать исходные точки большой размерности. что такое «размеченные данные» для рас- познавания речи. например. Это адский труд. чтобы построить представление данных меньшей размерности. ко- торое тем не менее будет достаточно полно отражать исходные данные. когда агент. но даже целая армия лингвистов-фонологов бу- дет двигаться достаточно медленно. От биологии к информатике. По-настоящему размеченные данные для распознавания — это звуковые файлы. обычно делегируемый младшим научным сотрудникам. В главе 9 мы с вами встретимся с другой постановкой задачи — обучением с под- креплением (reinforcement learning). откуда взялись эти точки. далеко не все. возможно. особенно если тексты достаточно длинные. и нейронные сети тоже отчасти ее и решают. из которого они получились. сделать отличный протокол для A/B-тестирования. или полуконтролируемым обучением (английский термин semi-supervised learning устоялся куда больше). Такую ситуацию иногда называют обучением с частичным привлечением учителя.5. Цель агента — получить как можно большую награду с течением времени. . к ней можно многое свести. И наконец. в которых вручную отмечены (или хотя бы проверены) границы каждой фонемы. когда неразмеченные примеры найти очень легко. Но сейчас мы все же прекратим перечислять разные области машинного обучения и будем двигаться к той области. размерность будет исчисляться десятками тысяч. .20 Глава 1. где речь пойдет об автокодировщиках. А неразмеченных звуков живой человеческой речи вы можете записать сколько угодно. . которая нас более всего интересует в этой книге. какие действия в конечном счете ведут к успеху. на- пример. здесь может быть недо- статочно. а для этого неплохо бы понять. Это очень общая постановка задачи. и с ней мы тоже не раз столкнемся в этой книге. а если фотографии — миллионами). просто включив диктофон на запись. а размеченные получить сложно.xN } и. конечно же. находясь в некоей среде. задумайтесь о том. если у вас на входе разбитый на слова текст. произво- дит те или иные действия и получает за это награды. или We need to go deeper размерность (например. каждого звука человеческой речи. Нередко в жизни возникает нечто среднее между обучением с учителем и обу- чением без учителя. Так можно обучиться играть в разные игры или. мы рекомендуем два уже ставших классическими учебника: книгу Кристофера . Просто установить соответствие между звуковым файлом с ре- чью и текстом. Так обычно получается тогда. скажем. а вот вручную нарисовать даже одно дерево нелегко. которые хотели бы узнать о машинном обучении больше. И это.

аксон. по нашему мнению. съежился и сократился в объеме.1. необходимо (как выразилась о ком-то одна девица. что дела- ют транзисторы в процессоре? Тема эта неисчерпаема. чем компьютер. сингулярность близко. В обеих книгах последовательно описывается вероятностный подход к машинно- му обучению. Например. и тем. что делают нейроны в мозге. с решением которых человеческий мозг до сих пор справляется2 лучше и быстрее. О педантизме Когда мы говорим о задачах машинного обучения. основанный на теореме Байеса. поэтому здесь мы приведем только пару локальных примеров. применить и к глубо- кому обучению. и тем более в пространствах самих объектов для обучения. но там подход будет противоположным: мы будем по-прежнему использовать нейронные сети как «черный ящик». но пока людям это удается только частично1 .. а математическая структура тех сложных геометрических конструкций. математи- чески наиболее полный и корректный взгляд на происходящее с обучающимися моделями. мы быстро сталкиваемся с за- дачами.4. Строгий математический подход хотелось бы. которые будут у нас полу- чаться и в пространствах признаков. мы лучше обращаемся с естественным язы- ком: можем прочитать. когда вы это читаете. Да и вообще мы хорошо умеем обучаться в широком смысле это- го слова — компьютерные программы пока очень далеки от человеческого уровня обобщений и поиска взаимосвязей между разнородной информацией. по- можете закрыть этот досадный пробел? 1. и много коротких отростков. . но они начнут помогать нам делать байесовский вывод и приближать сложные распределения. Монтень. с помощью которых продемонстрируем основ- ные различия и отчасти мотивируем отдельные особенности нейронных сетей.4.. читатель. 2 Или до недавнего времени справлялся: прогресс все ускоряется. Как знать. 1 О нейробайесовских подходах мы поговорим в главе 10. дендритов. практически не изучена. Что же де- лает человеческий мозг таким эффективным? Как он умудряется достичь таких высот? В чем разница между тем. может быть. М. все уже решено. может быть. У каждого из них есть один длинный отросток. вы. Особенности человеческого мозга Чтобы вместить в себя столько чужих мозгов. и к тому же та- ких великих и мощных. чтобы собственный мозг потеснился. как знать. Это. Человеческий (да и любой другой) мозг состоит из нейронов. конечно... понять и содержательно изучить книгу. Особенности человеческого мозга 21 Бишопа (Christopher Bishop) Pattern Recognition and Machine Learning [44] и кни- гу Кевина Мерфи (Kevin Murphy) Machine Learning: A Probabilistic Approach [381]. первая среди наших принцесс). а современные ком- пьютеры испытывают большие проблемы с ответами даже на очевидные для чело- века вопросы.

что в биологии все нечетко. идущий из колонок вашего компьютера. и называются синапсами. слева 1 На самом деле это только один возможный тип нейронов. когда активация соседнего нейрона повышает вероят- ность активации нашего. бы- вают с одним аксоном и без дендритов.22 Глава 1. Самая простая и яркая иллюстрация этого — стереозвук. когда активация сосед- него нейрона. давно уже измеряющаяся в гигагерцах. Бывают нейроны без аксона вовсе. у которых один аксон и много дендритов. провести аналогию между нейронами и транзисторами. Активация нейронов зависит от сигналов. частота подачи сигналов маленькая. Связей в мозге очень много: порядка 1011 (сто милли- ардов) нейронов. Но при этом нейрон может находиться в двух разных состояниях: когда он находит- ся в «выключенном» состоянии. определить направление на его источник. может быть как положительная (excitation). подавляет активность. На каждом такте гейт од- ного уровня передает сигнал следующему уровню. в которую мы не будем вдаваться. Связь в синапсе. Их последовательность можно довольно хорошо приблизить пуас- соновским случайным процессом. приходящих через синапсы и затем дендриты от других нейронов. частота подачи импульсов (firing rate) сильно уве- личивается. В компьютерах тоже есть гейты. Связи между дендритами и аксонами тоже имеют сложную структуру. дело в том. в доисторические времена для людей было крайне важно понять. «включается». — это и есть частота такой синхронизации. конечно. что нейрон работает стохастически: он выдает электрические сигналы через случайные проме- жутки времени. что в нашем мозге содержится порядка 1014 –1015 (сто триллионов) синапсов. и делают они это хоть и несколь- ко миллиардов раз в секунду. интенсивность которого меняется в зависимо- сти от того. то есть получается. Каждый нейрон время от времени посылает по аксону нервный импульс (по- английски он называется spike). но все они встречаются в достаточно редких ситуациях. так и отрицательная (inhibition). бывают с одним дендритом. вы можете. но уже на уровне подачи нервных импульсов мы ви- дим первое важное различие между мозгом и компьютером. что на самом деле нейроны хорошо умеют синхронизироваться и очень точно засекать весьма корот- кие промежутки времени. и синхронизация между ней- ронами была бы желательна. из которых состоит процессор. который имеет электрическую природу. кстати. но они делают это совершенно не стохастически. Очевидно. но строго одновременно. От биологии к информатике. Дело в том. он никогда не останавливается и продолжает подавать сигналы. по команде. или We need to go deeper которые связываются с аксонами других нейронов1 . Наш мозг однозначно состоит именно из биполярных нейронов. у каждого из которых в среднем 7000 связей. обменива- ющиеся сигналами друг с другом. опираясь исключительно на звук. возбужден нейрон или нет. часто не у людей. Хотелось бы. . Когда вы переходите от одной стороны комнаты к другой. Пока нейрон жив. а когда он возбуждается. а с очень жесткой синхронизацией: частота процессора. Возможно. наоборот. но достичь ее у создавшей нас эволюции просто не получилось? Вовсе нет: простейшие наблюдения показывают.

связанных с органами чувств. но модель. с одной стороны.4. до абстрактных понятий. Так что на самом деле мы очень плохо понимаем. Кстати. что аксоны могут быть очень длин- ными: например. Это значит. это могло бы привести к вполне разумной вычислительной мощности. на самом деле сильно упрощена. И если разделить его на скорость звука (340 м/с). содержит огромное число нейронов и еще больше связей между ними. Все эти связи время от времени срабатывают. что с этой точки зрения мозг больше похож на видеокарту. Поэтому один аксон может с легкостью пересечь чуть ли не весь мозг. когда начинают распознавать лицо и делать много других увлекательных вещей. меньше десятка! То есть мозг. как это устроено в зрительной коре. То есть ваш мозг в принципе мог бы работать как компьютер с частотой.1. достигнутой в архитектуре мозга. в науке пока не сложилось. и искусственные нейронные сети — это не . Но почему- то мозг этого не делает. и к ви- деокартам мы действительно еще вернемся. что позволяет определить направление с хорошей точностью. а у мозга цепочки короткие. А частота импуль- сов в аксонах бывает от 10 Гц в неактивном состоянии до примерно 200 Гц во вре- мя самой сильной активации.. сантиметров двадцать. множество за- мкнутых цепочек связанных нейронов. в которой нейроны делятся на «уровни» (как в глубокой нейронной сети) и акти- вация аккуратно распространяется от нейронов. десятые доли миллисекунды. Можно сказать. что связи между отдельными нейронами активируются минимум за десятки миллисекунд. Второе важное замечание про работу человеческого мозга: мы распознаем лицо человека за пару сотен миллисекунд. обрабатывая их в синхронном режиме. как работает настоящий человеческий мозг. чем буквально несколько нейронов.. вы отме- чаете разницу во времени. зачем все это нужно и как используется. Расстояние между внутренними ушами не слишком большое. скорее всего. Еще одна важная особенность состоит в том. нейроны отлично распозна- ют. В гла- ве 5 мы немного поговорим о том. Особенности человеческого мозга 23 или справа хрустнула ветка под лапой тигра. а также неожиданных и непонятных связей нейронов из совершенно разных областей мозга. получится очень короткий интервал. С учетом огромной степени параллелизации. но с другой — устроен очень плоско по сравнению с обычным процессором. чем на процессор. измеряющейся килогерца- ми. который. В человеческом мозге есть огромное число «горизонтальных» связей между нейронами (когда связаны друг с другом нейроны одного уровня). о параллелизации. в свя- зи с чем структура связей между нейронами в мозге чрезвычайно сложная. а затем обратно для активации мышечной ткани. когда звук приходит в левое и правое ухо. и в полном цикле распознавания человеческого лица не может быть последовательной цепочки активаций длиннее. Процессор в компьютере исполняет длинные последовательные це- почки команд. Чтобы узнать направление. но единой картины того. зато работает он асинхронно (стохастически) и с очень высокой степенью парал- лелизации: нейроны активируются сразу во многих местах мозга. от спинного мозга в конечности идут аксоны длиной около мет- ра. тем не менее.

что мать-природа (точнее. для вос- становления сетчатки глаза [422]. он пришел к выводу. Такая система взглядов была. и все они представляют собой особые архитектуры нейронов. Так. да и во всей книге). 1824–1880) — французский хирург и антрополог. а пользовавшаяся 1 Поль Брока (Paul Pierre Broca. есть «чатбот». что тогда не очень приветствовалось). который обучился языку. их можно условно разделить на электрические. В человеческом мозге много узко специализированных участков. По большому счету.24 Глава 1. конечно. Брока был фак- тически основателем современной антропологии: в середине XIX века он провел ряд исследований. а большинство «при- ближенных к биологии» моделей стараются имитировать стохастические процес- сы порождения нервных импульсов. не удается подбирать правильные предлоги. и естествен- ные. в котором уровень активации нейрона — это нелинейная функция ак- тивации от взвешенной суммы входов (мы подробно рассмотрим перцептрон в гла- ве 3. наоборот. . что в нейробиологии и информатике есть целое направ- ление исследований. Исходя из этих исследований. выделяли в нем зоны. Многие исследования мозга. открытый Полем Брока1 еще в 1865 году. Основателем этой теории считается Галилео Галилей. но и для разработки «протезов» нейронов. Используются эти модели в наше время не только для интереса. что человек теряет при травмах того или иного отдела мозга. От биологии к информатике. только это и было доступно первым нейробиологам: они могли изучать. путаются звуки в словах. созданные для решения оптимизационных задач. больной по-прежнему все понимает. центр Брока. или We need to go deeper попытка приблизиться к реальной структуре. что размер моз- га напрямую связан с уровнем интеллекта. Зато очень близко к нашей теме другое важнейшее свойство человеческого моз- га — его пластичность. так что углубляться в него мы не станем. есть «зву- ковая карта». основал первое в Европе общество антропологии и журнал «Антропологическое обозрение». например. а достаточно абстрактные модели. которые прогнозируют вероятность (и частоту) активации как функцию от входного воздействия [395]. за понимание речи на слух. отвечает за артикуляцию речи. в них выход нейрона вовсе не зависит от времени. специально подогнанные под соответствующую задачу еще на генетическом уровне. сравнивая характеристики скелетов разных времен (пришлось раскапывать могилы. можно подумать. связанное с моделированием биологических. вполне логична на ранних этапах изуче- ния мозга. Настолько абстрактные модели. отвечающая за зрение. обрабатывающая звук. особенно ранние. На- пример. в наше время ученому изрядно бы досталось: исходя из того. Но это направление очень далеко от темы нашей кни- ги. А зона Вернике отвечает. а также разделил расы на «высшие» и «низшие» на основе своих сравнений размеров мозга. Здесь стоит отметить. «настоящих» нейронов. отвечающие за те или иные функции. Если центр Брока поврежден. но при попытках говорить получа- ется ерунда: распадается грамматика. Разных моделей много. предсказывающие напряжение на клеточной мембране нейрона [480]. мозг самого Поля Брока сейчас находится в «Музее Человека» в Париже. как перцептрон. Впрочем. мать-эволюция) создала человеческий мозг подобно компьютеру с детально раз- работанной спецификацией: есть «видеокарта». например. что мужчины в среднем значительно умнее женщин. не представляют большого интереса для биологов. Кстати.

а не в том. которые раньше «отвечали» за утра- ченные органы. видимо. — на специальную матрицу электродов. И даже еще более того. — совсем как у летучих мышей (ну ладно. пиксел за пикселом. начинают обучаться чему-то новому. Исследования нейропластичности. что на нейропластичности ос- нован феномен фантомных болей: нейроны. и дообучение могло бы состоять все- го лишь в том. но и происходит непрерывное обновление самих нейронов (нейро- генезис). не так хорошо. чтобы научиться передавать данные из необычной «точки входа» в нужные участки коры головного мозга (собственно. На- пример. которые активируются в зависимости от своих «предков» и при акти- вации передают друг другу сигналы. пытается обучить человека видеть. некоторые слепые люди развивают в себе способность к эхолокации. в этих примерах можно было бы сказать. что ося- зательная информация. как обычными глазами. осно- ванные на нейропластичности. что у мозга уже «есть аппарат» для обработки изображений. Однако это вовсе не обязательно так! Исследования нейропластичности пока- зывают. Итак. как у летучих мышей. уже сейчас разрабатываются очень интересные устройства. и «перенаправляет» ее в зрительную кору. конеч- но). Считается. Некоторые слепые могут просто щелкать языком и определять окружающие объекты.1. непосредственно стимулирующие кохлеарный нерв. Однако есть примеры обучения и совершенно новым. чтобы научиться обрабатывать с нуля эти данные. а ско- рее напоминает зрительные образы. что человеческий мозг состоит из связанных между собой нейронов. даже изначально совершенно чуждым ему. да и просто тот факт. Более того. опре- делению местоположения окружающих объектов по отраженному от них звуку. Да и обычный кохлеарный имплантат. что нейроны из самых разных областей мозга могут при необходимости принимать на себя функции. Особенности человеческого мозга 25 большой популярностью в XIX веке френология по сути своей основана именно на этом предположении. обычно им не свойственные. Мы выяснили. основан на схожем принципе: он не пытается симулиро- вать слуховые ощущения во внутреннем ухе. получая сигналы с укрепленного на них сонара. что все нейроны в мозге . чтобы об- рабатывать совершенно новые сигналы.. что мозг может адаптировать- ся к новым источникам информации. укрепленную на языке (язык здесь нужен только потому. Система BrainPort. так оно и происхо- дит). поступающая с языка. конечно). по всей видимости.4. на котором много нервных окончаний). Сейчас уже ясно. каким-то образом распознает. то есть мозг. мы узнали. нехарактерным для человека вещам. А уже существующие нейроны могут переобучиться для того. больше не похожа на вкус еды. а другие отделы мозга по при- вычке интерпретируют новые сигналы как идущие от уже давно не существующих конечностей.. языком! Информация от укрепленной на голове камеры посту- пает — прямо в цифровом виде. А в других экспериментах вполне зря- чие люди обучались эхолокации. В результате че- ловек действительно способен обучиться видеть (не так. что в нашем мозге не только постоянно образуются новые связи между нейронами (но- вые синапсы). например. что это очень чувствительный орган. которые уже сегодня помогает сотням тысяч слабослышащих людей. а оцифровывает звук и подает его на электроды. прислушиваясь к отзвукам [527].

не очень-то похоже на то. А у русского читателя чердак поедет: вон оно как умные-то люди. Митьковские пляски Итак. убеждают нас в том. оказывается. Можно сказать. маркиза де Сада.1. . или We need to go deeper работают примерно одинаково. насколько точно соответствует эта система поня- тий реальности. А в следующем разделе сделаем небольшое лирическое от- ступление и поговорим о том. весьма интуитивно). фактически конечных целей про- граммы по созданию искусственного интеллекта — это понять или хотя бы просто 1 Недавно вышедшая научно-популярная книга о машинном обучении от Педро Домингоса так и называлась: The Master Algorithm (в русском переводе — «Верховный алгоритм») [125]. который может обучать конгломераты из нейро- нов на самых разных данных. В разделе 3. к примеру. Основная идея искусственных нейронных сетей — собрать сеть из простых нейронов. созданном эво- люцией. чем те модели. а о зрительной коре подробно поговорим в разделе 5. как устроены модели обучения нейронов. сгруппировать вместе много-много искусственных нейронов и получить готовый к употреблению мозг. что делается у нас в голове. мы выяснили (разумеется. почему то. что одна из далеких.5. как работает настоящий человече- ский мозг. Шинкарёв. то всегда остается еще не известным. Однако дальше путь развития искусственного интеллекта отошел от приро- ды. активирующихся или не активирующихся в зависимости от снабжен- ных поддающимися тренировке весами. Физика и философия. заложен некий «единый алгоритм». что в мозге. настоящие нейроны устроены значительно сложнее. выделяя признаки из потока неструктурированной информации1 . ухмыльнется дико и пой- дет дальше.. и во всей этой книге). Мы еще не раз вернемся к тому. которые мы будем обсуждать в этой книге. При создании искусственного интеллекта очень естественно задаться вопро- сом: можем ли мы этот единый алгоритм тоже как-то промоделировать? Очень заманчиво было бы построить модель этого «единого алгоритма». Гейзенберг. Француз прочитает. Пределы нейробиологии: что мы на самом деле знаем? Даже если достигнута полная ясность. От биологии к информатике. что мы делаем в искусственных нейронных сетях (а значит. 1.26 Глава 1. Часть и целое С русским читателем следует быть ответственнее.4 мы увидим. В.. почему достижения нейробиологии на макроуровне пока еще не вполне годятся на роль образцов для подражания. похоже. что весь мозг функционирует по некоему «единому алгоритму». по которому мозг может обу- чаться. В. и поговорим о том. — действительно позаимствована у при- роды.

смотреть. В школе любозна- тельный Митио собрал в гараже работающий ускоритель. мы искренне рекомендуем его основные книги. включая Cell. что задачу перед собой ученые поставили гораздо менее амбициозную. Но насколько можно доверять «современному пониманию»? Мы ведь не можем понять мозг целиком и осознать. Роди- тели Каку познакомились в так называемом сегрегационном лагере «Тул Лейк» (Tule Lake). Например. Сам чип процессора состоит из всего 3510 транзисторов. что наши методы дают что-то похожее на правду? В своей недавней яркой работе «Может ли нейробиолог понять микропроцес- сор?»2 [263] Эрик Джонас и Конрад Кординг пытаются проследить. Для анализа Джонас и Кординг использовали классические методы. Как вообще проверить. Такие процессоры устанавливались в Apple I и Atari VCS. Давайте. как мозг функционирует.3.1. чем изучение настоящего мозга. перепечатанной в начале 2000-х годов тремя разными журналами. насколько бы получилось у методов современной нейробиологии проанализировать какой- нибудь очень простой «мозг» на примере процессора MOS 6502. часто довольно грубых (как. 1947) — американский ученый японского происхождения. мы не станем специально вводить читателя в заблуждение: если мы пишем что-то о мозге. который Ми- тио Каку1 заслуженно называет «самым сложным объектом во Вселенной» [268]. например. что делают отдельные нейроны и как это все комбинируется в тот удивительный объект. название статьи – отсылка к уже ставшей классической статье Юрия Лазебни- ка «Может ли биолог починить радиоприемник» [299]. значит. р. что именно тако- во современное понимание того. однако. «Физика будущего». А сейчас заслуженный ученый Митио Каку известен широкой публике как популяризатор науки.5 Гбайт данных за секунду эмуляции. а полноценные данные о состоянии каждого транзи- стора после каждого такта — это такой уровень детализации.5. куда на время Второй мировой войны были депортированы многие жившие в США японцы. мы можем только проводить какие-то локальные исследования. травмы. к классическим играм Atari мы еще вернемся в разделе 9. особенно интересная в контексте этой книги «Будущее разума» и другие. Пределы нейробиологии: что мы на самом деле знаем? 27 моделировать этот «единый алгоритм» и построить программы. кстати. немного поиграем в адвоката дьявола. что «мозг работает так» или «мозг работает эдак». Если сравнить это с огромными возможностями человеческого мозга. Мы часто в этой книге ссылаемся на утверждения о том. которыми нейробиология изучает настоящий человеческий мозг. о котором современ- ная нейробиология пока и мечтать не осмеливается. они специально 1 Митио Каку (Michio Kaku. пытаясь получить антивещество. при которых большие фрагменты мозга перестают работать). что делает человеческий мозг? Конечно. многие из которых переведены на русский язык: «Физика невозмож- ного». 2 Кстати говоря. В этой статье Лазебник пытается проанализировать сломанный ра- диоприемник «Океан» методами биологических наук со столь же неутешительными выводами. хотя бы из третьих (но надежных!) рук слышали. что меняет- ся под влиянием тех или иных внешних воздействий. . которые могли бы его использовать и обучаться примерно так же. которая могла запускать те самые классические игры Donkey Kong и Space Invaders и была способна порождать для дальнейшего анализа около 1. видно. как это делаем мы с вами. что делает каждый нейрон по отдельности. для исследования была построена точная цифровая реконструкция чипа. Но действительно ли все это похоже на то.

Но ведь в реальной нейробиологии мы тоже совершенно не умеем изолировать настолько простые. Он стал для современной генетики примерно тем же. и чисто случайно именно эта часть реализации ока- зывалась нужна лишь в одной игре. и затем начали повреждать отдельные транзисторы.3 миллиарда евро проекту Генри Маркрама (Henry Markram) со . Конечно. совсем недавно стало известно о важном успехе на этом пути: проект OpenWorm [404. чем хотелось бы его авторам. которые были необходимы для за- пуска каждой из трех рассмотренных игр (Space Invaders. движется успешно. смысла в этом было бы больше. Система эта состоит из целых 302 нейронов (одна из самых простых нерв- ных систем в мире) и 95 клеток мышечного волокна. не говоря уж о человеческом мозге.28 Глава 1. без такого транзистора одна игра не запускалась. реализуемый соглас- но философии открытого программного обеспечения. как она приводит к движениям червя. как могло показаться: в 2015 году координатор проекта Стивен Ларсон признавал. как сложно ученым по- настоящему убедительно если не понять.. и мы не будем здесь подробно их объяснять). о нем опублико- ваны тысячи работ.. показывающий огромную сложность изучения и моделиро- вания настоящих мыслительных процессов — это то. чем муха дрозофила была для классической. elegans. Donkey Kong и Pitfall). Можно было бы предположить. например сложение. elegans. а две другие работали нормаль- но. elegans Genetics. чтобы пол- ностью моделировать его нервную систему и то. что эта часть «мозга» реализует сложение. что мы еще очень далеки от понимания более крупномасштабных нервных си- стем. часто использующиеся в со- временной нейробиологии (они уже сложнее. что они пока «прошли только 20–30 % пути». Но мечтать не запретишь: в 2013 году Ев- росоюз выделил 1. базовые функции. что эти транзисторы являются ключевыми для именно этого конкретного «поведения». они сумели вы- делить отдельные подмножества транзисторов. но дело оказалось совсем не таким простым. со столь же переменным успехом: иногда получаются верные умоза- ключения. От биологии к информатике. пусть он и движется медленнее. если бы исследователи заранее знали. за что они «от- вечают». а начать решили с того. но не менее часто получаются неверные. и никакого способа отличить одни от других «нейробиология Atari» не дает. и практически все механизмы его нехитрого нематодьего существования давно известны ученым. Этот червь — один из самых хорошо изу- ченных современной биологией организмов. то хотя бы просимулировать даже про- стейшие системы нейронов. 536] начал работу по симуляции нервной системы нематоды C. или We need to go deeper симулировали повреждения отдельных транзисторов. Проект OpenWorm поставил целью сделать достаточно достоверную модель всех 959 клеток C. Например. Джонас и Кординг применяют и другие методы. чтобы узнать. Другой пример. Мы не слишком сомневаемся в успехе проекта OpenWorm. И действительно. есть даже специальная конференция под названием C. Его история достаточно наглядно показы- вает. В рамках MOS 6502 они могли позволить себе попробовать повредить буквально каждый транзистор по отдельности. Проект. Вот только на самом деле не было ничего подобного: большинство этих транзисторов на самом деле реализовывали простые функции.

как будто они были бы природным объектом.1. данным нам для изучения (собственно. Маркрам. о которых мы будем говорить в этой книге. Обучен- ная глубокая сеть здесь выступает как «черный ящик». наши знания о мозге не очень де- тальны. которые для них пока недоступны. что все же представляют собой математическую абстракцию). Да и ставить перед собой цель как можно точнее смоделировать человеческий мозг нейронной сетью — возможно. как работает мозг. конечно же. не пере- стают удивлять исследователей. что делают нейронные сети. распознающие изобра- жения (даже такие простые изображения. В этой книге мы увидим примеры такого подхода. а блестящий нейробиолог. В этой книге мы увидим несколько очень удачных параллелей между алгоритмами и ар- хитектурами. есть работы. обманом втершийся в доверие лиц. вовсе нет. он уже руководил вполне успешным Blue Brain Project. Конечно. и поговорим о задачах. приходя- щие из нейробиологии. использовавшимися в нейронных сетях. До задачи «повторить архитектуру чело- веческого мозга» мы. Например. совершенно неуместны? На наш взгляд. Значит ли это. по- строив компьютерную модель маленького кусочка мозга крысы (одной колонки неокортекса). проект всей его жизни. что результатом здесь на данный момент могут быть только более удачные модели для решения конкретных прикладных задач. В рамках проекта планировалось построить компьютерную модель всего человеческого мозга целиком. и тем. как работают глубокие сети. не лучшая идея. как устроен наш мозг. в широко из- вестной работе [249] рассказано. и вся эта инициатива была серьезно реструктурирована. Просто надо понимать. как черно-белые рукописные цифры). не мошен- ник. с той лишь разницей. Моделировать мозг — его давняя мечта. и результаты исследований того. Пределы нейробиологии: что мы на самом деле знаем? 29 скромным названием Human Brain Project (HBP). они таковым и являются. и представлениями совре- менной нейробиологии о том. все-таки еще не доросли. с помощью микроизменений. посвященные буквально изучению свойств глубоких нейронных сетей.5. со всеми его миллиардами нейронов и триллионами синапсов. интересные свойства кото- рого мы пытаемся понять. на что сейчас способны глубокие нейронные сети. что мы ничего не знаем о мозге и любые попытки провести ана- логии между тем. скорее всего. для того. Однако все это совершенно не запрещает нам вдохновляться тем. Но все же цель HBP на данный момент. неудивительно. не влияющих на человеческое восприятие. пожалуй. принимающих решения о будущем евро- пейской науки. Хотя в данном случае люди сами запрограмми- ровали этот «мыслительный аппарат» и твердо знают. использовать архитектурные идеи. чтобы улучшить работу нейронных сетей. как работает каждый кон- кретный «нейрон» сети. как работает мозг. что начавшийся с большой помпой проект уже через год подвергся суровой критике из-за плохого управления. как можно обмануть сети. Да и сами глубокие сети. Однако многие другие задачи уже вполне доступны! В заключительном раз- деле этой главы мы дадим краткий обзор того. слишком амби- циозна. а с 2015 года Маркрам был отстранен от руководства. . никак нельзя напрямую переносить на функционирование человеческого мозга (да и крысиного лучше поостеречься) — слишком много там еще непонятного для нас.

мы решили мотивировать читателей. Х. и в выборе между ними уже участвует не только обработка самого звука. а где еще остается много работы? Первым значительным индустриальным приложением современных глубоких нейронных сетей. какие задачи пытается решать машинное обучение. От биологии к информатике.30 Глава 1. а также рассказом об их ограничениях и даль- нейших перспективах. мы увидели. Анекдот Итак. а потом взять от этих логарифмов обратное преобразование Фурье. Но прежде чем углубляться в суть дела и начинать рассказывать о математике нейронных сетей. Не только мужчина любит женщину. стали успехи в распознавании речи. Итак. получив кепстр (это слово получилось обращением первых четырех букв слова «спектр») [379]. Ортега-и-Гассет. нам следует учесть все многообразие проявлений любви. 2) затем эти признаки превращаются в гипотезы. что революция глубокого обучения дей- ствительно начинает необратимо менять ландшафт машинного обучения. а языковые моде- ли представляли собой обычно сглаженные распределения n-грамм. да и во- обще мира вокруг нас. Вся эта кни- га будет посвящена тому. Структура полноценно- го распознавателя речи выглядит так: 1) сначала звуковой сигнал преобразуется в признаки специального вида. 1 MFCC расшифровывается как mel-frequency cepstral coefficients. для чего же используются нейронные сети сегодня. фонемы из них распознавали с помощью скрытых марковских моделей [119]. но и языковые модели. которые предлагают варианты конкретных фонем для каждого окна в звуковом сигнале. то есть мо- дели. которые оценивают вероятность следующего слова при условии нескольких предыдущих [281] (мы подробно поговорим о языковых моделях в разделе 7. как нейронные сети с ними справляются. получив спектр. мать любит своего ребенка. а женщина любит мужчину. или We need to go deeper 1. затем перейти к логарифмам амплитуд частот на шкале мелов. а ве- рующий любит Бога. Блеск и нищета современных нейронных сетей Даже если мы воздержимся от столь вселенского охвата.6. . которое подтвердило. кратким обзором самых ярких при- менений глубоких нейронных сетей. 3) потом гипотезы о фонемах объединяются в гипотезы относительно произ- несенных слов. то есть от сигнала нужно сначала взять преобразование Фурье. да и себя. где уже достигнуты самые яркие успехи. До глубоких сетей первые два шага этого процесса выглядели так: сначала зву- ковой сигнал превращался в так называемые MFCC-признаки1 . мы лю- бим также искусство и науку.2). Этюды о любви А теперь — слайды.

В наши дни самые глубокие сети — это именно сверточные сети для обработки изображений или видео. чем MFCC [260]. Кроме того. чем люди! В 2011-м глубокие сверточные сети лучше людей распознавали дорожные знаки на фотографиях [162. но представления. Сюда же примыкает и анализ музыки: хотя там успехи пока не столь впечатля- ющие.6. быстро стало ясно. и сейчас фактически все проекты для распознавания речи. и Google [7. и IBM [346]. в 2009 году появи- лись первые реализации нейронных сетей на графических процессорах [434]. Однако после начала революции глубокого обучения прогресс в обработке изображений тоже резко ускорился. . а с 2014 года Facebook распознает лица наших друзей не хуже. основанных на скрытых марковских моделях. Первые такие исследования. Основные результаты здесь были достигнуты сначала благодаря тому.1. и многие примеры будут с ним связаны). она была всегда: с 1980-х годов в группе Яна ЛеКуна изображения обрабатывали именно нейронны- ми сетями. что MFCC-приз- наки тоже можно улучшить путем обучения: нет. 295]. они могут насчитывать несколько сотен слоев. то есть полностью от начала до конца с учителем [96]. которая отлично подходит для обработки именно таких входов. что очень важно для автоматического вождения авто- мобилей. гораздо более «сырые». можно было «отделить» от самих декодеров и отдать глубоким сетям. в которой нейронные сети никогда полностью не пропадали из виду. включая виртуальных помощников вроде Google Now и Apple Siri. это редкий пример области. последние модели для распознавания и порождения музыки тоже работают на глубоких нейронных сетях [55]. обзоры [109. основанный на скрытых марковских моделях. а еще через пару лет по- явились первые системы. появились около 2010 года (см. работают на глубоких нейронных се- тях. 216]. В 2009–2010 годах глубокие свер- точные сети выиграли ряд соревнований по распознаванию символов [396] и даже распознаванию видео с камер слежения [259. 205]. сверточным сетям мы посвятим главу 5 [18. чем мы сами [112]. 430].6. К тому же времени относится и первый взлет сверточных нейронных се- тей. что выделение при- знаков для декодеров. которые распознавали изображения лучше. 116]). что все крупнейшие игроки на рынке распознавания речи пере- шли на нейронные сети: и Microsoft [481]. Более того. В це- лом. Точнее. Блеск и нищета современных нейронных сетей 31 Глубокие сети начали с того. то есть сначала это было во многом обучение без учителя. а уже к 2012-му это привело к тому. основанные на глубоких сетях с предобучением без учителя. сети пока что не начинают работу непосредственно с необработанного звукового сигнала. что заменили собой распознаватель. Вслед за речью пришло время обработки изображений. специальной архитектуры. пода- ющиеся на вход современным системам распознавания. Но вскоре появились и прорывные результаты о распознавании end-to-end. как картинки. И началось: в 2010 году были серьезно превзойдены давние результаты на клас- сическом датасете распознавания рукописных цифр MNIST (мы расскажем о нем в разделе 3. что дало огромный импульс всем связанным со сверточными сетями исследованиям (видеокарты для сверточных сетей особенно полезны).

в недавней яркой работе исследователей из NVIDIA глубокая сверточная сеть получала на вход картинку с установленной на автомобиле камеры. так глубокие сети применяются в беспилотных автомобилях (self-driving cars). и даже Яндекс. а на выход подавала уже непосредственные команды управления рулем. что такие обзоры писать одновременно и очень просто — примене- ний у глубоких сетей пруд пруди. . способный приблизить функцию «оценки позиции». являющихся од- ними из лучших онлайн-профессионалов мира [63]. есть куда стремиться. которые считались крайне сложными для компьютера1 . Последний громкий успех глубоких сетей в обучении с подкреплением — созданная DeepMind программа AlphaGo. вот яркий пример того. есть. На- пример. которые сейчас уже вовсю разра- батывают не только Tesla и Google. 158]. и «более серьезные» приложения (в кавычках. если быть точным. где сейчас книга?». будет интересно — и очень сложно. 1Кстати. в компьютерную игру с немалой долей микроменеджмента люди пока что играют заметно лучше. в которую компьютеры пока еще не могут превзойти человека. Вот и сейчас: мы собирались рассказать о том. на самом деле очень серьезно). Кроме игр. мягко скажем. Глубокие сети здесь можно использовать и напрямую. в начале 2017 года. конечно. Во-первых. которая сумела обыграть одного из лучших игроков мира в го — одну из последних клас- сических игр с полной информацией. глубокое обучение уже находит применение и в другой тра- диционной области обучения с подкреплением — роботике. глубокие сети можно использовать для обработки сигналов. хотя большие успехи в области задач обработки естествен- ного языка несомненны. об этом мы поговорим в разделе 9. Например. Вася взял шоколадку и вернулся в комнату. Глубокие сети оказались как нельзя кстати. которая очень уверенно обыграла команду из четырех человек. и вроде бы все полу- чилось [142]. то есть обра- батывать содержащуюся в тексте информацию. в частности визуальных. а затем появилась и модель DeepStack. пото- му что такие игры. что его окружает. До человеческого уровня там еще очень. глубокие сети можно использовать и в обучении с под- креплением для роботики [110. пока еще неясно. Например.5. — это. современные системы для ответов на вопросы пока что умеют понимать только очень простые истории и отвечать на вопросы вроде «Вася взял книгу. помо- гая роботу понять. потому что дают уни- версальный «черный ящик». Например. — как у Ахиллеса с черепахой: никогда не получается дописать до конца. сейчас. потому что с лимит- ными играми уже некоторое время назад разобрались). все время появляется что-то новое. Во-вторых. Даже первые значительные успехи обучения с подкреплением в конце 1980-х уже были основаны на нейронных сетях. которая уже несомненно основана на глубоких нейронных сетях [113]. или We need to go deeper Достижения глубоких нейронных сетей в обучении с подкреплением тоже труд- но переоценить. Но в некоторых областях нейронным сетям все еще. и мы посвятим этим задачам отдельную главу 7. но и другие крупнейшие автомобильные кон- церны. об этом мы будем подробно говорить в главе 9. что основная классическая игра. как вы понимаете. А исследователи из DeepMind в качестве сле- дующей цели упоминали StarCraft — как ни странно. когда же наконец компьютер действительно научится читать. очень далеко. От биологии к информатике. как го или StarCraft.32 Глава 1. куда ни копнешь. Вася пошел на кухню. Но в конце января 2017 года появилась новость о программе Libratus. — это покер (no-limit Texas hold’em. Так.

мы не проводим настоя- щих вычислений. но достаточно точная для повседневных выводов и. построен- ных на модели физической симуляции. как это все работает у человека. Интуитивная физика: понимание того. чтобы успешно обучиться: например. и потом еще полчаса поиграть самому. К шести месяцам ребенок уже хорошо понимает постоянство объектов физического мира. и уже даже различают твердые и жидкие объекты [502]. что называется базовым знанием (core knowledge) [503]. д. Недавняя работа исследователей из Facebook AI Research [320] начинает применять нейронные се- ти для развития подобной интуиции. чтобы освоить одну из игр Atari. Человеку практически всегда нужно гораздо меньше тренировочных данных. главное. чтобы воплотить понимание в навык. Блеск и нищета современных нейронных сетей 33 Чем же отличается задача понимания текста от задачи распознавания дорож- ных знаков? Чего не хватает современным нейронным сетям? Можно ли довести их до человеческого уровня понимания. то. вроде физической модели в компьютерной игре [239]. которые отличают живого человека от искусственных нейронных сетей. это стало очень ярким шагом на пути развития глубокого обучения с подкреплением [238]. Модель эта. то как? В недавней работе [66] специалисты по когнитивным наукам (среди авторов. Младенцы довольно быстро начинают разбираться в окружающем их физическом мире. известные когнитивисты и специалисты по байесовскому выводу Джошуа Тенненбаум и Самуэль Гершман) попытались дать ответ на эти вопро- сы. конечно. для повторения этих результатов достаточно пару минут посмотреть YouTube. А в задаче распознавания символов (MNIST. еще довольно далеко даже до первых неуверенных шагов младенца. что- бы понять.1. и тем. даже ранее абсолютно незнакомому с игрой. Но пока неясно. спо- собная к очень мощным обобщениям и переносу на новые визуальные входы. Почему же люди настолько лучше обучаются? Во-первых. в [66] особенно подчеркиваются два компонента. как передать это понимание обучающейся модели. интуитивная физика — это нечто вроде логических рассуждений. чтобы начать узнавать новый символ даже в других формах и с серьезными искажениями. . способность одних объектов содержаться в других и т. как обучается человек. крайне приблизительная. У ученых нет уверенности в том. поддерж- ка. но по современным представле- ниям. что они должны двигаться непрерывно и не менять мгновенно свою форму. мы уже упоминали. А человеку.6. Кроме по- нимания операций с числами и множествами и навигации в пространстве. [23. Они начинают с того. 375]. и если да. стандартный да- тасет для распознавания цифр. в частности. у человека еще в раннем детстве появляется понимание несколь- ких крайне важных для нормального функционирования основных предметных областей — то. пожалуй. как это делают программы даже в успешных случаях. 1. но здесь. что надо делать. глубокой сети требуется около тысячи часов опыта. А к году малыши уверенно овладевают такими понятиями. как работает окружающий нас фи- зический мир. и он будет центральным при- мером в этой книге) человеку обычно достаточно буквально одного-двух изобра- жений. как инерция. что выделяют разницу между тем.

что это враг и с ним нужно поступать именно так. Откуда все это берется — пока тоже до конца не понятно. и хотя. и осознавая. Именно та- кие рассуждения позволяют нам с вами быстро научиться компьютерной игре. преследуя какие-то свои цели. что дети с трех до 14–15 лет изучают в среднем 8–9 но- вых слов каждый день1 . даже мла- денцы. — просто посмотрев на то. адаптируется мгновенно. Сейчас начинают проводиться исследо- вания о том. возможно. умеющий играть в го. люди очень хороши в том. что делают другие люди. а возможно. конечно. как именно дети обучаются новым словам [51]. то есть способность распознавать и выделять «истинные причины» наблюдаемых эффектов. От биологии к информатике. что они не могут получить большое число разных контекстов для каждого нового слова и должны обучаться по считан- ным единицам тренировочных примеров. С помощью байесовского подхода к обучению уже достигнуты некоторые успехи в таких задачах. в его воображении обычно создается некий нарратив. очень быстро понимают. которые могли бы привести к таким наблюдениям. вы поймете. . в го на гек- сагональной или тороидальной доске? Вряд ли. очень маленького числа обуча- ющих примеров. что та- кого рода рассуждения искусственные нейронные сети сейчас совершенно не уме- ют вести. Более того. в разделе 9. какие цели они пресле- дуют. А человек.4 мы поговорим о программе AlphaGo. настоящим камнем преткновения для искусственного интеллекта остается причинность (causality). столкнувшись с че- репашкой.1.34 Глава 1. но на самом деле это довольно очевидное рассуждение: просто разделите словарный запас взрослого человека (около 30 тысяч слов) на те 10 лет. понимая. из развиваю- щейся сейчас в когнитивистике байесовской теории сознания [25] (о байесовском подходе к обучению мы начнем говорить в разделе 2. В-третьих. Дети. Вы можете даже ни разу не увидеть. что опытный игрок все время избегает или убивает черепашек. как перенести такое обучение (его обычно называют обучением по од- ному примеру. Когда человек смотрит на фотографию. уже годо- валые малыши прекрасно могут различать эти цели и действия по их достиже- нию [403] и даже делать некие зачатки моральных суждений. когда «пло- хие» агенты мешают «хорошим» достигать их «хороших» целей [203]. сразу начнет играть вполне разумно. или We need to go deeper 2. как Марио умирает. как распознавание рукописных символов [290] и речевых сигналов [402]. которая недавно победила человека-чемпиона в игре го. про- сто наблюдая за тем. но основная работа здесь еще впереди. Известно. Интуитивная психология: тут дела обстоят еще интереснее. в течение которых его основная масса нарабатывается. например. и это может быть важным направлением для дальнейших исследований. Но понятно. порождая правильные абстракции из очень. строить модели процессов. объясняющий происходящее 1 Есть ссылки на интересные исследования того. Во-вторых. что некоторые сущности в окружающем мире об- ладают волей и действуют. и нет. а современным нейробайе- совским исследованиям посвятим главу 10). что называется переносом обучения (transfer learning): мы можем быстро построить модель нового объекта или про- цесса. Довольно очевидно. Сможет ли AlphaGo разумно сыграть с человеком. не сразу достигнет тех же высот в новом варианте. Например. one-shot learning) в нейронные сети и модели машинного обучения в целом.

выделение базовых признаков. для этого в [361] предлагается использовать единый канал связи общего вида. ничего подобного не происходит. разумеется.6. Но есть у специалистов по глубоким се- тям и позитивная программа о том. А когда нейронная сеть по- рождает подписи к фотографиям. например. И наконец. В этой экосистеме будет . что даже самые разнообразные системы компьютерного зрения могут переиспользовать первые уровни анализа изображения. Психологические и когнитивные исследования показывают. но не может связать их правильным логическим образом [274]. Это пока- зывает.1. причем ограниченные конкретными областями применения — здесь мы еще только в начале большого пути. которые могли бы привести к таким звукам [418]. чтобы признать программу разумной: • способность к коммуникации. довольно очевидно. апри- орные распределения. распознавание движений речевого тракта. что причинность в этом смысле может появляться и на более низком уровне: например. и мы с вами осваиваем новое гораздо более эффективно. например. кто его обучают. есть два основных качества «настоящего» ин- теллекта. что у людей при обучении появляются очень сильные ограничения. современные нейронные сети действительно еще очень далеки от «на- стоящего» искусственного интеллекта. конечно. Что ж. что ее проще всего объяснить через «обращение» услышанного. и в части мотива- ции для этого обучения. но затем способность к обучению постепенно «раскручивается». По мнению Миколова. которая должна приходить через тот самый канал для коммуникации с окружающим миром в форме положительных и отри- цательных стимулов (как в обучении с подкреплением). люди гораздо лучше умеют учиться. • способность к обучению. Однако это пока все еще только первые шаги. и те. как нейронные сети могут двигаться в сторону AI. чтобы программа могла интерактивно общать- ся с людьми и получать информацию об окружающем мире. в рабо- те [361] изобретатель самого популярного метода распределенных представлений слов word2vec (о нем мы подробно поговорим в главе 7) Томаш Миколов и его соав- торы попытались изложить свое видение того. как двигаться вперед. Первые шаги в направлении такого «абстрагирования» уже. похожую на компьютерную игру. делаются. которые нужны. современным архитектурам нейронных сетей. Младенцы учатся относитель- но медленно. Это. и в части собственно обучения. Для этого в работе [361] предлагается построить специальную экосистему для обучающихся агентов. могут писать сообщения разно- образной формы. в который и обучающийся агент. обычно связа- но и с вышеупомянутыми интуитивной физикой и интуитивной психологией: они помогают нам выбрать правильное объяснение. Так. классические теории восприятия речи утвержда- ют. Блеск и нищета современных нейронных сетей 35 на снимке как связную последовательную историю. чем имеющиеся у нас данные позволили бы. которые могут оставаться общими для самых разных изображений (мы поговорим об этих уровнях и вообще о совре- менных системах компьютерного зрения в главе 5). часто бывает так. что сеть корректно распознает все ключевые объекты на фото. Например.

Переходить между этими «уровнями» можно за счет изменения структуры возна- граждений: когда Учитель видит. • затем подавать команды правильной формы для окружающей среды. замечать в них закономерности. и Ученику не нужно понимать. • обобщать отдельные команды. например «пройди вперед два раза» или «найди яблоко». необходимую для выполнения команды (на- пример. что награды определены отдельно. что 1 Обратите внимание: в этой системе предполагается. над которыми можно проводить одинаковые мани- пуляции. собственно. будто бы именно она непременно приведет к созданию разумных компьютеров в ближайшем буду- щем. а среда сообщает результаты и вы- дает награды по необходимости). чтобы стало понятно. иссле- довать ее и двигаться в ней (эту среду можно представлять себе как компью- терный текстовый квест из конца восьмидесятых: Ученик пишет команды вроде move left. . мы привели этот пример для того. что основным компонентом систем. д. что верим. когда у Учителя можно вы- яснять какую-то информацию. проблема мотивации и целе- полагания пока остается больным вопросом искусственного интеллекта. по которому также отдельно передаются сти- мулы (награды) за желаемое и нежелательное поведение Ученика. Скорее наоборот. • и наконец.36 Глава 1. От биологии к информатике. добраться до реализации настоящих алгоритмов. Мы так подробно описали эту систему не потому. Миколов с соавторами пишут. что положительная награда — это хорошо. для ко- торых окружающая среда может выступать как простой компьютер. и Ученик (Learner). он перестает поощрять за любые корректные команды и начинает вознаграждать только за приводящие к нужному эффекту. что такое «найти яблоко») и затем «доставать» нужные паттерны по этим ярлыкам. или We need to go deeper Учитель (Teacher). open door или look around. • затем научиться следовать командам более высокого уровня. Они общаются через вышеозначенный канал связи. нужны новые идеи. то есть научить- ся подавать в окружающую среду команды с циклами и условиями. она должна быть способна хранить обученные моде- лью паттерны поведения. Суще- ствующие сейчас нейронные сети вряд ли способны к такому уровню абстракции при интерактивном обучении. присваивать им ярлыки (например. что эти команды и ответы как-то связаны с наградами1 . которого мы. Идея системы состоит в том. например. запомнить. должна стать долгосрочная память в той или иной форме. чтобы Учитель последовательно обучал Ученика задачам возраста- ющей сложности: • сначала просто обращать внимание на то. или класс «команд поворота» в разные стороны. В целом. • перейти к интерактивному диалогу с Учителем. и понимать. что говорит Учитель. и выращиваем. затем «нужные эффекты» усложня- ются и т. что Ученик обучился давать простые команды. где находится то самое яблоко). вы- делить класс «объектов». чье поведение полностью контролируется экспериментатора- ми. ко- торые могли бы обучиться абстрактному мышлению.

Дерзайте! . до «универсального черного ящика». который мог бы самостоя- тельно обучиться действовать в новой обстановке. а открытой каденцией: несмотря на все громкие успехи.6. зависит. постепенно превосходя человека во многих ранее недостижимых для ком- пьютера областях. Блеск и нищета современных нейронных сетей 37 хотя современные модели машинного обучения и делают множество потрясающих вещей. Так что нам придется закончить эту вводную главу не закры- той. дорогие читатели. как это делает человек. и вполне возможно. пока еще очень. у машинного обуче- ния все еще впереди.1. как быстро мы сможем от смелых мечтаний о текстовых квестах дойти до настоящего искусственного интеллекта. очень далеко. что от вас.

Глава 2 Предварительные сведения. • конструкцию графа вычислений и алгоритмы дифференцирования на нем.DR Во второй главе мы дадим краткий обзор предварительных сведений. или Курс молодого бойца TL. мы рассмотрим: • основы теории вероятностей. А именно. функции ошибки для клас- сификации. чтобы дальше перейти непосредственно к нейронным сетям. • различие между регрессией и классификацией. • функции ошибки в машинном обучении и регуляризацию. требу- ющихся для того. которую мы бу- дем использовать для примеров в этой книге. • и наконец. теорему Байеса и вероятностный подход к ма- шинному обучению. практическое введение в библиотеку TensorFlow. • главный метод оптимизации в нейронных сетях — градиентный спуск. .

Вестник МГОУ. со- стояние окружающего воздуха. Случайно или закономерно такое совпадение? С. Более того.2. как на осно- вании данных делать выводы.. а математическое описание неопределенности и операций с неопределенными величинами дает как раз теория вероятностей. 2009. c. Однако возьмем на себя риск порекомендовать чи- тателю чуть менее опытному все же пробежать эту главу глазами — возможно. чем она выпадет. Н. Наши модели всегда. А. ве- роятностный подход к обучению зачастую позволяет нам не только делать пред- сказания. что практически все основоположники теории вероятностей имели прямое или косвенное отношение к Святой Церкви. Первый сюжет. а также дадим практическое введение в библиотеку TensorFlow. приводящие к порождению данных. откуда эти данные взялись. что мы не задумываясь используем монету как честный генератор случайных чисел. . но и для всего машинного обучения. п. приведем необходимые предварительные сведения о тех разде- лах математики. Серия «Педагогика». слишком сложны даже в самых простых случаях1 . В ходе исследо- вания устанавливается. В. Но это настолько сложно. и искушенный читатель ее вполне может пропустить безо всякого ущерба для понимания. насколько мы уверены в этих предсказаниях. Дворяткина. Теорема Байеса 39 2. 79–84 Вера и вероятность — очень близки друг другу не только фи- лологически. Чхеидзе. вы найдете здесь что-то новое. какие данные встретятся нам в будущем. Эта глава фактически никак напрямую не связана с нейронными сетями. Роль математики случайного в духовно-нравственном воспитании молодежи: поиск истины. — это вероятностная интерпретация машин- ного обучения и вообще байесовский взгляд на окружающий наш мир. которые понадобятся для понимания дальнейшего. 1 Простейший пример: если знать заранее все параметры броска монеты: начальную скорость. Устрялову В этой главе мы поговорим о нескольких основополагающих для машинного обучения вещах. машинное обучение — это наука о том.1. неизбежно будут содержать некоторую до- лю неопределенности. Как мы уже видели в предыдущей главе. важнейший не только для обучения глубоких нейронных сетей. которая будет использоваться в большинстве примеров книги. из письма Н. то теоретически вполне возможно рассчи- тать ее полет и достаточно уверенно предсказать. и предсказания. Теорема Байеса В работе предложен новый подход к актуальной проблеме — духовно-нравственному воспитанию молодежи.1. распределение массы и т. что делать точные выводы невозмож- но: процессы. но и оценивать. К. Важно. № 4.

а позже любил рассказывать. классический и фак- тически единственный пример здесь — бросание кубика. что обычно в реальности остается в голове после того. небесной механике и представления функций.. и других книг о машинном обучении. алгебры и сигма-алгебры. вот и все. каждому из своих исходов они присваивают неотрицательную веро- ятность. Для того чтобы читать эту книгу и вообще для то- го чтобы понимать почти все происходящее в современном машинном обучении (кроме. вероятности как меры на сигма-алгебре борелев- ских подмножеств и т. был сделан один из важнейших шагов к фор- мализации первой: аксиоматика Колмогорова1 поразительно похожа на аксиомы теории меры. следующий пришелся на 1950-е годы.. а потом их оптимизируем. Кстати. 1 Колмогоров. и т. при чем тут вероятности. что: • бывают дискретные случайные величины с конечным или счетным набором исходов. один из величайших мате- матиков XX века. быстро перешел к основаниям математики. или Курс молодого бойца Поэтому машинное обучение как наука основано на теории вероятностей. что нейронные сети можно интерпретировать так: мы вводим некие довольно логичные целевые функции. поля этой книги слишком малы для всех его достижений. не противоречит прин- ципам материалистической диалектики». построенных полностью на дискретных (цифровых) механизмах переработки информации и управления. на котором основано все происходящее. основанную на теории меры. и вероятности исходов в сумме дают единицу. Ни- же мы увидим. На этом месте читатель. Предварительные сведения. и устойчивое владение основами этой науки совершенно необходимо для понимания и данной книги. когда Андрей Николаевич получил выдающиеся результаты о динамических системах. И все это было лишь первым взлетом творчества Колмогорова. В юности Колмогоров занимался историей. наверняка недовольно поморщился: в голове его промелькнули полузабытые определения борелевских подмножеств простран- ства Rn . где одного доказательства было бы достаточно». в статье [590] он писал. когда на теорию вероятностей начали смотреть как на теорию меры. и Колмогоров «решил уйти в науку. что «принципиальная возможность создания полноценных живых существ. И действительно. что теория вероятностей все равно является тем фундаментом. а затем перешел к теории вероятностей. что в истории каждый вывод должен быть подкреплен несколькими доказательствами. Колмогоров — буквально создатель всей современной теории вероятностей. Тем не менее мы скоро увидим. как ушел из нее: оказалось. Для дальнейшего нам вполне достаточно понимать. и доказал ряд основополагающих результатов. а воспользоваться тем. Однако наша задача проще. п.40 Глава 2. нет. возможно. именно в обучении нейронных сетей это не всегда просто заметить. в искусственный интеллект Колмогоров верил. некоторых пока что довольно эзотерических областей байесов- ского вывода). Кста- ти говоря. д. как вы этот курс прослушали. . он первым сформулировал аксиоматику теории вероятностей.. Андрей Николаевич (1903–1987) — советский математик. В информатике Колмогоров предложил новое понятие алгоритма и разра- ботал теорию так называемой колмогоровской сложности. Математическую карьеру он начал с математического анализа. вполне достаточно не вспомнить целиком университетский курс теории вероятностей. доказав важ- ный результат об интуиционистской логике. и этот единый взгляд позволил сильно развить теорию вероятностей как науку. воспитанный классическими университетскими кур- сами теории вероятностей [595–597].

Идем дальше. всего 6×6 = 36 исходов. Теорема Байеса 41 • бывают одномерные непрерывные случайные величины. у которых набор ис- ходов представляет собой вещественную прямую R. нужно просуммировать по другой: ∑ p(x) = p(x. Совместная вероятность — это вероятность одновременного на- ступления двух событий. которого между зависимыми случайными величинами может и не быть. Грубо говоря. у которой будут возможные исходы (1. y)dy. что мы фактически проецируем двумерное распределение. что независимость в теории вероятностей определяется сугубо формально. если есть два кубика. то мы можем рассмотреть новую случай- ную величину «два кубика». Y . поверхность в трехмерном пространстве. y) = p(x)p(y). p(x. на одну из осей.2. Но для нужд машинного обучения их нам будет вполне достаточно. (1. тогда вероятности от- дельных исходов превращаются в функцию распределения F (a) = p(x < a) и ее производную (в этом месте может быть много сложностей. а интеграл неотрицательной функции плотности должен быть равен единице: ∫ ∞ p(x)dx = F (∞) − F (−∞) = 1. y). (1. dx теперь не сумма. да и вообще не очень формальны. ни с корреляцией. получится. на каждом из которых могут выпасть числа от 1 до 6. Чтобы получить обратно из совместной вероятности вероятность того или ино- го исхода одной из случайных величин. y). −∞ Все эти определения по сравнению с «настоящей» теорией вероятностей силь- но упрощены. Две случайные величины называются независимыми. если: p(x. плотность распределения: dF p(x) = .3) и так далее до (6. но практиче- ски всегда в наших примерах функция F будет непрерывно дифференциру- емой). получая функцию от одной переменной: ∫ p(x) = p(x. 6).2).1).1. которая отражает только линейную часть зависимости между случайными величинами. y Этот процесс иногда называется умным словом маргинализация: если рассмот- реть ее в случае непрерывных случайных величин. Ее не надо путать ни с отношением «причина — следствие» (ка- узальностью). Обратите внимание.

которая осталась закрытой. y = 2) = 0. если p(x. p(x2 = 1. обозначив их через x1 . 6 3 и это совсем не похоже на определение независимых величин. Давайте без потери общности предположим. если из- вестно. Предварительные сведения. он всегда может так сделать: даже если вы выбрали пустую шкатулку. Но структура эксперимента устроена сложнее! Ведущий открывает не случай- ную пустую шкатулку. после чего ведущий открывает одну из двух оставшихся и показывает.42 Глава 2. то две другие шкатулки остались бы равновероятными: p(x1 | x3 = 0) = p(x2 | x3 = 0) = 21 . p(x3 = 1. Если бы ведущий просто открыл одну из шкатулок (для определенности пусть это бу- дет x3 ) до вашего выбора. или Курс молодого бойца Условная вероятность — вероятность наступления одного события. y = 3) = . И действительно. 6 3 1 1 p(x1 = 1. что произошло другое. p(x3 = 1. в двух других ничего нет. y = 2) = . Представьте себе. y = 2) = . p(x2 = 1. Вы принимаете решение (пока что у вас нет никаких оснований предпочесть одну из шкатулок). что на игровом шоу уса- тый ведущий предлагает вам выбрать из трех абсолютно одинаковых шкатулок: в одной из них лежат деньги. Тогда совместные вероятности разложатся так: 1 1 p(x1 = 1. ее обычно определяют формально так: p(x. то ведущий выбирает одну из двух пустых равновероятно. y | z) = p(x | z)p(y | z). x2 и x3 соответ- ственно. а выбранную ведущим шкатулку обозначим через y. И теперь наступает момент ис- тины: ведущий предлагает вам изменить свое решение и взять вместо выбранной ту шкатулку. Оче- видно. p(y) Аналогично обычной независимости можно теперь определить условную неза- висимость: x и y условно независимы при условии z. Выгодно ли вам это делать? Многие предполагают. Чтобы проиллюстрировать все эти базовые определения. из двух оставшихся все равно одна пустая найдется. y = 3) = . правда? . что если деньги действительно лежат в вы- бранной вами первой шкатулке (x1 = 1). в качестве примера рассмотрим известный «парадокс» Монти Холла (в кавычках потому. что в ней пусто. что нет никакой разницы. что никако- го парадокса здесь на самом деле нет). а одну из двух не выбранных игроком. y = 3) = 0. рассмотрим события наличия денег в трех шкатулках. Будем предполагать. y) p(x | y) = . Поэтому события «какую из двух пустых шкатулок открыть» и «лежат ли деньги в выбранной вами шкатулке» становятся зависимыми. Изначально их вероятности были равны: p(x1 ) = p(x2 ) = p(x3 ) = 13 . что вы изначально выбрали первую шкатулку. p(x | y).

false negative). по пред- ставлению Ричарда Прайса. так и ошибки второго рода (пропуска боль- ного человека. конечно. или теорема Байеса1 . которая у нас получилась. В ней действительно нет ничего сложного. в 1742 году его избрали в члены Лондонского Королевского общества. . пожалуй. что страшная болезнь у человека присутствует. а на этом месте. Предположим также. в ней Байес защищал математический анализ от крити- ки Джорджа Беркли. то есть тест говорит. например: p(x | y)p(y) p(x | y)p(y) p(y | x) = =∑ ′ ′ . а скорее даже засиял новыми красками. Вторая работа была опубликована анонимно. О такой интерпретации мы еще поговорим ниже. что болезнь очень распростра- нена и имеется у 1 % респондентов. p(x) y ′ ∈Y p(x | y )p(y ) Стоп. Отложим на время то. становятся ключевыми и в машинном обу- чении. y) = p(x | y)p(y) = p(y | x)p(x). Но вместе с тем это самая главная формула всего машинного обучения. в качестве вывода получая новое состояние наших представлений p(y | x). Ключевая для нас работа Байеса была опубликована только посмертно. С какой вероятностью он действитель- но болен? Попробуйте. что респонденты могут быть разного возраста и профессий — будем предполагать. Пусть теперь некий человек (все так же случайно и равномерно выбранный из популяции) получил позитивный результат теста. что некий тест на какую-нибудь страшную болезнь имеет веро- ятность успеха 95 %. Теорема Байеса 43 Вернемся к парадоксу Монти Холла чуть позже. но от долгого употребления он не только не истерся. false positive). Его постоянно приводят в книгах и лекциях о байесов- ском выводе и машинном обучении. Последняя формула. богослов и математик. прежде чем подсчитать или прочитать ответ. и теперь можно выразить. которую мы получили в ви- де наблюдений (в формуле выше это p(x | y)). однако именно выводы. всего лишь очень простое формальное следствие определения условной вероятности. а сейчас продолжим разговор об основах теории вероятностей. При жизни Байес опубликовал только две работы: «Благость Господня.2. — это. основанные на теореме Байеса. Предположим. оценить свою 1 Томас Байес (Thomas Bayes. не удержимся от того. или Попытка До- казать. что больные люди в на- шем эксперименте выбираются из популяции случайно и равномерно. 1702–1761) — английский пресвитерианский священник. и просто в наших житейских рассуждениях. — формула.1. Однако современники хорошо знали Байеса как математика: несмотря на отсутствие официальных работ. что формула Байеса позволяет переоценивать наши априорные представления о мире (в формуле выше это p(y)) на основе частичной информации (данных). чтобы привести пример из классической области применения статистики — медицины. 5 % — это вероятность как ошибки первого рода (ложного срабатывания. что Конечной Целью Божественного Провидения и Направления Является Счастье его Созда- ний» и «Введение в Доктрину Флюксий и Защита Математиков от Возражений Автора “Аналитика”». По определению условной вероятности: p(x. иначе говоря. Дело в том.

и 5 % на то. какова вероятность того. 0. из них три черных. кстати. Поскольку они обычно основаны на теореме Байеса. условная вероятность быть больным при условии положительного теста примерно равна 1+5 1 = 1 . но порядок величины получается верный. или Курс молодого бойца интуицию: как бы вы оценили вероятность болезни. что номера трех последовательно выбранных шаров дадут в сумме 12? А обратные задачи. Используем теорему Байеса: p(t = 1 | d = 1)p(d = 1) p(d = 1 | t = 1) = = p(t = 1 | d = 1)p(d = 1) + p(t = 1 | d = 0)p(d = 0) 0.01 = = 0.44 Глава 2. Но не только поэтому. Например: в урне лежат десять ша- ров.99 Иначе говоря. Например: перед нами две . Это гру- 6 бый подсчет. если вдуматься в условия за- дачи. Прямые задачи теории вероятностей возникают. Стандартный при- мер здесь — это бросание монеты: если бросить честную монету тысячу раз.95 × 0. небольшое упражнение на понимание: какова будет точная вероят- ность получить ровно 500 решек из 1000 бросаний честной монеты?). что тест ошибся и выдал неверный положительный результат. Тогда: p(t = 1) = p(t = 1 | d = 1)p(d = 1) + p(t = 1 | d = 0)p(d = 0). Значит. которую мы сейчас решали.01 + 0. Такие задачи составляют суть вероятностного вывода (probabilistic inference). что в классической теории вероятностей. просят по известному поведению некоего стоха- стического объекта построить вероятностную модель. число выпавших решек будет довольно близко к пятистам.16. из 100 % у вас всего 1 % на то. какова вероятность выбрать черный шар? Или: в урне ле- жат десять шаров с номерами от 1 до 10. а найти требуется вероятность того или иного события. через d — наличие болезни.05 × 0. происходящей из физики. совсем не учитывающий ошибку теста в другую сторону. получилось. Дело в том. когда дано описание некоего вероятностного про- цесса или модели. вероятность обычно понимается как предел отношения количества определенного результата эксперимента к общему количеству экспериментов. Обозначим через t результат те- ста. что вероятность действительно оказаться боль- ным — всего 16 %! Почему так мало? На самом деле. есть и еще одна важная причи- на. является примером так называемой обратной задачи теории вероятностей. Задача о медицинском тестировании.95 × 0. если бы получили позитивный результат от такого теста? Давайте сначала подсчитаем результат точно. хотя вряд ли точно равно 500 (вот. чтобы оказаться действительно больным. вывод часто называют байе- совским (Bayesian inference). то есть фактически по модели предсказать поведение. напротив. Предварительные сведения. ответ 16 % покажется достаточно ясным: грубо говоря.

и правильный ответ — одна вторая. например. редакция получила буквально тысячи писем! В этих письмах люди. можно предположить. 1 Но любопытно. y = 2) p(x1 = 1 | y = 2) = = p(x1 = 1. y = 2) + p(x2 = 1. y = 2) + p(x3 = 1. y = 2) 1/6 1 = = = . как оперировать вероятностями повторяющихся со- бытий. считающейся человеком с самым высоким IQ в мире. в колонке Мэрилин вос Савант. может помочь нам по-новому оценить вероятность x1 . тем ближе отношение должно быть к 21 . Насколько веро- ятно. y = 2) 1/3 2 = = = .2. но известно. Теорема Байеса 45 урны. y = 2) + p(x1 = 0. воз- мущенно объясняли. ведь «очевидно». к которым такие рассуждения совершенно неприменимы.. посвященную связанным с парадоксом Монти Холла пси- хологическим исследованиям. y = 2) + p(x2 = 1. что тот факт. а в другой — шесть. что: • сборная России победит на ближайшем чемпионате мира по футболу. y = 2) 1/6 + 1/3 3 Это значит. p(x1 = 1. что люди плохо приспособлены для интуитивных рассуждений с вероятностями. y = 2) p(x1 = 0 | y = 2) = = p(x1 = 1. что в одной три черных. что в парадоксе Монти Холла действительно выгодно изменить свое решение. опять же. например. y = 2) p(x1 = 1. что. Кто-то взял из одной из урн шар. y = 2) + p(x1 = 0. книгу [189]. когда этот кажущийся парадокс был представлен широкой публике в журна- ле Parade [554]. y = 2) p(x2 = 1. высказывание «монета выпадает решкой с вероятностью 12 » означает. вполне интуитивен. y = 2) + p(x3 = 1. Парадокс Монти Холла до сих пор считается одним из самых ярких примеров того. Раз ве- личины y (какую шкатулку откроет ведущий) и x1 (будут ли деньги в выбран- ной шкатулке) оказались зависимыми. когда можно устремить число экспериментов к бесконечности. . часто с учеными степенями. Классическая. что задача вводит читателей в заблуждение. и шар оказался черным. «фриквентистская» (то есть основанная на частотах) теория ве- роятностей рассуждает о том. насколько вероятно. Но в жизни часто возни- кает необходимость оценить вероятность событий.1. потому что из тех двух выбор уже сделали за вас1 . что шар брали из первой урны? Такую же обратную задачу можно решить и в парадоксе Монти Холла. y = 2) 1/6 + 1/3 3 p(x1 = 0. что мы узнали y. y = 2) + p(x3 = 1. что при боль- шом числе подбрасываний решек получится примерно половина. что шкатулки остались независимыми. в каждой по десять шаров. p(x1 = 1. см. • компания Google обанкротится в течение ближайших 20 лет. причем чем боль- ше экспериментов. И действительно: p(x1 = 1. если посмотреть под правиль- ным углом: вы фактически выбираете между одной шкатулкой и обеими оставши- мися. Ответ. Например.

повторяющихся экс- периментов с погодой не бывает). • все мы живем внутри компьютерной симуляции (это тоже интересное рас- суждение: если компьютерные симуляции целых вселенных вообще возмож- ны. а затем в работах первых «байесианистов» Абра- хама Вальда (Abraham Wald) [556] и Леонарда Сэвиджа (Leonard Savage) [470]. что с вероятностью 0. В классической логике речь идет о строгих законах вывода.14 здесь представляет собой или попытку объектив- ной оценки правдоподобия того события. в 1763 году [36]. кстати. что мы в одной из них и находимся). что я завтра пойду под дождем на работу (обратите внимание. — или. а иногда и нужно рассуждать для решения практических задач. впрочем. • мы выпустим второе издание этой книги? Все это события. В такой интерпретации можно рассматривать теорию вероятностей как некое расширение обычной пропозициональной логики. что в обратных задачах вероятности сразу ста- ли байесовскими: в задаче о медицинском тестировании мне интересно. но можно рассмотреть и прави- ла вывода для операций. Заметьте. конечно. и звучит она. что болен лично я со своим уникальным положительным ре- зультатом теста (в данном примере. а с веро- ятностью 0. интересуют букмекеров. В таких случаях вероятности уже выступают как степени доверия (degrees of belief). Оказывается. Все это и составляет байесовский подход к вероятностям. сначала в книге Гарольда Джеффриса (Harold Jeffreys) «Теория вероятностей» [261]. значит. Число 0. — такой взгляд называют объективистским. но эти рассуждения все равно не помогут нам провести много экспериментов и узнать их результаты. насколько правдоподобно то. всласть натеоретизироваться о «возможных мирах» и кван- товой неопределенности. о вероятностях которых вполне хочется рассуждать. просто представляет собой мое личное мнение об этом будущем событии.7 · 0. Например.14 я завтра пойду на работу под дождем. Ну а сама идея применения теоремы Байеса для пересчета вероятностей между априорными и апостериорными гипотезами. если я считаю. или Курс молодого бойца • «Одиссею» написала женщина (некоторые исследователи выдвигают такую версию. что события эти независимы.46 Глава 2. вышедшей уже после смерти автора.2 = 0. но это не всегда так). Можно. . в субъективистском подходе. и делаю предположение о том. Предварительные сведения. как ни странно. Но о «стремящемся к бесконеч- ности числе экспериментов» здесь говорить бессмысленно — эксперимент ровно один. действительно восхо- дит к работе Томаса Байеса «Очерки к решению проблемы доктрины шансов» (An Essay towards solving a Problem in the Doctrine of Chances). верных всегда. Сам термин появил- ся в середине XX века. шансы сборной России пока еще.2 завтра пойдет дождь. кажется. что событие по-прежнему уникально. то вполне вероятно. что эти правила вывода будут подозрительно напоминать аксиома- тику «обычной» теории вероятностей. довольно правдоподобно). с вероятностью 0.7 мне нужно будет завтра идти на работу. например. задачу легко переформулировать че- рез частоты. работающих с вероятностями различных высказываний.

Сейчас байесовский подход стал общепринятым: нет сомнений.. что вполне естественные аксиомы вероятностной логики тут же приводят к весьма узкому классу функций. проповедник и математик Ричард Прайс. • p(θ | D)∫— апостериорная вероятность (posterior probability). напрямую применима для данной цели: она показывает нам точно и ясно. Прайс считал.1. на каких основаниях мы можем полагать. а затем установил эти вероятности для большего числа наблюдений (вплоть до 1000 выигрышей из 10 000 билетов. что некто пронаблюдал. что неопреде- ленность формализовывать нужно в рамках теории вероятностей. в каждом случае всякого возможного порядка произошедших событий. К счастью. по которым происходят события.2. Легко показать. на ней держатся буквально все рассуждения этой книги и мно- гие другие. который представил работу Байеса и выступил ее формальным соавтором при посмертной публикации. а пересчитывать вероятности при получении новой информации — по теореме Байеса. решаемая в этой работе.7 %. 1 Любопытно. фактически полностью определяя теорию вероятностей [99]. классические результаты Ричарда Кокса показывают. и другие вероятности подчиняются одина- ковым законам. что для десяти билетов она будет невелика. что отношение между пустыми и выигрышными билетами в урне находится между 9:1 и 11:1? Байес доказал. теорема Байеса — это основной. • p(D | θ) — правдоподобие (likelihood). Но как все это связано с машинным обучением? Оказывается. центральный инструмент ма- шинного обучения. как из ур- ны с лотерейными билетами достали десять пустых билетов и один выигрышный. чтобы показать. как Байеса интерпретировал известный философ-моралист. . а также вывел общую формулу. что этот порядок был произведен из неизменных причин или правил. Какова будет вероятность того. Теорема Байеса 47 В работе Байеса впервые вводилось достаточно строгое определение понятия условной вероятности и решалась типичная задача байесовского вывода. около 7. обрат- ная задача теории вероятностей: предположим. сейчас мы уже не можем установить. • p(D) = p(D | θ)p(θ)dθ — вероятность данных (evidence). давайте запишем все ту же теорему Байеса в немно- го иных обозначениях: p(θ)p(D | θ) p(θ)p(D | θ) p(θ | D) = =∫ . то есть понимал ли он рассчитываемые им вероятно- сти как степени доверия или как соотношения между результатами многочислен- ных экспериментов1 . и тем подтвер- дить аргумент в пользу существования Бога от конечных целей. К сожалению. и те. p(D) θ∈Θ p(D | θ)p(θ)dθ И введем общепринятую в машинном обучении терминологию: • p(θ) — априорная вероятность (prior probability). почему мы считаем. Чтобы это увидеть.. что в об- щем положении вещей есть фиксированные законы. установленных приро- дой. однако. а не из беспорядочных случайностей». где эта вероят- ность достигает 97 %). что теорема Байеса дает нам еще одно (телеологическое) доказательство бытия Бога: «Цель здесь состоит в том. был ли сам преподобный Томас Байес байесианистом. что обратная зада- ча.

вы теперь ожидаете. мы ее несколько раз подбросили. или Курс молодого бойца Практически все задачи машинного обучения имеют вид некоторой модели с параметрами θ. на котором достигается максимум функции f (θ). подбросили ее один раз и она выпала решкой. чтобы по данным D подобрать описыва- ющие их параметры θ наилучшим образом1 . чтобы получить распределение вероятностей. θ θ Значок ∝ здесь означает «пропорциональность»: на самом деле p(θ | D) не рав- но p(D | θ)p(θ). составляет p(h. задача состоит в том. ее часто можно не учи- тывать. Разницу легко увидеть на примере простой задачи вывода: предположим. А в байесовском подходе и современном машинном обучении ищут апостериорное распределение (posterior): p(θ | D) ∝ p(D | θ)p(θ). что число параметров у них заранее неизвестно и тоже в некотором смысле является параметром. максимальную апостериорную гипотезу (maximum a posteriori hypothesis. и те- перь знаем последовательность результатов бросков. что она всегда будет выпа- дать только решкой. где параметр θ означает вероятность выпадения решки. что у них нет параметров. правильно? 1 Иногда в машинном обучении говорят о непараметрических методах.∫ нужно еще нормализовать результат. что нам дали потенциально нечестную монетку. обычно в таких случаях имеется в виду не то. а затем. деленному на число экспериментов. при максимизации arg maxθ p(θ | D) = arg maxθ p(D | θ)p(θ). это значит. если нужно. а только пропорционально этому произведению. Иначе говоря. . θ где arg maxθ f (θ) — это значение вектора θ. Например. что веро- ятность решки равна числу выпавших решек. а то. Правдоподобие заданной последовательности результатов бросков монеты. что выпадет в следующий раз. ML): θ M L = arg max p(D | θ). Но поскольку нормировочная константа p(D | θ)p(θ)dθ не зависит от θ. MAP): θ M AP = arg max p(θ | D) = arg max p(D | θ)p(θ). Мы часто будем пользоваться этим обозначением. Предварительные сведения. В классической статистике для этого обычно ищут гипотезу максимального правдоподобия (maximum likelihood. Максимизировать эту функцию по θ несложно: гипотеза максимального правдоподобия скажет. среди которых всего h решек и t орлов. что если вы взяли незнакомую монетку.48 Глава 2. t | θ) = θh (1 − θ)t . Давайте попробуем опреде- лить ее «нечестность» и предсказать.

2. Но даже в этом случае у нас есть априорное распределение. θ ∈ [0. которую мы только что достали из кармана. В качестве априорного распределения мы выбрали бета-распределение 1 Γ(α)Γ(β) Beta(θ. 2.β) Γ(α + β) . α.1: априорное распределение p(θ) = 1 для θ ∈ [0. даже исследуя незнакомую монетку. Кстати. β) = θα−1 (1 − θ)β−1 . если это монетка. Но как его формализовать? В реальности мы. B(α. есть «интуитивно понятное» ограничение: вероятность выпадения решки не может быть меньше 0 и не может быть больше 1. θ ∈ [0. что у нас нет предпочтений на θ.. где B(α. Даже от совершенно незна- комого процесса мы ожидаем. б — правдоподобие L(θ) = θ. если устремить θ → ∞.1]: тот факт. как знать?. формализацией наших ожиданий и является априорное распределение p(θ). так что лучше уж определить его явно. уже заранее чего-то ожи- даем от нее. Теорема Байеса 49 Рис. Конечно. Один бросок незнакомой монеты: а — априорное распределение p(θ) = 1.2. просто оно равно- мерное на отрезке [0. что для него все варианты вероятностей θ одинаково правдоподобны: возможно..1] Странно получается. он бы почти наверняка не подтвердился.1.1] и 0 для других θ. и формально этот результат сомнителен: правдоподобие равно L(θ) = θ. Более того. Один возможный пример такого «колокола» показан на рис. 2. В наших рас- суждениях априорное распределение всегда незримо присутствует. что она близка к честной и априорное рас- пределение p(θ) представляет собой достаточно острый «колокол» с максимумом в 21 .1] (и ноль вне этого отрезка) умножается на правдоподобие L(θ) = θ. например.1. Оно умножается на функцию правдоподобия и сглаживает ее.. 1]. даже если явно оно не задано. всегда решкой. 2. На самом деле ведь мы вовсе не придем к такому выводу. и максимум не ограни- чен. у нас достаточно сильна уверенность в том. в — апостериорное распределение p(θ) ∝ θ. монетка всегда выпадает орлом. тоже можно счи- тать определенного вида предпочтением. и получается апостериорное распределение p(θ) ∝ θ для θ ∈ [0. Это изображено на рис. возможно. а если бы пришли.β) = .

7).2. И теорема Байеса позволяет нам перейти от p(θ | D).7) ∝ θBeta(θ.6) где Γ — гамма-функция. β) × p(h. α + h. 6. в случае с монеткой получилось. то есть ищем максимальную апостериорную гипотезу. Например. 2. Выбор был. 6. t | θ) ∝ θα−1 (1 − θ)β−1 θh (1 − θ)t = = θα+h−1 (1 − θ)β+t−1 ∝ Beta(θ. Если мы задаем сопряженное априорное распределение. α. Предварительные сведения.t | θ) = θh (1 − θ)t . или Курс молодого бойца Рис. байесовский вывод сводится к тому. А затем уже мы считаем и максимизируем p(θ | D) ∝ ∝ p(D | θ)p(θ). которое обычно и определяется в модели. и априорного . что- бы каким-нибудь нехитрым. в — апостериорное распределение p(θ) = Beta(θ.2. заранее раз и навсегда посчитанным способом подпра- вить параметры этого априорного распределения.6). где мы сделали переход от Beta(θ. к вычислению отдельно правдоподобия p(D | θ). И если умножить одно на другое и нормировать. а не наоборот. осознанный: бета-распределение очень похо- же на функцию правдоподобия монетки p(h.6): а — априорное распределение p(θ) = Beta(θ.6) к Beta(θ. а число орлов — ко второму. для натуральных чисел соответствующая факториалу: Γ(a) = (a − 1)!. конечно. Один бросок монетки с априорным распределением Beta(6. которое зачастую совершенно непонятно как подсчитать. что эквивалентно умножению на θ с последу- ющей нормализацией. получится опять бета-распределение: Beta(θ. Это вполне естественно: нас интересует именно распределение параметров при условии дан- ных p(θ | D). Когда мы проводим байесовский вывод в задачах машинного обучения. что для перехода от априорного распределения к апостериорному до- статочно просто прибавить число решек к первому параметру бета-распределения. 2. б — правдоподобие L(θ) = θ.50 Глава 2. 6. 6. Это проиллюстрировано на рис. Такие априорные распределения называются сопряженными. β + t). 6. кроме правдоподобия мы еще должны выбрать априорное распределение на всех возмож- ных значениях параметров.

Причем придумывать стара- емся в такой форме. Поэтому на самом деле нас часто интересует даже не апосте- риорное распределение p(θ | D). так и вычислительно) методов приближенного байесовского вывода. изображенного на рис. А вот байесовское предсказание уже даст нетри- виальный результат: ∫ ∞ p(h | D) = p(h | θ)p(θ | D)dθ = −∞ ∫ ∞ ∫ 1 θ2 1/3 2 = θp(θ | D)dθ = ∫1 dθ = = . далее предсказательных распределений в нашей книге практически не будет. чтобы затем отличить кошку от собаки на новом. чтобы научиться предсказывать ответы на последующие подобные вопросы: например. мы можем решить задачи байесовского вывода для нашего приме- ра с нечестной монеткой. мы обучаемся отделять кошек от собак в имеющей- ся базе фотографий. которое мы придумываем сами. нужно свести его к p(y | θ). где y — это следующий пример в данных или правильный ответ на новый вопрос x. Θ Θ где через Θ мы обозначили множество. 2.2. . ранее не виденном снимке. −∞ 0 0 θ′ dθ′ 1/2 3 Мы получили частный случай так называемого правила Лапласа: как правильно сглаживать предсказания результата бинарного события по данным. Найти полное апостериорное распределение на всех весах большой нейрон- ной сети и проинтегрировать по нему все-таки совсем уж сложно.1. Максимальная апостериорная гипотеза здесь не будет отличаться от гипотезы максимального правдоподобия. Поэтому теорема Байеса лежит в основе практически всех методов машинного обучения. А в более сложных моделях она практически всегда требует достаточно сложных (как идейно. по- прежнему получится θMAP = 1. Теорема Байеса 51 распределения p(θ). Впрочем. Чтобы найти это распределение. таких как линейная и логистическая регрессия. и апостериорному распреде- лению p(θ | D): ∫ ∫ p(y | D) = p(y | θ)p(θ | D)dθ ∝ p(y | θ)p(θ)p(D | θ)dθ. Однако найти предсказательное распределение — непростая задача даже для обычных линейных моделей. Например. нам бы с апосте- риорным распределением разобраться. желательно в виде аналитической формулы. которое определяется моделью.1. как было показано выше. а предсказательное распределение (predictive distribution) p(y | D) или p(y | D. x). Можно сделать и следующий шаг: зачем вообще нам сдались эти параметры? Зачем нужно обучать апостериорное распределение на θ? Все наше моделирова- ние требуется для того. чтобы вычисление p(θ | D) было как можно проще и точнее. которому должны принадлежать различ- ные значения вектора параметров θ.

сейчас пока не будем делать этого формально — в конце концов. то есть правдоподобие набора данных D будет представлять собой большое произведение по всем его точкам: ∏ p(D | θ) = p(d | θ). это- му будет посвящена вся книга. что каждая точка данных была порождена опи- санным в модели процессом независимо. который мы здесь изложили. Для изучения же самих нейронных сетей нам будет вполне достаточно того необходимого миниму- ма. d∈D Поэтому часто удобно перейти к логарифмам и вместо произведения максими- зировать сумму (логарифм — функция монотонная.52 Глава 2. θ Обычно мы будем предполагать. который нужно держать в голове при чтении этой кни- ги. ре- шая задачи машинного обучения? Будем решать задачи оптимизации. или Курс молодого бойца А что все это значит в реальности. . — но при разговоре о регуляризации в нейронных сетях в главе 4 нам точно еще пригодится вероятностный взгляд на вещи. Предварительные сведения. да и любого другого текста о машинном обучении: • математическая модель в машинном обучении обычно представляет собой задание распределения вероятностей на данных и параметрах p(θ. Подведем краткий итог. θ d∈D Искусственную нейронную сеть тоже можно представить как один из примеров таких моделей. и arg max опять не меняется): ∏ θ M AP = arg max p(D | θ)p(θ) = arg max p(θ) p(d | θ) = θ θ d∈D   ∑ = arg max log p(θ) + log p(d | θ) . либо на худой конец просто правдоподобия: θ M L = arg max p(D | θ). У нас полу- чилось. D). что значок пропорциональности ∝ после взятия arg max превращается просто в равенство: знаменатель формулы Байеса в данном случае от θ не зависит. Мы еще вернемся к байесовскому выводу и гораздо подробнее поговорим о со- временных вероятностных моделях в главе 10. алгоритмически? Что мы будем делать. и при оптимизации его учитывать не обязательно). Но там скорее нейронные сети будут помогать вести вывод в вероятностных моделях. что обучение практически любой модели машинного обучения сводится к задаче оптимизации либо апостериорного распределения: θ M AP = arg max p(θ | D) = arg max p(D | θ)p(θ) θ θ (заметьте. а не наоборот.

• задача машинного обучения обычно состоит в том. который состоит из собствен- но логарифма правдоподобия модели и регуляризаторов. 2. функции мы хотели бы оптимизировать. что большинство задач машинного обучения сводятся к решению той или иной задачи оптимизации. О возникающих здесь задачах оптимизации мы сейчас вкратце и поговорим. при необходимости. о градиентном спуске. как именно проводить эту оптимизацию. М. а затем. D) моделируют напрямую. Часто бывает. Е. потом посмотрим на то. но это представ- ляется нам меньшим злом. Ошибки молодости. Дж. во всяком случае. • апостериорное распределение p(θ | D) по теореме Байеса можно получить как (нормированное) произведение p(θ)p(D | θ). интуитивно эта поверхность является значением функции . обычно оптимизации логарифма log p(D | θ) + log p(θ). — важно понять. что из- ложение в книге лучше всего строить по спирали. Функции ошибки и регуляризация Когда не делаешь ошибок. делать ∫ новые предсказания из предсказательно- го распределения p(x | D) = Θ p(x | θ)p(θ | D)dθ. мы будем вести в главе 4. но чаще — в виде произведения правдоподобия p(D | θ) и апри- орного распределения p(θ). которые мы будем рассматривать. перестаешь совершенствоваться. которые обычно применяются в обучении современных нейронных сетей.2.2. • в реальности же все это обычно превращается в задачу оптимизации. — это покамест еще не решено. собственно.2. а через несколько глав опять вернемся к самим алгоритмам. Пир для воронов Какие из этих признаков составляют то. Комедия Петра Штеллера Мы узнали. сомнение уже позволительно. но сейчас нам потребуется немного за- бежать вперед и рассказать об основной идее происходящего. На нем будут основываться почти все остальные методы оптимизации. Суть его работы легче всего проиллюстрировать. чтобы найти и/или макси- мизировать распределение p(θ | D). Подробный разговор о том. какие параметры лучше всего подходят к имеющимся данным и нашим априорным представлениям. Сейчас мы очень кратко введем основной метод оптимизации — метод градиентного спуска. Итак. но. При этом получится. что в начале главы 4 мы отчасти повторим то. Тогда уже и обсудим подробно всевоз- можные модификации и улучшения метода градиентного спуска. какие. Мартин. если представить себе трехмерную поверхность функ- ции от двух аргументов. Салтыков-Щедрин. Функции ошибки и регуляризация 53 • иногда совместное распределение параметров и данных p(θ. что вы прочитаете здесь. что признано назы- вать «ошибкою».

— скатиться в самую глубокую яму. Для этого достаточно представить себе трехмерную поверхность и четко произнести про себя: «эн». . мы можем записать век- тор обновления параметров на шаге t так: ut = −η∇θ E(θ t−1 ). это интуитивное понимание легко продолжить до n-мерных поверхностей. сразу возникает много вопросов. сложно 1 Полезный совет от Джеффри Хинтона. что это такое. что текущее значение параметров — это небольшой шарик. Наша задача — найти минимум функции ошибки. что у нас нет возможности точно промо- делировать непрерывный процесс катящегося вниз шарика. поэтому мы дискрети- зируем время и продвигаемся шаг за шагом. Именно в этом заключается интуиция. то есть −∇θ E. θn ). находящийся на данной поверхно- сти.  ∇θ E =   ∂E  . А значит. — это и есть направление. в котором у поверх- ности самый большой наклон вниз. Давайте даже на будущее запишем это в виде псевдокода: u = . Теперь представим. Обозначая через θ t вектор параметров модели на шаге t. обратное градиенту. С реальным шариком все достаточно просто: понятно. в котором она быстрее всего убывает. одного из главных специалистов по нейронным сетям в мире: когда вы научились визуализировать график функции от двух аргументов. то есть трехмер- ную поверхность. то ее градиент ∇E — это (вспоминаем курсы математического анализа) вектор производных функции нескольких пере- менных по каждой из компонент:  ∂E  ∂θ  . Предварительные сведения. прямо противоположном градиенту к поверхности. которые мы обучаем1 . Если функцию. θ2 . Давайте кратко напомним. что шарик хотел бы сделать под действием силы тяжести.   ∂θn−1  ∂E ∂θn Иначе говоря. определяющую ту поверхность. .learning_rate * grad theta += u Здесь. на которой лежит шарик. обозначить через E(θ) = E(θ1 . стоящая за методом градиентного спус- ка. в котором шарик будет катиться в та- кой ситуации. направление. А если говорить формально — в направлении. конечно.54 Глава 2. Нужно только внести поправку на то. в котором функция быстрее все- го возрастает.. а через E — минимизируемую функцию. и эта задача довольно точно соответствует тому. Первый — как именно подсчи- тать градиент в каждой точке для нейронной сети со множеством весов. . или Курс молодого бойца ошибки от весов модели. что (при нуле- вой начальной скорости) он будет катиться в том направлении.1   . θ t = θ t−1 + ut . . . градиент — это то направление. Сейчас наша задача — найти направление.

Рассмотрим такую функцию: ∑ p y(x. j=1 Давайте сначала попробуем рассуждать безо всякой теории вероятностей. yi )}N i=1 ? Для этого логично выбрать какую-нибудь функцию ошибки. w) = w0 + xj wj = x⊤ w j=1 для вектора входов x = (1. которые позволят суще- ственно улучшить и ускорить градиентный спуск. d∈D Что это за функция в реальных задачах? Какие обычно делаются вероятност- ные предположения и к каким задачам оптимизации они приводят? Начнем с самого простого случая: классической задачи линейной регрессии. . . . в котором минимизируют сумму квад- ратов отклонений предсказанных значений от истинных: ∑ N RSS(w) = (yi − x⊤ 2 i w) . об этом мы тоже поговорим поз- же. xp ). Часто используют так называемый метод наименьших квадратов.xp ) мы будем предсказывать выход y так: ∑ p ŷ(x) = ŵ0 + xj ŵj = x⊤ ŵ.2. в главе 4. x1 . Таким образом. — это просто переобозначение. Функции ошибки и регуляризация 55 связанных друг с другом. добавив еще одну фиктивную размерность. Там же и рассмотрим разные модификации. d∈D или (чаще) ее логарифм: ∑ log p(θ) + log p(d | θ). нужно!). что здесь мы внес- ли свободный член в вектор весов. что делать это мы умеем и гра- диент известен на каждом шаге. по вектору входов x⊤ = (x1 . которое ча- сто делают для удобства и сокращения записи. Обратите внимание. Второй — как выбирать скорость обучения и нуж- но ли менять ее со временем (конечно. А сейчас давайте рассмотрим вопрос куда более основополагающий: что за функцию E мы собрались оптимизировать? Откуда она возьмется? В предыдущем разделе мы говорили о том. . пока будем предполагать. .2. . . Мы будем строить линейную модель имеющихся данных. что оптимизируется обычно апосте- риорная вероятность: ∏ p(θ) p(d | θ). вход по которой всегда равен единице. Как найти оптимальные параметры w∗ по тренировочным данным D = { (xi . i=1 . .

что шум (ошибка в данных) распределен нормально с центром в нуле. w. для выпуклых функций он тоже все- гда прекрасно работает. xN } со зна- чениями t = {t1 . или Курс молодого бойца В данном конкретном случае. что матрица X ⊤ X невырож- денная. Но откуда вообще взялась эта странная идея? Почему мы минимизировали именно сумму квадратов отклонений. и чтобы найти ее минимум. задачу минимизации RSS(w) можно ре- шить точно — функция ошибки оказывается выпуклой. Будем предполагать. которую мы наблюдаем. как выглядит плотность нормального распределения. что так было удобнее искать минимум? Чтобы ответить на эти вопросы. получается так: t = y(x. достаточно решить систему линейных уравнений. чет- вертых степеней или экспонент? Неужели просто потому. Рассмотрим теперь такой же набор данных. n=1 Вспомним. а не сумму модулей. tN }. кстати. . получится: w∗ = (X ⊤ X )−1 X ⊤ y. . Иными словами: p(t | x. w). σ 2 ) = N tn | w ⊤ x n . И основное предположение в модели линейной регрессии состоит в том. σ 2 ). . . . давайте поговорим о линейной регрессии по- байесовски. Для этого нужно ввести вероятностные предположения.σ) = √ e 2σ2 . где ϵ ∼ N (0. что эти значения были получены независимо. более того. X = {x1 . Продифференцируем по w. w. σ 2 ). σ 2π Подставим ее в формулу для правдоподобия и прологарифмируем: . Можно найти w∗ и градиентным спуском. . За- пишем функцию ошибки: RSS(w) = (y − X w)⊤ (y − X w). w) + ϵ. квадратичной. Предварительные сведения. σ 2 .56 Глава 2. то есть переменная t. и в предположении. . где X — матрица размера N × p. σ 2 ) = N (t | y(x. и шум всегда имел одно и то же распределение: ∏ N ( ) p(t | X . Для одномер- ной случайной величины плотность такова: (x−µ) 2 1 − p(x | µ. . как выше.

xd w. Это легко увидеть на еще од- ном избитом классическом примере. сможем догадаться поискать другую функцию ошибки. отметим один важный момент. . да- вайте считать. предполагающие нормально распределенный шум. то есть моделируем выходную переменную так: ∑ d ( )⊤ ŷ(x) = w0 + wj xj = 1 x x2 . наше дело еще не окончено.. описывающего данные из D = { (xi . что для максимизации правдоподобия по w нам нужно как раз минимизировать среднеквадратичную ошибку! Пока мы не двинулись дальше. 2 2σ n=1 И вот мы получили. при- менявших статистические методы.2. что сумма квадратов отклонений соответствует нормально распределенному шуму с нулевым средним1 — и если вдруг увидим. что нет никакой разницы между тем. некорректное применение статистических методов встречается очень часто. j=1 1 Вопрос для самопроверки читателя: а почему вообще естественно рассматривать нормально рас- пределенный шум? Почему нормальное распределение так часто возникает в реальной жизни как рас- пределение шумов и ошибок в непрерывных измерениях? Подсказка: ответ связан с законом больших чисел и центральной предельной теоремой. наилучшим образом описывающий данные точки. Иначе говоря. имеющим всего два возможных значения! Очевид- но. Функции ошибки и регуляризация 57 1 ∑( )2 N N ln p(t | w. На первый взгляд может показаться. Таких проблем можно было бы избежать. как вероятностный (пока что даже не байесовский) подход к линейной регрессии сразу же вынудил нас явно выписать все сделанные предположения! Теперь мы знаем. а многочлен. если бывают погрешно- сти только «в плюс». Следующий пункт плана — регуляризация.. Когда параметров у модели становится очень много. получались не слишком осмысленные результаты. Давайте рассмотрим ту же самую линейную регрессию. а ее предсказательная способность от этого страдает. σ 2 ) = − ln(2πσ 2 ) − 2 tn − w⊤ xn .2. она начинает слишком хорошо «облизывать» точки из тренировочного набора данных. а «в минус» не бывают). к дискретным данным. К сожалению. Однако обратите внимание. Авторам этой книги не раз приходилось видеть даже ученых. Но хватит морализаторства. чтобы просто вы- брать функцию ошибки или распределение шума: между этими двумя объектами действительно есть соответствие. если бы процесс применения этих методов заставлял явно выписать вероятностные предположения. что ошибки у нас очевидно имеют другую природу (например. но теперь добавим в нее базисные функции и будем искать не прямую. yi )}N i=1 . что входная переменная x всего одна и мы ищем оптимальные ко- эффициенты многочлена степени d.

Видно. или Курс молодого бойца Рис. но для d = 8 «хвосты» многочлена уже смотрят в неправильные стороны (то есть интерполяция более или менее получилась.3. В качестве исход- ных точек мы взяли значения многочлена f (x) = x3 − 4x2 + 3x − 2 в восьми точ- ках и добавили к результатам нормально распределенный шум с нулевым средним и дисперсией 41 . а для d = 9 полиноми- альное приближение полностью вырождается. Аппроксимация многочлена f (x) = x3 − 4x2 + 3x − 2 по десяти точкам с нормально распределенным шумом многочленами разной степени Давайте посмотрим. ведь исходный многочлен был кубический). что для d = 0 мы получаем просто среднее всех точек. Результаты изображены на рис.3: на графиках исходный многочлен показан серой кривой. Для d = 2 и d = 3 результат получается весьма неплохой (что логично. черные кривые — это результат ап- проксимации. Черная кривая теперь приближает исходные точки абсолютно точно. 2.58 Глава 2. 2. а экстраполяция — совсем нет). для d = 1 — оптимальную прямую. . что получается на конкретном примере. Предварительные сведения. ведь через десять точек можно точно провести многочлен девятой степени. точки данных — звездочками. но вот результаты этой аппроксимации теперь прак- тически никакого отношения к исходному многочлену не имеют.

Раньше мы минимизиро- вали такую функцию ошибки: 1∑ N RSS (L(w)) = (f (xi .2326x + 6.5996x3 − 239.2543x2 + 15. 2 2 i=1 где λ — коэффициент регуляризации.).2393. .2324 + 2..5898x − 2. Функции ошибки и регуляризация 59 Обнаружилась проблема — чем больше степень многочлена. то есть не over-learning (что это вообще значило бы для человека?).01x + 4.31x4 + + 103.22x6 − 966.22 + 2. Вот как выглядят изображенные на рис. такие слагаемые называются регуляризаторами. который нам самим нужно будет как-то вы- брать. Сначала будем действовать прямолинейно и простодушно: до- бавим размер коэффициентов в функцию ошибки в качестве дополнительного сла- гаемого. w) − yi )2 + ∥w∥2 ..6538x2 − 0.67x7 − 319. а скорее re-learning. приятнее уху. тем. f8 (x) = − 2. 2 i=1 а теперь будем минимизировать другую: 1∑ N λ RSS(w) = (f (xi . f9 (x) = − 2. но в какой-то момент результаты приближе- ния перестанут иметь отношение к действительности.3 многочлены: f0 (x) = − 2.0603x2 .9751x4 + + 322.8775x.0952x6 − 1478.88x2 + 31.2528 + 3. конечно.2.4604x − 3. Поэтому будем пользоваться некрасивой калькой.31x8 + 505. Оптимизировать эту функцию ошибки можно точно так же — и градиент- ный спуск сработает. нам все же кажется. Давайте попробуем найти способ с этим справиться. точ- нее им можно приблизить данные. f3 (x) = − 2. f1 (x) = − 2. f2 (x) = − 2. да и по сути это по-прежнему квадратичная функция: 1 Часто оверфиттинг (от одноименного английского overfitting) по-русски называют «переобуче- нием». обучение чему-то другому». Коэффициенты получаются гораздо больше.2937 + 3.72x5 + 869.9032x8 .64x9 . 2.8516x5 + 621. что смысл у слова «переобу- чение» уже есть: «обучение заново.2.6505x7 + 750. Хотя русское слово. Как нам с ним справиться? Давайте сначала подойдем с несколько неожиданной стороны. В некоторый момент коэффициенты многочлена начинают очень сильно расти.13x3 − 230.5639x3 .6617 + 1. w) − yi )2 . Это классический пример оверфиттинга1 . чем мы могли бы предположить о нашей кривой априори (опять это слово. безусловно.

0 ничем не отличается от отсутствия регуляризации. но идея и так понятна. Предварительные сведения.4) под- тверждает наши выводы. 1 Андрей Николаевич Тихонов (1906–1993) — советский математик. что оно имеет скорее историче- ский смысл. Получил множество важных результа- тов в прикладной математике: разработал теорию однородных разностных схем для решения диффе- ренциальных уравнений. при λ = 1 ре- гуляризатор получается слишком сильным.13x7 − 0.22 + 2.22x6 − 0.01 (x) = − 2.06x7 + 0. Для этого нужно заменить матрицу A на близкую к ней матрицу A + λI. Метод ре- гуляризации. где I обозначает единичную матрицу соответствующей размерности. 2. основатель факультета вычислительной математики и кибернетики МГУ.64x9 . связанных с поиском полезных ископаемых. что изначально речь шла о решении линейных уравнений вида Ax = b и исследовании динамических систем с матрицей A. к которой относится и гребневая регрессия. Н.31x8 + 505.40x − 2.46 + 1. Дело в том.01x + 4. как показано выше. fλ=1 (x) = − 2. Само слово «регуляриза- ция» здесь выглядит немного странно. Тихонов1 . 2 2 От нее можно взять производную.09x8 + 0.19x2 + 0.88x2 + 31. а при λ = 0. Кстати.05x3 − 0. с линейных уравнений на более общий случай операторов регуляризацию обобщил А. то есть матрица A вырожденная.51x4 − − 0. Если решения нет. и в его честь одну из форм регуляризации.33x2 + 0. называется гребневой регрессией (ridge regression). задачей которой был расчет процесса взрыва атомной бомбы.13x4 − − 0. Позволим себе небольшое лирическое отступление. «регулярной» — отсюда и «регуляризация». В нашем примере при добавлении регуляризатора многочлены таковы: fλ=0 (x) = − 2. При таком преобразовании вырожденная матрица обязательно снова станет невырожденной. или Курс молодого бойца 1 λ RSS(w) = (y − X w)⊤ (y − X w) + w⊤ w. можно было бы выбрать новые точки в качестве валида- ционного множества и проверить полученные модели.67x7 − 319. что все равно можно пытаться сделать с этим уравнением что-то разумное. А в 1948 году Тихонов организовал и возглавил вычислительную лабораторию.22x3 − 0. приравнять нулю и решить уравнение: w∗ = (X ⊤ X + λI)−1 X ⊤ y. fλ=0.13x3 − 230. Вид кривых (рис.16x9 . . оказывается.72x5 + 869.24x9 .16x8 − 0. это потому.45x − 0. при котором мы добавляем к функции ошибки λ2 ∥w∥2 .01 получается «золотая середина». Случай λ = 0. а методы регуляризации получились из задач.22x6 − 966.31x4 + + 103.14x6 − 0.60 Глава 2. академик АН СССР. а коэффициенты — слишком малень- кими.05x5 − 0.29x5 − 0.32 + 3. до сих пор называют «регуляризацией по Тихонову» (Tikhonov regularization).

σ 2 )p(w) = N (w | µ0 . что у многочлена получатся большие коэффициенты. что неболь- шие. чтобы найти апостериорное распределение. выглядит как в высшей степени ad hoc решение: мы взяли и по своей воле добавили лишний член в функцию ошибки. Σ0 ) N tn | w⊤ xn . 2. какими должны быть веса регрессии w. w. . n=1 .2. σ 2 . Теперь введем какое-нибудь априорное распределение. В этой модели мы по-прежнему предполагаем. которое будет выражать наши априорные представления о том. . Σ0 ). w. что выберем этому распределению форму — пусть оно тоже будет нормальным: p(w) = N (w | µ0 . Рассмотрим снова на- бор данных X = {x1 . . . Как интерпретировать это новое слагаемое с вероятностных позиций? Интуитивно смысл в следующем: мы решили. xN } со значениями t = {t1 . До сих пор в нашем анализе линейной регрессии участвова- ло только правдоподобие. . tN }. нам нужно подсчитать про- изведение плотностей нескольких нормальных распределений: ∏ N ( ) p(w | t) ∝ p(t | X . σ 2 ) = N tn | w⊤ xn . в — λ = 1 Но пока регуляризация. Аппроксимация многочлена f (x) = x3 − 4x2 + 3x − 2 по десяти точкам с нормально распределенным шумом многочленами степени 9 с регуляризатором λ2 ∥w∥2 для разных значений λ: а — λ = 0. Иначе го- воря. короткие векторы коэффициентов более вероятны. σ 2 .4. давайте посмотрим на регрессию с совсем байесовской стороны. . мы пытались формализовать тот факт. Чтобы объяснить эту формализацию. б — λ = 0.2. Начнем с того. что в рассматриваемой модели «маловероятно». n=1 Теперь. чем длинные. . Функции ошибки и регуляризация 61 Рис. что данные независимы и одинаково распределены: ∏ N ( ) p(t | X . хоть и работает.01. . добавляя регуляризатор.

то есть произведение нормаль- ных распределений снова будет нормальным: p(w | t) = N (w | µN . что при нормальном априорном распре- делении p(w) и правдоподобии нормально распределенного шума p(t | X . На рис. σ σ А теперь давайте подсчитаем логарифм апостериорного распределения. Если мы возьмем априорное распределение с центром в нуле: 1 p(w) = N (w | O. ΣN = Σ0 + 2 X X . 2.62 Глава 2. α где O обозначает нулевую матрицу или вектор. или Курс молодого бойца Давайте это сделаем. 1) на правдоподобие выпавшей точки 1 с нор- мально распределенным шумом с дисперсией 21 . 5 . что в показателе экспоненты (или в логариф- ме) снова получится квадратичная функция от w. I). 1)N (1. то есть p(w | t) — это тоже нормаль- ное распределение! Это значит. то есть сопряжен- ным самому себе.5 показан пример такого вычисления: умножая нормальное априор- ное распределение p(µ) = N (µ. ) = √ e− 2 µ × √ e− 2 (1−µ) ∝ 2 2π 2π ( ) ( )2 − 12 (µ2 +4µ2 −8µ+4) − 52 µ2 − 85 µ+ 54 − 52 µ− 45 ∝e =e ∝ e . а I — единичную матрицу. w. Оставим это упражнение читателю. σ 2 ) с фиксированной дисперсией σ 2 логарифм апостериорного распределения p(w | t) тоже получился квадратичной функцией от w. то от логарифма правдоподобия останется 1 ∑( )2 α N ⊤ ln p(w | t) = − t n − w xn − w⊤ w + const. что при фиксированной дисперсии и неизвестном среднем нормальное распределение является самосопряженным. мы получим апостериорное рас- пределение 1 1 1 2 2 4 2 p(µ | D) ∝ N (µ. ΣN ). придется немного попыхтеть. что мы пришли в точности к гребневой регрессии! Обратите внимание: у нас получилось. 2σ 2 2 n=1 Получается. 0. Предварительные сведения. результат же будет та- ким: ( ) ( )−1 −1 1 ⊤ −1 1 ⊤ µN = ΣN Σ0 µ0 + 2 X t . Чтобы подсчитать параметры µN и ΣN . 0. выделяя полный квадрат от w. Очевидно. то есть апостериорное распределение тоже будет нормальным. и у него будет сред- нее 45 и дисперсия √1 . µ.

но это уже.2. Нашей целью было познакомить читателя с основной идеей байесовского подхода к машинному обучению. ( ) в — апостериорное распределение N µ. Расстояние Кульбака — Лейблера и перекрестная энтропия Без идеального мужчины и идеальной женщины исследова- тель лишен твердого масштаба. Пол и характер Мы уже говорили о том. он ходит ощупью в темноте неизвестных. который бы он мог применить к действительности. 381]. 2. функцией ошибки для которого часто вполне разумно взять просто сумму квадратов отклонений. Желающим все же освоить эту науку всерьез мы в качестве основных источников еще раз порекомендуем [44. а сами будем двигаться дальше.3. Одна точка данных с нормально распределенным шумом: ( а — априорное ) распределение p(µ) = N (µ. поверхностных суждений. 1. В этом разделе мы говорили исключительно о регрессии. О. будет выходить за рамки книги.3. и задачи классификации. 0. где целевая функция представляет собой выбор из . то есть о предсказании вещественного числа. пожалуй. 45 . где целевая функция непрерыв- на. 1). а технические детали нам больше не понадобятся до самой главы 10. Вайнингер. да и там они будут немного другими. Но не менее важны для нас будут и задачи классифика- ции — а там с функцией ошибки дело обстоит немного хитрее. Расстояние Кульбака — Лейблера и перекрестная энтропия 63 Рис. 21 . 2. что большинство задач машинного обучения с учителем можно условно разделить на задачи регрессии.5. б — правдоподобие L(µ) = N µ. √15 Можно теперь сделать и байесовские предсказания.

потому что производная функции равна нулю везде. Предварительные сведения. Градиентный спуск. . (характерная дата) Уильям Фридман. да еще и сделать это гладкой функ- цией. что это совсем просто: если нам нужно отделить фотографии кошек от фотографий собак. дей- ствительно часто представляет собой нашу конечную цель. что для задачи регрессии хорошей функцией ошибки является сумма квадратов отклонений предсказанных ответов от правильных. а в США стал знаме- нитым криптологом и провел всю жизнь на госслужбе. здесь бесполезен. на которых значение функции внезапно и резко меняется. которая просто подсчитывает число верных ответов. что распределение P — это «истинное» распределение. И совершенно непонятно. например. нанял «младшего криптоаналитика» Кульба- ка в числе трех первых сотрудников только что основанного Signals Intelligence Service (SIS). Эта функция соответствует нормально распределенному шуму. Первого апреля 1930 г. а затем идея расстояния Кульбака — Лейблера была подробно изложена в книге Кульбака. Но вот беда: функция ошибки. которую можно будет потом оптимизировать? Из теории информации в информатику пришло понятие относительной эн- тропии. что наши предсказания более или менее похожи на имеющиеся тренировочные данные. которое так хорошо делает Facebook). KL divergence. считает- ся. что то же самое) верных ответов. эта работа стала еще более актуальной после Перл- Харбора. который станет нашим основным инструментом для обучения нейронных сетей. Как правило. Расстояние Кульбака — Лейблера является по своей сути мерой разни- цы между двумя вероятностными распределениями P и Q. давайте подсчитаем. и тогда расстояние Кульбака — Лейблера служит оценкой качества приближения. сколько раз мы вер- но определили класс. Есть только некий конечный набор разделяющих поверхностей (множество меры нуль. Она всегда локально постоянна. который в младенчестве эмигрировал из Кишинева в США из-за процветавшего в Российской империи антисемитизма. или расстояния Кульбака — Лейблера (Kullback — Leibler divergence. рав- ную числу (или доле. кроме тех редких случаев.64 Глава 2. 1907–1994) — американский математик и криптоаналитик. и каждому из них должна соответствовать целая область в пространстве параметров. что для непрерывных величин более чем логично. в распознавании лиц. и маленькие изменения в клас- сификаторе практически никогда не приведут к изменению ответа на каких-то те- стовых примерах. Во вто- рой половине 1930-х годов Кульбак со своим другом Авраамом Синьковым (Abraham Sinkov) взло- мал коды тайной переписки японских дипломатов. а Q — его приближение. То есть введем функцию ошибки. их может быть много (как. Мы только что выяснили. Такая метрика. вышедшей в 1959 году [286]. но они все-таки дискретны. relative entropy). 1914–2003) относит- ся к 1951 году [287]. названного так в честь Соломона Кульбака1 и Ричарда Лейблера. которую называют точностью (accuracy) классификации. Знаменитая совместная работа с Ричардом Лейблером (Richard Leibler. — это кусочно-пос- тоянная функция. или Курс молодого бойца нескольких классов. как сказал бы математик). Как же правильно выразить тот факт. как оптимизировать такую функцию. когда она и вовсе не существует. Как выбрать функцию ошибки для задачи классифи- кации? На первый взгляд кажется. а сколько раз неверно. 1 Соломон Кульбак (Solomon Kullback.

2 Хорошее упражнение на понимание: попробуйте формально доказать это свойство. Rd q(x) где p и q — плотности распределений p и q. мы будем пытаться подсчитать. . порожденное классификатором (назовем его q).2. но «расстояние» используется чаще. xN }. q(xi ) i где p(xi ) и q(xi ) — собственно вероятности исхода xi . 1 В английском языке здесь нет проблемы. похоже или непохоже на «истинное» распределение. Из формул сразу видно. • когда P и Q — непрерывные случайные величины в пространстве Rd . расстоя- ние Кульбака — Лейблера можно записать как ∫ p(x) KL (P ∥Q) = p(x) log dx. . что KL (P ∥Q) ̸= KL (Q∥P ). y) и y принимает только два значения.3. . расстояние Кульбака — Лейблера от распределения P до распределения Q обозначается как KL (P ∥Q) и определяется следующим образом: ∫ dP KL (P ∥Q) = log dP. и именно ее мы и будем считать вероятностью q(y). Расстояние Кульбака — Лейблера и перекрестная энтропия 65 В теории информации оно является как раз количеством информации. А распределение классификатора будет уж какое получится. а p(y = 0) = 1 − y. больше всего интересуют два частных случая: • когда P и Q — дискретные случайные величины на дискретном множестве X = {x1 . назовем их 0 и 1. Говоря формально. dQ где интеграл берется по всему пространству исходов. x). Но для нас важнее другое свойство: расстояние Куль- бака — Лейблера всегда неотрицательно. которое у P и Q должно быть общее. и оно равно нулю только тогда. Как использовать расстояние Кульбака — Лейблера для задач классификации? Неформально говоря. А формально давайте начнем с бинарной классификации. где входные данные име- ют вид (x. Нас. расстояние Кульбака — Лейблера выглядит так: ∑ p(xi ) KL (P ∥Q) = p(xi ) log . это значит. KL (P ∥Q) ≥ 0. или 1. что расстояние Кульбака — Лейблера на самом деле вовсе не является расстоянием!1 В частности. которая те- ряется при приближении распределения P с помощью распределения Q. когда распределения p и q совпадают почти всюду2 . задаваемое данными (назовем его p). . что в распределении данных все значения будут равны или 0. насколько распределение на тестовых примерах. конечно. Введем распре- деление данных достаточно тривиальным образом: p(y = 1) = y. . классификатор пы- тается оценить вероятность положительного ответа p(y | D. по-русски тоже иногда говорят «дивергенция Кульба- ка — Лейблера» или «расхождение Кульбака — Лейблера». оно несимметрично: часто бывает.

которая оценивает. q) = Ep [− log q] = − p(y) log q(y). q(θ)) = − (yi log ŷi (θ) + (1 − yi ) log (1 − ŷi (θ))) . что из этого минимизировать по q. ее можно дифферен- цировать. обычно выглядит как средняя пере- крестная энтропия по всем точкам в данных: 1 ∑ N L(θ) = H(pdata . а с расстоянием Кульбака — Лейблера пе- рекрестная энтропия H(p. ŷi = 12 . полученная классификатором. классификатору вообще никогда не стоит присваивать какому-то ответу аб- солютную уверенность. y Так будет удобнее для минимизации. Получается. N i=1 где ŷi (θ) — оценка вероятности ответа 1. и вся оптимизация работает прекрасно. если честно признаться. за- даваемого данными. что классификатору нет смысла пытаться что-то «угадывать». здесь получается. нет разницы. В результате мы получаем непрерывную функцию L(θ) от предсказанных клас- сификатором вероятностей. Например. Кстати. q) связана самым прямым образом: ∑ p(y) KL (P ∥Q) = p(y) log = y q(y) ∑ ∑ = p(y) log p(y) − p(y) log q(y) = H(p) + H(p. что мы ни- чего не поняли о вероятности ответа. Для бинарной классификации целевая функция. то ошибка на этом примере будет составлять − log 12 = log 2 независимо от правильного ответа. В част- ности.66 Глава 2. L(θ) может служить функцией ошибки. что для фиксированного p. Предварительные сведения. подбросив монетку и указав полученному ею ответу ве- роятность q. ведь в случае ошибки штраф будет бук- вально бесконечно большим! . q). то ожидаемая ошибка составит 1 1 log q + log(1 − q). или Курс молодого бойца Минимизировать будем не совсем расстояние Кульбака — Лейблера. А если попытаться изобразить уверенность. 2 2 что всегда не меньше log 2 и достигает этого минимума как раз в точке q = 12 . ŷ = 0 или ŷ = 1. насколько хорошо он предсказы- вает метки в данных. yi )}N i=1 . а так на- зываемую перекрестную энтропию (cross-entropy): ∑ H(p. если он не уверен. которую мы будем миними- зировать на наборе данных D = {(xi . y y где H(p) — энтропия распределения p.

что пример — из класса Ck . и мы о ней подробно поговорим в разделе 3. Так что представлять сам ответ (номер класса. что p(C1 | x) = y(x) = σ(w⊤ x). и для обучения можно просто напрямую оптимизировать правдоподобие по w. в которой мы напрямую делаем предположение о том. p(x | C2 )p(C2 ) 1 + e−a Функция σ(a) называется логистическим сигмоидом. σ(a) = .2. и даже. 1]. Дело в том. нужно в итоге на них все-таки сделать какой-то классифика- тор. заранее не знаем).3. определим некие априорные распределения p(Ck ) (это по сути всего лишь размеры классов — насколько вероятно. вполне ло- гично интерпретировать результат как апостериорную вероятность того или иного класса. тем меньше результат (на минус бесконечности получается 0). а затем будем искать p(Ck | x) по теореме Байеса. p(x | C1 )p(C1 ) + p(x | C2 )p(C2 ) 1 + e−a где p(x | C1 )p(C1 ) 1 a = ln . но моделиро- вать a линейной функцией уже вполне осмысленно. . Именно она обычно раз- мещается на последнем уровне даже самых глубоких нейронных сетей: когда все признаки выделены. если мы еще не знаем ничего о самом примере). p(C2 | x) = 1 − p(C1 | x). которая называется логистической регрессией. как выглядит аргумент сигмоида a. Поэтому для нас есть смысл изучить ее чуть подробнее. конечно. на плюс бесконеч- ности получается 1. будем представлять a как линей- ную функцию от входных признаков: a = w⊤ x. понятное дело. В итоге получается. это одна из классических функций активации для отдельных перцептронов. p(x | C1 )p(C1 ) + p(x | C2 )p(C2 ) Перепишем это равенство чуть по-другому: p(x | C1 )p(C1 ) 1 p(C1 | x) = = = σ(a). 0 или 1) в виде линейной функции было бы. Расстояние Кульбака — Лейблера и перекрестная энтропия 67 С этой функцией ошибки тесно связана и классическая линейная модель клас- сификации. Для двух классов получится: p(x | C1 )p(C1 ) p(C1 | x) = . что сигмоид перево- дит любое вещественное число на отрезок [0. Давайте рассматривать задачу классификации с вероятностной точки зрения: сопоставим каждому классу Ck плотность p(x | Ck ) (ее мы.2. и логистическая регрессия здесь подходит лучше всего. и наоборот. чем меньше аргумент. А именно. Но сейчас нас больше интересует сама задача классификации. Логистическая регрессия — это модель. довольно глупой идеей. как видите.

tn }. сколько классов: ak = ln p(x | Ck )p(Ck ). . и мы с ним не раз еще встре- тимся). Предварительные сведения. wK ) = − ln p(T | w1 . . максимизи- руя ln p(t | w). в каждом из которых все компоненты равны нулю. . то есть минимизируя следующую функцию: ∑ N E(w) = − ln p(t | w) = − [tn ln yn + (1 − tn ) ln(1 − yn )] . будет постоянно встре- чаться как в этой книге. . И оп- тимизируем мы все ту же функцию правдоподобия. Тогда для таких векторов T = {tn } правдоподобие выглядит так: ∏ N ∏ K ∏ N ∏ K t p(T | w1 . что и для двух классов. и целевая функция в таком виде. n=1 И теперь можно искать параметры максимального правдоподобия. кроме правильного класса. как математически устроено представление задач классификации. то есть на самом деле просто нормализованную экспоненту). Для K классов получается: p(x | Ck )p(Ck ) ea k p(Ck | x) = ∑K = ∑K a . . . так и в вашей практике анализа данных. Она так- же тривиальным образом обобщается на несколько классов: вместо логистическо- го сигмоида будем теперь рассматривать так называемую softmax-функцию (сгла- женный максимум. как показано выше. n=1 Обратите внимание: у нас опять получилась та же форма функции ошибки.1}. Однако здесь мы . Давай- те закодируем поступающие на вход правильные ответы в виде векторов длины K. И снова можно взять производную и прийти к тому же самому выражению. крайне важно: большинство практических задач — это именно задачи классифика- ции. что и выше! Это стандартная функция ошибки для задач классификации. n=1 k=1 Понимать. или Курс молодого бойца Для входного набора данных {xn . wK ) = − tnk ln ynk . только в сумме станет больше слагаемых: ∑ N ∑ K E(w1 . а tn — соответствующие им правильные ответы. j=1 p(x | Cj )p(Cj ) j j=1 e Теперь у нас столько же аргументов. где xn — входы. wK ) = p(Ck | xn )tnk = nk . . мы получаем такое правдоподобие: ∏ N p(t | w) = yntn (1 − yn )1−tn . где стоит единица (это называется one-hot кодированием. tn ∈ {0. .68 Глава 2. где yn = p(C1 | xn ). ynk n=1 k=1 n=1 k=1 где ynk = yk (xn ). . . . .

которую можно было решить практически в явном виде. но не ровным. И с каждым оборотом мы опускались ниже. и мы не надеемся рассмотреть ее подробно в этой книге. что многие сложности. которую мы оптимизируем. но очень заметно. По. В наше время практически все эти алго- ритмы представляют собой по сути модификации градиентного спуска. которые то швыряли нас всего на какую-нибудь сотню футов. медленно. 2. верхний слой. 435] и перейдем непосредственно к тому. понятное дело. что сама функция. По сути это означает.4. Низвержение в Мальстрем Итак.2. а стремительными рывка- ми и толчками. Градиентный спуск: основы Когда мы оторвались от верхнего пояса пены и очутились в без- дне. что мы сразу описыва- ли чуть не полный круг. В случае последних дело существенно упрощается. Чаще всего сети построены так. крае- выми эффектами и прочими лямбда-множителями Лагранжа. Э. к нам не относятся. нас сразу увлекло на очень большую глубину. Градиентный спуск: основы 69 не будем вдаваться в подробности обучения логистической регрессии. так что и обучать ее мы будем вместе со всей остальной сетью с помощью одного из универсальных алгоритмов обучения. к которому мы незамедлительно и перейдем. связанные с формой допустимых множеств. но после это- го мы спускались отнюдь не равномерно. 200. которой посвящены тысячи различных источников.4. С другой стороны. ведь перед функцией всегда можно просто поставить минус). Теперь дело за малым — осталось понять. как же именно это сделать. плавным движением. огромная тема. Дадим буквально пару ссылок на хорошие книги [68. дело немного усложняется тем. то заставляли лететь так. что мы должны научиться решать задачу оптимизации: по заданной функции найти аргументы. Легко было опти- мизировать веса одного перцептрона — это была выпуклая задача. одно и то же. Это значит. что основной нашей задачей и в машинном обучении вообще. что веса могут быть произвольными вещественными числами. Все равно она для нас больше интересна как часть большой нейронной сети. нам обычно ни в каком разумном виде не задана. сразу получается. что потребуется нам для оптимизации в нейронных сетях. Задачи и методы оптимизации — это. ко- нечно. потому что у нейронных се- тей обычно нет никаких сложных ограничений на веса нейронов. А. Мы носились кругами. в которых эта функция максимизирует- ся или минимизируется (это. что целевая функция — это очень . мы выяснили. Но как только мы переходим к оптимиза- ции большой нейронной сети. и в обучении нейронных сетей в частности является уменьшение некоторой задан- ной функции ошибки.

— это вычислить функцию в той или иной точке. что мы взяли нейроны одного . что разных экстремумов может быть очень. либо в постановке «как бы нам сойтись к экстремуму поскорее». функция второго порядка от своих аргументов. но и взять от нее про- изводную — а значит. функция ошибки может задавать очень сложный ландшафт с огромным числом локальных максимумов и минимумов. Простейший пример выпуклой функции — это параболоид. Формально это всего лишь значит. что мы можем сделать.70 Глава 2. В нейронной сети этот эффект. или Курс молодого бойца сложная композиция других функций. . о котором мы сейчас и поговорим. Их лег- ко может оказаться экспоненциально много от числа нейронов (то есть от чис- ла аргументов функции. — автоматически превращается в задачу глобальной оптимизации — найти точку. Заметим еще. Для выпуклых функций задача локальной оптимизации — найти локальный максимум. действительно ли это самая высокая вершина или глобальный максимум на- ходится в совершенно другом месте. которую мы оптимизируем). никакие силы уже не сделают ее выпук- лой. когда рассмат- ривали линейную регрессию и функцию ошибки одного перцептрона: 1 ∑( )2 D E(w1 . . в которой достига- ется наибольшее значение функции. 2 i=1 Как найти максимум такого параболоида? Да просто взять производную. из которой все пути ведут вниз. Экстремум тоже будет один. что урав- нение линейное и решение у него будет одно-единственное. Иметь дело с выпуклыми функциями — вообще одно удовольствие. А в реальности это значит. при- равнять ее к нулю и решить полученное линейное уравнение. очень легко продемонстрировать: представьте себе. Предварительные сведения. Пример такой функции мы видели. wn ) = − yi − w⊤ xi . мы никак не можем знать. для нас открыты все пути. то есть самую высокую из таких «вершин». к сожалению (хотя почему «к сожалению» — так и долж- но быть. что все. то есть «вершину». и перечислить их все то- же нет совершенно никакой возможности. а потому автоматически глобальный. Заметьте. мы скоро увидим. . очень много. и нетривиальные задачи оптимизации для них возни- кают обычно либо при наличии хитрых ограничений. . а с таким бедным «набором инстру- ментов» решать оптимизационные задачи нелегко. что можем не только вычислить ее значение. А у нейронных сетей. кстати. Хоть мы и научимся дифференциро- вать функцию ошибки в нейронных сетях. что производная (градиент) обращается в ноль много раз в разных точках. Однако и здесь отчаиваться не стоит — по сравнению с самыми сложными задачами оптимизации у нас ситуация все-таки не настолько безнадежная. Хоть функция и действительно сложная. связанные с градиентным спуском. что даже если мы поднялись на вершину и удо- влетворенно оглядели окрестности с высоты птичьего полета. именно поэтому нейронные сети такие выразительные и могут решать так много разных задач). и кажется. Но сначала все же о неприятной новости.

4. А это значит. ведущие в один нейрон и из него. А в обучении ранжированию. что и раньше. Для этого и предназначены так называ- емые эвристические методы оптимизации. но су- щественно разных максимумов тоже может быть очень много. Главный из них — градиентный спуск. Сделаем в этом месте небольшое лирическое отступление. и градиент от нее абсолютно бесполезен: он либо равен нулю. что нам доступны. этот вопрос решается скорее через регуляризацию. просто переставив веса нейронов на внутреннем слое. Конечно. хотя гарантировать точное решение задачи оптимизации оказывается невозможно. из-за возможности оверфиттинга мы даже не можем быть уверены. когда мы хотим получить на выходе некое упорядочивание объектов по какому-то критерию. например в выдаче поисковика или рекомендательной системы. n!. Но в случае обучения ранжи- рованию небольшие изменения в весах приводят к небольшим изменениям реле- вантности каждого документа. Совершенно очевидно. Но в жизни. что если у функции ошибки нейронной сети есть какой-то локаль- ный максимум. а иногда — функ- ции с тривиальными производными. которую мы приближаем моделью (например. и в результате сравнительный порядок почти нико- гда не меняется при малых изменениях весов. которые мы будем рассматривать даль- ше в этой главе. применение градиентного спуска возможно только на дифферен- цируемых функциях. а какой- нибудь «неплохой» максимум функции. Но целевая функция зависит только от порядка! Получается. Впрочем. о которой мы еще не раз вспомним в книге. данный конкретный пример не очень со- держателен: нам все равно. оказы- вается. то другой локальный максимум легко получить. упорядоченную по реле- вантности документа запросу. где n — число нейронов. что функция ошибки кусочно-постоянна. которые мы переставляем. почти все со- временные методы оптимизации невыпуклых функций представляют собой те или иные его варианты. Например. представьте себе поисковую выдачу. собственно. что градиент функции ошибки почти всюду равен нулю! Действительно. либо не существует. . что. что действительно хотим оказаться в этом глобальном экстремуме. нейронной сетью). где производная будет известна в любой точке. иногда попадаются и недифференцируемые функции. конечно. Релевантность — это и есть функция. и постараться выбрать все-таки не первый попавшийся. Понятно. какой из эквивалентных максимумов выбрать. на соответствующие веса другого нейрона. Более того. мы все-таки можем попытаться найти наилучший вариант из тех. вот вам и экспоненциальное число локальных максимумов. то есть за- менили веса. состоит из боль- шого числа маленьких горизонтальных «островов». Но. Градиентный спуск: основы 71 из внутренних слоев многослойной сети и поменяли их все местами.2. что в нейронной сети стандартной архитектуры от этого ровным счетом ничего не изменится: на следующий уровень придут ровно те же активации. в обучении с подкреплением из- вестно только текущее значение функции ценности. фор- мально говоря. ведь мы поменяли входные и выходные веса согла- сованным образом. Сколько таких перестановок? Правильно.

что при градиентном спуске больше всего изменяется тот параметр. и переход от производной функции одного аргумента к градиенту тоже не вполне тривиален. Итак. вам могут быть знако- мы и чуть более сложные. В зависимости от того. похожа на ту. которая. чтобы все-таки именно его и применить. при обучении ранжированию. можно по- пробовать выбрать достаточно «хорошо себя ведущую» функцию. решение со- стоит в том. а некую специальную гладкую функцию ошибки. придется саму функцию. как в случае обучения ранжированию. Поэтому. . тем не менее. ϵ→0 ϵ то есть. что ускоряют градиентный спуск. или Курс молодого бойца Что же делать в таких случаях? Оказывается. получается. когда обучали один перцептрон. что градиентный спуск — это на- столько всеобъемлющий метод. чем «более ошибочно» окажется вычисление релевантности. то приближать. 3) если производная тривиальна. зависящую только от расположения элементов в спис- ке. если взять достаточно маленький ϵ. то под- лежащую оптимизации функцию тоже приходится модифицировать. а значит. в чем состоит сложность. например. например. то производную можно подсчитать приближенно. Но мы отвлеклись. добавляют ограничения. но и более точные формулы конечных разностей. когда градиентный спуск неприменим. 2) если производной совсем нет и не предвидится. 12ϵ все это большая наука. но вычислить ее не получается. которую мы пытаемся оптимизировать. например: f (x − 2ϵ) − 8f (x − ϵ) + 8f (x + ϵ) − f (x + 2ϵ) f ′ (x) ≈ . производную можно приближен- но подсчитать по этой самой формуле. а можно считать толь- ко значения функций в разных точках. все равно производную.72 Глава 2. можно вычислить приближенно. который имеет самую большую по модулю производную. но основная идея здесь именно в том. прямо по определению: f (x + ϵ) − f (x) f ′ (x) = lim . насколько сильно ошибся классификатор. можно воспользоваться такими приемами: 1) если производная есть. где вместо кусочно- постоянной функции ошибки классификации пришлось взять функцию. и градиент. а если вы когда-нибудь слушали курс под названием «Методы вычислений» или подобный. Методы опти- мизации в основном занимаются тем. но принципиально других методов почти нет. что альтернатив ему совсем мало. что даже если мы умеем только вычислять функцию. Предварительные сведения. нечто по- добное мы уже видели. что надо оптимизировать. за- висящую от того. разраба- тывают разные его варианты. которая будет тем боль- ше. мы будем оптимизировать не саму функцию качества. скорее всего.

2. 2. Единственный (пока что!) параметр градиентного спуска — это его скорость обучения η. 2. когда изменения станут совсем маленькими.2. гра- диент будет нулевым. шаги градиентного спуска. мы можем смело останавливать алгоритм градиентного спуска. чтобы скатиться по поверхности функции к некоторому локальному минимуму. но так и не прийти в самую нижнюю точку (см. то обучение будет слишком долгим. которые связаны с абсолютным значением градиента. Конечно. б). от дискретной алгоритмической процеду- ры градиентного спуска точного попадания в ноль мы не дождемся. которая наклонена вниз сильнее всего. можно бесконечно прыгать через искомый мини- мум взад-вперед.6.6. Градиентный спуск: основы 73 Рис. но в тот мо- мент. Поскольку в момент. а). об этом мы еще поговорим). чем во всех остальных. и она может достаточно сильно повлиять на результат. которую мы оп- тимизируем. точке экстремума функции. Проблемы со скоростью градиентного спуска: а — слишком маленькие шаги. тоже будут постепенно уменьшаться и в самой точке экстре- мума спуск остановится вовсе. который мы делаем в направлении склона- градиента. Вообще. она регулирует размер шага. Аналогия со скатывающимся вниз шариком здесь абсолютно уместна.6. могут возник- нуть две противоположные друг другу проблемы (рис. Цель такого движения состоит в том. рис. что поверхность наклонена в этом направлении больше. В частности. б — слишком большие шаги Это значит. • а если слишком большими. 2. рис. В чистом градиентном спуске скорость обучения задается вручную. и повышается вероятность застрять в небольшом неудачном локальном ми- нимуме по дороге (см.4. когда мы окажемся в локальном минимуме. градиентный спуск — это в точности движение в направлении по той касательной к поверхности функции. шарик будет катиться именно в эту сторону (а вот скорость у него будет меняться несколько иначе. .6): • если шаги будут слишком маленькими.

y).y)∈D Для того чтобы сделать один-единственный шаг градиентного спуска. что очень сильно ускоряет обучение. что он не остановится в маленьких локальных минимумах. θ). где x — признаки. θ t−1 ). состоящий из пар (x. нет в русском языке столь же употребительного аналога last but not least. что ошибка на каждом шаге считается быстро. действительно не работает. но тем не менее крайне важное замечание1 . и поэтому можно надеяться. как мы даже один раз пробежались по всем трени- ровочным примерам! Но кроме вычислительных. Модель с весами θ на этих данных делает некоторые предсказания f (x. Основное преимущество стохастического градиентного спуска состоит в том. а y — правильный ответ. В лю- бом случае общая функция ошибки будет суммой ошибок на каждом тренировоч- ном примере: ∑ E(θ) = E(f (x.74 Глава 2. yt ). θ t−1 ). Предварительные сведения. y). θ) от y в случае регрессии или перекрестная энтропия в случае классификации. что гра- диентный спуск на практике не работает? На самом деле. θ). и так часто бывает в реальных задачах. а стоха- стический градиентный спуск. Работает не простой. Неужели получается. Например.y)∈D А градиентный спуск будет выглядеть так: ∑ θ t = θ t−1 − η∇E(θ t−1 ) = θ t−1 − η ∇E(f (x. и задана функция ошибки E. когда обучение факти- чески уже сошлось еще до того. E(f (x. (x. пробежаться по всему тренировочному множеству! А оно может быть. которую можно подсчитать на каждом приме- ре. как выглядит градиент функции ошибки в случае какой- нибудь реалистичной задачи машинного обучения. x ∈ D. y). θ). веса меняются сразу же. в котором ошибка подсчитывается и веса подправ- ляются не после прохода по всему тренировочному множеству. или Курс молодого бойца Оставшаяся часть главы будет посвящена тому. (x. чем обыч- ный. ста- раться как можно больше исследовать в пространстве поиска. в локальной оптимизации ча- сто помогает пытаться сделать обновления «как можно более случайными». что у нас есть набор данных D. Предположим. как бороться с этими двумя эф- фектами. Однако стохастический градиентный спуск — тоже не предел мечтаний: об- новлять веса модели после каждого тренировочного примера зачастую выходит 1 Жаль. это может быть квадрат или модуль отклонения f (x. а после каждого примера: θ t = θ t−1 − η∇E(f (xt . есть и содержательные преиму- щества: стохастический градиентный спуск работает «более случайно». Вообще. а найдет впадину посерьезнее. получается. Давайте посмотрим. Но сначала — последнее. . гигантским. нужно. На практике нередки ситуации. y). увы.

это нетривиальное замечание. и не дал самого существен- ного признака искусства. 2.5. так что все. а граф получился совсем прямолинейный. 2. да и тот такой несмышленый. узлами которого являются функции (обычно достаточно простые. Это позволяет сохранить все плюсы стоха- стического градиента (несколько десятков или сотен примеров — это обычно очень малая часть тренировочного множества. Это проще увидеть своими глазами. как ни учили его. . где показаны три графа вычислений для одной и той же функции: f (x. y) = x2 + xy + (x + y)2 . Граф Толстой об искусстве и науке В этом разделе мы введем основополагающее понятие для реализации алгоритмов обучения нейронных сетей. посмотрите на рис. потому что мы разре- шили использовать в качестве вершин унарную функцию «возведение в квадрат». что мы говорили о маленьких локальных минимумах и скорости обучения. в математике иногда бывает так.. В свое определение граф впих- нул все — до анекдота включительно. который заключается в творческом на- чале.7.5. а ребра связывают функции со своими аргументами. как и столь презираемое им определение чистых эстетиков. небольшим под- множествам тренировочного набора. Три языка Таково определение графа. что. что если у нас получится представить сложную функцию как композицию более простых. На рис.. сохраняет силу). чем формально определять. которые очень быстро вычисляются на видеокарте. у которого был только один сын. 2. но при этом пользо- ваться процедурами матричной арифметики. Без творчества нет искусства.7. И. что и требуется для градиентно- го спуска. взятые из заранее фиксированного набора). с другой — односторонне. Во многих практических примерах в этой книге мы будем пользо- ваться мини-батчами. Оказывается. никак и ничему не могли его научить. Граф вычислений и дифференцирование на нем В каком-то уголке Швейцарии жил старый граф. Поэтому на практике обычно используется нечто среднее: сто- хастический градиентный спуск по мини-батчам (mini-batch). Граф вычислений и дифференцирование на нем 75 чересчур накладно. оно с одной стороны — беспре- дельно. что белая лошадь оказывается вовсе не лошадью. Самое удобное представление в виде композиции — это представление в виде графа вычислений.2. Братья Гримм. Но. то мы сможем и эффективно вычислить ее производную по любой переменной. Граф вычислений — это граф1 . Богданович. 1 Да. А.

Если переиспользовать результаты можно и в итоге может получиться любой направленный ациклический граф. теперь он становится деревом. б граф чуть более хитрый: явное возведение в квадрат мы замени- ли обычным умножением. скалярного произведения векторов x⊤ y и логистического сигмоида σ достаточно для того. это схемная сложность. А если нельзя и граф должен быть де- ревом. он от этого не сильно увеличился в размерах. даже самую сложную нейронную сеть. выразить скалярное произведение через сложение и умножение. Например. но слишком «мельчить» тут тоже не обязательно: элементарной может служить любая функция. y) = x2 + xy + (x + y)2 : а — с использованием функций +.7. кстати. 1 В теории сложности на самом деле рассматривают обе модели. для кото- рой мы сможем легко вычислить ее саму и ее производную по любому аргументу. из которых раньше могли выходить сразу несколько путей к корню дерева1 . о которых мы будем подробно говорить в разделе 3. в граф той же функции.3.76 Глава 2. В нейронных сетях в качестве базисных. Она соответствует линейному размеру формулы. 2. б разрешается по несколько раз переис- пользовать результаты предыдущих вычислений и достаточно просто подать один и тот же x два раза на вход функции умножения. Впрочем. Графы вычислений для функции f (x. в которой вычисление функции представляется булевой схемой. прекрасно подойдут любые функции активации нейронов. состав- ленную из нейронов с функцией активации σ. 2. б — с использованием функций + и ×. Предварительные сведения. в — в виде дерева с использованием функций + и × А на рис. . или Курс молодого бойца Рис. чтобы вычислить его квадрат. В частности. потому что в графе вычислений на рис. 2.7.7. но без переис- пользования. × и 2 . Можно было бы. чтобы построить любую.7. то получается формульная сложность. Для сравнения мы нарисовали на рис. которой можно записать функцию — внутри формулы ведь не получится переобозначить большой кусок новой переменной. элементарных функций графа вычис- лений обычно используют функции. но в нем приходится повторять целые большие поддеревья. 2. из которых получаются нейроны.

можно просто брать про- изводные отдельно по каждой компоненте вектора. что многие математические функции. Как мы уже знаем. Как мы уже знаем. чтобы она лучше всего описывала данные. а векторные величины. мы поняли. как будто у слова «сложный» без этого недостаточно много значений). называлось «производная сложной функции». что f — это скалярная функция. чтобы вычислить про- изводную композиции функций (в школе это. векторе частных производных:  ∂f   ∂x. как из кирпичиков. А оно. который делается обычно уже в программе университетских курсов: нам нужно будет понять. с помощью такого графа даже с не слишком богатым набором элементарных функций можно приблизить любую функцию сколь угодно точно. то вместо частной производной мы говорим о градиенте. Оказывается. заданной в параметрическом виде) таким образом. . из которых.5. А сейчас вернемся к нашему основному предмету — машинному обучению. Под «лучше всего» здесь. что один из самых простых и универсальных методов задать сложную функцию — это граф вычислений. Граф вычислений и дифференцирование на нем 77 Итак. и мы хотим ее ми- нимизировать. Интуиция здесь простая: если f зависит от g. то маленькое из- менение параметра x на δx приведет к маленькому изменению значения g(x) при- мерно на δg = g ′ (x)δx. но сейчас нам достаточно просто считать. . так что дальше будем считать. что есть некая довольно сложная функция. . в свою очередь. можно представить в виде графа вычислений. достаточно уметь вычислять производные ее составляющих: (f ◦ g)′ (x) = (f (g(x)))′ = f ′ (g(x))g ′ (x).. . g и x — это не скалярные. один из самых простых и универсальных мето- дов оптимизации сложных функций — это градиентный спуск. xn ). которая дана нам свыше. Собственно. получается сложная компо- зиция. приведет к маленькому изменению значения f (g(x)) примерно на δf = f ′ (g(x))δg = f ′ (g(x))g ′ (x)δx. если f . Если x — это вектор x = (x1 . Обычно она состоит из собственно ошибки на обучающей выборке (функции правдоподобия) и регуляри- заторов (априорного распределения). как правило. 1  ∇x f =   . цель машинного обучения — подобрать модель (чаще всего здесь имеются в виду веса модели.  ∂f ∂xn . По сравнению со школьной программой нам потребуется только один вполне естественный дополнительный шаг.  . об этом мы еще поговорим чуть позже. даже с очень сложным поведением. имеется в виду оптимизация некоторой функции ошибки. вероятно. С f все понятно. где в узлах стоят эле- ментарные функции. градиентный спуск и граф вычислений буквально созданы друг для друга! Как вас наверняка учили еще в школе (школьная программа вообще со- держит много неожиданно глубоких и интересных вещей). Мы также недавно выяснили. что происходит. которую мы и хотим подсчитать. а g зависит от x.2.

+ = . что малое приращение δx превратится в несколько разных приращений δg1 . в том числе векторных. 1   ∂g . ∂x1 ∂x1  . как брать производную в каждом узле. что разработал теорию тета-функций Якоби. Его родным братом был Мориц Герман Якоби. и результат выходит опять вполне ожидаемый:  ∂f ◦g   ∂f ∂g   ∂x. . . что f зависит от x не в одном месте.  . .∂x1  ∂f ∇x (f ◦ g) =      .. ∂x ∂g1 ∂x ∂gk ∂x ∂gi ∂x i=1 С градиентами все точно так же: ∂f ∂f ∑ ∂f k ∇x f = ∇x g1 + . δf = ∂g δg1 + .  = ∂g ∇x g. . где ∇x g =   . Для графа все это де факто сводится к простой. они еще не раз нам встретятся. потому что большую часть научной карьеры провел в России. которую задает граф! 1 Карл Густав Якоб Якоби (Carl Gustav Jacob Jacobi. и для этого нужно только уметь вычислять производные каждой компоненты.. Предварительные сведения. что у нас получилась формула матричного умножения:  ∂g ∂gk  1 . а применения эллиптических функций к алгебре и теории чисел привели к тому. этого достаточно... изобретатель электродвигателя и гальванопластики. .. или Курс молодого бойца Правило применяется для каждой компоненты отдельно.  ∇x f = ∇x g∇g f. + ∂g δgk . ∂xn Такая матрица частных производных называется матрицей Якоби1 . ∂f ◦g ∂f ∂g ∂xn ∂g ∂xn А вот если g — это вектор.78 Глава 2. . ∂g1 ∂gk ∂gi i=1 Обратите внимание... . и каждое из них внесет свой собственный вклад в приращение функции f . то получается. что Якоби стал одним из основателей теории определителей. . Основной темой его математических трудов была теория эллиптических функций: начинал он с того. + ∇x gk = ∇x gi . g2 (x). . gk (x)). . . 1804–1851) — немецкий математик и механик.. а имен- ∂f ∂f но..δgk . это значит.. Говоря формально: 1 k ∂f ∂f ∂g1 ∂f ∂gk ∑ ∂f ∂gi k = + . который у нас более известен как Борис Семенович. . Теперь мы можем подсчитать производные и градиенты любой композиции функций. матрица вторых частных производных не раз встречается в его работах по вариационному исчислению. Говоря нестрого. . .  =  . ∂g1 ∂gk ∂xn . а ее определи- тель — якобианом. f = f (g1 (x). но очень мощной идее: если мы знаем граф вычислений и знаем. чтобы взять производную от всей сложной функции. . а сразу в нескольких.

в — берем частные производные f по всем переменным методом обратного распространения Давайте сначала разберем это на примере: рассмотрим все тот же граф вычисле- ний. Как брать производную на графе вычислений для функции f (x. и выписали частные производные каждого узла по каждому его входу. y) = x2 + xy + (x + y)2 : а — граф вычислений и частные производные. например.8. ∂x ∂a ∂x ∂b ∂x Но можно пойти и в обратном направлении. Теперь можно подсчитать частную производную ∂f ∂x так.5.8. б: начинаем считать производные с истоков графа и пользуемся форму- лой дифференцирования композиции.2.8. ∂x ∂a ∂x ∂b ∂x ∂c ∂x . в самом нижнем узле мы получим: ∂f ∂f ∂a ∂f ∂b ∂f ∂c = + + = 2x + y + 2(x + y).8. который был показан на рис. Например: ∂d ∂d ∂a ∂d ∂b = + = 1 · 2x + 1 · y = 2x + y. Граф вычислений и дифференцирование на нем 79 Рис. 2. как показано на рис. 2. 2. как показано на рис. На рис. а затем разворачиваем узлы в обратном порядке по формуле дифференцирования слож- ной функции. Формула окажется здесь применима точно так же. 2. В этом случае мы начинаем с истока. от a до f . где всегда стоит частная производная ∂f ∂f = 1. чтобы подсчитать очередную производную. в. 2.7. а показаны составляющие граф элементарные функции. б — берем производную ∂f ∂x методом прямого распространения. мы обозначили каждый узел графа новой буквой.

. . . ни разу всерьез не упомянули нейронные сети! И действительно. либо от стоков к истокам. что за все то время. . ∂x n . И последнее важное замечание: обратите внимание. • затем для каждой вершины g ∈ V . 2. вычислим ∂f ∑ ∂f ∂g ′ = . в особенности по всем весам. по которым мы хотим вести градиентный спуск. или Курс молодого бойца Таким образом. пока мы обсуждали графы вычислений. Предварительные сведения. к которым мы перейдем уже в следующем разделе. bprop). у которой все дети. можно применять формулу дифференцирования композиции на графе либо от истоков к стокам.8. . а ребра показы- вают зависимости между функциями.xn . . чем первый: функция ошибки обычно одна. . . и нам требуются ее частные производные сразу по многим переменным. Тогда мы уже знаем. собственно. то в полном соответствии с формулами выше мы можем подсчитать ∂f ∂g для каждо- го узла g ∈ V таким образом: • сначала инициализируем ∂f ∂f = 1. . мы получим ∂f ∂f частные производные ∂x . 1 Такой подход называют алгоритмом обратного распространения (backpropa- gation. . особен- но в делах практических. уже обработаны алгоритмом. что нам задан некоторый направ- ленный ациклический граф вычислений G = (V. причем часть вершин соответствует входным переменным x1 . то есть вершины. В общем виде алгоритм такой: предположим. ∂a . потому что частные производные считаются в направле- нии. fprop). . ∂e . . . то есть как раз вычислим градиент ∇x f . на практике для машинного обучения нам нужен скорее второй вариант. б. вершинами которого явля- ются функции g ∈ V . Дело в том. получая частные производные каждого узла по одной и той же переменной ∂x ∂x . метод вычисления производных/градиентов по графу вычислений сам по себе со- вершенно никак не связан с нейронными сетями. градиенты и тому подобное. дифференциалы. . получая ∂x ∂x частные производные стоков по всем промежуточным узлам ∂f ∂f ∂f ∂f . . А чтобы узнать частные производные этой функции. как на рис.80 Глава 2. которые мы будем обсуждать ниже . в ко- торые идут из нее ребра. Если нас интересуют частные производные функции f ∈ V . ∂g ∂g ′ ∂g g ′ ∈Children(g) Вот и все! Когда мы дойдем до истоков графа. что библиотеки Theano и TensorFlow. Конеч- но. одна вершина не имеет исходящих ребер и соответствует функции f (весь граф вычисляет эту функцию). обратном ребрам графа вычислений. называют алгоритмом прямого распространения (forward propagation. А алгоритм вычисления самой функции или производной по одной переменной. . Это полезно иметь в виду. E). . стоящими в узлах. . xn и не имеет входящих ребер. backprop. до вершин x1 . как получить функцию f . . достаточно двигаться в об- ратном направлении. ∂x . мы. стоящую в «последней» вершине графа: для этого достаточ- но двигаться по ребрам и вычислять каждую функцию в топологическом порядке. ∂f . .

Все это обычно можно «пощупать руками». которые позволяют буквально в пару строк кода построить модель нейронной сети (сколь угодно глубокой). что они делают.. Три конца В последние годы обучение нейронных сетей превратилось в высшей степени ин- женерную дисциплину. и спе- циализированные надстройки. вычисля- ют градиент по этому графу. и может слу- читься так. а также абсолютно новые программные продукты. выходят новые вер- сии существующих. вообще говоря. а не для обучения нейрон- ных сетей. которые реализуют разные компоненты нейронных сетей: обычные слои.6. изменив пару строк или па- ру ключей при запуске — на видеокарте. — позволяют вам задать граф вычислений и чер- товски эффективно. но и начать реально использовать нейронные сети в работе. сверточные. с распараллеливанием и переносом на видеокарты.6. причем сделать это можно как на процессоре. И о практике: введение в TensorFlow и Keras 81 и на которых делается большая часть глубокого обучения. автоматически подсчи- тать градиенты и выполнить процесс обучения. без долгих и мучительных процессов разработки. что вы будете крайне успешно использовать TensorFlow вовсе не для обучения нейронных сетей. — это. сформировать для нее граф вычислений. С каждым годом эти библиотеки становятся все удобнее. что делает и что должна сделать. Поэтому современная книга о глубоком обучении не может обойтись без при- меров конкретных программных реализаций и кода: в конце концов. Мы отда- ем себе отчет в том. «поверх» этих библиотек можно реализовать и собственно библиоте- ки со стандартными конструкциями нейронных сетей. что эти разделы книги наиболее преходящи и быстрее всего . 2. Появилось несколько очень удобных библиотек. Все. чем просто набор стандартных нейронных конструкций. что обычно ускоряет обучение в десятки раз. Н. Мамин-Сибиряк. но важно не забывать базовую идею автоматического дифференцирования. но вме- сте с тем отлично знала. Д. рекуррентные. реализовать и обучить в домашних условиях. В ней билась практическая бабья сметка. Есть и биб- лиотеки общего назначения. которые могут создать любой граф вычислений. рекуррентные слои из LSTM или GRU. библиотеки для автоматического дифференцирования. мы пишем эту книгу для того. Она может оказаться гораздо более гибкой и богатой. современные алгоритмы оптимизации. и устроить сей- час же.. так и — совершенно прозрачным образом. И о практике: введение в TensorFlow и Keras Она плохо сознавала. чтобы вы смогли не только разобраться в паре новых для себя аб- стракций. Конечно. что должна все устроить. и это люди тоже постоянно делают (мы ниже будем рассматривать Keras).2.

например. долгое время бесспор- ным лидером была Theano. коллеги из будущего. 529]. Время покажет. который мы рассматривали в предыдущем разделе. она была призвана заменить библиотеку DistBelief [295]. оправдается ли наше предположение. что это не означает. в группе классика глубокого обучения Йошуа Бенджи (Yoshua Bengio) [528. имеют основной интерфейс к языку програм- мирования Python. но так и осталась проприетарной. в этом вам могут помочь. библиотека Torch предла- гает описывать структуру сетей в виде скриптов на языке Lua3 . хотя общие идеи приведенных здесь реализаций вряд ли изменятся. что вы существуете и книга эта не была напрочь забыта сразу после выхода. Заметим. Предварительные сведения. исполь- зуя Torch в качестве бэкенда. от пионеров. коллеги. что происходит в коде таких библиотек. Все библиотеки. предназначенную для того же самого. которая послужила многим выдающимся результа- там в истории глубокого обучения. 491] и многочисленные онлайн-ресурсы для обучения Python. TensorFlow стала вторым поколением библиотек глубокого обучения в Google. которые способны строить граф вычис- лений и проводить автоматическое дифференцирование. 2 Опять же. что сам язык и ос- новная его вычислительная библиотека NumPy вам знакомы. информатиков прошлого! Очень надеемся. не советуем нашим читателям из 2020-х годов и позже1 пользоваться книгой как практическим руководством по библиотекам TensorFlow или Keras. которая позволяет писать на Python. . конечно же. обычно просто задает граф вычислений. чтобы понять все. и все примеры кода тоже будут на Python. простите. что новые интересные возможности будут появ- ляться в TensorFlow быстрее. так как можно ожидать. которыми мы пользуемся для реализа- ции нейронных сетей в этой книге. может быть виднее. Основная абстракция. как TensorFlow или Theano. Библиоте- ки Theano и TensorFlow на данный момент остаются двумя бесспорными лиде- рами в этой области.82 Глава 2. Этот язык стал де- факто стандартом в современном машинном обучении и обработке данных2 . и сложно уверенно рекомендовать одну из них. то очень рекомендуем познакомиться с Python. 1 Привет вам. чем в Theano. так что вам. Программа. пособия [126. Если же это не так. хотя в нейронных сетях есть и другие примеры — например. то есть. И еще одно замечание. разработанная в университете Монреаля. — это все тот же граф вычислений. в нашей области все меняется очень быстро. что мощь разработчиков Google в итоге приведет к тому. 423. использующая TensorFlow. Однако в ноябре 2015 года Google выпустила (с открытым исходным кодом) библиотеку TensorFlow [523]. Среди библиотек общего назначения. для оптимизации низкоуровневых вычислений пишут на C и обращают- ся к еще более низкоуровневым библиотекам — драйверам видеокарты и особен- но библиотеке cuDNN [102]. 3 Недавно. которая потребуется нам для того. что сами вычисления в библиотеках целиком написаны на Python — конечно. Мы не можем включать в книгу еще и руководство по языку Python и в дальнейшем будем просто предполагать. и. впрочем. или Курс молодого бойца устареют. появилась библиотека PyTorch. Для книги мы выбрали именно TensorFlow.

и ускорение бэкенда. что она до сих пор не самая быстрая среди всех аналогичных. низко- уровневой библиотеке. которая собственно и будет запускать код вычислений. вынуждены математиков разочаровать: в TensorFlow тензор — это не настоящий тензор.random_normal([3. который может быть написан на совершенно другом «языке». Чтобы объявить пе- ременную. даже если вдруг появится еще более быст- рая библиотека для вычислений на графах. 2]. — это то. будучи детищем Google. 90] на данный момент (конец 2016 года) считается более эффек- тивной. мы не зря написали «на данный момент» и указали время: TensorFlow очень быстро развивается. Основной объект. который содержит тен- зоры. с которой сталкивается библиотека TensorFlow. как можно понять буквально из названия. а числа — это всего лишь их координат- ные представления. а именно многомерный массив. Как и любая современная библиотека для символьного дифференцирования и/или обучения нейронных сетей. в отличие от многих других библиотек. которым оперирует TensorFlow.6. нужно задать способ ее инициализации. Преобразования тоже образуют линейное пространство. никакого мотивированного геомет- рией отношения эквивалентности на них нет. А во-вторых. давайте знакомиться с TensorFlow. основная критика. TensorFlow. stddev=0. во-первых. TensorFlow при этом обратится к тому или иному бэкенду (backend).Variable(tf. позволяющая конструировать граф вычислений на TensorFlow. низкоуровневая виртуальная машина): библиотека получает опи- сание графа вычислений на одном «языке».Variable(tf. конечно. ведь «фронтенд». ваши труды по изучению TensorFlow все равно не пропадут даром. Что ж. в котором вы определяете граф вычислений. правда. например. TinyFlow [533] — это библиотека.zeros([2]). таких примеров не будет. а обучать его на том же самом Torch. просто слово красивое. биб- лиотека Torch [89. которая выполняет вышеописан- ные вычисления и получает собственно результаты. то есть по сути линейное преобразование между многомерными линейными простран- ствами. тензор — это же элемент тензорно- го пространства. Например: w = tf. name='weights') b = tf. в книге. Однако. Переменная в TensorFlow — это некий буфер в памяти. mean=0. или много- мерный массив чисел1 . Например. Но раз уж это слово используется насквозь во всей документации и даже в названии TensorFlow.4). И о практике: введение в TensorFlow и Keras 83 а потом запускает процедуру вроде session. что сам тензор как геомет- рический объект останется неизменным. — это. конвертирует его в некое внутреннее представление. TensorFlow может работать как на процессоре. Но.run. что в теории компиляторов называют LLVM (Low Level Virtual Machine.0. тензор. Переменные нужно явным образом инициализировать. является од- ной из основных задач. который их собственно производит. так и на видеокарте. Итак. и бэкенд. name='biases') 1 Читающие это математики наверняка пришли в ужас: как так.2. а потом переводит в нужный формат и отправляет на вход бэкенду. . Получает- ся нечто похожее на то. на которое можно будет потом ссылаться. вполне можно разде- лить. они зависят от выбора базиса и могут меняться при том. избежать его нам не удастся. умеет еще и «из коробки» распараллеливать обучение на распре- деленные кластеры компьютеров. Пожалуй. при желании можно также на- значить ей имя.

Для переменных можно явным образом указать. y) with tf. А можно.save(sess. где именно им нужно находить- ся в памяти. y: 3}) .Variable(tf. stddev=0.float32) output = tf.device('/gpu:0'): w = tf. однако далее в книге примеров с кластерами не будет. у инициализации и работы с кластером есть свои тонкости.float32) y = tf. и все тензоры по умолчанию будут инициализироваться на вашей видеокарте. тогда tf. mean=0.0.device будет выглядеть примерно так: with tf. 'model. feed_dict={x: 2.ckpt') В задачах машинного обучения необходимо повторно применять одну и ту же последовательность операций к разным наборам данных. обуче- ние с помощью мини-батчей подразумевает периодическое вычисление результа- та и ошибки на новых примерах.placeholder(tf. stddev=0. достаточно запустить saver. которым нужно сначала передать только тип данных и размерности тензора.4).initialize_global_variables() Но это не работает в тех случаях. и распараллелить все на кластер связанных между собой машин. если вы хотите объявить переменную на первой (нулевой) видеокарте.Variable(w. name='weights') Впрочем. когда нужно инициализировать переменные из значений других переменных. tf.ckpt. поэтому мы не станем подробнее разви- вать эту тему. 2].Variable(tf. а чтобы потом восстановить сессию. например. Для удобства передачи новых данных на видео- карту в TensorFlow существуют специальные тензоры — так называемые заглушки. Предварительные сведения. в таких случаях синтаксис будет следующим: w2 = tf.placeholder. name='weights') Конечно. а затем сами данные будут подставлены уже в момент вычислений: x = tf. это можно сделать так: with tf.4).restore('model.placeholder(tf. name='w2') Все переменные текущей сессии можно в любой момент сохранить в файл: saved = saver.random_normal([3.initialized_value().mul(x. В частности. вам достаточно установить версию TensorFlow с поддержкой GPU. Все переменные обязательно нужно инициализировать. на компьютере с подходящей видеокартой. Самый простой спо- соб — сделать это перед началом вычислений: init = tf.run(output.ckpt') Эта процедура сохранит все переменные сессии sess в файл model.0. mean=0.Session() as sess: result = sess.84 Глава 2.device('/job:ps/task:0'): w = tf. или Курс молодого бойца В этом коде мы объявили две переменные: w с именем weights и b с именем biases. в «штатном» режиме. 2]. как мы уже упоминали.random_normal([3.

4). а так- же широкий спектр редукций. Например. В TensorFlow реализован полный набор операций над тензорами из NumPy с поддержкой матричных вычислений над массивами разной формы и конвертиро- вания между этими формами (broadcasting). При этом тензоры не обязаны иметь одинаковую размерность: недостающие из- мерения меньшего из тензоров будут интерпретированы как единичные. Впрочем. И о практике: введение в TensorFlow и Keras 85 В result после этого должно получиться 6 (проверьте!). вычисляется как максимум из соответствующих размерностей исходных тензоров. shape): w = tf. name='matrix') v = tf. в реальных задачах часто возникает необходимость к каждому столбцу матрицы поэлементно добавить один и тот же вектор.random_normal(shape.Variable(tf.6. Предположим. по каждому элементу мини- батча. name='matrix') return tf. а v — вектор длины 100.Variable(tf. то соответствующий код может быть таким: tensor = tf. stddev=0. взятие экспоненты или логарифма. axis=1) При этом среднее будет вычисляться по второй размерности тензора tensor. в TensorFlow реализован широкий ассортимент унарных операций: возведение в квадрат. иногда нам бывает необходимо вычис- лить среднее значение не по всему тензору. при каждом сравнении необходимо выполнение одного из двух условий: • либо размерности равны. stddev=0.0. 100]) result = tf. mean=0. скажем. как именно будет работать broadcasting в каждом конкретном нетривиальном случае.random_normal([100]. • либо одна из размерностей равна 1. а. mean=0. name='vector') result = m + v Здесь m — это матрица размера 10 × 100. это звучит довольно сложно. Помимо бинарных операций.float32.0). и при сложении v будет прибавлен к каждому столбцу m. В некоторых задачах может возникнуть необходимость использования одних и тех же тензоров переменных для нескольких различных путей вычислений.0. Например. создающая тензор линейного преобразо- вания над вектором: def linear_transform(vec. то есть мы десять раз усредним по 100 чисел и получим вектор длины 10. stddev=1. w) .2.random_normal([10.matmul(vec. Размер- ность получаемого на выходе тензора. Если первую размерность тензора мы интерпретируем как размер мини- батча.reduce_mean(tensor. [10. В TensorFlow это делается самым простым из возможных спосо- бов: m = tf. так что рекомендуем внимательно проверять. 100]. если все условия выполнены. Broadcasting применим для всех поэле- ментных операций над двумя тензорами и устроен следующим образом.0.placeholder(tf. что у нас есть функция.Variable(tf.4). mean=0. Размер- ности двух тензоров последовательно сравниваются начиная с конца.

чтобы минимизировать сумму квадратов отклонений оценок нейрона ŷi от истинных зна- чений yi : . y1 ).(x2 . что в этом случае каждая из функций создаст свою собственную мат- рицу преобразования. • tf. задать тензор w заранее и передать его в функцию linear_transform в качестве одного из аргументов. shape) scope.86 Глава 2. если мы попробуем применить наше преобразование к двум векторам последовательно. Этот механизм состоит из двух основных функций: • tf. инициализирует ее. Можно. shape..get_variable('matrix'. конечно. выда- ет число. . которыми она должна быть инициализирована. Напомним.get_variable() проверяет существование пере- менной в текущем пространстве имен. которым не все гото- вы пожертвовать. . как мы хотели с самого начала. Предварительные сведения. во время второго вызова увидим ошибку: # Raises ValueError(. который получает на вход вектор значений x.matmul(vec. <shape>. однако это нарушит принцип инкапсуляции.variable_scope('transform'): w = tf.. Давайте рассмотрим простейший пример модели. использу- ющихся в tf.get_variable(<name>. transform/matrix already exists . .random_normal_initializer()) return tf. initializer=tf. которая. или Курс молодого бойца И мы хотим применить это преобразование к двум разным векторам: result1 = linear_transform(vec1.. shape) Теперь все работает именно так. shape) Понятно. мы можем передать функцию инициализации. yN )} задача состоит в том. .get_variable() является инициализатор: вме- сто того чтобы при объявлении новой переменной в явном виде передавать значе- ния. shape): with tf.) Так происходит потому. shape) result2 = linear_transform(vec2. (xN . получив при необходимости данные о размерности пере- менной. Одним из параметров функции tf. <initializer>) создает или возвращает пере- менную с заданным именем. w) Теперь. Для подобных случаев в TensorFlow существуют пространства переменных (variable scopes). своего рода Hello World для TensorFlow — обучение линейной регрессии. что линейная регрессия — это фактически один нейрон. Чтобы повторно использовать пе- ременные в пространстве имен. что не приведет к желаемому результату. что tf. и на данных {(x1 . Давайте немного изменим linear_transform(): def linear_transform(vec. нужно в явном виде сообщить об этом TensorFlow: with tf.reuse_variables() result2 = linear_transform(vec2. чтобы предотвратить связанные с именами ошибки. обычно трудно поддающиеся отладке..variable_scope('linear_transformers') as scope: result1 = linear_transform(vec1.get_variable(). y2 ).variable_scope(<scope_name>) управляет пространствами имен.

train. y_data[indices] _. Мы последовательно: 1) сначала создаем случайным образом входные данные X_data и y_data по тако- му алгоритму: • набрасываем 1000 случайных точек равномерно на интервале [0.reduce_sum((y .run(tf.matmul(X. 10.run([ optimizer. мы постараемся в этом примере продемонстри- ровать полный цикл типичной программы на TensorFlow.8f.y_pred) ** 2) optimizer = tf. 100.GradientDescentOptimizer(). заглушками и блекджеком. Вот как это можно сделать. k. loss_val. y : y_batch }) if (i+1) % display_step == 0: print('Эпоха %d: %.zeros((1.placeholder(tf.tensorflow as tf n_samples. что она делает.float32. i=1 Но хоть задача и очень простая.uniform(1. import numpy as np.initialize_global_variables()) for i in range(num_steps): indices = np. ϵ ∼ N (ϵ. (n_samples.minimize(loss) display_step = 100 with tf. loss. b=%.6.random. что делает эта программа.placeholder(tf. 0. k и b будут параметрами.4f' % (i+1. В коде. k=%. b_val)) Теперь давайте посмотрим.random_normal((1. shape=(batch_size. b ]. 1)) with tf. которые мы хотим обучить. k_val. batch_size) X_batch.choice(n_samples. а потом подробно разберем. k) + b loss = tf. приведенном ниже.2.random. • подсчитываем для каждой точки x соответствующий «правильный от- вет» y по формуле y = 2x + 1 + ϵ. 1)) y = tf.float32.Session() as sess: sess. 1)). y_batch = X_data[indices]. batch_size. loss_val.)). k_val. где ϵ — случайно распределенный шум с дисперсией 2.normal(0. .variable_scope('linear-regression'): k = tf.4f. обучением на мини-батчах. мы будет приближать линейной регрессией функцию вида f = kx + b для k = 2 и b = 1. 1)) y_data = 2 * X_data + 1 + np. name='slope') b = tf. (n_samples. b_val = sess. 2). 2. 1]. num_steps = 1000. И о практике: введение в TensorFlow и Keras 87 ∑ N L= (ŷ − y)2 → min . 20000 X_data = np. shape=(batch_size.Variable(tf.random. name='bias') y_pred = tf. с градиентным спуском. Давайте сначала посмотрим на всю про- грамму целиком. feed_dict = { X : X_batch.Variable(tf. 1)) X = tf.

обозначенных ранее как tf.placeholder. что теперь каждый раз. 5) вводим переменную optimizer — оптимизатор.placeholder должны быть жестко заданы. нужно подать ей на вход обязательно матрицы. Обратите внимание.0988 Эпоха 200: 5312. от которых зависит оптимизируемая перемен- ная loss. по X и y оптимизации не будет.15625000.8902 . b=0.41503906. и это в нашем случае матрица размерности (размер мини-батча × 1) для X и просто вектор длины в размер мини-батча для y. то есть k и b. но будут инициализированы стандарт- ным нормальным распределением для k и нулем для b. остальные нужны только для отладочного вывода).88 Глава 2. мы выбрали стан- дартный оптимизатор стохастического градиентного спуска. 3) далее инициализируем переменные k и b.2825 .9006 Эпоха 20000: 378. чтобы работала функция tf. но пользоваться надо имен- но ею.. в который записываем значения входных переменных. Например. В результате этот код будет выписывать поэтапно уменьшающуюся ошибку и постепенно уточняющиеся значения k и b: Эпоха 100: 5962. — это входные данные.9862. а вот складывать результат можно и с обычным вектором длины 1 (да. собственно.57006836. который будет подсчитывать градиенты и обновлять веса. которые нужно подсчитать (главное — «вычислить» переменную optimizer. 6) записываем большой цикл.run список переменных.matmul. b=0. k=2.0761. Эпоха 19900: 429. b=0. что TensorFlow чрезвычайно чувствительна к формам (в смысле shapes. размерностям) тензоров. Предварительные сведения. и словарь feed_dict. k=0. k=1. где-то за кулисами будут происхо- дить обновления переменных. мы подаем в функцию sess.placeholder для переменных X и y. форма которого задается как (1. на каждой итерации цикла мы берем случайное подмножество из batch_size (то есть 100) индексов данных и под- считываем значения нужных переменных. делает эти обновления (то есть много раз вычисляет переменную optimizer). обратите внимание на функцию reduce_sum: на выходе она всего лишь подсчитывает сумму матрицы по строчкам. k=0. а не обычной суммой или соответствующими функциями из numpy. как у нас. это разные вещи!). кото- рые пока никаких значений не имеют. на этом этапе уже нужно задать им размерность. или Курс молодого бойца 2) затем объявляем tf.1927 Эпоха 300: 3904. это переменные TensorFlow. b=0. когда мы просим TensorFlow под- считать значение переменной optimizer. сейчас нам важ- но лишь отметить.0267. потому что значения tf. потому что так TensorFlow сможет куда более эффективно оптимизировать процесс вычислений.8925. k=2.0179.). даже если это матрица размера 1 × 1.11621094.79974365. то есть собственно алгоритм. b=0.. 4) потом ∑ мы задаем собственно суть модели и при этом строим функцию ошиб- ки (ŷ − y)2 .

models import Sequential from keras. начинаясь с import tensorflow. мы рассмотрели простейшие операции с использованием библиотеки TensorFlow и подробно. . Activation Затем создадим модель логистической регрессии. которой мы часто будем пользоваться в этой книге. который Keras потом скормит другой библиотеке для вычисления градиентов и реализации опти- мизационных алгоритмов. впрочем. точных значений k = 2. Сначала импортируем из Keras все. о чем мы будем говорить в этой книге. что в TensorFlow: строится граф вычислений. в основном Keras хорош именно тем. Мы рекомендуем читателю по мере необходимости обращать- ся к документации TensorFlow [523].contrib. да и сами далее еще не раз объясним все со- ответствующие подробности. Мы делаем следующее: 1 Однако в официальную первую версию TensorFlow. выход которой состоялся весной 2017 года. К счастью. Однако «за кулисами» происхо- дит все то же самое. разобрали первый настоящий при- мер ее применения. Отметим.Session() as sess можно было бы написать: sess = tf. b = 1 на выходе не получится: и гради- ентный спуск является всего лишь приближенным методом оптимизации. что вместо блока: with tf. в этой книге мы будем рассматривать их как две от- дельные сущности1 . — это Keras [79]. Однако для примера полного цикла на Keras тоже вполне сгодится модель попроще. в виде готовых примитивов: можно сказать «сделай мне сверточный слой с такими-то параметрами». Dense.keras as keras. который раньше начинался с import keras. и в последующих при- мерах этой книги мы тоже обычно будем пользоваться интерактивными сессиями TensorFlow. строчка за строчкой. и почти любой код. библиотека Keras вошла как составная часть. Keras реализует практически все то. чтобы можно было писать и запускать код не подряд. ведь данные генерировались слу- чайным образом. перемежая его комментариями. тем более что по сути это как раз и есть «однослойная нейронная сеть». Она по сути является «оберткой» над библиотеками автоматического дифференцирования. правильный ответ на задачу оптимизации не обязательно совпадает с «задуманными» нами значениями. и Keras сделает. теперь будет нормально работать. Вторая библиотека.6.layers import Input. что в нем много чего уже реали- зовано в готовом виде.InteractiveSession() и дальше пользоваться переменной sess как постоянно открытой сессией.2. и. Давайте реализуем логистическую регрессию. совместимость при этом практически не сло- малась. что нам дальше потребуется: import numpy as np from keras. что в данном случае важнее. Это по- лезно в интерактивном режиме ipython или jupyter notebook. Конечно. Итак. И о практике: введение в TensorFlow и Keras 89 Естественно.

а затем логистический сигмоид от результата. оно нужно только для того. в качестве алгоритма оптимизации мы укажем простой стохастический гра- диентный спуск.. Предварительные сведения. с дисперсией 1 по обоим компонентам: def sampler(n. input_dim=2. входы которого будут размерности два (просто для нашего примера).90 Глава 2.add(Dense(1. для тесто- вого.normal(size=[n.vstack([zeros. по тысяче в каждый класс.). чтобы считать на нем ту самую метрику 'accuracy'. никак не исполь- зуется при обучении. Y_test)) Валидационное множество. Вот как это выглядит в коде: logr = Sequential() logr. или Курс молодого бойца 1) сначала создаем модель виде Sequential — это значит. y] def sample_data(n=1000. 1). 3) далее модель собственно компилируется с заданной целевой функцией (мы используем перекрестную энтропию для бинарной классификации) и мет- рикой точности.zeros((n. которое мы тоже туда передаем. как это работает. metrics=['accuracy']) А теперь можно пробовать на данных. ones = np. в строчке ниже мы задаем тренировочное множество. o_sample]). validation_data=(X_test. y=p1[1]) return np. что модель будет созда- ваться последовательно слой за слоем. Теперь можно запускать обучение. до чего-то более сложного мы пока просто не добрались. Y_test = sample_data(100) Таким образом. для обучающего множества и 200 отдельных точек. 1)) labels = np. y): return np. x.ones((n. verbose=1. другое в точке (1.random. которую мы задали выше. 1. а на выходе будет логистический сигмоид от входов. по 100 в каждый класс. optimizer='sgd'. 2]) + [x. nb_epoch=100. −1). y=p0[1]) o_sample = sampler(n. batch_size=16. что это и есть модель логистической регрессии: линейная функция с обучаемыми весами от входов. ones]) z_sample = sampler(n. np. labels X_train. 1)). 2) затем добавляем один плотный слой. p1=(1. одно с центром в точ- ке (−1. p0=(-1. . -1. activation='sigmoid')) logr. мы сгенерировали 2000 точек.)): zeros. Y_train = sample_data() X_test.. Давайте для этого учебного примера про- сто сгенерируем два двумерных нормальных распределения. x=p0[0]. число эпох и размер мини-батча: logr. а сейчас просто поверьте. Y_train.vstack([z_sample.compile(loss='binary_crossentropy'. x=p1[0].fit(X_train. позже мы в подробностях поговорим о том. которую модель будет подсчитывать и выводить в процессе.

acc: 0.val_acc: 0.acc: 0.acc: 0.5 %.loss: 0.7450 Epoch 2/100 2000/2000 [=. просто случайность). так что вполне воз- можно.. мы еще раз подробно пройдемся по тому.8115 .2832 . В этой книге мы будем приводить примеры в виде кода.=] . И последняя деталь.val_acc: 0.=] .4588 .. Поэтому видеопамять для сессии TensorFlow придется выделять вручную.0s ..val_loss: 0.8860 .9000 Epoch 4/100 2000/2000 [=. Но есть один небольшой трюк.4 мы поговорим о том. «ванильный» стохастиче- ский градиентный спуск — не самый лучший алгоритм на свете. в разделе 3. вот как это можно сделать: 1 По крайней мере.. а на тестовом — целых 93. конечно.=] .5625 .loss: 0..val_loss: 0. Более того.acc: 0.2463 .. конечно. так и Theano умеют автоматически переводить после этого вычисления на видеокарту. не меняется абсолютно ничего: чтобы запустить модель на видео- карте.9080 .8650 Epoch 3/100 2000/2000 [=..9125 .val_acc: 0..9150 Epoch 5/100 2000/2000 [=. меняются очень быстро.0s .val_acc: 0. как следствие. как именно). С точки зрения самого кода.3402 . как инициализировать и использовать TensorFlow и Keras.2.val_acc: 0. гораздо более эффективными.9250 .loss: 0.0s . и выход будет выглядеть примерно так: Train on 2000 samples.. связанный с выделением памяти. В наших экспериментах алгоритм сходился где-то за 5–10 эпох..val_acc: 0. Если вы ком- пилируете модели в Theano. . Пока это только самые первые примеры.0s .9255 . достаточно просто запустить скрипт в со- ответствующей версии TensorFlow. сколько нужно. Такие вещи.loss: 0. а сами вычисления станут гораздо более параллельными и.0s .2645 .loss: 0..val_loss: 0. в начале 2017 года.=] . который Keras может автоматически компилировать как на TensorFlow.6.9350 Это значит.=] . как TensorFlow..8877 .val_loss: 0.. даже если бы памяти на них хвати- ло.2909 . что это можно улучшить (и в разделе 4.acc: 0. И о практике: введение в TensorFlow и Keras 91 При обучении Keras будет выдавать в удобной форме информацию о текущем состоянии обучения.4400 .3564 .5 % (это. что не позволит нам обучать на одной и той же видеокарте несколько моделей одновременно. что в конечном счете мы обучились классифицировать наши два нормальных распределения на тренировочном множестве с точностью около 92.val_loss: 0. об этом можно не задумываться: Theano сначала ком- пилирует граф целиком и поэтому может сама выделить ровно столько памяти.2241 .1399 .1957 .val_loss: 0. Граф вычислений будет тогда храниться в видеопамяти..6.=] .acc: 0. так и на Theano.loss: 0. определя- ющего модель. Epoch 100/100 2000/2000 [=. скомпилировав ее в TensorFlow. А вот TensorFlow1 сама не справится. по умолчанию она просто съест всю доступную видеопамять. validate on 200 samples Epoch 1/100 2000/2000 [=.0s .

Пора к ним и переходить.2): num_threads = os.Session(config=tf. Если ваша модель помещается в одну пятую видеопамяти. TensorFlow не сможет понять это заранее и выделить больше самостоятельно. .92 Глава 2. Итак. значит. intra_op_parallelism_threads=num_threads)) else: return tf. вы можете параллельно обучать на своей видеокарте сразу пять таких моделей. которые потребуются нам для обучения нейронных сетей.Session(config=tf. или Курс молодого бойца def get_session(gpu_fraction=0. Правда. в этой главе мы пробежались по всем тем предварительным сведениям. если памяти не хватит. а просто «упадет» с ошибкой.GPUOptions(per_process_gpu_memory_fraction=gpu_fraction) if num_threads: return tf.get('OMP_NUM_THREADS') gpu_options = tf. Предварительные сведения.ConfigProto( gpu_options=gpu_options. а с ее базового компонента: модели одного-единственного нейрона. чтобы выделить нужную долю ви- деопамяти: sess = get_session() Вот и все.ConfigProto(gpu_options=gpu_options)) После этого вы используете эту функцию. но начнем мы даже не с нейронной сети. как в строчке выше.environ. в том числе самых слож- ных и глубоких.

• о том. • об определении перцептрона и методах его обучения. приведем живой пример сети. а также то. как перцептроны соединяются в сети. которая обучится распо- знавать рукописные цифры.Глава 3 Перцептрон. как соединять нейроны в сеть и почему это совсем не такое простое дело. мы поговорим: • об истории искусственных нейронных сетей. • о разных нелинейных функциях активации. А затем. . похожа ли наша модель перцептрона на настоящие живые нейроны. как могло бы показаться. В частности. или Эмбрион мудрого компьютера TL.DR В третьей главе мы подробно рассмотрим главную составляющую любой ней- ронной сети — перцептрон. от классических до современ- ных. обсудив все это. • о том.

Сама конструкция искусственного нейрона.94 Глава 3. Питтс три дня подряд сидел в библиотеке и читал Principia Mathematica. Н. Карамзин. работа Маккаллоха и Питтса еще не относилась к машинному обучению: в ней модели нейрона и нейронной сети были введены чисто логически.. или Эмбрион мудрого компьютера 3. либо «выключен». М.. опубликованная в 1943 году.1. Перцептрон. формализующий ациклические графы. который считал. читайте в основном тексте главы. мотивированной и вдохновленной исследованиями человеческого мозга. Ав- торы отмечают. или Linear Threshold Unit. очевидно. а для нейронных сетей разрабатывают целый логический аппарат. практически без промежуточных состояний) ней- роны удобно описывать в терминах пропозициональной логики. предлагающей математическую модель нейрона и конструкцию искусственной нейронной сети. . что из-за бинарной природы нейронной активности (нейрон либо «включен». первой работой. которая затем поступает на вход нелинейности в виде «ступеньки». как система аксиом и правил вывода. затем с помощью этих правил был доказан ряд общих теорем. была статья Уоррена Маккаллоха (Warren McCulloch) и Уолтера Питтса1 [356]. когнитивной перегрузки меньше. до Дартмутского семинара. они. что имеют большой орган для охлаждения крови и потому могут действовать более рационально. получилась очень современной: линейная комбинация входов. а спам-фильтров не существовало вовсе. не могли появиться во времена Аристотеля. что по меркам истории математики нейронные сети — доста- точно молодой объект. до того. Поэтому довольно естественно. В детстве Уолтер сам обучился логике и математике. По видимому. нейронные сети — это пример математической конструкции. Когда появились искусственные нейронные сети Но и простой гражданин должен читать Историю. самых первых конструкций. Время было совсем другое. и Рассел письмо не только прочитал. однако стал заниматься логикой и продолжал переписку с Расселом. но принял всерьез и пригласил Уолтера к себе в Кембридж. в котором выделил несколько серьезных проблем с первым томом книги. Она мирит его с несовершенством видимого порядка вещей. История государства Российского Как мы уже говорили. что было дальше. 1923–1969) — американский логик. а потом написал Бер- трану Расселу критическое письмо. специализировавшийся на вы- числительной нейробиологии. пока учился в университете Чикаго. как появился собственно термин «искусственный интеллект». что мозг охлаждает кровь. как с обыкно- венным явлением во всех веках. Авторы скорее рассуждали о том. С одной стороны. и люди тем и отличаются от животных. Однако по меркам истории искусственного интеллекта нейронные сети — это одна из старейших. сравнивающей результат с некоторым порогом (threshold). появившаяся еще до знаменитого эссе Тьюринга Computing Machinery and Intelligence. что вообще можно было бы 1 Уолтер Питтс (Walter Pitts. О том. Питтс не поехал. который у Маккаллоха и Питт- са называется Threshold Logic Unit (TLU). когда ему было 12 лет.

связанного с циррозом печени [174]. перестал появляться в MIT. и ко- гда в 1952 году Маккаллох объявил. чтобы вообще предложить идею фор- мализации нейронных сетей и нейронной активности. что эти «мальчики» якобы соблазнили их дочь Барбару. Диссертация Питтса наверняка стала бы очередным прорывом в кибернетике. как они работают и для чего нужны. также весьма релевант- ный современным исследованиям. Сама книга относится скорее к нейробиоло- гии. как адаптировать статистическую механи- ку для моделирования мышления. не было. Память в таком компьютере предполагалось по- лучить из замкнутых контуров активации нейронов. Маргарет расска- зала Винеру о том. в результате которого эффективность A как клетки. конечно. а потом и построить работающий компьютер на основе моделирования нейронов. сжег (!) свою диссертацию и все записи о ней. закончилось все трагически. показав. что переезжает в Кембридж. Жене Винера Маргарет категориче- ски не нравились вечеринки. но Винер поверил и мгновенно прекратил всякое общение с Маккаллохом и Питтсом. . основанных на сравнении с по- рогом. вместе с когнитивистом Джеро- мом Леттвином. и то. в одной или обеих клетках происходит некий процесс роста или изменение метаболизма. Для Питтса. и они впятером. Другой первый шаг искусственных нейронных сетей. к сожалению. чтобы ее активировать. которые устраивал Маккаллох на своей ферме.3. На деле ничего такого. стали работать над тем. но некоторые ее части содержат ключевые идеи. и ее непосредственный эффект был скорее в том. чтобы возбудить клетку B. чем к математике. как мышление может самопроизволь- но возникать из таких простых логических элементов. — это книга Дональда Хебба The Organization of Behaviour. это стало по- воротным моментом: он стал все больше пить. послужи- вшие основой всего дальнейшего обучения нейронных сетей. Когда появились искусственные нейронные сети 95 сделать с помощью таких искусственных нейронов. Питтс считался самым гениальным ученым в этой группе и объявил. который к тому времени уже был подвержен депрессиям. которое сам Дональд Хебб в первоисточнике формулировал так: «Когда аксон клетки A находится достаточно близко. но. — это так называемое правило Хебба. с трехмерной структурой связей между ними. что у нас в голове вполне может содержаться собранная из нейронов машина Тьюринга (идея маши- ны Тьюринга тогда тоже была совсем свежей). Винер познакомил Маккал- лоха и Питтса с фон Нейманом. Такая «нейронная сеть» еще не умела обучаться ни в каком смысле слова. Статья Маккаллоха и Питтса прошла практически незамеченной среди нейро- биологов. пока та гостила в доме Маккаллоха в Чикаго. что пишет диссертацию о вероятностных трехмерных нейронных сетях. чем пытались предложить конкретные работающие алгоритмы для этого. полностью прекратил заниматься наукой и умер в 46 лет от кровоизлияния. вышедшая в 1949 году [209]. Основная конкрет- ная идея. но создатель кибернетики Норберт Винер сразу понял перспективы ис- кусственных нейронных сетей и идеи о том. когда последовательная акти- вация превращается в самоподдерживающийся процесс (в настоящем мозге очень много таких замкнутых контуров. до сих пор не вполне ясно).1. и многократно или постоянно участвует в том. перешедшая из работ Хебба в современное машинное обучение практиче- ски без изменений.

которые им давали исследователи. можно сказать. упомянем один подробный обзор современной истории ней- ронных сетей. если связь между двумя ней- ронами часто используется. которые смогли достаточно подробно изучить активации нейронов в зри- тельной коре. то есть клетка A должна была все же срабатывать чуть раньше. он выгодно отличается от многих других обзоров и исторических очерков тем. . один из отцов-основателей современного машинного обучения.1). 569]. создаваемые очень простыми алгоритмами (low complexity art) [473. что Хебб говорил о причинном участии клетки A в активации нейрона B. 1963) — немецкий математик и информатик. о которых пойдет речь в следующем разделе. что стало мотивацией для появления сверточных нейронных сетей и в некотором смысле глубокого обучения вообще (см. Но это было уже после появления первых перцептронов Розенблатта [455. и минималистические произведения искусства. Синапсы были случай- ным образом соединены друг с другом и обучались по правилам Хебба на основе вознаграждений. Эта простая. современное развитие этой идеи из- вестно как пластичность. работу Юргена Шмидхубера1 [475]. а также недавние работы. В 1951 го- ду Марвин Минский. и его аспирант Дин Эд- мунд (Dean Edmund) построили сеть из сорока синапсов. вся эта глава во мно- гом рассказывает именно об истории развития нейронных сетей. так что к ней мы еще не раз вернемся). 456].96 Глава 3. и хотя непосред- ственного развития она не получила. знаменитый своими достижениями в области нейронных сетей. теории сложности и других областях. 474]. лабора- тория Шмидхубера разработала ряд конструкций современных рекуррентных нейронных сетей. а не просто одновременном срабатывании. увеличивается». основанных на этом базовом пра- виле. обучение кото- рых основано на этом принципе. группы методов обучения без учителя. зачастую представляющий собой просто набор ссылок. 236. Перцептрон. Завершая этот краткий исторический экскурс (впрочем. р. или Эмбрион мудрого компьютера возбуждающей B. основанная на понятии колмогоровской сложности. связанные со временем активации нейронов. в те времена это была. конечно. реализация «в железе». вклю- чая LSTM (long short-term memory). Следующим прорывом в нейробиологии стали работы Хьюбела и Визеля [235. зависящая от времени спайков (spike-timing dependent plasticity) [351. тут же последовала их программная реа- лизация. генетических алгоритмов. раздел 5. Эта модель получила назва- ние SNARC (Stochastic Neural Analog Reinforcement Calculator). но и сама по себе легла в основу так называемого обучения по Хеббу (Hebbian learning). Несмотря на то что это очень плотный и довольно сухой текст. Проще говоря. она от этого упражняется и становится сильнее. что это первая настоящая ре- ализация обучения с подкреплением (о котором речь пойдет в главе 9). а просто упомянем сети Хопфилда (Hopfield networks) [230]. которого мы уже не раз упоминали. Одно любопытное направление исследований Шмидхубера — тео- рия красоты. В данной книге мы не будем подробно останавливаться на обучении по Хеб- бу. Дело в том. что анализирует именно историю идей: как развивались не просто нейронные 1 Юрген Шмидхубер (Jurgen Schmidhuber. но очень мощная идея не только мотивировала дальнейшие исследова- ния. точнее. Как только идеи Хебба оформились. 497]. В частности.

Как работает перцептрон К 80-м годам двадцатого столетия. с первой конструкции линейного перцеп- трона1 . 2 Фрэнк Розенблатт (Frank Rosenblatt. напротив. что нет. а здесь будем иметь дело с самой простой. принятых. И начнем мы. мы наконец-то приступаем к рассмотрению собственно математики проис- ходящего. как ты говоришь. пожалуй. шагу ступить. конечно.2.2. когда все объекты в тренировоч- ной выборке помечены одной из двух меток (скажем. пер. на французский ма- нер. Космическая Одиссея 2001. что искусственный мозг мож- но «выращивать» посредством процесса. дохнуть нельзя. . впрочем. 1928–1971) — американский психолог и информатик. В под- готовке этой книги мы не раз использовали обзор Шмидхубера и искренне его ре- комендуем. в этом споре между Аркадием и Павлом Петровичем мы. зачастую с неожиданными результатами. что без принсипов (Па- вел Петрович выговаривал это слово мягко. поразительно сходного с развитием человеческого мозга. с упором. на веру. 456]. нель- зя). описанного еще Фрэнком Розенблаттом2 в 1950-х годах [455. человеческий разум не смог бы постичь всю их сложность. и задача состоит 1 По-русски иногда еще пишут и говорят «персептрон». произносил «прынцип». будь они даже известны. Кларк. автор старается проследить историю каждой идеи до самых ее истоков. займем сторону молодого поколения. люди старого века. Как работает перцептрон 97 сети в целом. чего они до- стигали на каждом этапе развития. Галь Мы. Кроме того. Оказалось. с азов. построил домашнюю обсерваторию и активно участвовал в SETI. мы полагаем. а конкретные конструкции и алгоритмы оптимизации.3 мы уже обсуждали задачи классификации. что Розенблатт был по основной специальности психологом.. +1 или −1). и где сейчас все эти идеи применяются. налегая на пер- вый слог). По сути своей перцептрон Розенблатта — это линейная модель классифика- ции. одно из направлений его деятельности после перцептрона — исследования того. бинарной классификацией. И. на когнитив- ные науки. Минский и Гуд разрабо- тали методику автоматического зарождения и самовоспроизве- дения нервных цепей в соответствии с любой произвольно вы- бранной программой. С. А еще он интересовался политикой и астрономией. Точные детали этого процес- са в каждом отдельном случае так и оставались неизвестными. Отцы и дети Итак.3. Аркадий. Ин- тересно. Например. Н. конечно. Тургенев. А.. В главе 1. можно ли передать память или выученное поведение путем непосредственного физического впрыски- вания вещества мозга обученных крыс в необученных (Розенблатт убедительно показал. без принсипов. 3. до первого появления в литературе.

что в результате обучения модель разделит все пространство входов на две части гиперплоскостью: правило принятия реше- ния о том. Для простоты мы будем считать. . чтобы научиться расставлять эти метки и у новых. . . . Градиентный спуск к такой функции не применишь.w1 . или Эмбрион мудрого компьютера в том. хорошо выбрать ее как число неверно классифицированных приме- ров. + wd xd ) как можно чаще совпадал бы с правильным ответом y(x). что каждый вход представляет собой вектор вещественных чисел x = (x1 . и становит- ся совершенно непонятно. верный ответ ничего не вносит в функцию ошибки. значит. . получится кусочно-гладкая функ- ция ошибки с массой разрывов: она будет принимать только целые значения и рез- ко менять их при переходе от одного числа неверно классифицированных приме- ров к другому. . Перцептрон. и мы часто будем им пользоваться. Иначе говоря. Тогда в наших терминах «линейная модель» означает. а этого вполне достаточно. чтобы не тащить везде за собой свободный член w0 . которые перцептрон с весами w клас- сифицирует неверно. это стандартный трюк. . Вообще говоря. ранее не виденных объ- ектов. как мы обсуждали в разделе 2. но только в неправильную сторону. и дискретные признаки. Было бы. А «линейная модель» означает. Поэтому в перцептроне Розенблатта ис- пользуется другая функция ошибки. . и наобо- рот. какую метку ставить. Для удобства.98 Глава 3. конечно. чтобы знак линейной функции sign (w0 + w1 x1 + w2 x2 . что мы будем искать такие веса w0 .1}.w2 . .x2 . x∈M где M обозначает множество тех примеров. . мы минимизируем суммарное отклонение наших ответов от правильных. Естественно. природа объ- ектов на входе модели — это обычно больной вопрос в машинном обучении: часто нелегко сделать так. Умножение на y(x) здесь нужно для того. .w1 . . . перцептрон выдал положительное число (иначе бы ответ был верным). + wd xd можно считать просто скалярным произведением w⊤ x вектора весов w = (w0 . В результате у нас получилась кусочно-линейная функция. .3. . . чтобы одна и та же модель могла принимать на вход и непре- рывные.xd ). что x выглядит как x = (1.x1 . как обучать w. но мы пока абстрагируемся от всех этих проблем. ни ответ на нее от этого преобразования не меняются. так называемый критерий перцептрона: ∑ ( ) EP (w) = − y(x) w⊤ x .x2 . тогда w0 + w1 x1 + w2 x2 . .wd ) на входной вектор x. . . Как обучать такую функцию? Сначала нужно выбрать функцию ошибки. мы введем в вектор x лишнюю «вир- туальную» размерность и будем считать. и x ∈ Rd+1 . . Но тогда. и входы в тренировочном множе- стве снабжены известными выходами y(x) ∈ {−1. ни задача. будет линейной функцией от входящих признаков. .xd ) ∈ Rd .wd ∈ Rd . дифференциру- емая почти везде. чтобы знак про- изведения всегда получался отрицательным: если правильный ответ −1.

3. Это правило обновления весов так и называется — правило обучения перцептрона. . и мы их подробно рассмотрим в разделе 3. это значит. На очередном ша- ге получаем: w(τ +1) = w(τ ) − η∇w EP (w) = w(τ ) + ηtn xn . и это было основной математической идеей работы Розенблатта.3. .1. Ошибка на примере xn при этом. совер- шенно никто не гарантирует. которая принимает на вход все ту же линейную комбинацию. что в ре- альности перцептроны. прибавляем ηtn xn к w. неформально говоря. что вместе с тем не увеличится ошибка от других примеров. . нам нужно добавить в перцептрон еще один компонент — так называемую функцию активации. Как и другие функции активации нейронов. это монотонно неубывающая функция. то из них невозможно будет составить содержательную сеть. наиболее по- пулярная исторически и до сих пор часто используемая функция активации — это логистический сигмоид: 1 σ(x) = . 3. очевидно. Но самая классическая. и для каждого xn : • если он классифицирован правильно. из обучаю- щего множества. Алгоритм такой — мы последовательно проходим примеры x1 . На выходе перцептро- на обязательно присутствует нелинейная функция активации.1. уменьшается.3. Функции активации бывают разными. не могут быть линейными. что если на вход подают большое отрицательное число. но.2. которая при x → −∞ стремится к нулю.x2 . Дело в том. а при x → ∞ стремится к единице. Логистический сигмоид Теперь мы можем оптимизировать ее градиентным спуском. а если . как мы увидим буквально в следующем разделе. конечно. не меняем ничего. то нейрон совсем не активируется. Чтобы двигаться дальше. как мы их определили сейчас: если они останутся линейными. 1 + e−x График его показан на рис. • а если неправильно. Как работает перцептрон 99 Рис. Но и это еще не все.

а функция ошибки выглядит как перекрестная энтропия (вспомним раздел 2. и ошибка считается как сумма квадратов отклонений: E(x. и ошибка теперь считается как перекрестная энтропия. что теперь мы рассматриваем задачу би- нарной классификации. Правда. мы говорили о линейной регрессии в разделе 2. Вспомните. который мы обсудили в разделе 2. то активируется почти наверняка. но она. выступая в роли элементарной функции: нам для этого требуется только уметь считать частные производные по всем переменным.5. В логистической регрессии добавляется сиг- моид. обучать сложные сети буквально стохастическим градиентным спуском — не самая лучшая идея. а выходы нейрона теперь можно интерпретировать как вероятности. Вся глава 4 будет посвящена разным способам заставить обучение работать лучше. только если очень хорошенько присмотреться и как следует прищуриться. Перцептрон. что форма ее похожа на букву S 1 . y) = (y − w⊤ x)2 . В обычной линей- ной регрессии нелинейности нет совсем.5. когда мы разобрались с конструкцией одного перцептрона.100 Глава 3. что значок интеграла тоже происходит от буквы S. Обучать один такой перцептрон несложно: можно применить все тот же гра- диентный спуск. Конечно. В этой паре предложений произошел гигантский скачок: теперь мы фактически умеем обучать любые нейронные сети (кроме пока что рекуррентных). N i=1 От этой функции по-прежнему несложно взять производную.3): 1 ∑( ( )) N E(w) = − yi log σ(w⊤ xi ) + (1 − yi ) log 1 − σ(w⊤ xi ) . где функцией ошибки был квадрат отклонения. в свою очередь. И другие нелинейности. от слова «сумма». мы можем собрать из них целую сеть. тоже можно рассматривать как разные формы функции ошибки для базовой конструкции перцептрона — линейной комбинации входов. Теперь. кото- рый мы рассматривали в разделе 2. а «долгую S». происходит от прописной латинской s в курсивном написании. Эта функция называ- ется сигмоидом как раз потому. Лейбниц в знаке интеграла использовал не базовую латинскую S. или Эмбрион мудрого компьютера большое положительное. Она будет представлять собой граф вычислений. И разные нелинейности на выходе одного нейро- на можно рассматривать как разные формы функции ошибки. например. Один перцептрон может служить одним уз- лом в этом графе. . Разница только в том. конечно. от этого задача ре- грессии превращается в задачу классификации. что для перцеп- трона сделать совсем не сложно. что один перцептрон — это просто разновидность линей- ной регрессии. и данные y(x) представляют собой метки 0 и 1. однако понятие «S-образной формы» действительно довольно широкое и включает в том числе и такие картин- ки. Еще стоит отметить. В итоге перцеп- трон с логистическим сигмоидом в качестве функции активации фактически ре- ализует логистическую регрессию и строит при этом линейные разделяющие по- верхности. И все же уже сей- час мы теоретически можем обучить сколь угодно сложную нейронную сеть! 1 Это. о которых мы пого- ворим ниже. и для этого годится общий алгоритм обратного распростране- ния.2.

. 3. можно будет представить в векторной форме так:  ( )   f w⊤ x    y1  1  w1 w11 . а затем выходы этих параллельных нейронов опять рассматрива- ются как единое целое. практической точки зрения. которую уже подробно обсудили выше. wkn .. Затем выходы перцептронов «первого уровня» подаются на вход перцептронам «второго уровня». . и веса у них w1 . что вычисления в целом слое нейронов можно векторизовать..2 мы показали структуру одного перцептрона (рис. б изображена сеть с одним скрытым слоем и одним выходным слоем.. то есть всего их здесь два. которое делают все нейроны сразу. все равно это всего лишь набор независимых нейронов.. 3. 3. а).2. . где W =  . .   .2. у каждого из которых свои соб- ственные веса. Од- нако концепция слоя очень важна с вычислительной.. какую именно архитектуру выбрать. 3. Основная идея архитектуры нейронных сетей: а — граф вычислений для перцептрона. Так.w2 .3. то в результате мы получим у нейрона с весами wi выход yi = f (w⊤ i x). для графа вычислений теоретически нет разницы. Казалось бы.   . Тогда вычисление. б). . wi = ( wi1 . .  =  . Каждый вход этой сети подается на вход каждому перцептрону «первого уровня». Как работает перцептрон 101 Рис.. Вектор входов пода- ется сразу в несколько параллельных нейронов. 3. Дело в том.. б — полносвязная нейронная сеть с одним скрытым уровнем и одним выходным уровнем На рис...2. как объединять нейроны в сеть. а их выходы уже считаются выходами всей сети целиком.  = y = f (W x) =  . .2. Если в слое k нейронов.   . win )⊤ . Есть еще одно важное замечание по поводу того.. на рис. то есть представить в виде умножения матрицы на вектор и применения вектор-функции активации с одинаковыми компонентами. w1n  .   ( ) yk f w⊤ kx wk wk1 . а на вход подается вектор x = ( x1 x2 .  .  . где f — его функция активации. Обычно в любой сети отдельные нейроны объединены в слои. а также пример простой нейронной сети (рис.. новый вектор выходов. ..wk . xn )⊤ .2.

Мистер Розенблатт сказал. выглядят совершенно потрясающе — раз- говаривающие роботы! самодвижущиеся машины! автоматический поиск по всем книгам мира! — а с другой стороны. разработанного. все время кажутся как бы «сразу за горизон- том». приносить кофе и писать стихи.. чтобы построить первую мыслящую машину клас- са “Перцептрон”. раскручивали очередной виток спирали зачастую не сами ученые. чем те же вычисле- ния. в ис- тории развития методов машинного обучения были особенно яркими. При этом оказывается. чтобы читать и становиться мудрее. что по-английски называется boom-and-bust cycles. а нам останется только чувствовать себя белыми сахибами среди кремниевых слуг. а журналисты. еще немножко. Кстати. стоивший 2 миллиона долларов компьютер “704”. или Эмбрион мудрого компьютера и вычисление всего слоя сведется к умножению матрицы весов на вектор входов. В заключение этого раздела давайте еще на минутку вернемся к истории. что матричные вычисления можно реализовать гораздо эффек- тивнее. Например. А вот что писала о перцептроне The New York Times (вовсе не таблоид. простите за клише. андроиды будут приятным голосом сообщать послезавтрашнюю погоду. Конечно.. Перцептрон.2 мы уже цитировали грантозаявку отцов-основателей на проведение Дартмутского семинара летом 1956 года. взлетов и падений. начатый в разделе 1. История искусственного интеллекта полна. который в свое время послужил спусковым крючком для первой настоящей . именно со «мгновенным переводом устной и письменной речи» вышел казус. мы с вами уже подробно рассмотрели перцеп- трон Розенблатта и увидели. Ученые предсказывают. И неудивительно. а затем покомпонентному применению одной и той же функции активации.. что эта модель обучает простой линейный классифи- катор. Поэтому такое векторизованное представление — это один из главных инструментов для того. которые смогут воспроизво- дить самих себя на конвейере и которые будут осознавать свое собственное суще- ствование». ярче. По утверждению ВМФ. которая сможет читать и писать. ведь искусственный интеллект часто обещал продвижения. мгновенно пе- реводить устную и письменную речь с одного языка на другой. разработку планируется завер- шить через год.102 Глава 3. формировать абстракции и кон- цепции. Оптимистическое было время.. но представленные в виде обычных циклов.2. и все получится.. так что вряд ли эта косвенная речь сильно искажена) 8 июля 1958 года: «Психолог пока- зывает эмбрион компьютера. что в принципе возможно построить “мозги”. теперь мы можем продолжить сюжет. чтобы перенести обу- чение и применение нейронных сетей на видеокарты.. что и говорить. А в разделе 1.. что позже Перцептроны смогут распознавать людей и называть их по имени.. Разработанный ВМФ. Циклы чрезмерного оптимизма и неизбежных после этого разочарований. в частности на графических процессорах (видеокартах). и проследить историю пер- вых перцептронов до конца. а это ускоряет все процессы буквально в десятки раз. и делали это с фантазией. что ученые тоже скром- ностью не отличались. в которой они обещали «обу- чить машины использовать естественные языки. чем в других науках. но надо сказать. то. с общей стоимостью $100 000. как будто вот-вот. и улучшать самих себя». обучил- ся различать левое и правое после пятидесяти попыток. которые. они используют этот принцип. с одной стороны.

главное. что машинный перевод — это все-таки очень и очень непростая задача. В 1969 году Марвин Минский2 и Сеймур Пейперт опубликовали книгу с нехитрым названием «Перцептро- ны» [365]. он стоит на позициях анархо-синдикализма и либертарианства и последовательно критикует «американский истеблишмент». 1927–2016) — американский информатик. но нет. and Models [364] содержали постановки важнейших задач на пути к построению мыслящих машин и сыграли центральную роль в развитии искусственного интел- лекта и когнитивистики. За перцептронами пришли немногим позже. участвовал в политических дебатах. и даже различать омонимы совсем нелегко. чем Russians. соответствующие исследования активно спонсировались. Его знаменитые статьи Steps Towards Artificial Intelligence [363] и Matter. можно сказать. и. кстати. он также разработал первый в мире шлем виртуальной реальности (в 1963 году!). что естественный язык вот-вот получится описать достаточно просто и аналитически. Именно из этих исследований появил- ся знаменитый пример двойного перевода. 1928) — американский лингвист. Примечательно.2. а также для нужд биологии изобрел конфокальный мик- роскоп. которая могла бы быст- ро и надежно переводить документы с русского на английский и обратно. весьма характерная для тех оптимистических времен. Кстати. Основная научная заслуга Хомского — революция в лингвистике. и оптимизм был. философ. которую он произвел своими работами об универсальных и порождающих грамматиках. цита- та. что машин- ный перевод получается гораздо хуже. в январе 2016 года Мар- вин Минский скончался.. .. «отец современной лингвистики». безграничен: начало исследований в искусственном интеллекте сов- пало со знаменитыми разработками Ноама Хомского1 о трансформациях и порож- дающих грамматиках. Казалось. один из отцов-основателей искусственного интеллекта как области науки. главное. Кроме заслуг в искусственном интеллекте. Любопытно. что именно благодаря Хомскому математика пришла в лингвистику. эмигрировавшим в Соеди- ненные Штаты во время Первой мировой войны. Начиная с 1954 года. что Минский консультировал Артура Кларка при написании и постановке его «Космической Одиссеи 2001» и даже весьма лестно там упоминается — см. а мать приехала из Беларуси. и вполне вероятно. 2 Марвин Ли Минский (Marvin Lee Minsky. плоть слаба») превращается в the vodka is good but the meat is rotten («водка хорошая. ALPAC (Automatic Language Processing Advisory Committee — тогда в США очень любили создавать всевозможные комитеты) в своем отчете заключил. Ruskies. Во времена холодной войны амери- канскому правительству очень хотелось получить машину. что без русских здесь не обо- шлось. был не только ученым. которая вызвала серьезное разочарование в конструкции перцептронов 1 Ноам Хомский (Noam Chomsky. вероятность такого прочтения ни- чтожно мала. скорее. р. публицист и критик. буквально во втором поколении: его отец был украинским евреем. мозг сейчас успешно заморожены компанией Alcor. но мясо протухло»).3. Как работает перцептрон 103 «зимы искусственного интеллекта».2. генетически Ноам Хомский — вполне российский ученый. А в середине 1960-х годов этот пример смешным вовсе не показался. просто для нас. однако он верил или хотя бы недостаточно скептически относился к крионике. после которого the spirit is strong but the flesh is weak («дух силен. правда. Mind. Хомский всегда от- личался активной гражданской позицией. логик и полити- ческий активист. дороже и медленнее человеческого. знающих естественный язык и его не слишком очевидные особенности. К сожалению. но и публичной фигурой. все фи- нансирование свернули. После десяти лет исследований вы- яснилось. эпиграф к разделу 3. и в наше время Хомский широко известен еще и как политический активист. опять же. что его тело и. и усилия в направлении машинного перевода прекрати- лись надолго. все правильно! Теорети- чески такой смысл здесь тоже мог бы быть.

а дру- гое (точки) — из смеси нормальных распределений с центрами в точках (−1. что комбинировать линейные перцептроны в сеть тоже не имеет никакого смысла: композиция линейных функций снова будет линейной. что никакая прямая линия не может адекватно их разделить. одинокий линейный перцептрон никогда не обучится реа- лизовывать функцию XOR: множество ее нулей и множество ее единиц.3 мы изобразили два множества точек. а на свете есть и масса других множеств! Например. очевидно. что один перцептрон Розенблатта может обучиться разделять только те множества точек. И действительно. 3. хотя точки и звездочки очевидно занимают разные обла- сти на плоскости и легко отличимы. столь же очевидно. как будто бы основным аргу- ментом Минского и Пейперта была линейность перцептрона. ли- нейно неразделимы. или Эмбрион мудрого компьютера Рис. Сегодня нам странно слышать. Например. это понимали еще Маккаллох и Питтс (они и вовсе предлагали строить аналог машины Тьюринга на . на рис. линейный классификатор не может реализовать XOR.3. увы. но сеть из нескольких классификаторов с любой нелинейностью справится с этим без труда. И действительно. 3. сколь угодно большого числа линейных перцептронов сможет реализовать только те же самые линейные функции. Перцептрон. для которых было бы достаточно и одного. −1) и (1. но как только мы доба- вим нелинейную функцию активации. и сеть из любого.104 Глава 3. глубокий. между которыми можно провести гиперплоскость (такие мно- жества логично называются линейно разделимыми). соединять линейные перцептроны в сеть бессмысленно. 1). Другое возражение против линейной конструк- ции состоит в том. Ну конеч- но. что это серьезные аргументы против: ну конеч- но. −1). смысл тут же появит- ся. 1) и (1. даже самую простую. которые похожи на значения функции XOR: одно из них (звездочки) порождено из смеси нормальных распределений с центрами в точках (−1. Пример линейно неразделимых множеств Розенблатта. простите за каламбур. и весьма. Эту историю часто рассказывают так. Действительно.

помимо того. не было секретом. и вот на этом вопросе уже стоит остано- виться подробнее. сравнительно с ощущениями животного! как несораз- мерно сильнее и глубже волнуется его дух! и все из-за того. если перцептроны скрытого слоя не связаны со всеми входами (раньше люди надеялись. . и вышло так. Смысл и основная последовательность по-прежнему те же самые: сначала в перцептрон поступают входы из данных или предыдущих уровней сети. Нега- тивные утверждения в книге «Перцептроны» касались только некоторых конкрет- ных архитектур: например. Минский и Пейперт показали. и бу- дут обучаться в сети. Но зато какою силою отличаются возбуждаемые в нем аффекты. какова. затем бе- рется их линейная комбинация с некоторыми весами. пищи. а пока вернемся к перцептрону и посмотрим. что- бы напоследок добиться того же результата: здоровья. насколько его более потен- цированная (возвышенная. а также и всякого стра- дания. конструкция нелинейности. какие у него бывают функции активации в наше просвещенное время. что сети с одним скры- тым слоем не могут вычислять некоторые функции. без которой. как мы уже видели в этой главе. грантов на это практически не давали. Тем не менее. Шопенгауэр. хотя разрабатываться они уже начинали. никто не отказы- вается. А. что удастся обойтись «локальными» связями между перцептронами). получившая широкую известность. Именно из таких перцептронов. собственно.3. что книга Минского и Пейперта. 3. конечно же. кро- ва и т. Целых десять лет после этого заниматься нейрон- ными сетями было немодно и неприбыльно. конечно. и для Минского это тоже. Разница есть только в том. а потом результат проходит через некоторую нелинейную функцию. Современные перцептроны: функции активации 105 своих перцептронах). он представляется чрезвычайно интересным. в целом. в 1970-е годы был достигнут очень серьезный прогресс в разработке и изучении нейронных сетей. собственно. надолго от- толкнула многих исследователей от того. никакой выразительной силы у нейронной сети не получится. Об этом мы поговорим в следующих главах. или нейро- нов. Однако в конце 1960-х годов о нейронных сетях и тем более глубоких сетях еще не было широко известно.3. п. чтобы продолжать изучение перцептро- нов и вообще нейронных сетей. утонченная) нервная система уси- ливает ощущения всякого наслаждения. Parerga und Paralipomena В наше время от базовой конструкции перцептрона. Современные перцептроны: функции активации В области реального.3. которые. физического наслаждения человек име- ет не больше животного. ничего криминального. состоят все современные нейронные сети.

то есть если пытаться обучить значение этой функции в ноль. Перцептрон. step(x) = 1. например. Однако есть и более важная тонкая разница: для функции σ ноль является точ- кой насыщения. По сравнению с логистическим сигмоидом гиперболический тангенс значительно «круче» растет и убывает. для наглядности на одном и том же графике. Эта функция использовалась в ранних конструкциях перцептронов. Гиперболический тангенс часто ис- пользуется в некоторых приложениях нейронных сетей. если x < 0. исторически в нелинейных перцептронах обычно приме- нялась функция активации (возбуждения нейрона) в виде логистического сигмо- ида: σ(x) = 1+e1−x . тоже ограничен (правда. А для tanh ноль — это как раз самая нестабильная промежуточная точ- ка. наклон касательной в нуле у тангенса tanh′ (0) = 1. почему это важно. Эта функция обладает всеми свойствами. в частности в компьютер- ном зрении. не одна. мы поговорим в разделе 4.2. 3. Некоторые из них показаны. если x > 0. но это. от нуля легко оттолкнуться и начать менять аргумент в любую сторону. О том. вход будет стремиться к минус бесконечности. в этом разделе мы с ними познакомимся поближе. не важно). которые в разное время и для разных целей использо- вались в литературе. В качестве функции активации можно рассмотреть и обычную ступенчатую функцию. Для этого достаточно просто точно так же подсчитывать . а у логисти- ческого сигмоида σ ′ (0) = 14 . а производная — к нулю. везде дифференцируема. или Эмбрион мудрого компьютера Как мы уже говорили. это стабильное состояние. необходимыми для нелинейности в нейронной сети: она ограничена. Есть много разных функций активации. конечно же. То.106 Глава 3. конечно. да и на практике случайно попасть точно в ноль вряд ли получится. как step(x) = 12 . что она не определена в нуле. он стремится к −1 при x → −∞. на рис. она же функция Хевисайда: { 0.4. и производную ее легко под- считать как σ ′ (x) = σ(x)(1 − σ(x)). например. Один перцептрон со ступенчатой функцией активации обу- чить вполне возможно. Но она такая. а не к нулю. быстрее приближается к своим пре- делам. Гиперболический тангенс: ex − e−x tanh(x) = ex + e−x очень похож по свойствам на логистический сигмоид: он тоже непрерывен. не очень мешает вести обучение: ее можно доопреде- лить. и производную от него тоже легко подсчитать через него самого: tanh′ (x) = 1 − tanh2 (x) (проверьте сами!). стремится к нулю при x → −∞ и к единице при x → ∞.

На последнем шаге классификатора это совершенно нормально. но затем превращать его в «жесткое» решение: если «мягкий» результат меньше нуля. во многом изменив- шая архитектурные основы современных нейронных сетей. нуля. . 3. Функция активации у них кусочно-линейная: { 0. И сно- ва мы должны сказать. 167]. А сами кратко пройдемся по основным идеям. Разобравшись с классическими функциями активации. Однако потом от них надолго отказались. Но сеть с несколькими уровнями на ступенчатых функциях активации.4.3. и ничего кроме нулей не получится. ReLU(x) = x. Современные перцептроны: функции активации 107 Рис.. выдаем один ответ. Здесь тоже есть о чем рассказать. желающим углубиться в детали мы пред- ложим работы [382]. — это так называемые rectified linear units (ReLU). если x < 0. в нейронной сети из перцептронов со ступенчатыми функциями активации градиенты не дойдут от выходов к входам: по дороге градиент будет умножаться на производную функции step. ведь производная от ступеньки просто всегда равна нулю (кроме.3. и возрождение ReLU произошло уже в разгар революции глубокого обучения. которые приводят ReLU-нейроны к успеху. То же самое можно записать более кратко: ReLU(x) = max(0. и процессу обучения не мешает. x). где практическая польза ReLU становится очевидной и в «обычных» нейронных сетях. что это не вполне современная идея: такие искусствен- ные нейроны использовались еще в начале 1980-х годов в модели многоуровне- вых сетей Кунихико Фукусимы для распознавания образов. давайте двигаться к со- временности. если x ≥ 0. если больше нуля. не построишь. Различные функции активации «мягкий» результат в виде комбинации входов и весов.. получившей название Neocognitron [166. Главная идея. и [180]. к со- жалению. Таким образом. — другой. опять же. где она не определена). где ReLU-активация подробно мотивирована и описана в кон- тексте ограниченных машин Больцмана.

если больше нуля. особенно если значительно меньше. гладкая функция. объяснить. то есть по числу нейронов). будут близки к единице. Но при этом логистический сигмоид дает хоть и непрерывный. Это хо- рошая. а оставшийся «запас» сигмоид не интересует. но по сути бинарный ответ: на- пример. с тангенсом примерно та же история. когда результат активации становится близким к единице. Пред- ставьте себе активацию перцептрона обычным логистическим сигмоидом. и их сумма (черная кривая) стремится к шести. как один сигмоид: если аргумент x меньше нуля. А что бу- дет в сумме бесконечного ряда? Слева от нуля она ведет себя примерно так же. . центр которых рас- положен дальше. чтобы подсчитать про- изводную ступенчатой функции.. выдаем ноль. будут по-прежнему близки к нулю (и ряд будет сходить- ся в любой конечной точке).. если мы хотели бы различать «сильно активированные» и «немножко активированные» нейроны. центр которых расположен слева.108 Глава 3. нам потребуется одна интересная промежуточная конструкция. от «недостаточно активированных».5 изображены шесть таких сигмоидов. на одном и том же «железе» могут быть значительно больше (по размеру. что ReLU-нейроны эффективнее основанных на логи- стическом сигмоиде и гиперболическом тангенсе. каждый из которых смещен вправо относительно предыдущих на единицу.. чтобы новая конструкция работала и действительно чему-то обучалась. откуда она берется. что основанные на ReLU-нейронах сети при одном и том же «вычислительном бюджете» на обучение.99995). нужно ровно одно сравне- ние: если x меньше нуля. А вот справа от нуля наблюдается любопытный эффект: сигмоиды. даже сравнивать ни с чем не надо. 3. На рис. Чтобы как следует промотивировать ReLU-активацию. Давайте рассмотрим такую функцию активации: ( ) ( ) ( ) ( ) 1 1 3 5 f (x) = σ x + +σ x− +σ x− +σ x− + . Однако он может быть интересен в том случае. но на практике означает. а затем умножить σ(x) на 1 − σ(x). либо нет. или Эмбрион мудрого компьютера Прежде всего отметим. А чтобы вычислить производную ReLU′ (x).9933) от ак- тивации «с силой 10» (σ(10) ≈ 0. когда этот результат близок к нулю. ему сложно будет отличить активацию «с силой 5» (σ(5) ≈ 0. Однако сам по себе этот аргумент мало что значит: в конце концов. То есть активация этого «стека» сигмоидов примерно подсчи- тывает вход x. Например. а сигмоиды. правее x. — единицу. чем сети с более сложными функциями активации. Перцептрон. Для этого можно построить любопытную конструкцию — сумму нескольких логистических сигмоидов. нужно вычислить непростую функцию σ. чтобы подсчитать производную σ ′ (x). На первый взгляд это кажется несущественным. и она прекрасно умеет отличать «достаточно активиро- ванные» нейроны. все сигмоиды достаточно близки к нулю. только нужно возводить в квадрат. и даже сумма ряда будет маленькой. Фактически это такая сглаженная бинар- ная ступенька: аргумент функции либо способен на нее «запрыгнуть». Нужно еще. 2 2 2 2 Это сумма бесконечного ряда логистических сигмоидов.

рис. чем обычный логистический сигмоид. Значит. бесконечный ряд сигмоидов. очень похожа на ReLU(x) = max(0.3. то нужно сначала заметить. 1/2 2 его приближение площадями прямоугольников ширины 1 с центрами в натураль- ных точках. . именно этим объясняется успех ReLU-активации в современных нейронных сетях. сумма будет давать при- ближение к значению интеграла: ∑∞ ( ) ∫ ∞ ( ) 1 1 f (x) = σ x+ −i ≈ σ x + − y dy = 2 1/2 2 i=0 [ ( 1 )]y=∞ = − log 1 + ex+ 2 −y = log (1 + ex ) . в свою очередь. что обычная функция log (1 + ex ). — это приблизительно то же самое. 3. 3. x) (см. которая сильнее и более выразительна. Иначе говоря. чем один сигмоид. если посмотреть на ReLU-нейрон теоретически. Сумма шести сигмоидов Если же говорить формально. как это работает. 3. И теперь мы видим. Современные перцептроны: функции активации 109 Рис. мы увидим.4). Вероятно. на рис. чему равен интеграл сигмоида (проверьте это дифференцированием): ∫ σ(x)dx = log (1 + ex ) + C. что f (x) — это в точности риманова сумма такого интеграла: ∫ ∞ ( ) 1 σ x + − y dy. что это неплохое приближение к конструкции. y=1/2 Что же мы получили? Оказывается.5 показано. который го- раздо более выразителен. и может выразить понятие «силы ак- тивации».3. Ну а эта функция.5.

это достигается. E+RI−V th f (I) = th 0. мы подробно рассмотрели три основные функции активации: логистиче- ский сигмоид. в частности. что происходит с настоящими нейронами в реальном человеческом (и не только) мозге. как функцию активации. 3. он потребляет около 20 % всей энергии.6. R. E и τ — параметры мембраны нейрона (сопротивление. получившую название SoftPlus. Первая мысль: раз уж мы мотивировали ReLU как приближение к функции log (1 + ex ). а с правильно регуляризованной ReLU-активацией (о регуля- ризации мы будем много говорить ниже) несложно достичь высоких показателей разреженности. потенциал и временная константа). особенно на ранних этапах на- шего эволюционного развития. «счет за электричество» не менее важны. такая структура активации гораздо точнее отражает то. разреженностью активации нейронов: в каж- дый момент времени активированы от 1 до 4 % нейронов в мозге [319].110 Глава 3. если E + RI > V . чем сигмоид. Как видно (и математически это тоже легко доказать). но тоже любопытное объяснение: оказывается. Vreset — потенциал покоя. и ReLU-активация (с точностью до сдвига) куда больше похожа на то. Это функция интенсивности (ча- стоты срабатывания) выходных сигналов нейрона в зависимости от силы тока на входе. Перцептрон. в каждый момент времени заметно активирована бы была где-то половина нейронов. что целый день непрерывно искать для мозга еду. нужно просто взять саму эту функцию. и времени собственно подумать уже не осталось бы. График этой функции для реалистичного набора пара- метров [105] представлен на рис. чем на сигмоид. формально говоря. пришлось бы заниматься исключительно тем. Но если бы они имели сигмоид-активацию и инициализировались случайно. может быть. I — сила то- ка на входе. которую тратит человек. как известно. th где Vth — пороговый потенциал активации. Итак. Во-первых. Для имеющегося у него огромного числа нейронов мозг крайне энергоэффек- тивен. что происходит в реальной биологической жизни. она выглядит так: ( )  τ log E+RI−Vreset −1 . если E + RI ≤ V . человеку. гиперболический тангенс и ReLU. Поэтому для нашего «компьютера» в голове энергоэффективность. мозг — это ужасно энергоемкий орган. с ростом входа I функция активации быстро становится фактически ли- нейной. так. чем собственно вычислительная мощь: если бы мозг тратил еще больше энергии. как во многих нейронных сетях. Во-вторых. и все станет еще лучше? . при собственной массе около 2 % от массы тела. или Эмбрион мудрого компьютера Есть и менее формальное. прямые непосредственные исследования функции активации в ре- альных нейронах и приближенные к биологии модели [105] дают функцию. Осталось совсем немного — изу- чить различные их модификации. гораз- до больше похожую на ReLU.

но пришли к выводу. что большого выигрыша нет. 3. «протекающий ReLU» (Leaky ReLU.3. чем тот же логистический сигмоид).1 (см.7). 3. если x > 0. . — это различные модификации и обобщения ReLU. если x < 0. которые начали завоевывать популярность в последнее вре- мя. LReLU) [342] обобщает ReLU так: давайте на положительных аргументах оставим функцию той же самой. например. Вариации на тему ReLU: протекающий ReLU. в уже упоминавшейся работе [180]. рис. параметризованный ReLU и экспоненциальный линейный нейрон Ее рассматривали. логистический сигмоид и ReLU Рис.6. 3. а на отрицательных отойдем от строгого нуля и сделаем функцию тоже линейной и при этом немножко отрицательной: { ax. Функция активации живых нейронов. но при этом добавить немного гиб- кости в базовую конструкцию.7. Например. где a — это небольшая положительная константа.3. например a = 0. которые пытаются со- хранить вычислительную эффективность. а эффективность уменьшается (дифферен- цировать эту функцию ничем не приятнее. LReLU(x) = x. Следующие идеи. Современные перцептроны: функции активации 111 Рис.

в результате получается строго более выразитель- ная система. чтобы сохранить разреженность). что в построенных на глубоких сетях акустических моделях LReLU улучшают распознавание речи. x < 0 f (x) + α. x < 0 a. пра- вильно инициализировать и обучать. Эта конструкция выглядит точно так же. включая константу. x≥0 1. Различные функции активации: сводная таблица Название функции Формула f (x) Производная f ′ (x) Логистический сигмоид σ 1 1+e−x f (x) (1 − f (x)) Гиперболический тангенс tanh ex −e−x 1 − f 2 (x) ex +e−x SoftSign x 1 { 1+|x| (1+|x|)2 0.112 Глава 3. x ≥ 0. x < 0 Ступенька (функция Хевисайда) 0 1. то результаты станут лучше [114]. ELU) [86]. в целом. x ≥ 0 { { α (ex − 1) . x<0 ELU x. Parameterized ReLU x. в котором на отрицательных значениях ар- гумента функция активации становится экспоненциальной: { α (ex − 1) . как и LReLU. x < 0. или Эмбрион мудрого компьютера Таблица 3. x ≥ 0 SoftPlus log (1 + ex ) 1 { { 1+e−x 0. это очень активно развивающаяся область исследований в современном глубоком обучении. В [342] показано. Перцептрон. Есть и другие варианты функций активации. x < 0 Leaky ReLU. Другой вариант модификации — это экспоненциальный линейный нейрон (Exponential Linear Unit. эти нейроны не будут обучаться вовсе. чтобы сочетать в одной функции наличие отрица- тельных значений (что важно для обучения) и их быстрое насыщение при даль- нейшем уменьшении аргумента (это важно. ELU(x) = x. x < 0 ReLU x. и если веса. x≥0 Идея здесь заключается в том. чтобы попытаться улучшить оптимизацию. x ≥ 0 { { ax. x < 0 0. PReLU) [111]. которые тоже в некоторых областях и экс- периментах показывают себя лучше существующих. что теперь константу a тоже можно обучать для каждого конкретного датасета по-своему. с той лишь разницей. Идея здесь состоит в том. ведь если на отрицательной части области определения все градиенты строго равны ну- лю. чем обычный ReLU и LReLU. . x ≥ 0 1. Дальнейшим развитием этой идеи стал параметризованный ReLU (Parametric ReLU. x≥0 1.1.

мы и рекомендуем начинать разработку. Основы глоссематики В этой книге мы рассмотрим массу различных архитектур для нейронных сетей: сверточные сети. Действительно ли настоящие.Логическое мышление даже у «цивилизованных» людей по- хоже. причём он может ис- полняться лишь с большой затратой сил и с разной степенью мастерства. а потом уже. Есть сразу несколько серьезных причин считать. мы еще не раз вернем- ся к устройству человеческого мозга и вынесем из его естественной архитектуры какие-то новые идеи о том. такие сети. архитектура системы и алгоритмы оптимизации обычно гораздо важнее.1. ся- кие. если останется время. ли- бо ReLU. о которых мы говорили в этом разделе. как оценить. Как же обучаются настоящие нейроны . Когда мы будем описывать новые архитектуры. основан- ных на градиентном спуске. этакие. то есть на трюк. а о со- временных модификациях поговорим в разделе 4. но далеко не всех. все немного сложнее. показаны в табл. нет. суть которого мы уже рассмотрели в разделе 2. и даже лучшие представители не в состоянии повто- рять его много раз подряд. сети с вниманием. а бинарные сигна- лы: один спайк. рекуррентные. сети с памятью. и эту оптимизацию лучше отложить на потом. конечно. . 3. но все-таки). а также несколько дру- гих (тоже иногда используемых на практике). чтобы передать значения градиентов (на самом деле. скорее. но оно. 3. Как же обучаются настоящие нейроны 113 Все те функции.4. Во-первых. Х.4. что из этого многообразия лучше подходит для конкретной задачи? На самом деле это далеко не первый и не главный вопрос в разработке реаль- ной системы глубокого обучения. которому мож- но обучить некоторых. Алгоритмически градиентный спуск реализуется через обратное распространение ошибки: мы постепенно счита- ем градиент сложной композиции элементарных функций и передаем эти гради- енты по сети в обратном направлении.1. они передают друг другу не вещественные числа. вероят- нее всего. на танцы лошадей. Что же выбрать бедному разработчику.3. «живые» нейроны работают именно так? Скорее всего. одна активация нейрона не содержит достаточно информации для того. можно попробовать параметризованные ReLU и другие современные идеи: они могут дать некоторое улучшение качества.. особенно ReLU. Подавляющее большинство примеров в этой книге будeт использовать одну из двух функций активации: либо логистический сигмоид σ. Ульдалль. будет маргинальным. что обратное распро- странение ошибки биологические нейроны реализовать не могут. Но при этом мы всю дорогу будем обучать сети с помощью методов..4. С них.. Й. как нам устроить архитектуру сетей искусственных. Но это само по себе не беда: говоря о дропауте в разделе 4..

доклад Джеффри Хинтона «Как сделать обратное распространение в мозге» [218]. конечно. которые часто ак- тивируются. и каждая связь между нейронами i и j характеризуется весом wij . но и алгоритмы? В начале этой главы мы уже упоминали основную альтернативную идею обу- чения нейронов в живом мозге: обучение по Хеббу. Тогда обучение будет состоять в том. яркий результат. а автоматических двунаправленных связей. Математически суть такого обучения проста: предположим. напри- мер. говорящий о том. у нейрона нет соединений.. впрочем. в результате нахождения значений активаций каж- дый нейрон будет вычислять некоторый выход xi . В этом уравнении можно либо считать. Эта идея появилась в конце 1940-х годов [209] и основана на простом принципе: те связи. у него нет. что xi равны 1 и −1. а те. которые можно было бы использовать в одну сторону при прямом проходе и в другую при обратном. Но какие алгоритмы они реали- зуют на самом деле? Может быть.114 Глава 3. чтобы нейрон умел передавать два разных типа значений: во время прямого прохода он должен передать результат вычисления своей функции от входов. которые как-то связаны друг с другом. что у нас есть набор нейронов. нужно либо понемножку уменьшать веса 1 На этот счет. Подадим на входы сети некий тренировочный пример. например. В-третьих. мы можем позаимствовать у природы не только архитектуры. послужили одним из оснований бихевиоризма. кроме собственно своих входов. биологические нейроны вряд ли могут непосредственно ре- ализовывать обратное распространение ошибки1 . Кроме того. и при этом увеличивать также веса между нейронами. периодиче- ски только уточняясь. для обратного распространения ошибки необходимо. Во-вторых. и это самое серьезное возражение. Поэтому. а во время обратного — результат вычисления градиента своей функции по входам. Перцептрон. а его стохастический и сильно искаженный вариант. либо считать. чтобы увеличить веса связей между активированными парами нейронов: ∆wi = ηxi xj . что этот доклад так и не превратился даже в статью. Идеи Хебба быстро стали мейнстримом нейробиологии. Для компьютера это. работающих в обе стороны сразу: нейрон передает сигналы по аксону и получает входы через дендриты. есть и другие идеи: см. и увеличивать веса только активированных нейронов. которые активируются редко. чтобы обратное распространение ошибки работало достаточно хорошо. хотя до конца это еще не ясно. совершенно не проблема: где один алгоритм. Однако показательно то. ни один из которых не активирован. получают большие веса. что достаточно (стохастически) передавать один бит информации на прямом проходе вычисления значений сети и два бита на обратном. там и два. который позволял бы работать по-разному в зави- симости от чего бы то ни было. А вот для биологических нейронов это становится непреодолимым препят- ствием: в них нет механизма. . или единице. что каждый xi равен или нулю. и до сих пор считаются верными. Есть. зачем биологическим нейронам может понадобиться передавать не сам градиент. постепен- но отмирают. или Эмбрион мудрого компьютера мы обсудим.

когда возможных ассоциаций несколько. Правило обучения Хебба выглядит гораздо проще и логичнее для биологиче- ских нейронов. ко- нечно. но представляется. 352]. на которые подаются входы. 332]. что усиле- ние синаптической связи между нейронами зависит не только от самого факта сов- местной активации. Джеффри Хинтон и Джеймс Макклелланд еще во второй половине 1980-х годов предложили способ обучать автокодировщики без распространения ошибки. 451]. нейробиологи выяснили. за счет так называемой рециркуляции активаций по нейронной сети [222]. Открыли ее Терье Лемо и Тимоти Блисс. когда в сети есть группа видимых нейро- нов. которые реализу- ют ассоциативную память: сеть (по форме она обычно представляет собой двумер- ную решетку) «запоминает» несколько желаемых состояний-ассоциаций. то есть от того. чтобы общая «энер- гия» системы оставалась постоянной. как можно обучать нейронные сети без всяких градиентов или с градиентами. Однако пока сети Хопфилда работают совсем не так хорошо. Есть и другие идеи о том. на которых должно обучиться хорошее представление этих входов. с точки зрения машинного обучения и оптимизации функций. стала долговре- менная потенциация (long-term potentiation. 50. изучено в подробностях. Давайте рассмотрим ее на простейшем примере. LTP). как хотелось бы. что основные исследования в области моделирования ассоци- ативной памяти еще впереди.3. чтобы таким образом моделировать процессы ас- социативного вспоминания. и всплывает «самая близкая» из них [230. В искусственном интеллекте правило Хебба привело к появлению так называ- емых сетей Хопфилда. выраженными в очень неожиданной форме. либо перенормировать веса так. Так. но и от конкретного времени. Сеть затем должна сходиться к одному из них из любого начального состояния. В частности. и группа скрытых нейронов. чем обратное распространение градиентов. В современной нейробиологии явление долговременной потенциации уже. Недавняя работа Йошуа Бенджи с соавторами [538] пытается дать теоретическое обоснование STDP в контексте глубокого обучения. Это графические вероятностные модели. Первым примером биоло- гического механизма. Есть и современные нейронные сети с памятью (мы кратко обсудим их в главе 8). и в результате такого обучения запомненные состояния становятся локальными минимумами энергии сети. Это явление получило название spike-timing-dependent plasticity (STDP) [70. как именно работает память и обучение. Граф связей двудольный: каждый . Как же обучаются настоящие нейроны 115 всех нейронов равномерно. что долговременная потенциация — это один из основных механизмов того. Однако в 1940-х годах оно тоже сильно опередило развитие нейробиологии. При ней как раз усиливается синаптическая передача между двумя нейронами. Идея сетей Хопфилда состояла в том. который поддерживает обучение по Хеббу. проводившие эксперименты на кроликах в конце 1960-х — начале 1970-х годов [49. Запоми- нание происходит с помощью обучения по Хеббу.4. и сейчас считается. какое время проходит между спайками нейронов на входе и на выходе. когда все это происходит. которые активируются одновре- менно.

помогло исследовате- лям придумать сверточные нейронные сети. но все-таки пока очень разные устройства обработки информации. отвечающих за зрение. но по- ка и не очень-то понимаем. что человеческий мозг и нейронные сети — это хотя и чем-то похожие. Такая архитектура очень похожа на ограниченную машину Больцмана. .4. Пусть. в данном разделе. но не между собой. Еще раз мы вернемся к этой теме в разделе 5. просто сходится несколько хуже. в сторону которой нужно изменять веса на пути от нейронов скрытого уровня к ви- димым. мы иногда вдохновляемся тем. В [222] оказалось. что такое правило об- новления действительно сходится куда надо. а «в реальном време- ни». который у автокодировщи- ка должен быть как можно ближе к изначальному входу. как мозг обучается на самом деле. как устрой- ство участков коры головного мозга. и тем. — это и есть восстановленный вход. последовательной передачей активаций между нейронами. а не попытка что-то подсмотреть у природы. где поговорим о том. что каждый нейрон способен «запоминать» свое предыдущее значение и действовать на основе разницы между своим предшествующим состоянием и вновь пришедшей актива- цией. что измене- ние веса от j-го нейрона скрытого уровня к i-му нейрону видимого уровня можно подсчитать как ( ) (1) (0) (2) ∆wij = ηyj yi − yi .116 Глава 3.1. Тогда то. — это всего лишь разница между тем. где верхние индексы обозначают время. более того. Перцептрон. что обучение нейронной сети происходит не абстрактно. и не можем точно эмулировать даже то. Но в целом тему соответствия между нейронными сетями и человеческим мозгом пора закрыть: отныне для нас нейрон- ные сети — это формализм машинного обучения. что пришло к нему обратно! Осталось только предположить. мы увидели. И та самая производная. Несмотря на эти отдельные работы. что уже понимаем. Представим се- бе. что видимый нейрон посылал рань- ше. Поэтому совре- менные нейронные сети не стоит рассматривать как попытку эмулировать работу мозга: да. поэтому для искусственных нейронных сетей нет большого смысла применять такое обучение. или Эмбрион мудрого компьютера видимый нейрон связан с каждым скрытым. как и ранее в разделе 1. Это предположение биологически вполне разумно. и передача актива- ций идет в обе стороны: в каждый (дискретный) момент времени активации ней- ронов меняются. и алгоритм ее обучения тоже будет чем-то похож. чем обычный градиентный спуск. что вернется к нейрону видимого уровня после путешествия туда- обратно по сети. i Тогда процедура рециркуляции работает следующим образом. Получается. каждый нейрон — это обычный знакомый нам перцептрон с сигмоидальной функцией активации: ( ) ( ) ∑ yj = σ zj = σ xi wji − bj . как в наших головах все устроено.

и подобные методы Ивахненко развивал и применял затем всю жизнь. сильнее погрузиться в этот сон. Глубокие сети: в чем прелесть и в чем сложность? Если у меня было какое-нибудь желание. как и сами искусственные нейронные сети1 .5. лишь бы мы умели пробрасывать градиенты через узлы. будем надеяться. вообще говоря. что немец Шмидхубер сможет отстоять «славу советского оружия». все глубже и глубже. то есть реализовывать процедуру обратного распространения. что они состоят из нейронов. как потом можно обучать эту нейрон- ную сеть: для этого используются разные варианты градиентного спуска. как дифферен- цировать композицию функций. да и непосредственно алгоритм градиентного спуска был известен даже рань- ше XX века. люди знают уже на протяжении нескольких ве- ков. Ивахненко2 [257. разобрали. как выглядит один нейрон. . что революция глубокого обучения началась только в XXI веке. то есть нанизать друг на друга несколько уровней нейронов. Ивахненко разработал 1 За ранней историей вопроса здесь мы опять обращаемся к ссылкам из уже упоминавшегося исто- рического обзора Юргена Шмидхубера [475]. главное.. то лишь одно: глуб- же. Неуже- ли было так сложно скомбинировать эти идеи вместе. а чтобы собственно подсчитать градиент. А. и здесь есть повод для местечковой гордо- сти: первые настоящие глубокие сети в виде глубоких перцептронов были описа- ны в работах советского ученого А. Идея графа вычислений не кажется такой уж сложной. о которых мы недавно говорили. Сама идея построить глубокую сеть. Идеи глубоких нейронных сетей имеют почти такую же долгую историю. и еще глубже. кстати.3.. которые мы подробно рассмотрим в главе 4. назвав его «отцом глу- бокого обучения». как они соеди- няются в единую нейронную сеть и. Гарборг. Хотя его работы получили широкое признание во всем мире [150]. тоже не кажется верхом изобретательности. 2 Алексей Григорьевич Ивахненко (1913–2007) — советский ученый. мож- но воспользоваться алгоритмами автоматического дифференцирования на графе вычислений. Все эти методы. в 2005–2006 годах. Мы поняли. Метод группового учета аргументов стал его основным результатом. сейчас его редко вспоминают среди первооткрывателей глубокого обучения.5. Смерть We need to go deeper. 588]. а до этого глубокие ар- хитектуры и алгоритмы были неизвестны? Конечно. на недавней конференции NIPS 2016 Шмидхубер в своем докладе посвятил отдельный слайд Алексею Григорьевичу Ивахненко. нет. Г. Первые глубокие сети по- явились еще в середине 1960-х годов. о том. Глубокие сети: в чем прелесть и в чем сложность? 117 3. Из к/ф Inception К настоящему моменту мы узнали уже очень много о нейронных сетях. ни- как не зависят от архитектуры нейронной сети и теоретически должны работать для любого графа вычислений. специалист в области систем управления.

Но все-таки нейронные сети в итоге пошли немножко другим путем. Ес- ли в нем в качестве базовой модели выбрать перцептрон.)! Читающим нас студентам посоветуем не вешать нос и не считать. Хинтона и Уильямса. но отметим. если нужное качество уже достигнуто.118 Глава 3. очень похожие на ReLU. мы получим типичную нейронную сеть с несколькими слоями. которую мы уже упоминали и подробно обсудим чуть ниже. Первым применением обратного распространения ошиб- ки к произвольным архитектурам можно считать работы финского тогда еще сту- дента Сеппо Линненмаа [329]1 : в 1970 году он построил правила автоматического дифференцирования по графу вычислений. Однако нейронными сетями и во- обще машинным обучением Линненмаа тогда не интересовался. и это очень похоже на процедуру предобучения без учи- теля. а начиная с классиче- ских работ Румельхарта. но могут быть и любые другие. К ним эти идеи были применены в работах Дрейфуса [128] и Вербоса [564]. • этот процесс можно рекурсивно повторять до тех пор. в том числе и обратное распространение. используя выходы подобранных на преды- дущем шаге моделей как входы для последующих. что он получил самую первую степень Ph. Примерно в то же время появились и глубокие модели на основе обрат- ного распространения. которая обучается слой за слоем: сначала первый. Ивахненко предлагал использовать так называемые по- линомы Колмогорова — Габора. увидевших свет в 1986 году и чуть позже [459. • выбираем с помощью метрики качества несколько лучших моделей. то есть по сути просто многочлены с неизвест- ными коэффициентами. в котором появились и сверточные сети.Sc. Уже в нача- ле 1970-х годов этим методом вполне успешно обучались модели вплоть до семи уровней в глубину [256]. д. параметрическое семейство моделей. А работу об обратном рас- пространении он защитил в качестве диплома магистра (M. по информатике в истории университета Хельсинки. . • но если еще не достигнуто — и это ключевой момент — то мы начинаем стро- ить модели следующего уровня. метод обратного распространения стал общепринятым для обу- чения любых нейронных архитектур. суть которого выглядит примерно так: • сначала мы выбираем общий вид. пока качество модели либо не достигнет нужного уровня. кото- рые будем обучать. • строим и обучаем разные варианты выбранных моделей. потом он фиксируется и начинается обучение второго. Перцептрон. на ваш век интересных задач тоже хватит. Однако эта модель не обучалась в современном смысле этого слова: веса сети устанавливались из локальных правил обучения без учителя. Первой глубокой нейронной сетью можно считать уже упоминавшийся Neocognitron Ку- нихиро Фукусимы [166. 167].5. можно ничего дальше не делать. Метод группового учета аргументов выглядит на удивление современно. и т. 460]. На этом история нейронных сетей начинает 1 Целую биографическую сноску писать о Линненмаа не будем. и акти- вации.D. или Эмбрион мудрого компьютера так называемый метод группового учета аргументов [255]. что «тогда было интереснее»: поверьте. либо не перестанет улучшаться. которые мы рассматривали в разде- ле 2.

Более того. С уровнями нейронной сети возникает тот же эффект: одну и ту же функцию ча- сто можно гораздо лучше приблизить более глубокой сетью. чем неглубокие. можно даже построить экспоненци- альные разделения между разным числом уровней. две. что глубокая нейронная сеть со- здает не просто глубокое.5. утверждает. А сейчас перейдем к вопросу. чем мелкой. А другая сторона силы глубоких сетей — это то. приблизить те же функции гораздо более эффективно. даже если общее число нейронов в сети оставить постоянным. но которая требует экспоненциального размера схемы глубины k [208]. и поэтому разделяющие поверхности. Глубокие сети: в чем прелесть и в чем сложность? 119 заметно разветвляться. Казалось бы. посвя- щенных конкретным архитектурам. что слой нейронов с ReLU-активацией фактически «сворачивает» пространство.3. что дерево делит плоскость на столько же частей. что каждый уровень глубокой сети состоит не из одного нейрона. при- мер такого дерева и соответствующая разделяющая поверхность показаны на рис. 184]. 3. этого должно быть достаточно. то есть для всякого k можно придумать функцию.8. f2 . подобный которому часто приводит в своих статьях и книгах Йошуа Бенджи [38. что любую непрерывную функцию можно сколь угодно точно приблизить нейронной сетью с одним скры- тым уровнем. что схемы глубиной k + 1 могут эффективно выразить строго больше булевских функций. Читате- ли с некоторой подготовкой в теоретической информатике могут. f3 . 3. на которые прямая делит плоскость. отождествляя неко- торые его части между собой. Зачем плодить лишнюю сложность на ровном месте? Дело в том. чем схемы глубиной k. что мы можем разделять точки на плоскости с помощью трех возможных признаков. но рекомендуем на эту тему работу [398]. то есть прямая на плоскости. но еще и распределенное представление. Как следует объединять эти признаки в нашем классификаторе? Во-первых. а сразу из многих. прежде чем дви- гаться дальше. построенные в этом «свернутом» пространстве. каждый из которых — это линейная функция: f1 . телеологического характера: зачем вообще нужны глубокие сети? Классическая теорема Хорника [231]. 3. так сказать. и комбинации значений этих нейронов производят самый настоящий экспоненциальный взрыв в пространстве входов! Мы проиллюстрировали это примером на рис. Представим себе.8. Мы не будем вдаваться здесь в геометрические подробности. в которой очень изящно показано. основанная на более ранних работах Колмогорова [589].8. что глубокие архитектуры часто позволяют выразить то же самое. а изображена разделяющая поверхность по одному из них. На рис. . и мы вернемся к ней уже в соответствующих главах. б. разумеется. потом «разворачиваются» в гораздо более слож- ные конструкции в пространстве собственно входных векторов. которую можно выразить полиномиальной схемой глуби- ны k + 1. Здесь речь идет о том. Обратите внимание. Частей этих. и разме- чены части. можно попробовать добавить глубины и сделать дерево принятия решений. вспомнить аналогичные утверждения о булевых схемах: известно.

б — разделяющая поверхность дерева глубины 2 на трех признаках. Ну хорошо. без дополнительных ухищрений работать это не . Перцептрон. Первый — математический. мы вас убедили в том. что глу- бокие нейронные сети обучать. собственно. Но тогда возникает второй вопрос: а в чем. можно тем же алгоритмом градиентного спуска. конечно.. 3.. и это число разных вариантов растет экспоненциально при росте числа нейронов. А на рис. а не 1980-х годов? На этот вопрос есть два ответа. что глубокие нейронные се- ти действительно нужны. в — разделяющая поверхность трех признаков сразу сколько у него листьев: чтобы разобрать четыре разных возможных случая. но в базовом варианте. так долго вызывали такие сложности? Почему революция глубокого обучения произошла в середине 2000-х. в которых нет ничего теоретически сложного и которые. как мы уже видели. нам потребовалось построить дерево с четырьмя листьями. что наш «второй слой» может состоять из трех нейронов сразу. что за вторым уровнем есть еще третий. в изображено распределенное представление: давайте представим. А теперь представьте (нарисовать это было бы уже сложно — слишком запутан- ная поверхность получилась бы). появились почти одновременно с алгоритмом об- ратного распространения ошибки. Предположим. 3.120 Глава 3. проблема? Почему глубокие сети. или Эмбрион мудрого компьютера Рис. то есть мы можем составлять разные комбинации из таких вот разделяющих поверхностей по три прямые в каждой. Тогда всевозможные комбинации этих трех ней- ронов могут распознать сразу 23 = 8 разных случаев (на картинке из них реали- зуется 7). Сила распределенных представлений: а — разделяющая поверхность одного признака.8. Дело в том.8.

.3. и достаточно долго исследователи не могли их удовлетворительно ре- шить. экспоненциально увеличиваться по ме- ре «разворачивания» нейронной сети (exploding gradients). С одной стороны. мы пришли к тому. Хмм. что вы начали обучать глубокую сеть алгоритмом обрат- ного распространения ошибки. а разные умные варианты градиентного спуска (см. Поэтому предобучение без учителя может при- вести к очень хорошему эффекту: за счет того. а потом только локально «докручивая» их градиентным спуском. возникает еще и обратная проблема: ино- гда градиенты могут начать «взрываться».... он делает лишь небольшие шаги в ту или иную сторону от текущей точки. Обе проблемы возни- кают часто. от того. или к единице. что большинство нейронов последнего уровня на всех тестовых примерах уже «определились» со своим значением. Этот эффект называется проблемой затухающих градиентов (vanishing gradients). заключалось в том.5. Но что произойдет дальше? Дальше ока- жется. Однако почему-то половина этой книги вовсе не посвящена обучению . Представьте себе. что обучившийся последний слой нейронов «бло- кирует» распространение градиентов дальше назад по графу вычислений. что производная у этой функции активации близка к нулю с обеих сторон. 465.5) способны даже выбираться из небольших локальных минимумов и приходить в более значительный минимум. фактиче- ски стоят на месте. что с рекуррентными сетями. Дело в том. чтобы предобучать ней- ронные сети уровень за уровнем с помощью специального случая ненаправленной графической модели.. подождите-ка. так называемой ограниченной машины Больцмана (restricted Boltzmann machine. и более ранние уровни глубокой сети в результате обучаются очень медленно. с какой точки мы будем начинать. Если у них классическая сигмоидальная функция активации. которые фактически по определению являются очень глубокими. что градиентный спуск. а затем и в обработке изображений. разделы 4. и они очень сильно напоминали ис- ходный механизм «глубоких моделей» Ивахненко! Решение. и нужно применять разно- образные трюки.. Последний. что просто так глубокие сети обучать не удается.. а достаточно разумные. Такие конструкции привели к прорыву сна- чала в распознавании речи. Но все равно градиент- ный спуск по сути своей локален. А в главе 6 мы увидим. сначала последовательно обучая отдельные слои сети совершен- но другими алгоритмами. хорошо находит локальный минимум функции.. RBM). конечно. Что-то здесь не сходится. Глубокие сети: в чем прелесть и в чем сложность? 121 будет. и результат сильно зависит от инициализации. ближайший к выходам уровень обу- чится довольно быстро и очень хорошо.4 и 4. начальные значения весов уже не случайные. то есть их выход близок или к нулю. которое предложи- ли в группе Хинтона [223. что модель уже начинает потихоньку «разбираться» в структуре предлагаемых данных. то это зна- чит. В середине 2000-х годов появились первые действительно хорошо работающие и хорошо масштабирующиеся конструкции. но ведь на эту производную мы должны умножить все градиенты в алгоритме обрат- ного распространения! Таким образом. получается. 466].

как мы еще не раз увидим). Но вот. Разговор обо всех этих новшествах нам еще предстоит. чем сейчас.. обучаем мы их сейчас все-таки не самым наивным способом. они просто строят граф вычислений так. Этим инструментам будет посвящена глава 4: мы поговорим и о собственно регуляриза- ции в том смысле. Что произошло.. Через две недели смотрели на результат. как мы их попросим это сделать. чтобы обучать большие нейронные сети (более того. что. а в математике нейронных сетей произошло очередное продвижение. которой посвящена вся эта книга. Конечно. и о нор- мализации мини-батчей. использующиеся для глубокого обучения библиотеки доста- точно прозрачны. В середине 2000-х годов все сошлось воедино: технически компьютеры стали достаточно мощными. . Но и это еще не вся правда. которые можно так или иначе отнести либо к ре- гуляризации. почему глубокие нейронные се- ти было сложно обучать. которая в начале 1990-х годов считалась бы передним краем науки и обучалась бы наверняка часами. и тем более по сравнению с началом 1990-х.. подкручивали. ни попросту технической возможности успешно обучить нейронную сеть. наборы данных стали достаточно большими. такая обстановка не способствовала ни тонкой настройке се- тей. а затем буквально считают градиенты. Он очень простой и может вас разо- чаровать: дело в том.2. куда пропали все былые трудности? Во-первых. ни своевременным публикациям к соответствующим дедлайнам. хотя основные конструкции нейронных сетей во многом пришли к нам еще из 90-х. и опять запускали обучение на две недели. кото- рый сейчас считается довольно маленьким и используется для быстрых экспери- ментов. а то и 80-х годов прошлого века. или Эмбрион мудрого компьютера машин Больцмана! И это не потому. например. по сравнению с серединой 2000-х годов. а доступных для обучения данных было гораздо меньше. по всей видимо- сти. что они неявно участвуют в обучении каждой глубокой сети — нет. И началась та самая революция глубо- кого обучения. аналогичную сеть можно было обучить и в начале 1990-х годов. которое продолжалось на тогдашних компьютерах недели две. Причем происходило это двухнедельное обучение на классическом датасете TIMIT.122 Глава 3. нужно было подкрутить тот или иной параметр (а их в нейронных сетях очень много. либо к разным модификациям оптимизации в нейронных сетях. В следующем разделе мы приве- дем конкретный пример нейронной сети. мы сейчас все-таки лучше умеем обучать нейронные сети. В целом. что уско- рило процесс обучения еще на целый порядок). По- явился ряд важных инструментов. понимали. в котором она появилась в разделе 2. есть и другой ответ. что раньше компьютеры были медленнее. обучение системы рас- познавания речи выглядело примерно так: исследователи писали код и запускали обучение. и о но- вых модификациях градиентного спуска. и о правильной случайной инициализации весов. чтобы обучение больших сетей имело смысл. На вопрос о том. вычис- ления в нейронных сетях вскоре научились делегировать видеокартам. а сейчас составляет ба- зовый пример применения библиотеки TensorFlow и может обучиться за несколь- ко десятков секунд. Перцептрон.. и о дропауте. Для примера из следующего раздела это не так важно.

.3. боязливую. надо ли по- ставить запятую. а также можно ожидать. обратимся к графологии. Пример: распознавание рукописных цифр на TensorFlow 123 3. согласно основным современным версиям. мы будем обучать на наборе данных MNIST [188. неуве- ренность этакая является: «Как будто это стоит пяти?». большую пятерку. принадлежавшая к пифа- горейской школе. сложные модели в Theano нужно довольно долго компилировать.. И я ин- стинктивно ставлю маленькую этакую пятерку. Однако в 2015 году Google анонсировала выход своей собственной библиоте- ки TensorFlow с открытым исходным кодом [523]. вершинами которого будут математические опе- рации и точки входа и выхода для данных и переменных.. Дорошевич. что этот стоит пяти. документацию Theano. встречающихся в этой книге. Считайте только большие пятерки. которые хотели применить пифагорейское учение к жизни женщины. другие — дочерью. так и глубокого обучения в част- ности. как гимназист младших классов: не уверен. Некоторые источники называют ее женой Пифагора. что нейронную сеть можно представить в виде аб- страктного направленного графа. Многие из моделей. Это. 315]. Сейчас еще что-нибудь сделаем! С психологией кон- чено. которая на долгие годы опреде- лила ландшафт глубокого обучения в мире и во многом продолжает его опреде- лять и сейчас. Пример: распознавание рукописных цифр на TensorFlow Директор. хотя 1 Феано. стала библиотека Theano1 [528.6. Маленькие не считаются! В. Я ставлю пять. во всю клетку! А то. в том числе. или Теано Кротонская — одна из первых женщин-философов. В частности. что реализацией TensorFlow удобнее пользоваться (в частности. Конкурс Выше мы уже говорили о том. в настоящем разделе мы рассмотрим автоматическое дифференцирование и обучение нейронных моде- лей на примере классической задачи распознавания рукописных цифр. Поскольку на данный момент представляется. либо имя Феано и вовсе было псевдонимом более поздних авторов. Мне отвечают. либо в этот образ слились две жившие в разное время женщины. а в TensorFlow стадии компиляции фактически нет). До сих пор многие модели прежде всего обучают именно на MNIST. что исследователи из Google будут продолжать развивать проект и дальше. я уве- рен.6. в этой книге мы будем приводить примеры в основном на TensorFlow. О ней со- хранились лишь весьма разрозненные сведения. глубоких моде- лей [108]). знаете. самых избитых наборов данных как распознавания изображений в целом. так он ставит маленькую запятую. Это один из самых известных. Эту идею успешно во- плотили в код сразу несколько групп исследователей. ко- торая содержит много примеров нейронных сетей и. инстинктивно ставлю уверенно. Первой успешной библио- текой для автоматического дифференцирования. я вижу. знаете. 529] (см.

Отметим. Не обой- дем его вниманием и мы. . но и многомерные представления 1 Джеффри Хинтон назвал MNIST «дрозофилой машинного обучения».examples. Поскольку MNIST — это своего рода Hello World для современной обработ- ки изображений.read_data_sets("MNIST_data/".labels). В этом примере мы не будем использовать двумерную структуру изображений.validate) выборки. что каждому изображению в дан- ных уже поставлен в соответствие правильный ответ — цифра. one_hot=True) Полученные данные уже разбиты на тренировочную (mnist. тестовую (mnist. изображенных на американский манер (см. несколько примеров цифр из MNIST на рис. тренировочная выборка mnist.test) и валидационную (mnist. но при этом нетривиальный пример. для современных методов он уже никаких сложностей не представляет1 . Каждая из этих выборок состоит из изображе- ний цифр (mnist. и в theano часто требуются не только матрицы. рис. содержащие 55 000. однако сейчас для наших нужд достаточно и простой одномерной задачи. имея в виду.9 показывает несколько образцов изображений с различными метками. «размеченных» здесь означает. 3.train. в TensorFlow этот набор данных поддерживается «из коробки». Все- го в MNIST содержится 70 000 размеченных черно-белых изображений размером 28 × 28 пикселов. небольшой и несложный.9). а представим их в виде обычных векторов размерности 784. как дрозофила генетикам.train). 10 000 и 5000 примеров соответственно. которую хотел изоб- разить человек на этой картинке. что MNIST дает изучающим машинное обучение такой же хорошо определенный.images) и их меток (mnist. В главе 5 мы еще вер- немся к этому примеру и покажем.124 Глава 3.train. Набор данных MNIST: примеры рукописных цифр. как правильно пользоваться двумерным распо- ложением пикселов на картинке и насколько это получится эффективнее.train.mnist import input_data mnist = input_data. 3. и для импорта MNIST достаточно написать буквально две строчки кода: from tensorflow. 3.9. или Эмбрион мудрого компьютера Рис.tutorials. Перцептрон. Таким образом. MNIST состоит из рукописных цифр. что и в TensorFlow.images может быть пред- ставлена в виде матрицы размерности 55 000 × 784.

Поэтому вместо того.labels — это тензор (матрица) размера 55 000 × 10. а в остальных позициях стоят нули. Для удобства метки изображений можно представить в виде так называе- мых one-hot vectors — векторов. Такие «многомерные матрицы» в TensorFlow называются тензорами. преувели- чить разницу между полученными значениями: softmax будет выдавать значения. но что поделать. 0. для всех xj . умножение матриц) не силами самого интер- претатора языка Python. cross-entropy): ∑ Ht (y) = − ti log yi . что тензоры не настоящие. Чтобы использовать TensorFlow. написанного на других языках (обычно C или Fortran). [None. Тогда mnist. в которых единица стоит в позиции. Например. а t — исходная разметка (правильный ответ). К сожалению. а с помощью оптимизированного кода. чтобы несколько заострить. соответству- ющей исходной метке. например NumPy. В качестве функции потерь мы будем использовать стандартную для логисти- ческой регрессии перекрестную энтропию (кросс-энтропию. очень близкие к нулю.3. выше мы уже сетовали на то. поэтому давайте создадим переменную для тренировочных данных: x = tf. TensorFlow предлагает возможность описать в Python граф вычислений. 784]) . а просто многомерные массивы. даже переключение между операциями в Python и вне его может оказаться слишком дорогим. 0. 0] будет соответствовать ответу 3. такие библиотеки выпол- няют дорогие операции (например. 0.3.float32. существенно меньших максимального. нужно его сначала импортировать: import tensorflow as tf В TensorFlow требуемые операции выражаются с помощью символьных пере- менных. мы применяем так называ- емую softmax-функцию к вектору получившихся ненормализованных оценок: exp(xj ) softmax(x)j = ∑ .train. i где y — предсказанное нами значение. В качестве модели для обучения мы рассмотрим softmax-регрессию. тот же MNIST логичнее представить в виде трехмерной «мат- рицы» размерности 55 000 × 28 × 28. Это обоб- щение логистической регрессии на случай нескольких классов: чтобы получить «вероятности» классов. exp(xi ) i Идея softmax-функции состоит в том. 0. а затем запускать всю модель вне Python.6. которые нам хочется оценить. особенно когда речь идет о вычислениях на GPU. 1. вектор [0. Пример: распознавание рукописных цифр на TensorFlow 125 данных — например.placeholder(tf. Мы подробно обсуждали перекрестную энтропию в разделе 2. 0. чтобы выполнять каждую отдельную операцию независимо от Python. Обычно в Python для сложных вычислений используются вспомогательные библиотеки численных вычислений. 0. 0.

reduce_mean( -tf. так как мы собираемся умножать вектор размерности 784 на W и получать предсказание для 10 возможных меток.nn. Опишем теперь в терминах TensorFlow функцию потерь. а вектор b размерности 10 — это свободный член.Variable(tf.matmul(x.Variable(tf.zeros([784. нужно также зафиксировать некий способ оценки качества предсказаний (именно эту оценку мы и будем в конечном счете оптимизировать). . Для того чтобы обучить модель. матрицах и тензорах здесь понимается поком- понентно).matmul(x.nn. После того как мы импортировали нужные модули и объявили все переменные. не помешает).reduce_sum(y_ * tf. • затем умножаем каждый элемент y_ на соответствующий ему tf.log(y). или Эмбрион мудрого компьютера В данном случае x — это не какой-то заранее заданный тензор. от внутренних операций к внешним: • сначала мы вычисляем tf. которую мы заполним.log(y). [None.softmax(tf.float32. Перцептрон. последовательно. который мы добавляем к выходу. а по размерности каждого вектора y. поэтому в качестве одной из размерностей указываем None. затем добавляем к результату b. нам также потребуются перемен- ные.placeholder(tf. что данная размерность может иметь произвольную длину. Для исходной разметки нам понадобится заглушка: y_ = tf.log(y) (опе- рация умножения на векторах. а так называемая заглушка (placeholder). Посмотрим. W = tf. когда попросим TensorFlow произ- вести вычисления. что будет про- исходить. для этого мы указали в ка- честве параметра reduction_indices=[1].reduce_sum по второму измерению. Кроме заглушки для тренировочных данных. то есть мы суммируем не по примерам. • затем суммируем результат с помощью tf. собственно нашу модель на TensorFlow можно записать в одну строчку! y = tf. но один раз. что первое измерение — это примеры из тестового или валидаци- онного множества. bias. reduction_indices=[1])) Давайте более подробно разберем эту строку (в дальнейшем мы больше не бу- дем этого делать.W).zeros([10])) Здесь W имеет размерность 784 × 10. а второе — возможные классы. Для TensorFlow это значит. 10]) И теперь функцию потерь тоже можно записать в одну строчку: cross_entropy = tf. Мы хотим иметь возможность использовать произвольное чис- ло 784-мерных векторов для обучения. напомним.126 Глава 3.softmax. и для получения вероятностей классов применяем tf. 10])) b = tf. пожалуй. W) + b) Сначала мы перемножаем матрицы x и W с помощью tf. логарифм каждого элемента y. которые мы собственно и будем изменять при обучении нашей модели.

GradientDescentOptimizer(0.6.minimize(cross_entropy) Иллюстрация. это именно настолько просто. похожему на вектор вероятностей. 3.10. и библиотека может воспользо- ваться алгоритмом обратного распространения ошибки для того. Затем он вместе с пришед- шими из тренировочных данных истинными метками классов поступает на вход . мы можем попросить TensorFlow оптимизировать эту функцию. на рис. разумеется.train. который собственно вычисляет оценки нашей модели для событий. в каком порядке происходит построение модели и вычисления в ней: снача- ла поданное на вход изображение превращается в вектор размерности 724. все вершины в этом графе содержат известные классические функции. Как проходят вычисления в модели. чего мы хотим от нашей модели.5: train_step = tf. при использовании библиотеки TensorFlow • и наконец. чтобы подсчитать градиенты.reduce_mean подсчитывает среднее значе- ние по всем примерам в выборке. Да. затем поступает к logit-слою. как веса влияют на функцию потерь. связанных с различными классами. понятных TensorFlow. последняя операция tf. когда мы знаем. и затем применить тот или иной алгоритм оптимизации для уточне- ния этих весов.3. как известно.5). стоит тысячи слов. Для обучения модели мы будем использовать метод градиентного спуска со скоростью обучения 0. Мы уже полностью описали граф вычислений в терминах. которую только что написали. поэтому мы изобразили логи- ку программы. узнать. затем softmax-функция нормализует эти оценки к вектору. Теперь. уже реализованы в TensorFlow. 3.10. градиенты ко- торых. которую мы хотим мини- мизировать. Пример: распознавание рукописных цифр на TensorFlow 127 Рис. обучающей логистическую регрессию. Эта схема показыва- ет.

Такой подход мы уже обсуждали — это типичный стохастический градиентный спуск. Вместо этого мы выбираем каждый раз небольшой новый случайный набор обучающих данных и используем его. Для того чтобы по- нять. 1)) Это дает на выходе список булевых значений.argmax(y_. Перцептрон.initialize_global_variables() Теперь мы готовы запускать обучение. В TensorFlow это выражается как tf. 1): correct_prediction = tf. например.Session() sess. sess = tf. и эти значения на самом деле не очень похожи на вероятности. . можно из- менять веса w_logit и b_logit на каждом шаге стохастического градиентного спуска. Перед началом обучения осталось инициализировать переменные: init = tf. достаточно просто сравнить между собой tf. К счастью.и пора запускать! for i in range(1000): batch_xs. Модель на данный момент выдает предсказания в виде softmax- результатов — суммирующихся в единицу чисел. насколько хорошо мы теперь умеем распознавать рукопис- ные цифры. показывающих.128 Глава 3. верно ли мы предсказали метку.. feed_dict={x: batch_xs. или Эмбрион мудрого компьютера функции.argmax(y. так будет всегда на любых данных хоть сколько-нибудь реального размера). 1). batch_ys = mnist. вычисляющей перекрестную энтропию. Для того чтобы понять. в данном случае мы применяем его потому. среднее зна- чение соответствующего вектора: 1 Здесь.next_batch(100) sess. функция.argmax(y_. но мы не должны поддаваться искушению: формулу softmax-функции нелегко интерпретировать вероятностным образом. чтобы проходить по ней целиком на каждом шаге обучения (собственно. отражающих уверенность моде- ли в том или ином ответе1 . можно просто взять максимальное значение из этих результатов. верно или невер- но предсказан результат. очень хочется просто считать результаты softmax-регрессии вероятностями клас- сов.run(init) .argmax. итоговой точностью может быть. 1) и tf.equal(tf. а мы просто целомудренно скры- ваем происходящее в узле «Градиенты». tf. выдающая позицию максимального элемента в тензоре по заданной оси. y_: batch_ys}) На каждом проходе цикла мы выбираем случайные 100 примеров из обуча- ющей выборки и передаем их в функцию train_step для обучения. После этого осталось только превратить значения градиентов в собственно правила пересчета весов. и все готово. автоматическое дифференцирование берет на себя TensorFlow.argmax(y. это и есть наша функция ошиб- ки. Для этого создаем TensorFlow-сессию. от которой мы должны взять частные производные.. какую метку мы предсказа- ли для очередного изображения. конечно.train..run(train_step. что обучающая выборка слишком велика для того. Осталось понять..

. 3. Результат классификации — 6. как функция ошибки и точность классификации меняются по мере обучения.3.11 изображены графики того. 4.9154 Поздравляем! C помощью библиотеки TensorFlow мы с вами буквально в несколько строк кода смогли построить настоящую модель для распознавания рукописных цифр. tf. 3. Правильные метки — 5. y_: mnist. которые получатся у вас.test.12. 4 accuracy = tf.11. как на тренировочном. 3. но порядок величины должен быть именно такой): print("Точность: %s" % sess.6.labels})) >> Точность: 0.run(accuracy. 7. 6. что хотя дисперсия довольно большая. На рис.cast(correct_prediction. Графики изменения функции ошибки и точности на тренировочном и тестовом множествах по мере обучения модели Рис. в среднем никакого оверфиттинга не происходит. 9. точность на тестовом множестве почти точно такая же.reduce_mean(tf. они зависят от многих случайных факторов. мы запустили эксперимент 100 раз и изобразили на графиках среднее и диспер- сию полученных результатов.test.float32)) Осталось только вычислить его и вывести (на всякий случай: цифры. запрограммировать обучение. 4. Обратите внимание.images. Пример: распознавание рукописных цифр на TensorFlow 129 Рис. обучить ее на стандартном набо- ре данных и получить весьма неплохую точность. feed_dict={x: mnist. например от случайной инициализации. наверняка будут немного отличаться от наших.

1)) b_relu = tf. объединенных в «слой ReLU».Variable(tf. но в нашем примере не было никаких глубоких сетей. потому что ReLU(0) = 0.12 показаны четыре типич- ных изображения. а затем пропустили результат через странный узел под названием Dropout. вышедшие за пределы интервала в ±2σ от среднего. случаи действительно тяжелые. согласитесь. так сказать.130 Глава 3. зада- ющееся по умолчанию) и дисперсией (в нашем примере stddev=0. а небольшими случайными значениями. будем в этом примере использовать 100 нейронов на скрытом слое: W_relu = tf. В нашем же случае примерно половина весов окажется отрицательной.Variable(tf. чтобы наша модель вообще имела право носить гордое название нейронной сети. на заре кинематографа трейлеры показывали после фильма. или Эмбрион мудрого компьютера Кроме того. нужно добавить в нее скрытый слой. Нужно инициализировать веса и свободный член для этого слоя. Инициализация нулями в данном случае была бы совсем бессмыслен- ной. когда говорили о модели логи- стической регрессии. Итак.1)) На этот раз мы инициализируем переменные не нулями. но быстро поняли. . на самом деле происходит от названия прицепа сзади транспорт- ного средства (от глагола to trail — «идти по следу»). то есть распределение обрезается так. Функция tf. а значит. 3. а также поймем.truncated_normal([784. которые более подробно разберем в дальнейших главах. 3. stddev=0.truncated_normal([100]. Давайте теперь немного усложним модель и посмотрим. собственно. 3. Следующий пример можно считать. Во-первых. трейлером1 предстоящих глав: мы встретимся с некоторыми понятиями. В качестве функции акти- вации возьмем все тот же ReLU. выбираются за- ново.10 мы добавили еще одну группу вычислений. однако при этом значения. Общая схема. тем самым мы впервые увидим на живом примере. которой будет следовать код в этом примере. порожденные нормально распределенной случайной величиной с фиксированны- ми математическим ожиданием (в нашем примере мы оставили значение 0. давайте их и обсудим. 1 Любопытно.1). В основном мы уже объяснили ее выше. stddev=0. метки которых угадать не получилось. которую по- казывают перед «основным блюдом». что по сравнению с рис. сейчас обозначающее рекламу предстоящих фильмов. на которых наш классификатор ошибается. изображена на рис.13. Перцептрон. И действительно. чтобы полностью запретить большие выбросы. 100]. что более сложная модель действительно рабо- тает лучше. первое знакомство с TensorFlow прошло удачно. На рис. мы все это делаем. и соответствующие нейроны не будут активиро- ваться вовсе. что строить нейрон- ные сети все-таки имеет смысл. зачем.truncated_normal возвращает значения. при инициализации нулями градиенты совсем не распространялись бы по сети. давайте ради интереса посмотрим на некоторые из тех изображе- ний. что слово trailer. что из этого полу- чится. да и вообще нейронных-то сетей по сути нет: мы просто обучили логистическую регрессию. что это порочная практика: их никто не смотрел. В ре- зультате этого примера окажется.

3.relu(tf. . где под- ведем под нее и теоретические основания. Мы еще поговорим о разумной инициализации весов нейронной сети в разделе 4. который бы называл дропаут по-русски как-то иначе. на практи- ке хорошая инициализация весов очень важна. чтобы попасть в разумную область значений целевой функции и не застрять в плохом локальном максимуме. Как проходят вычисления в нейронной сети со скрытым ReLU-слоем при использовании библиотеки TensorFlow Итак. а сейчас начнем с того. да и не встречали мы ни одного специалиста в этой области.nn.relu тоже будет покомпонентным: фактически мы просто применили функцию ReLU к вектору tf.1.matmul(x. Пример: распознавание рукописных цифр на TensorFlow 131 Рис. но ничего столь же ярко- го и запоминающегося не вышло.3.6.2. Мы поговорим о нем подробно в разделе 4.matmul(x. А сейчас общий вид скрытого слоя по- лучается таким: h = tf. прости: мы честно пытались придумать перевод слова dropout.13. В этой нейронной сети будет очень полезен слой дропаута1 . что предварим этот раздел 1 Шишков.nn. W_relu) + b_relu. хотя теория градиентного спуска от этого не меняется никак. W_relu) + b_relu) Применение tf.

float32) А дальше TensorFlow.matmul(h_drop. ни обучаться на нем. keep_probability: 0.5}) Если сделать 2000 шагов обучения нашей новой сети.zeros([100. что нам сейчас нужно задать — это вероятность их выбрасывания. как всегда.nn. переписать заключи- тельный softmax-слой: W = tf. все делает за нас. означающих. который выбрасывает (обнуляет) вы- ходы некоторых нейронов. feed_dict={ x: mnist. кандидат-спойлер на выборах оттягивает голоса у другого кандидата. нам придется немного поменять параметры внешнего слоя и.run(train_step. keep_probability: 1.nn.Variable(tf. с которыми обычная логистическая регрессия не справилась.placeholder(tf. feed_dict={x: batch_xs. batch_ys = mnist. некую «помеху» в самом широком смысле: спойлер на гоночном болиде снижает сопротивление воздуха. а с вероятностью 1-keep_probability их выход будет обнулен. кроме того. y_: batch_ys.train. keep_probability) Теперь нейроны скрытого слоя будут участвовать в вычислениях с вероятно- стью keep_probability. Поэтому цикл обучения немного изменился: for i in range(2000): batch_xs.labels. мешает противнику вести бой и старается как можно чаще входить в клинч.next_batch(100) sess.images.test.dropout(h.zeros([10])) y = tf.132 Глава 3. . как и в английском. что наша новая модель делает с теми сложными примерами. или Эмбрион мудрого компьютера небольшим спойлером1 : дропаут — это слой. W) + b) При этом наша функция потерь cross_entropy и оптимизатор train_step не тре- буют никаких изменений. y_: mnist. а также уменьшить ошибку на тестовой выборке практически в два раза.run нужно с новым параметром keep_probability.test. Перцептрон. А вот вызывать sess. достаточно только правиль- но попросить: h_drop = tf. мы получим print("Точность: %s" % sess.Variable(tf. для этого мы сначала создадим заглушку: keep_probability = tf. выбираемых случайно и заново для каждого обучающе- го примера. Все. сам не имея шансов победить.run(accuracy.} )) >> Точность: 0. само слово уже давно вошло в русский язык в достаточно широком круге значений. а боксер-спойлер ведет бой вторым номером. В этот раз мы снова 1 А вот за слово «спойлер» просить прощения не будем. Поскольку размер внутреннего слоя отличается от входного. 10])) b = tf.9657 Отличный результат! Мы дописали еще несколько строк кода и с самыми ми- нимальными изменениями смогли добавить целый новый скрытый слой в модель. и они не будут ни участвовать в предсказании для этого примера. Теперь можно посмотреть.softmax(tf. Хотя в значении «слишком рано раскры- тая сюжетная информация» оно стало употребляться недавно.

когда очень маленькие числа округляются до ну- ля. он навер- няка уже попробовал увеличить длину цикла обучения. Чаще всего это говорит о переполнении. чтобы экспонента от отрицательного числа оказа- лась неотличима от нуля. Тогда легко видеть. Для этого можно. что аналитиче- ски на выходе должен получаться вектор. а потом на этот ноль что-нибудь пытаются разделить. состоящий только из 1/n. Допустим. чтобы проверить: нельзя ли обучить нашу простую модель еще лучше. . чаще всего так получается. когда очень большие числа выходят за границы соответствующих диапазонов и округляются до ∞ или −∞. Но численное значение мо- жет не совпасть с аналитическим! Если c будет большим отрицательным числом. Оно происходит. Если любознательный читатель следит за нашими упражне- ниями с компьютером под рукой и пытается повторить то. например. в чем причина. и мы получим дру- гую неопределенность. с нашей моделью именно это и произошло). знаменатель дроби может быть округлен до нуля.6. и этот резуль- тат должен получаться совершенно независимо от c. в реальных моделях. обучающихся на GPU. что мы делаем. поэтому первое. и мы получим неопределенность (скорее всего. то числитель может округлиться до ∞. Пример: распознавание рукописных цифр на TensorFlow 133 получили ту же ошибку на первом примере — вместо метки 5 модель предсказы- вает 6 — однако остальные три примера классифицировались правильно. и сейчас серьезное использование MNIST для сравнения современ- ных моделей практически бесполезно. посмотреть на ее веса: print(sess. что нужно проверить — не сломалась ли наша модель полностью. Но откуда переполнение могло появиться у нас? Одно из «узких» мест нашего кода — функция softmax (мы говорили о ней в раз- деле 2. элементы вектора свободных членов b перестали быть числа- ми. На самом деле на момент написания этой книги лучшие модели уже давно име- ют точность свыше 99 %. просто потратив на это больше вре- мени? Но не тут-то было! Еще через 2000 шагов обучения точность неожиданно резко падает примерно до 10 %: >> Точность: 0. 10 % подозрительно похо- же на точность генератора случайных чисел при угадывании равномерно распреде- ленных 10 классов. используя MNIST как общую проверку на осмыс- ленность. Более того. Исследователи обычно сравнивают резуль- таты на других наборах данных.098 Давайте разбираться. Одну из таких более подходящих для этой задачи моделей мы рассмот- рим в главе 5. потому что она имеет дело с экспонентами: совсем не обязательно ухо- дить в очень глубокий минус. что все элементы вектора. В какой-то момент борьба шла буквально за каждую лиш- нюю картинку.run(b)) >> [ nan nan nan nan nan nan nan nan nan nan] И действительно. А если c будет большим положительным числом. Вообще говоря. который мы подаем ей на вход. В случае функции softmax такие эффекты получить совсем несложно.3). когда снова вернемся к глубокому обучению на изображениях.3. Но и это еще не все. одинаковы и равны некоторой постоянной c.

x2 − max xi . а не double).nn.xn ) = softmax(x1 − max xi .xn ) так: softmax(x1 . мы вряд ли увидим в числителе слишком большое чис- ло. . . в частности. ∂H t =− i. . Перцептрон. . i i i Тогда.134 Глава 3. потому что на современных GPU это получается гораздо эффективнее. а потери в качестве модели. ie ie e e ie ie i i i i Поэтому. . — в знаменателе всегда будет по крайней мере e0 = 1. если предсказанная моделью оценка для какого-то класса окажется очень мала (то есть модель уверена в том. i Когда мы вычисляем ее градиент по весам модели. нам нужно будет подсчитать. то мы снова будем пытаться разделить на ноль и получим неопределен- ность при ti = 0 или бесконечность в случае ti = 1. что если прибавить одну и ту же константу ко всем входам функции softmax. давайте снова запустим код. или Эмбрион мудрого компьютера обычно используются числа с плавающей запятой с одинарной точностью (то есть типа float. Но это не единственное место. и деления на ноль точно не возникнет.x2 . если не наткнуться на такую вот неопре- деленность. .xn − max xi ). К счастью. и посмотрим на результат: . ∂yi yi Тогда. .softmax_cross_entropy_with_logits(logit. которая обходит все подводные камни. совсем небольшие. где могла возникнуть ошибка переполнения. выход есть! Заметим. Что же делать? Оказывается. y_)) Больше ничего менять не надо. что пример этому классу совсем не при- надлежит).x2 .matmul(h_drop. достаточно вычесть из каждого входа максимум среди входов. Давайте использовать ее вместо самописных функций. . Зададим промежуточный тензор logit = tf. . . создатели TensorFlow знали об этих трудностях и специально под- готовили функцию. а воспользуемся готовой функцией: cross_entropy = tf. W) + b Теперь мы не будем сами применять softmax или считать перекрестную энтро- пию. Да- вайте теперь посмотрим на нашу функцию потерь: ∑ Ht (y) = − ti log yi . то есть вычислять softmax(x1 . . чтобы избавиться от переполнений. с одной стороны.reduce_mean(tf. а с другой. . теперь уже сделав 10 000 шагов обучения. значение функции не изме- нится: exj +c exj ec ex j ec ex j ∑ x +c = ∑ x c = c ∑ x = ∑ x .

run(accuracy. В следующих главах мы познакомимся с чуть более сложными архитектурами нейронных сетей. в этой главе мы подробно рассмотрели процедуру автоматического диф- ференцирования на графе вычислений. на этот раз мы показали 10 000 итераций. 3.14. Пример: распознавание рукописных цифр на TensorFlow 135 Рис. кото- рые часто применяются на практике.5 % — теперь наша модель ошибается (на тестовой выборке. насколько удоб- но пользоваться библиотеками вроде TensorFlow или Theano. с дропаутом. keep_probability: 1.9749 Неплохо! Уже 97. а дисперсия ниже.labels.next_batch(100) sess. почти со- всем не задумываясь о том.images. batch_ys = mnist. как описывать и обучать модели в TensorFlow. Графики изменения функции ошибки и точности на тренировочном и тестовом множествах по мере обучения модели for i in range(10000): batch_xs. . feed_dict={ x: mnist.train.})) >> Точность: 0.3.5}) print("Точность: %s" % sess. естественно) всего один раз из сорока. благодаря автомати- ческому дифференцированию можно начинать обучать весьма разумные модели. потому что в течение всего этого времени точность на тестовом множестве продолжала увеличиваться.6. в том числе глубокие нейронные сети. что качество на тестовом множестве стабильно выше. Итак.run(train_step. как же вычислять в них градиент.test. а брали его из процесса обучения. Оказывается. а в данном разделе познакомились с тем. y_: mnist.14.test. Обратите внимание. чем на тренировочном — это эффект дропаута: мы не пересчитывали отдельно качество на тренировочном множестве. буквально за несколько строк кода. 3. и еще не раз убедимся в том. y_: batch_ys. Графики изменения функции ошибки и точ- ности классификации на обучающей и тестовой выборках показаны на рис. keep_probability: 0. feed_dict={ x: batch_xs.

Часть II Основные архитектуры .

глубже. долинах и трамплинах TL. который позволяет не обучать веса за- ново при изменении предыдущих слоев. или Об оврагах. . которые позволяют контролировать дисперсию выходов. Мы рассмотрим: • новейшие методы регуляризации.DR Четвертая глава посвящена прогрессу в методах оптимизации и регуляризации нейронных сетей. но во многом опре- деляет успех современных нейронных сетей. сильнее. • современные методы случайной инициализации весов. • улучшения градиентного спуска с помощью метода моментов. которые от сокращения весов перешли к дропауту и другим подходам. Прогресс этот на первый взгляд незаметен.Глава 4 Быстрее. • и даже адаптивные варианты градиентного спуска. • метод нормализации по мини-батчам.

ведь мы же умеем брать производную от одного перцептрона. что модель. В настоя- щей главе мы поговорим о том. правильно? Таким образом. — так вот.. Мы уже говорили о том. Лавкрафт. что если мы можем определить структуру сети. есть. в роли которого может выступить TensorFlow. при всей при- чудливости и разнообразии кубизма и футуризма. Быстрее.2 мы ви- дели. которую мы оптимизируем. в этой главе мы узнаем. у которой слишком много свободных параметров. Первая идея: давайте воспользуемся теми же методами. то дальше задача как бы уже и решена. которая таится в дои- сторических письменах. что прогресс в области нейронных сетей должен выглядеть так: придумали новую архитектуру. Многие из этих трюков были придуманы совсем недавно. ни по замыслу. Первая важная тема — регуляризация в нейронных сетях. поскольку. даже не самая сложная архитектура может содержать миллионы весов. что поначалу глубокие сети научились обучать с помощью до- статочно сложных моделей для предобучения без учителя. посмотрели. или Об оврагах. Современные нейронные сети — это модели с огромным числом параметров. которые разрабатыва- ли в разделе 2. снова быстренько реализовали на TensorFlow. придумали еще одну архитектуру. засунули в «универсальный оптимизатор». Регуляризация в нейронных сетях Тем не менее изображенное на нем ничуть не отвечало совре- менности ни по духу. В самом деле. как люди пытались обучать сети раньше.5 мы го- ворили о том. Обычно используют два их вида: . получается. принимать не слишком большие значения.1. на- до регуляризовать. а потом оно снова стало не обязательным. почему оно теперь больше не нужно. сведена к «всего лишь оптимизации». какие «трюки» позволяют нам обучать такие ги- гантские модели. плохо обобща- ется. как современные нейронные сети. ко- торые на первый взгляд кажутся незаметными. и можно сказать. В разделе 2.2 — потребуем от каждой переменной. то есть слишком близко «облизывает» точки из тренировочного множества и в результате недостаточно хорошо предсказывает нужные значения в новых точ- ках. которую можно делать гра- диентным спуском. сильнее. в разделе 2. Это можно сделать так же. конечно. как мы де- лали тогда. не ста- ло ли лучше. что они тоже отделяют современную революцию нейронных сетей от того. Г. они редко вос- производят ту загадочную регулярность. глубже. долинах и трамплинах 4. Значит. Многие главы этой книги будут посвящены именно разным архитектурам современных нейронных сетей. добавив к целевой функции регуляризаторы в любом удобном для вас виде.. Зов Ктулху Эта глава будет посвящена тем видам прогресса в обучении нейронных сетей. И такой прогресс.138 Глава 4. Однако в вышеупо- мянутой «всего лишь оптимизации» тоже кроется немало интересного.

ведь она взята из данных той же при- роды. 246]. применяли очень давно. В теории нейронных сетей такая регуляризация называется сокращением весов (weight decay). Примерно так: model. но тех. как TensorFlow и Keras. . размер датасета позволяет такую расточительность. что до «обычного» сокращения весов дело может в итоге и не дойти. Разумеется. • activity_regularizer — на вектор выходов.1. просто немного изменится целевая функция. bias_regularizer=regularizers. сумму квадратов весов λ∑ ww .l1(0. когда начнет ухудшаться ошибка на валидационном множестве. что ранняя остановка в некотором смысле эк- вивалентна L2 -регуляризации [88]. вне зависимости от того. 285]. в 1980-х годах уж точно [207. конечно. Например. Во-вторых. мы в любом случае всецело рекомендуем от- ложить валидационную часть датасета и следить за ошибкой на этой части — это всегда полезно и дает хорошую оценку способности модели к обобщению. на которых мы не обучались. что ошибка на валидационном множестве будет хорошо оценивать ошибку и на новых точках (тестовом множестве).add(Dense(256.001). В целом. потому что действительно приводит к уменьшению их абсолютных значений. В теории нейронных сетей этот подход обычно называется методом ранней остановки (early stopping). • L1 -регуляризатор. Во-первых.l2(0. которые стоит применить в первую очередь. вы тоже можете очень легко применить сокращение весов.4. activity_regularizer=regularizers. в Keras есть возможность для каждого слоя добавить регуляризатор на три вида связей: • kernel_regularizer — на матрицу весов слоя. kernel_regularizer=regularizers. Предположение здесь в том. Од- ним из важнейших методов регуляризации нейронных сетей для революции глу- бокого обучения стал дропаут [129. input_dim=32. конечно. как именно вы будете делать раннюю остановку. оптимизация от этого не сильно пострадает. совсем простой и очевидный: давайте просто отложим часть тренировочного набора (назовем отложенную часть валидационным множеством) и будем при обучении на основном тренировочном множестве заодно вычислять ошибку и на валидационном. И сейчас в таких библиотеках. ведь от регуляризато- ра тоже легко взять производную. когда сеть придет в локальный оптимум для тренировочного множества.1). • bias_regularizer — на вектор свободных членов. сумму модулей весов λ w |w|. Есть результаты о том. Если.01))) Регуляризация в форме сокращения весов применяется до сих пор. однако сильно увлекаться подбором регуляризаторов мы не советуем. И остановить обучение нужно будет не тогда. Регуляризация в нейронных сетях 139 ∑ 2 • L2 -регуляризатор. При этом они часто работают настоль- ко хорошо.l2(0. а тогда. Его. в последние годы были разработаны более эффективные методы. есть еще один метод регуляризации.

это не будет работать. как каждый новый тренировочный пример xi обучает уже немножко другую сеть.140 Глава 4. 4. практика показывает. Основной математиче- ский результат работ [129. Пример дропаута в трехслойной нейронной сети: на каждом новом тренировочном примере структура сети изменяется Его идея чрезвычайно проста. что нужно.1 видно. 4. ноль на выходе приводит к тому. 4. или Об оврагах. что нейрон фактически выпадает из графа вычислений: и прямое вычисление. Даль- ше все происходит без изменений. Вот и все! Очень простая идея и никакой математики. долинах и трамплинах Рис.. считать их результаты. скрытых слоях дропаут можно применить: на рис. в которой никакие нейроны не вы- брошены. выходного слоя) установим некоторую вероятность p. что нужно опять сэмплировать кучу «прореженных» сетей. что для очень широкого спектра архитектур и приложений замечательно подходит p = 12 . и в зависимости от результата монетки либо используем ней- рон как обычно. и все его компоненты обычно нужны. 246] состоит в ответе на вопрос о том. На выходном слое дропа- ут обычно не делают: нам требуется выход определенной размерности. так что эту вероятность можно специально и не подбирать. как же потом при- менять обученную сеть. где изображена трехслойная нейронная сеть с пятью входами и тремя слоями по три нейрона. выброшен из сети. На первый взгляд кажется. Пример дропаута показан на рис. либо устанавливаем его выход всегда строго равным нулю. а это именно то. где часть соединений выброшена. Алгоритм обучения меняется таким образом: на каждом новом тренировочном примере x мы сначала для каждого нейрона бросаем монет- ку с вероятностью p. но выход каждого нейрона умножен на вероятность p.. глубже. с которой он бу- дет. Кстати. Математическое ожидание выхода нейрона при этом со- хранится.1. Давайте для каждого нейрона (кроме самого по- следнего.1.. и обратное рас- пространение градиента останавливаются на этом нейроне и дальше не идут. Быстрее.. А на промежуточных. с которой нейрон оставляли при обучении. усреднять. Но на самом деле большой вычислительной сложности здесь нет: усред- нение будет эквивалентно применению сети. . нет. сильнее.

«работать» поодиночке. скрытый от участников тестовый набор. то лучше передать эту хорошую комби- нацию дальше. да не просто разных моделей. Kaggle — отличный способ попрактиковаться. изучающих анализ данных. построить и настоящий ансамбль из нейронных сетей. так что не будем повторяться. что и объяснение полезности дропаута: важно не столько собрать хорошую комбинацию генов. а разных архитектур нейронных сетей! Другая мотивация для дропаута приходит из теории эволюции: методика дро- паута очень похожа на половое размножение. мы усредняем 2N возможных моделей (где N — число нейронов. . 1 Kaggle — это широко известный в среде анализа данных сайт. это будет очень сложно вычислительно и вряд ли приведет к успеху. что дропаут эквивалентен усред- нению всех тех моделей. Мы с вами тоже уже применяли его на практике в разделе 3. Действительно. Однако выясняется. если заставлять гены. 489]. и вся последующая практика обучения нейрон- ных сетей показывают. что на самом деле такое разрушение для эволюции скорее полезно: все самые высокоорганизованные животные размножаются именно по- ловым путем.6.1. Иначе говоря. которая потом будет широко воспроизводиться и сможет стать основой для новой линии потомков. Объяснение этому примерно то же. что эволюции нет нужды придумывать разнополых существ: если какие-то гены научатся хорошо «работать вместе». что дропаут действительно дает очень серьезные улучше- ния в качестве обученной модели в самых разных приложениях. в то время как половое размножение может нарушить адаптивные сочетания генов. Но в последнее время стали появляться интересные работы о том. Од- нако история еще не закончена. как признаки в нейронной сети. правда. Известно. Хинтон полагал. как информатика смотрит на половое размножение. конечно. потратив на это считанные единицы тысяч долларов в качестве приза. которые могут быть выкинуты или оставлены). буквально обучая много сетей. а почкование — удел губок и кишечнополостных. как здесь тоже можно сэкономить и задешево обучить настоящий ансамбль [500]. 2 Можно. Для людей. 3 Желающим подробнее узнать. не рассчитывая на соседа (который при половом размножении может просто пропасть)3 . ведь на первый взгляд дропаут выглядит ужасно загадочно: почему вдруг надо выкидывать нейроны? Какой в этом смысл? Одной из первых попыток объяснить это явление концептуально были рассуж- дения Джеффри Хинтона в исходной статье о дропауте [129] и сопутствующих до- кладах. И Хинтону с соавторами удалось показать. которые получались на каждом шаге случайным выбрасы- ванием отдельных нейронов. сколько собрать устойчивую и хорошую комбинацию генов. если делать это наивным образом. на котором публикуются условия различных соревнований: суть задачи. мно- гие Kaggle-соревнования1 выигрываются при помощи большого ансамбля моде- лей2 . Регуляризация в нейронных сетях 141 И эксперименты в [129. а также зачастую финансовая мотивация для победителей. тренировочный набор.4. А этого проще достичь. 246]. что это очень полезный на практике трюк. на первый взгляд ка- жется. а для компаний — не менее отличный способ заставить массу умных и опытных людей думать над своей задачей. рекомендуем работы [331. на котором будут оцениваться результаты. что дропаут — это своеобразный метод добиться огромно- го усреднения моделей.

Поэтому вполне естественно. он привел к разработке правильного метода того. которая привела к большим успехам в этом направлении: предобучение без учителя (unsupervised pretraining).. и ищет он только локаль- ный минимум/максимум. которые позволили бы найти самый лучший локальный оптимум для такой слож- ной задачи. то есть посылают сигналы не посто- янно. очень интересные и наверняка верные. Вот! Хороший полу- чился гребешок. но сложно понять. и делать его надо. Мы уже упоминали первую идею.. или Об оврагах. Быстрее. давайте отложим этот разговор до конца книги. в частности. Сейчас нам. более математически концептуальный взгляд на дропаут.. сильнее. какие из них можно сделать выводы: и так было понятно. третий возможный взгляд: дропаут очень похож на то. Взгляды эти. Что такое? Получился попугай! С. Хорошая инициализация весов может позволить нам обучать глубокие сети и лучше (в смысле метрик качества). а потом подрисую все ос- тальное: хвост. глубже. а сами пойдем дальше — к инициализации весов. конечно. мы все равно не сможем изменить тот факт. Мы уже гово- рили. а в виде случайного процесса. С чего начать? В этом разделе мы обсудим еще одну проблему. правда. крылья и лапки со шпорами. Мы не знаем никаких методов глобальной оптимизации. из которого вытекают новые интересные факты. что проис- ходит при связях между живыми нейронами в человеческом мозге. возбуж- ден нейрон или нет. как обучение глубокой нейронной сети. что один из ключевых вопросов состоит в том. которая оказывается особенно важ- ной для глубоких нейронных сетей. Что же мне нарисовать? Нарисую петушка! Я их много видел — и живых петушков и нарисован- ных. и быстрее (в смыс- ле числа требующихся обновлений весов. что нейроны работают стохастически. что дропаут полезен.. до раздела 10. Как настоящий! Теперь нарисую глаза и клюв..2. Как инициализировать веса Я хочу стать художником.. выбраться из «ущелий». 4. Можно обучать . как делать дропаут в рекуррентных сетях. то есть времени обучения). обучение сети — это большая и сложная задача оптимизации в пространстве очень высокой размерно- сти.5. обойти небольшие локальные минимумы. где начинать этот локальный поиск: в зависимости от качества начального приближения можно попасть в самые раз- ные локальные оптимумы. долинах и трамплинах И наконец.. и его интенсивность зависит от того.. что градиентный спуск — это метод местного значения. то есть числа итераций. Вот только с чего начать? С головы или с хвоста? Самое трудное — это начать! Начну с головы. еще рановато о нем говорить. Михалков. Однако недавно был разработан другой. Как мы уже обсуждали.142 Глава 4. Решаем мы ее фактически методами локального поиска: сколько ни придумы- вай хитрых способов ускорить градиентный спуск.

порождаемое скрытыми переменными на видимых. но обычно так и пишут простыми латинскими буквами: «алгоритм contrastive divergence». чтобы обучить начальную точку. 225. Однако настоящий расцвет предобучения без учителя начался в середине пер- вого десятилетия XXI века. что это такое. чтобы обучить веса этих связей так. почему так хорошо работают те методы. 2 По сравнению с другими. что хотя сейчас обучение нейронных сетей можно назвать достаточно простым для изучения инструментом2 . Он представляет собой упрощенную версию алгоритма сэмплирова- ния Монте-Карло для соответствующей вероятностной модели. причем еще в 2002 году. в развитии метода без вероятностных моделей и методов приближенного вероятностного вывода не обошлось. . Таким же образом мож- но построить и глубокую модель: сначала обучить первый слой как ограниченную 1 Мы подробно поговорим об автокодировщиках в главе 5. главы 10.4. 3 Еще один термин. по всей видимости. очень много пробелов. достаточно несложно и недалеко уходит от базовых университетских курсов теории вероятностей и математического анализа. С другой стороны. не надо путать простоту в освое- нии с простотой для понимания: люди до сих пор не очень понимают. еще очень. сокращенно CD. чтобы распреде- ление. Любопытно. Алгоритм. математическое содержание всей этой книги. а потом дообучить результат при помощи обычного обучения с учителем. а сейчас достаточно сказать. а в 2005 году в работе [72] появилась ключевая идея предобучения: начать с contrastive divergence. Мы встречали «сравнительное расхождение».2. до начала революции глубокого обучения [219]. и в наших представлениях о том. в которой есть видимые (visible) переменные. было как можно больше похоже на распределение входных данных. а затем объединяются в общую модель. возможно. В этой книге мы не будем подробно объяснять. значения которых мы знаем. начиная от самых азов. кроме. отдельные части которой обучаются как автокодировщики1 . конечно же! Но поверьте. которой вся эта книга обязана своим появлением. Основ- ным инструментом для предобучения без учителя в работах группы Хинтона стали так называемые ограниченные машины Больцмана (restricted Boltzmann machines). 499]. получил название contrastive divergence3 . о которых мы рассказываем в этой книге. Как инициализировать веса 143 отдельные слои глубокой сети без учителя. которая обучает без учителя некоторое внутреннее представление своих входов и умеет их затем реконструировать. значений которых мы не знаем. и скрытые (hidden). И задача состоит в том. что происходит в сложных нейронных сетях. также известная с 80-х годов прошлого ве- ка [2. «сопоставительное отклонение» и даже «кон- трастную дивергенцию». последовательно. а также связи между ними. Достаточно будет сказать. а затем веса полу- ченных слоев считать начальным приближением и дообучать уже на размеченном наборе данных. уже и не устоится. и в этой книге мы достаточно быстро объясняем обуче- ние нейронных сетей. который такое обучение реализует. Как это часто бывает в исследованиях нейронных сетей. эта идея тоже появилась еще во второй половине 1980-х годов: в опубликованной в 1986 го- ду работе [26] строится глубокая архитектура. перевод которого на русский не устоялся и. Этот алгоритм то- же придуман Хинтоном. что это вероятностная модель. что авто- кодировщик — это модель. Именно оно обусловило ту самую революцию обуче- ния глубоких сетей.

глубже. 487. 221. Почему это работает? Масштабное исследование [567]. недавние работы [317. и в результате есть шанс. что предобучение высту- пает в качестве своеобразного метода регуляризации. 1 Кстати.2). что предобучение можно заменить и даже улучшить. показывающие. это весьма похоже на ситуацию обучения одного слоя нейронной сети. Такая конструкция получила название глубокой машины Больцмана (Deep Boltzmann machine. то есть старается еще и выразить распределение данных. а в контексте сверточных сетей — в группе Яна ЛеКу- на [303]. д. Авторы предположили. если еще точнее — на обучение однослойного автокодировщика. связанного с общим подхо- дом к вероятностным моделям. что вся эта конструк- ция действительно делает то. обучаясь сразу на размеченных и неразмеченных данных при помощи методов обучения . 505. чтобы как можно лучше по скрытому слою восстанавливать видимый. использовать веса машин Больцмана как начальное приближение и дообучить результат с учителем. основанные на автокоди- ровщиках: обучили первый автокодировщик. которые попадаются на входах сети (мы подробнее поговорим о порождающих мо- делях в разделе 8.y) = p(y | x)p(x). 224. например. Можно подойти к этому вопросу и с другой стороны. порождающая вероятностная модель (такая. 464.144 Глава 4. или Об оврагах. сильнее. машина Больцмана) обучает совместное распределе- ние p(x. 516]. потом так же с третьим. то есть пытается обучить условное распределение p(y | x). долинах и трамплинах машину Больцмана. 566] показывают. Дело в том. ничего не напоминает? Дей- ствительно. известный как многоярусные автоко- дировщики (stacked autoencoders). И действительно. и собствен- но распределение данных p(x). развивался в тот же период в основном в группе Йошуа Бенджи [148.. особенно Руслана Салахутдинова [220. использовали выделяемые им при- знаки как входы второго и т. чем при случайной инициализации1 . 467.. почему так происходит. а в конце объединить все в одну большую модель с несколькими слоями. что в то время как «обычное» обуче- ние глубокой сети касается только восстановления выхода y по входу x. В итоге это приводит к инициализации сети в той области про- странства весов. Быстрее. После своего появления в 2005–2006 годах этот подход к предобучению несколько лет применялся очень активно. что надо. затем использовать скрытые вершины первого слоя как види- мый слой второго уровня. 468. вскоре появились и аналогичные глубокие конструкции. и выдвинуло интересную гипотезу о том. в 2010 году предприня- тое в группе Бенджи. то есть улучшает некоторую оценку общего правдоподобия модели [223]. он подробно описан в уже ставших классическими публикациях Джеффри Хинтона и его кол- лег и аспирантов. Ограниченная машина Больцмана обучает веса между видимым и скрытым слоем так. Этот подход. DBN) [466]. что предобучение без учителя действительно по- могает практически любой глубокой модели. что обучение с учителем затем сойдется в более хорошо обобщающийся и менее склонный к оверфиттингу локальный оптимум. как. 195].. показало. Есть и теоретические результаты.. где веса описывают и условное распределение p(y | x).

так и часть. В ре- зультате он даже получил название в честь Глоро: его часто называют инициализа- цией Ксавье (Xavier initialization). И основным ре- зультатом [179] стал простой и хорошо мотивированный способ инициализации весов. с частичным привлечением учителя (semi-supervised learning).2. чем речь с размеченными фонемами. когда предобу- чение посредством ограниченных машин Больцмана или автокодировщиков было в расцвете.По крайней мере. позволяющий существенно ускорить обучение и улучшить качество. 3. результаты слег- ка улучшатся. то есть без учета имеющихся размечен- ных данных. Формально поставленный там вопрос был именно «исследовательский»: почему глубокие сети трудно обу- чать сразу целиком? Выяснилось.. В результате предобучения получается модель. И хотя полноценное предобучение с помощью ограниченных машин Больцмана в современной практике встречается редко. чем собственно обучение с учителем. обычно показывают резуль- таты лучше. . Но все-таки предобучение — это достаточно сложная и дорогосто- ящая процедура. все равно очень важно инициализировать веса правильно. отвечающую за восстановление исходных данных (unsupervised). Более того. чем при простом предобучении.. Это часто позволяет существенно расширить обучающую вы- борку: понятно. так было во второй половине 2000-х годов. которую затем нужно дообу- чить на размеченных данных. оптимизирующие функцию ошибки. чем собрать даже тысячу правильно раз- меченных рукописных цифр. Конечно. но уж сноски точно заслуживает. что собрать миллионы изображений из Интернета без учета контекста и описания куда проще. Предобучение протекает без учителя. что результат обучения на практике очень силь- но зависит от первоначальных значений весов. Этот подход пока не вошел в мейнстрим. почему оно работает хорошо. настраивать их обе. Это позволяет избежать проблемы затухающих градиентов и существенно умень- шает объем вычислений на каждом этапе. так что кроме вопроса о том. обученные таким образом. причем предобучение скорее всего будет более хрупкой и сложной фазой. которая комбинирует в себе как ошибку на правильных ответах (supervised). в конеч- ном счете стабильно сходятся к существенно лучшим решениям. от нижних к верхним. что нужно научиться делать две разных процедуры обучения. Как инициализировать веса 145 Какой бы способ предобучения ни использовался. Сейчас его тоже никто не мешает делать.4.. Фактически получается. 1. модели. хотелось бы как-нибудь обойтись без предобучения. чем при слу- чайной инициализации. люди задались и обратным вопросом: почему случай- ная инициализация работает плохо и можно ли что-то сделать для того. скорее всего. 2. . Предобучение слоев происходит последовательно. а собрать много сырой человеческой речи куда проще. в подавляющем большин- стве случаев он соответствует ряду достаточно естественных принципов. чтобы ее улучшить? Важной вехой на этом пути стала совместная работа Ксавье Глоро (Xavier Glorot) и Йошуа Бенджи [179]. вышедшая в 2010 году.. И модели.

. i=1 i=1 где nout — число нейронов последнего слоя. то первые два члена последнего выражения оказываются тоже равными нулю. Для i-го слагаемого суммы i wi xi . Получается. что дисперсия Var(y) не зависит от свободного ∑ члена b и выражается через дисперсии x и w. сильнее. что wi и xi независимы (что вполне естественно). равным нулю. Кстати. Если теперь мы предполагаем.√ . Быстрее. которая была опубликована в 1998 году в кни- ге Neural Networks: Tricks of the Trade [388]. До работы [179] стандартным эвристическим способом случайно инициализи- ровать веса новой сети1 было равномерное распределение следующего вида: [ ] 1 1 wi ∼ U − √ .. так и wi инициализируются из одного и того же распределения. У одного-единственного нейро- на значение активации (то есть выход перед функцией активации) выглядит так: ∑ y = w⊤ x + b = wi xi + b. nout nout 1 См. глубже. Другими словами. причем независимо друг от друга (это сильное предполо- жение. классическую работу ЛеКуна [136]. которое мы обозначим как yi = wi xi . в 2012 году вышло второе издание книги [389]. что как xi . которое уже вполне современно. долинах и трамплинах Для того чтобы понять. мы получим: (n ) n ∑ out ∑out Var (y) = Var yi = Var (wi xi ) = nout Var (wi ) Var (xi ) . дисперсия выходов пропорциональна дисперсии входов с коэффициентом nout Var (wi ). в чем идея инициализации Ксавье. Если мы используем симметричные функции активации и случайно инициали- зируем веса со средним значением. содержащей практические советы по обучению нейронных сетей.146 Глава 4. давайте рассмотрим дисперсию значений активации у слоев нейронной сети. а w — вектор весов нейрона. например. но в данном случае вполне естественное). как связаны дисперсии последовательных слоев сети. или Об оврагах. и мы его всецело рекомендуем. Для начала покажем. i где x — вектор входных значений. мы по- лучим дисперсию: [ ] Var (yi ) = Var (wi xi ) = E x2i wi2 − (E [xi wi ])2 = = E [xi ]2 Var (wi ) + E [wi ]2 Var (xi ) + Var (wi ) Var (xi ) . в предположении о том. а значит: Var (yi ) = Var (wi ) Var (xi ) .

2.4. и nout Var (wi ) = . но теперь мы получим коэффициент про- порциональности для дисперсии nin Var (wi ). так ли хороша на самом деле эта нормализованная инициализация. nin + nout что для равномерной инициализации приводит к следующему распределению: [ √ √ ] 6 6 wi ∼ U − √ . Идея Глоро и Бенджи заключается в том. Как инициализировать веса 147 В этом случае получается. Сна- чала импортируем все необходимое из Keras: from keras. если z (l+1) = f y (l) . они предложили инициализировать веса очередного слоя сети симметричным распределением с та- кой дисперсией: 2 Var (wi ) = . что для беспрепятственного рас- пространения значений активации и градиента по сети дисперсия в обоих слу- чаях должна быть примерно равна единице. tanh). nin + nout nin + nout Давайте поставим эксперимент и проверим. Например. где nin — число нейронов во входном слое. ∂yi j ∂yj Если мы используем симметричную функцию активации с единичной произ- водной в окрестности нуля (например. а не на выходе. 12 nout nout 3nout 3 После нескольких слоев такое преобразование параметров распределения зна- чений между слоями сети фактически приводит к затуханию сигнала: дисперсия результата слоя каждый раз уменьшается. и наблюдается ситуа- (l) ция. где l — номер слоя. то f ′ (yi ) ≈ 1. то производная функции ошибки L.models import Sequential from keras. Для этого зададим простую полносвязную мо- дель и будем оценивать точность на тестовом множестве в датасете MNIST. согласно обычной про- цедуре обратного распространения ошибки.layers import Dense . а f — функция активации. аналогичная вычислению функции. будет такой: ∂L ∑ ∂L = f ′ (yi ) (l) (l+1) (l) wi. а среднее у него было нулевое. Поскольку для неодинаковых разме- ров слоев невозможно удовлетворить оба условия одновременно.j (l+1) .√ . Аналогичная ситуация повторяется и на шаге ( обратного ) распространения ошибки при обучении. фактически делится на 3. что: ( )2 1 1 1 1 1 Var (wi ) = √ +√ = .

А возвращает функция простую полносвяз- ную модель с четырьмя промежуточными слоями. Везде. это значит. activation='tanh')) model. а в последнем слое — softmax.to_categorical(y_train.add(Dense(100. init=init. что сами тензоры X_train и X_test будут иметь размерность (число примеров) × 784: X_train = X_train. входящий в состав Keras: from keras. activation='tanh')) model.load_data() Однако на этот раз правильные ответы заданы в виде цифр.to_categorical(y_test.add(Dense(10. validation_data=(x_test. и нам придется са- мостоятельно перекодировать их в виде векторов.datasets import mnist (x_train.add(Dense(100. 10) Теперь осталось для удобства перевести матрицы X_train и X_test из целочис- ленных значений на отрезке [0. y_train). activation='tanh')) model.add(Dense(100. различающиеся только способом инициализации весов. Для нашего эксперимента это будут значения uniform и glorot_normal. def create_model(init): model = Sequential() model. мы использум в качестве функции активации гиперболиче- ский тангенс.utils import np_utils Y_train = np_utils. Y_train. activation='softmax')) return model В этом коде функция create_model принимает на вход текстовый параметр. кро- ме последнего слоя. Все. verbose=1. ко- торый интерпретируется как тип инициализации. X_test = X_test. Быстрее. optimizer='sgd'.148 Глава 4. (x_test. Поскольку мы собираемся определять сразу две одинако- вые модели. сильнее. а также сделать из квадратных изображений размера 28 × 28 пикселов одномер- ные векторы длины 784.reshape([-1. input_shape=(28*28. batch_size=64. Y_test)) . долинах и трамплинах Как и в TensorFlow. init=init. metrics=['accuracy']) uniform_model.add(Dense(100. данные готовы. в Keras набор данных MNIST доступен «из коробки»: from keras. y_test) = mnist. 28*28]) / 255.compile( loss='categorical_crossentropy'. Для этого можно использовать модуль np_utils. 1] (нормализовать).reshape([-1. каждый размера 100. 255] к вещественным на [0. 28*28]) / 255.fit(x_train.). давайте сразу объявим соответствующую функцию. init=init. init=init. так как собираемся использовать в ка- честве функции потерь перекрестную энтропию. activation='tanh')) model. nb_epoch=30. Процесс компиляции модели и ее обучения задается очень просто: uniform_model = create_model("uniform") uniform_model. глубже. init=init. 10) Y_test = np_utils. или Об оврагах.

показали по- ведение. verbose=1.fit(x_train. и выбраться из этой ситуации насыщения глубокой сети очень сложно.2. есть правдоподобное объяснение. где мы изобразили как среднее (собственно кривые). и результаты. доволь- но сложно. на что модели. полностью соответствующее тому. metrics=['accuracy']) glorot_model. Сравнение инициализации Ксавье и случайной инициализации весов glorot_model = create_model("glorot_normal") glorot_model.2. Как инициализировать веса 149 Рис. Видно. validation_data=(x_test. И при дальнейшем обу- чении «равномерная» модель все время продолжает проигрывать модели с иници- ализацией Ксавье. Y_train. Ре- зультат показан на рис. так и дисперсию значений ошибки и точности (затемненная область вокруг кри- вых показывает доверительный интервал в две дисперсии от среднего). которое как раз различает ло- гистический сигмоид и другие симметричные функции активации. 4. optimizer='sgd'. о котором мы уже рассуждали в раз- деле 3. например . batch_size=64. и улучшение получаются в высшей степени устойчивыми. основанными на логистическом сигмоиде. что здесь происходит. Более того. логистический сигмоид σ — это весьма неудачная функция активации для глубоких нейронных сетей! Эксперименты Глоро и Бен- джи с глубокими сетями. а за- тем подсчитали среднее значение точности и ее дисперсию после каждой эпохи.5: последний уровень сети очень быстро насыщается.4. что при инициализации весов по методу Ксавье модель уже после первой эпохи нахо- дит решение с точностью около 90 %. Оказывается. мы обучали каждую из моделей в течение 30 эпох по 10 раз каждую.2. 4.compile( loss='categorical_crossentropy'. чьи веса инициализированы равномерным распределением. Почему так? Хотя доказать строгое утверждение о том. Кстати. Y_test)) Для того чтобы достаточно «честно» и детально сравнить два способа инициа- лизации. nb_epoch=30. в работе [179] был сделан и еще один очень интересный и практиче- ски важный вывод. требуется около 10 эпох.

и из нее легко потом сдвинуться в любую нужную сторону. мы попадем в область его насыщения. что. которая будет иметь область значений от −1 до 1 и максимум производной в нуле. производная тоже устремится к нулю. как и в случае с обнулением аргумента функции σ. Однако. что неплохим приближением к оптимальному результату может служить константная функция. которое на ранних этапах обучения выступает в роли скорее шума. Таким образом. что значение активации выходного слоя сети f (W h + b) будет обучаться так: сеть подберет подходящие свободные члены b и постарается обну- лить слагаемое W h. особенно часто — ReLU. где h — выходы предыдущего слоя. Быстрее. Все. простой заменой одной функции активации на другую пробле- ма обучения глубоких нейронных сетей не решается. долинах и трамплинах гиперболический тангенс tanh. глубже. Дело в том. с другой стороны. что если мы обнулим значение логистического сигмоида. Это значит. сильнее. b — свободные члены послед- него уровня. Это значит. Когда мы начинаем оптимизировать сложную функцию потерь по параметрам нейрон- ной сети и оцениваем качество как среднюю ошибку на тестовом множестве. победа. мы как раз попадаем в окрестность точки x = 0. такое насыщение куда менее веро- ятно и после предобучения посредством ограниченных машин Больцмана. . скажем. который выгля- дит как f (W h+b). и если мы попытаемся приблизить ее значение к нулю. логистический сигмоид самой своей формой мешает обучать глубокую сеть. как выше. последовательные слои с нелинейностью вида tanh поочередно насыщаются: значения нейронов слой за слоем сходятся к 1 или −1. выдающая средние значения вы- ходов. что инициализация Ксавье бу- дет прекрасно работать для логистического сигмоида или гиперболического тан- генса. а f — функция активации последнего уровня.150 Глава 4. где производная максимальна. на этом наша история про инициализацию весов не заканчивается. Так. обычно softmax. или Об оврагах. выводит оптимизацию на градиентное плато и часто приводит к «плохому» ло- кальному минимуму. А у tanh или. эти проблемы могут исчезнуть. но в современных сверточных (и не только) архитектурах повсеместно ис- пользуются и несимметричные функции активации. причем дело может быть буквально в конкретной параметризации: даже если просто заменить σ(x) на функцию 2σ(x) − 1. в процессе обучения мы постараемся привести выходы предыду- щего слоя к нулю. 1) при среднем значении 21 . ведь первые уровни еще совсем не обучены. и про- сто после «правильной» случайной инициализации весов. Иначе говоря. Симметричные функции ак- тивации тоже страдают от целого ряда проблем. SoftSign с этим проблем нет: приближая значение к нулю. и все станет плохо. идеальный и универсальный метод инициализации найден? Не со- всем. Хотя мы действительно получили отличный способ инициализации для ве- сов таких нейронов. В такой ситуации оказывается. Рассмотрим последний слой сети. чем полезного сигнала. что все вышесказанное относится исключительно к симметричным функциям активации! Это значит. И тут-то и проявляется разница: функция σ(x) = 1+e1−x имеет область значений (0. например. пона- чалу выходы h фактически не несут никакой полезной информации о входах. К сожалению.

Как инициализировать веса 151 Очевидно. (l) . а y (l−1) распределен симметрично относи- тельно нуля. И тогда мы получили: [ ] Var (wi xi ) = E [xi ]2 Var (wi ) + Var (wi ) Var (xi ) = Var (wi ) E x2i . а nin — число нейронов на уровне l. какой должна быть дисперсия инициализации весов для ReLU. помимо нескольких перспективных модификаций ReLU. В 2015 году Каймин Хе (Kaiming He) с соавторами опубликовали рабо- ту [114]. а нормаль- ное распределение вокруг нуля с соответствующей дисперсией. что в [114] для ReLU использовалось не равномерное. 2 nin Любопытно. 2 а значит. Тогда: [( )2 ] 1 ( ) (l) E x = Var y (l−1) . мы получим: (l) nin ( ) 2 Var w(l) = 1 и Var (wi ) = (l) . что инициализация весов для этой функции активации должна от- личаться. пред- ложена и подходящая для этой функции активации схема инициализации. Пусть теперь x(l) = max(0. nin Кроме того. в которой. y (l−1) ). . Наш окончательный вывод о диспер- сии отличается от инициализации Ксавье только тем. то есть ( ) ( ) [( )2 ] (l) (l) (l) (l) Var y = nin Var w E x . что теперь нет никакого nout : если приравнять фактор изменения дисперсии единице. такой способ ини- циализации часто используется на практике в глубоких сетях из ReLU-нейронов:   √ 2 wi ∼ N 0. 2 Теперь это очевидным образом приводит к выводу о том.2. в выражении Var (wi xi ) = E [xi ]2 Var (wi ) + E [wi ]2 Var (xi ) + Var (wi ) Var (xi ) можно сразу обнулить только второй член. Поскольку функция активации в этом случае несимметрична. в обеих работах свободные члены b предлагается инициализиро- вать нулями: они и сами смогут без проблем обучиться практически при любом алгоритме оптимизации. (l) где l обозначает номер текущего уровня.4. ( ) n(l) ( ) ( ) Var y (l) = in Var w(l) Var y (l−1) .

а nin — число входов первого слоя. а то и последовательность моделей. (l) (l+1) то есть nout = nin ! А это значит. Понятно.. (L−1) (L) = (1) (2) (3) . и фактор изменения дисперсии становится равным (0) (1) (2) (L−1) (L) (0) (1) (2) (L−1) (L) (0) nin nin nin nin nin nin nin nin nin nin nin (0) (1) (2) . глубже. и при этом. дисперсия в этом случае будет зависеть исключи- тельно от числа нейронов в данном слое. Предположим. но ограничение взяли только из шага обратного распространения ошибки.. или «взрываться» пропорционально отно- (l) (l) шению nin /nout . или Об оврагах. а к другому мы переходим в следующем параграфе: нас ждет нормализация по мини-батчам. что каким бы ни было это соотношение. Краткое резюме у данного раздела получается очень простое: для симметрич- ных функций активации с нулевым средним (в основном tanh) используйте ини- циализацию Ксавье. .152 Глава 4. судя по тому. а для ReLU и ему подобных — инициализацию Хе. Мы уже видели. В результате такой случайной инициализации получится. окажется. Значит. оно уже не является экспо- ненциальной функцией от числа слоев сети и не приводит к затуханию или чрез- мерному увеличению градиентов. Совре- менные улучшения методов оптимизации глубоких нейронных сетей вполне спо- собны заменить предобучение без учителя. долинах и трамплинах В качестве вишенки на торте добавим. часто хрупких и сложных для обучения. nout nout nout nout nout nin nin nin nin nout nout (L) (0) где nout — число выходов последнего слоя сети. что мы обсуждали выше. дисперсия при прямом шаге вы- числения должна будет или «затухать». ускользнувший от Глоро и Бенджи. что когда мы возьмем произведение по всем слоям сети. Таким же образом. Одно из таких улучшений — хорошая случайная инициализация. при помощи параметров init="he_uniform" или init="he_normal". можно задать инициализацию Хе. что все члены посередине сокращаются... что авторы работы [114] заметили нюанс. что для инициализации весов сети мы выбрали формулы инициализации Ксавье. nin Тогда. сильнее. но обычно слиш- ком сложно и трудоемко: нужно ведь фактически обучать совсем другую модель. или Var (wi ) = (l) . что предобучение без учителя не то чтобы ничего не улучшает и совсем бессмысленно. которые пытались найти баланс между диспер- сиями прямого и обратного шагов. то есть (l) 1 nin Var (wi ) = 1. что в библиотеке Keras реализована возможность инициа- лизации слоев по методу Ксавье. Но ведь в глубокой сети выходы одного слоя подаются на вход следующему. (L) (L) = (L) . можно использовать для инициализа- ции только ограничение из обратного распространения. а прямое ограничение иг- норировать. Быстрее. как мы объяснили выше.

что при обучении нейронных сетей один шаг гра- диентного спуска обычно делается не на одной точке входных данных. как видите. и чем больше при- меров используется в одном мини-батче. Мы проиллюстрировали этот эффект на рис. где изображен простей- ший нейрон первого слоя с двумя входами и нелинейностью в виде tanh: y = tanh (w0 + w1 x1 + w2 x2 ) . 4. Во-первых. Максималь- ная точность апроксимации достигалась бы.4. перевернувшую мир обучения глубо- ких нейронных сетей. опубликованной в 2015 году [252]. что она действительно способна улучшить обучение в очень широком спектре архи- тектур. Наше изложение следует исходной статье Сергея Иоффе (Sergey Ioffe) и Кристиана Сегеди (Christian Szegedy) о нор- мализации по мини-батчам. Григорий! — Отлично. в том случае.3. тем точнее это приближение. если бы мы каждый шаг делали сразу на всем тренировочном датасете. всем последующим слоям надо адаптироваться к по-новому распределенным данным. Мы уже много раз обсуждали. но это действительно так: идея нормализа- ции по мини-батчам (batch normalization). Во-вторых. в обу- чении глубоких сетей свежие хорошие идеи могут распространяться очень быстро. Но при этом глубина сетей приводит к следующей проблеме. но такая точность обыч- но вычислительно недостижима. и ничего такого уж сложного в ней нет. . появилась совсем недавно. особенно важен при перемещении ал- горитмов обучения на видеокарты. Нормализация по мини-батчам Все нормально. Если на очеред- ном шаге градиентного спуска меняются веса одного из первых слоев. безусловно. С точки зрения оптимизации у такого под- хода есть сразу несколько преимуществ. а со- временное многопоточное «железо» позволяет эту длинную последовательность действий применять одновременно к достаточно большому числу примеров в па- раллельном режиме. Нормализация по мини-батчам 153 4. то есть на небольшой коллекции данных. Звучит странно. такой эффект. которую мы здесь излагаем. Константин! М. то это неми- нуемо приводит к изменению распределения активаций выходов этого слоя. конечно. А зна- чит. которая обычно выбирается из всего обучающего множества случайно.3. Падаю! Из к/ф «В бой идут одни старики» — Нормально. Но быстро оказалось. Жванецкий В этом разделе мы обсудим очередную идею. и сейчас применяется сплошь и рядом.3. усреднение градиента по нескольким примерам представляет собой апроксимацию градиента по всему тренировочному множеству. а на мини- батче. глубокие нейронные сети подразуме- вают большое количество последовательных действий с каждым примером.

причем ближе к единице. 12 ) и для весов w = ( 12 . что все то. или Об оврагах. потому что не было таких тренировочных примеров. и это абсолютно нормально и ожидаемо: мы действительно хотели бы. б — результат для двух разных векторов весов На рис. 12 ]. и возможности. Он хорошо обучился реагировать на входы из интервала [− 21 . что выходы их при обучении изменяются. и обучаться ему надо фактически заново. 4. при векторе весов (0. долинах и трамплинах Рис. 21 .3. 4.3.154 Глава 4. внутренний сдвиг приводит и к другой проблеме. 1]. которую мы уже обсуждали в разделе 3. Пример внутреннего сдвига переменных: а — структура первого слоя сети и входные распределения. а на другие не обучился: и необходимости не было. Кроме того что нейронам приходится обучаться заново. а показана общая схема вычислений и выбранные нами распреде- ления входов этого нейрона: нормальные распределения со средними 2 и −2 и дис- персией 12 . чтобы наши нейроны со временем обучались! И ло- гично. когда нейрон начинает обучаться. 1 ). нейрон следующего уровня получал на вход что-то вроде нормального распределения с ну- левым средним. с точки зрения ней- ронов следующего уровня? Сначала. б показано распределение1 выходов нейрона для двух раз- ных случаев: для весов w = (w0 . когда вектор весов сместился и превратился в ( 21 . результаты совершенно разные. Однако что происходит. 12 . .w2 ) = (0. стало почти бесполезным: его входы теперь берутся из совершенно новой области. Эта проблема получила название внутреннего сдвига переменных (internal cova- riance shift). Быстрее. 1 ). Как 10 видите. глубже. Получается. Мы 1 Распределение здесь эмпирическое: мы посэмплировали десять тысяч точек по входным распре- делениям и нарисовали гистограмму результатов. сильнее. 12 ) и около того. выход нейрона первого уровня стал почти всегда попа- 10 1 дать в интервал [ 2 . 4.w1 .3.5. А на рис. А потом. чему обу- чался нейрон второго уровня до этого. 10 9 . 10 9 .

целиком посвященную сдвигу переменных. 98. Представим себе слой. В классических нейронных сетях нормализация тоже использовалась: благодаря исследованиям [135. о котором мы поговорим в разделе 5. это позволит избежать проблемы сдвига переменных. 122. но одним из основных всегда была нормализа- ция данных в той или иной форме. добавля- ющий смещение b к своим входам u.4. ее тоже желательно сделать. Отчасти эту проблему можно решить.4. 10 9 . ни к чему хорошему это не приведет. заменив сигмоидальные функ- ции активации на такие. Нормализация по мини-батчам 155 видели. 514] и даже целую отдельную книгу [103]. Однако легко видеть. На- пример. Нормализация входов часто помогает. а матрица ковариаций — к единичной. чем при w = (0. b := b + ∆b. 12 . когда их входы получают большие по модулю значения.3. В классическом машинном обучении проблема обыч- но возникала в такой форме: часто распределение данных в тестовой выборке (то есть уже при применении модели) может существенно отличаться от распределе- ния данных в обучающей выборке. 493. 1 Кстати. В этом состоит и идея нормализации в глубоких сетях: если операцию «отбеливания» применять к входам каждого слоя. соответствующие весам w = ( 21 . На очередном шаге градиентного спуска параметр b обновится. одной из особенностей которых является «насыщение» значений функций активации. Конечно. что значение x̂ останется прежним: u + b + ∆b − E [u + b + ∆b] = u + b − E [u + b] . а E [x] = N 1 i=1 xi для набора данных из N точек .. ∑ N 1 где x = u + b. без учета этой операции при обучении. см. то есть их среднее приведено к нулю. эта конструкция очень похожа на основную идею остаточного обучения. Изменение распределе- ния значений активации очередного слоя в сторону увеличения абсолютных зна- чений может в таком случае привести к тому. например. вычтя среднее значение активации: x̂ = x − E [x] . и прежде чем обучать нейронные сети. Эта задача была объектом пристального вни- мания исследователей. но это не единственный и не всегда подходящий способ. . Методы предлагались разные. Однако если мы будем на каждом шаге обучения про- сто нормировать входы очередного слоя внутри сети. 570] известно. и сквозь их нулевые производные градиентам трудно бу- дет пройти. что процесс обучения сходится быстрее. и выходы нейрона. уже достаточно очевидным образом «приклеиваются» к единице 10 и имеют куда меньшую дисперсию. что очень часто в нейронных сетях используются сигмоидальные функ- ции активации. проблема сдвига переменных не является специфической сугубо для глубоких нейронных сетей. как ReLU. что в последующих слоях функции активации «насытятся». когда входы сети «отбелены» (whitened). 12 ). Мы можем нормализовать его. статьи [43. в нашем примере для f (x) = tanh(x) при увеличении |x| производная f ′ (x) достаточно быстро стремится к нулю. 1 ).

Если в качестве функции активации используется сигмоидальная функция. В конечном счете это выливается в непомерные дополнительные вычислительные расходы. что нормализовать веса надо как-то по-другому. для шага градиентного спуска нам необходимо вычислить якобианы ∂Norm ∂Norm ∂x и ∂X . конечно. X ).x̂d ) где x̂k = √k . что такой подход ускоряет сходимость обучения нейронных сетей [135]. Следовательно. у такого подхода есть и некоторые не столь очевидные недостатки. но и все примеры из тренировочной выборки X . . ко- гда мы нормализуем ее аргумент. Это значит. Кроме того. что вектор x после нормализации будет выглядеть так: x − E [xk ] x̂ = (x̂1 . что. нормализованная активация слоя не изменилась! Так что теперь эта ситуация станет повторяться. например логистический сигмоид σ(x) = 1+e1−x . несмотря на изменение параметра. . Однако. на практике. . Поскольку полноценную декорреляцию для каждого слоя сделать за разумное время невозможно. сильнее. или Об оврагах. что между признаками внутри слоя при таком подходе корреляции могут сохраняться. что нормализацию необходимо учитывать при градиентном спуске. мы увидим. и становится очевид- ным. параметрами которого являются не только текущий обучающий пример x. затем обратить ее и вычислить из нее квадратный корень. причем просто про- пустить второй из них не получится — мы получим «взрыв» коэффициентов по описанной выше схеме. но это будет совершенно невозможно вычислительно — для каждого вычисления потребуется весь датасет! Так что E [xk ] и Var (xk ) мы бу- дем считать по текущему мини-батчу. Данный пример говорит о том. кроме очевидных достоинств. особенно для больших датасетов. Быстрее. вычислять сразу по всему датасету. долинах и трамплинах А это значит. . для самой операции «отбеливания» (декорре- ляции) нам потребуется вычислить матрицу ковариаций: [ ] Cov[x] = Ex∈X xx⊤ − E [x] E [x]⊤ . глубже. Но что это значит с точки зрения распространения градиентов по графу? Давайте введем слой нормализации: x̂ = Norm(x. еще с конца 90-х годов прошлого века из- вестно. и в результате абсолютное значение b будет расти совершенно неограниченно. нормализуют каждый элемент входного вектора по отдельности. и данный подход называется нормализацией по мини-батчам. Несмотря на то. что нелинейность по сути пропадет: подавляющее большинство нормализованных значений будут попадать в область. то. Var (xk ) Среднее и дисперсию в последней формуле хотелось бы. .156 Глава 4. вместо того что- бы декоррелировать все нейроны слоя совместно. а при градиентном спус- ке еще и производные такого преобразования.

слой нормализации должен быть способен работать как тождественная функция. то есть при некоторых ком- бинациях параметров он должен иметь возможность со входами буквально ничего не делать. а затем последовательно: • вычисляет базовые статистики по мини-батчу: 1 ∑ 1 ∑ m m µB = xi . к дисперсии добавляется неболь- шое постоянное значение ϵ. 2 σB = (xi − µB )2 . и функция активации фактически станет линейной. подсчитав. Мы еще вернемся в последующих главах к тому. которые позволяют восстановить выразительную способность сети в целом. Var[xk ] Эти параметры будут обучаться вместе со всеми прочими параметрами нейрон- ной сети. . В частности. Для того чтобы компенсировать эти недостатки.4. . что к этому моменту заинтересованный читатель вполне способен взять производные от этих функций самостоятельно. (k) Последнее небольшое замечание состоит в том. но не будем: к чему загромождать книгу достаточно прямоли- нейными вычислениями. что на практике. как градиент функции ошибки будет пропускаться через этот слой и каковы будут производные по новым параметрам γ и β. Мы уверены.3. Слой получает на вход очередной мини-батч B = {x1 . . которые уже много раз реализованы в любой стандарт- ной библиотеке автоматического дифференцирования.. Чтобы так могло получиться. они добавляют «степеней свободы». σB2 +ϵ • вычисляет результат: y i = γxi + β. теперь слой нормализации может обучиться реализовывать √ тождественную функцию: теперь для этого доста- [ ] точно положить γk = Var[x ] и β (k) = E x(k) . . чтобы из- бежать деления на ноль при нормализации. Мы могли бы привести формулы для обучения. Теперь мы можем формально описать слой батч- нормализации.xm }. . мы вводим в слой нормализации допол- нительные параметры γk и βk для масштабирования и сдвига нормализованной активации по каждой компоненте: xk − E [xk ] yk = γk x̂k + βk = γk √ + βk . m m i=1 i=1 • нормализует входы: x − µb x̂i = √i .. что способность нейросети научиться воспроизводить тождественную функцию мо- жет играть существенную роль в обучении. Нормализация по мини-батчам 157 где сигмоид ведет себя очень похоже на линейную функцию.

examples. Сначала импортируем все. или Об оврагах.4 изображены результаты нормали- зации до и после нелинейности в нашем примере с рис. область значений в варианте норма- лизации после сигмоидальной нелинейности будет шире. 4. зачем нормализация по мини-батчам вообще нужна. И теперь у нас все готово для того. в частности.158 Глава 4.layers. б — результаты сэмплирования Пора переходить к практике. В этом разделе пример будет на чи- стом TensorFlow. нормализация по мини-батчам то- же реализована — там это был бы просто дополнительный слой под названием keras.BatchNormalization. что нужно: import tensorflow as tf from tensorflow. В качестве иллюстрации к этому на рис.3. 4.1] или [0. Но сначала заметим. В частности. но в Keras. one_hot=True) . долинах и трамплинах Рис. сильнее. Быстрее. ведь tanh или σ снова вернут нормализованные результаты на отрезок [−1.read_data_sets("MNIST_data/". естественно.normalization.4.1] соответственно. Мы будем проверять ее эффективность на нашем обычном примере. лучше делать ее после очередного слоя или после линейной части слоя. классификации рукописных цифр на датасете MNIST. эффект получается разный. до сих пор нет устоявшегося мне- ния по вопросу о том. глубже. Как видите.tutorials. Нормализация до и после нелинейности: а — графы вычислений в обоих случаях. 4. что нормализацию можно делать в разные моменты времени. Для этого мы построим простую полносвязную модель с дополнительным слоем нормализации по мини-батчам. чем если нормализовать до нелинейности.mnist import input_data mnist = input_data. чтобы перейти к эксперименту и нагляд- но показать на примере. до нелинейной функции активации. естественно.

3. Для большинства классических архитектур добавление нормализации дало очень . что модель со слоем нормализации по мини-батчам практически сразу по- казывает хорошие результаты и быстро приближается к отметке в 98 % точности. Только появившись.ones([size])) return tf. input_size. [0]) beta = tf.1)) return tf. Графики на рис. куда мы подаем значения пикселов изображения. batch_var = tf. 0. Видно. batch_mean. 100 и 10. последний — выходной слой. batch_var. y) train_op = tf. а по вертикальной — значение функ- ции ошибки (слева) и точность (accuracy) предсказания модели на тестовом мно- жестве (справа). beta.zeros([size])) scale = tf. по одному нейрону на каждый из возможных классов изображения (то есть рукописные цифры от 0 до 9).tanh(tf. как это часто бывает. out_size): W = tf.1)) b = tf. stddev=0. x = tf. чтобы задать слой нормализации. Снова затененная область вокруг кривых показывает дисперсию. 784.matmul(tensor.01). out_size]. нормализация по мини-батчам наделала немало шума. зададим функции для объявления полносвязного слоя и слоя нормализации по мини-батчам.4.minimize(loss) Чтобы оценить эффект от добавления слоя нормализации по мини-батчам.float32. но без дополнительного слоя нормализации.Variable(tf.nn.nn. 100) h1_bn = batchnorm_layer(h1. 4.truncated_normal([input_size.placeholder(tf. Нормализация по мини-батчам 159 Чтобы не выполнять много раз однотипные операции. в то время как обычная модель добивается прогресса гораздо медленнее. 100) y_logit = fullyconnected_layer(h2.Variable(tf.2: по горизон- тальной оси отложено число эпох обучения. 100. size): batch_mean. scale. stddev=0.sigmoid_cross_entropy_with_logits(y_logit. 784]) h1 = fullyconnected_layer(x. 10) Для обучения осталось только задать функцию ошибки и метод оптимизации: loss = tf. 4.truncated_normal([out_size].GradientDescentOptimizer(0.moments(tensor. Первый слой — входы. сначала нужно вычислить соот- ветствующие статистики и объявить переменные.001) Для эксперимента нам будет достаточно очень простой модели: мы возьмем полносвязную нейронную сеть с размерами слоев 784. 100.nn. Между промежуточными слоями мы и вставим слой нормализации по мини-батчам.train.batch_normalization( tensor. [None.nn. 100. 100) h2 = fullyconnected_layer(h1_bn.Variable(tf. а дальше. W) + b) А для того. мы сравнили описанную выше модель с идентичной. использовать готовую функцию из библиотеки TensorFlow: def batchnorm_layer(tensor. Полно- связный слой задается уже давно знакомым нам образом: def fullyconnected_layer(tensor. как на рис.5 устроены так же.Variable(tf.

Быстрее. его можно пропустить без проблем для дальнейшего понимания.. В оставшейся части этого раздела мы рассмотрим несколько самых последних результатов о нормализации.160 Глава 4. нам придется ссылаться на общее понимание того. а Wx — матрица весов для входов. которые продолжают и развивают идею нормализации по мини-батчам. как Inception и ResNet. Wh — матрица рекуррентных весов. что использование слоя нормализа- ции по мини-батчам «в лоб» не приносит пользы рекуррентным сетям. но и стала одним из ключевых элементов при обуче- нии по-настоящему глубоких нейронных сетей..xT ).. Сравнение сети с нормализацией по мини-батчам и без нее мощный толчок вперед... 4. где f — нелинейная функция активации. долинах и трамплинах Рис. чем у чистой рекуррентной сети. если остаток раздела вызывает слож- ности. Именно нормализация по мини-батчам позволила обучать такие очень глубокие архитектуры. что с рекуррент- ными сетями. или Об оврагах.5. 1 Очень логично обсудить современные результаты и варианты нормализации именно здесь. Подробно об этом мы поговорим в главе 6. глубже. в отличие от полносвязных и сверточных. . все оказалось не так про- сто1 .. рекуррентная сеть выдает последовательность скрытых состояний (h1 .ht ).. а сейчас. Экспери- менты с нормализацией в следующей форме: ht = f (BN(Wh ht−1 ) + Wx xt ) показали результаты несколько хуже. но чтобы их объяснить. вычисляя их шаг за шагом в таком виде: ht = f (Wh ht−1 + Wx xt ) .. Оставим за скобками различные архитектуры рекуррентных модулей и рас- смотрим только наиболее общую конструкцию: получая на вход последователь- ность векторов (x1 . сильнее. Подробные исследования показали [34]. Буквально за год нор- мализация по мини-батчам не только вошла в базовый инструментарий специали- стов по глубокому обучению. Первой проблемой с нормализацией по мини-батчам стало то. что такое рекуррентные ней- ронные сети.

6). По сути.. а наборы β = (β1 . мы обуча- ем не пару параметров β и γ. предло- жив вариант: ht = f (BN(Wh ht−1 . то есть T — число слов в предложе- нии). ряд проблем у этого подхода все же оставался. то нормализация по мини-батчам с привязкой ко времени добавляет число параметров. Трудности использования слоя нормализации в рекуурентных сетях не ограничиваются тем.. когда обучение произ- водится на каждом примере в отдельности. очевидно. В частности.. βx . В частности.βT ) и γ = (γ1 .. ведь для хорошей оценки статистик может потребоваться большое число примеров. что нужно обучать отдельные пара- метры для каждого временного шага. Ключевой идеей здесь стало применение нормализации для каждого момента времени по отдельности. Нормализация по мини-батчам 161 Одна из основных причин такого провала — то. По сути это значит. ведь на более поздних элементах последо- вательности мы уже не сможем применять нормализацию.4. что распределение активаций скрытого слоя может сильно меняться при последовательном применении одно- го и того же рекуррентного преобразования к последовательности входов.γx )). как побуквенное моделирование языка (мы ее подробно обсудим в разделе 6. все еще остается ограничение. И даже если оставить в стороне проблемы применения нормализа- ции по мини-батчам именно к рекуррентным сетям. когда T различа- ется от входа к входу (например. Поэтому первый положительный результат применения нормализации по мини-батчам к рекуррентным сетям был получен командой авторов из универси- тета Монреаля весной 2016 года [439]. пропорци- ональное максимальной длине входной последовательности — а это значит. что в итоге привело к существенному ускорению обучения и улучшению качества моделей на такой задаче.γh ) + BN(Wx xt . накладываемое слоем нормализации на размер батча.. что есть смысл выравнивать скрытое состояние сети «сквозь время». Это значит. Кроме того. на вход могут подаваться предложения на есте- ственном языке. что приводит к серьезным ограничениям на применение обу- ченной рекуррентной нейронной сети. Несмотря на огромный успех нормализации по мини-батчам. так как именно разница между состояниями на разных шагах обработки последо- вательности и является основной идеей и смыслом работы рекуррентной сети..γT ). закодированные пословно. что нормализацию по мини-батчам невозможно применять. Кроме того. что параметров нормализации может для длинных последовательностей стать запре- дельно много.. βh . авторы отделили нормализацию скрытого слоя от нормализации входов. естественной для рекуррентных сетей является переменная длина входной последовательности.. если рекурентный модуль независимо от длины входной последо- вательности имеет фиксированное число обучаемых параметров. что нормализацию более поздних временных шагов может быть не так просто обучить: большинство примеров в тренировочном множестве будут небольшой длины.3. .

bi — его смещение. . и этот параметр нейронная сеть тоже обучает вместе с основными. однако при этом норма- лизация по слою позволила сократить время обучения и избежать проблем при работе с маленькими размерами батчей. ∥w∥ где ∇v L представляет собой обычный градиент по весам сети. а статистики µt и σ t вычисляются по активациям слоя как v u H 1 ∑ H u1 ∑ t µ = ai . Как видите. но обучая общие параметры: (g ( )) ht = f at − µ t + b . σ = t t t (ati − µt )2 . а «по слою». После такой репараметризации норма век- тора весов оказывается в точности равна γ. сравнимые с батч-нормализацией. ∥wi ∥ i где wi — веса линейной комбинации i-го нейрона. нормализация помогает в разных формах. Остался последний важный элемент — веса сети. Мы уже обсудили нор- мализацию активации нейронов по примерам в мини-батче и по нейронам в слое. долинах и трамплинах Все эти проблемы привели к новому взгляду на нормализацию. сильнее. а ∥wi ∥ обо- значает евклидову норму вектора весов. γ Обозначим «новые» веса сети через v = ∥w∥ w. используя отдельные статистики для каждого элемента последовательности. глубже. σt где at = Wh ht−1 +Wx xt — активации до применения нелинейности f . В этой работе предлагается нормализовать активации сети не «по мини-батчу». d d i=1 i=1 где H — размер скрытого слоя. без Джеффри Хинтона не обошлось) [16]. На ряде задач машинного обучения с при- менением рекуррентных сетей такой подход к нормализации показал результаты. однако коэф- фициент репараметризации (нормализации) вычисляется с учетом весов очеред- ного слоя. предложенно- му летом 2016 года исследователями из университета Торонто (как обычно. или Об оврагах. Тогда градиент функции ошиб- ки L по γ равен w⊤ ∇v L ∇γ L = . или несколько лучше. Параметры g и b обучаются в ходе обучения сети совместно с основными параметрами. а не его активации: ( ) γ ⊤ hi = f w x + bi . Быстрее.162 Глава 4. Предло- женный ими подход аналогичен нормализации по батчу или по слою. Недавно Тим Салиманс и Дьедерик Кингма из OpenAI опубликовали исследо- вание влияния нормализации весов на процесс обучения нейронной сети.

и пока непонятно. а следовательно. x Это совсем свежая работа. 2 нормализация весов делает две вещи: • масштабирует градиент с весом g/∥w∥. Оказалось. приятным дополнением оказался эмпирически установленный факт устойчивости к выбору скорости обучения. Пусть на очередном шаге обучения мы обновляем веса по естественной форму- ле w′ = w + ∆w. подставив выражение для ∇γ L. Кроме того. если x ≤ 0. ∥w∥ ⊤ где Mv = I− ∥v∥ vv обозначает матрицу проекции на дополнение вектора v. Давайте подробнее разберем. Нормализация по мини-батчам 163 А градиент функции ошибки по исходным весам равен γ γ∇γ L ∇w L = ∇v L − w. А в работе [482] несколько немецких ученых из группы Юргена Шмидху- бера разработали так называемые самонормализующиеся нейронные сети (self- normalizing neural networks. • «отворачивает» градиент от вектора текущих весов. и для этого достаточ- но просто использовать масштабированную экспоненциальную функцию: { x. Если √ же дисперсия градиентов невелика. можно переписать в виде γ ∇w L = Mv ∇v L. что можно добавить свойства нор- мализации непосредственно в функцию активации нейрона. что позволяет добиться определенных преимуществ при обучении. то и 1 + c ≈ 1. согласно теореме Пифагора. что в свою очередь приводит к уменьшению ∥w∥ . что происходит с весами при таком подходе. Скорость роста при этом будет зависеть от дисперсии градиентов: чем больше дисперсия. и c. ∥w∥ ∥w∥2 и это. вырастет ли из этого еще одна мини-революция в нейронных сетях. Фактически по- лучилось. SELU(x) = λ αe − α. SNNs). Оба эти эффекта приближают матрицу ковариаций градиентов к единичной. . то ∥w′ ∥ = 1 + c2 ∥w∥. Тогда из-за ортогональности градиентов весам с каждым обновлением норма ∥w∥ будет. 2 В итоге этот механизм позволяет нейронной сети самостоятельно стабилизиро- вать норму градиентов. где ∆w ∝ ∇w L. если x > 0. если ∥w∥ = c. постепенно ∥∆w∥ √ расти. что благодаря возможности менять норму весов и тем самым коэффици- ент масштабирования градиентов сеть оказалась способна компенсировать слиш- ком большие или слишком маленькие значения параметра скорости обучения. Точнее говоря. но результаты очень интересные.3. тем больше γ ∥∆w∥. По сути.4.

Если она будет слиш- ком большой.. Нестеров и Гессе Поднявшись на высоту 2000 м. или Об оврагах. и сейчас мы как раз о них и поговорим. во-первых. который вряд ли окажется самым лучшим. Скорость обучения — это чрезвычайно важный параметр. Авиация великой войны Итак. уже сейчас ни одна современ- ная глубокая архитектура не обходится без того или иного способа нормализации. что скорость обучения должна сначала быть большой. улучшающих сам процесс оптимизации. то алгоритм станет просто прыгать по фактически случайным точкам пространства и никогда не попадет в минимум. как осуществ- лять это на практике: стохастический градиентный спуск. как делать градиентный спуск. насколько сильно мы сдвигаем параметры в сторону очередного градиента. сильнее. Поэтому появление новых идей в основаниях этой области. обучение станет гораздо медленнее. Кажется интуитивно очевидным. Поэтому простейшая стра- тегия управления скоростью обучения так и выглядит: мы начинаем с большой . ее применение позволило перейти от архитектур глубиной не более пары де- сятков слоев к сверхглубоким архитектурам. а потом стать маленькой. и с тем. которые сейчас насчитывают сотни и даже тысячи слоев. алгоритм рискует успокоиться и сойтись в первом же локальном минимуме. потому что все время будет через него перепрыгивать. может привести к оше- ломляющим результатам. а во-вторых. Метод моментов: Ньютон. чтобы как можно быстрее прийти в правильную область пространства поиска. Все обучение в глубоких нейронных сетях ведется так или иначе при помощи гра- диентного спуска. действительно работают на практике и позволяют обучать ней- ронные сети. чтобы уже более детально исследовать окрестно- сти точки минимума и в конце концов попасть в нее. Так получилось с нормализацией по мини-батчам: по сути.164 Глава 4. Быстрее. Но это был не единственный прорыв в основаниях оптимизации в нейронных сетях. то есть изменений. Важнейшую роль для современного глубокого обучения играет и сам про- цесс градиентного спуска: его современные модификации работают во много раз лучше классических подходов. В. глубже.. мы разобрались с тем. он нагнал австрийца сверху и за- дел его своим шасси. но. Несмотря на то что первая публикация о нормализа- ции активаций появилась только в конце 2015 года. Рохмистров. А если она будет слишком маленькой. Аппарат Нестерова после этого стал спирально спускаться.4. что у градиентного спуска был свободный пара- метр: скорость обучения η показывала. 4. в том числе вариант с мини-батчами. долинах и трамплинах Подведем краткий итог. то такой проблемы не будет. Однако вспомним.

такое постепенное за- медление обучения с фиксированными параметрами совершенно никак не отража- ет собственно форму и характер функции. во-первых.4 и даже иллюстрировали на рис. А когда точка попадет на другую стенку. что в много- мерном пространстве поиска действуют те же законы ньютоновской механики. Однако. Так.4. такая стратегия будет почти на- верняка работать лучше. если минимум находится в сильно вытянутом «овраге». как продвигается обучение. Можно ли улучшить стохастический градиентный спуск. И это не надуманный «худший случай»: такое часто случается поблизости от локальных минимумов (и максиму- мов). что учесть форму функции можно. Метод импульсов помогает ускорить градиентный спуск в нужном направле- нии и уменьшает его колебания. Во-вторых. чем в другом. Представьте себе. определяющий. 2. что в процессе обучения мы будем все время прыгать туда-сюда с одной стенки оврага на другую. обладающая массой точка (соответствующая текущему . где t — это прошедшее с начала обучения время (число мини-батчей или число эпох обучения). градиент ста- нет направлен в противоположную сторону.4. и так называемые адаптивные методы градиентного спуска.6. η0 и T . Нестеров и Гессе 165 скорости η0 и постепенно уменьшаем ее по мере того. Идея здесь заключается в том. Если правильно подобрать параметры η0 и T . Часто для этого используют или линейное затухание: ( ) t η = η0 1 − . Получается. в местах. а T — параметр. T или экспоненциальное: t η = η0 e− T . то и вообще работать будет хорошо. Метод моментов: Ньютон. Например. что и в нашем бренном мире. то есть не то чтобы сильно упростили себе задачу. где поверхность функции больше наклонена в одном измерении. а если повезет. данный нам в ощущениях градиентов в различных точках. чем градиентный спуск с постоянной скоростью. Тогда. мы заменили подбор одного параметра η двумя. решив эти проблемы? Оказывается. которую мы оптимизируем. которая меняется по общей формуле и никак не связана с собственно оптимизируемой функцией. но к обще- му минимуму будем продвигаться очень медленно. обычный стохастический градиентный спуск может ве- сти себя некорректно. поэтому от подобной проблемы хотелось бы избавиться. чтобы вместо глобальной скорости обучения. а действительно движется по ландшафту оптимизируемой функции. которые меняют параметры спуска в зависимости от происходящего с функцией. если мы на секунду представим. эту ситуацию мы уже обсужда- ли в разделе 2. шаг градиентного спуска будет направлен от одной близкой и крутой стенки этого оврага к другой. как быстро будет уменьшаться η. что точка не просто подчи- няется правилам градиентного спуска. например. попробовать учитывать в скорости обучения непосредственно «ландшафт» функции. будут работать еще лучше.

то эта скорость не сможет мгновенно измениться на противополож- ную. описывающей поверхность. мы стараемся продолжить движение в том же направлении. В псевдокоде это выглядит примерно так: u = gamma*u . а их момент движения нельзя изменить мгновенно. автор классического учебника по выпуклой оптимизации [386]. в которую и было направлено. ускорение будет направлено по градиенту. Юрий Евгеньевич (р. он все больше ускоряется в том направлении. Здесь γ — это параметр метода моментов. но само движение будет понача- лу продолжаться в ту же сторону. Но как только точка начнет собственно движение. одном из важнейших бельгийских университетов. А формально уравнение для век- тора разности параметров. . где градиент все время меняется. продолжая аналогию. или Об оврагах. теперь выглядит вот так: ut = γut−1 + η∇θ E(θ). θ = θ − ut . а теперь российский математик. Этот эффект инерции и пытается выразить метод моментов. в котором были направлены сразу несколько предыдущих градиентов. которая спускается по поверхности. появляется импульс. который мы используем для обновления весов. сильнее. конечно. а на ка- кую часть будем использовать новый градиент. Вместо того что- бы двигаться строго в направлении градиента в конкретной точке.learning_rate * grad theta += u Однако. материальные точки обладают инерцией. Теперь. Нестеров — создатель ряда очень популярных алгоритмов оптимизации. Проще говоря. обратную градиенту функции. 1956) — советский. классический градиентный спуск перестанет быть применим: если точка пришла в очередное положение с какой-то уже ненулевой скоростью. она движется по инерции и стремится этот импульс сохранить. Отсюда и название метода: у нашей «материальной точки». хотелось бы не просто слепо бежать вниз в под- ходящем направлении. впервые основан- ном в 1425 году (потом. какую часть прошлого градиента мы хотим взять на текущем шаге. но будет двигаться достаточно медленно в тех направлениях. правда. один из са- мых известных специалистов в теории оптимизации. долинах и трамплинах значению вектора весов при обучении) действительно будет стремиться двигать- ся согласно законам градиентного спуска: ее ускорение будет направлено в сторо- ну. Сейчас Нестеров работает в Лувенском католическом университете (Universit catholique de Louvain). а еще и хотя бы на полшага вперед смотреть под ноги. лауреат пре- мий Данцига и фон Неймана. когда наш «шарик» катится с горки. Быстрее. тоже участвует в формировании окончательной «скорости дви- жения» вектора аргументов. он всегда меньше единицы. чтобы не споткнуться о внезапно подвернувшийся камень. Поэтому метод Нестерова1 1 Нестеров. в котором двигались раньше. но гра- диент.166 Глава 4. Лувенский университет надолго закрывали). глубже. и он опре- деляет.

даже если она расположена далеко. группа Гессе. Кроме того. что производных считаются быстро. пучок Гессе. У методов второго порядка есть два важных преимущества. Это метод второго порядка. Но можно сделать и следующий шаг: давайте приблизим функ- цию в текущей точке не линейной функцией. и изменившийся градент разумно считать уже в той точке.. ведь даже если предпо- лагать. и сдвигаемся туда. обновление момента можно записать так: u = −[H(E(θ))]−1 ∇E(θ). 1811–1874) — немецкий математик. можно не сдвигаться на непонятное расстояние вдоль градиента. Математически вектор обновления параметров теперь можно записать так: ut = γut−1 + η∇θ E(θ − γut−1 ). В честь Гессе названа масса объектов в алгебре и геометрии: матрица Гессе. 2 где H(E(θ)) — это матрица вторых производных функции E. специалист по ал- гебраическим инвариантам и геометрии. нормальная форма Гессе. . Это справедливо. мы вы- ясняем. скорость теперь настраивается автоматически. так называемый гес- сиан. Но и это еще не все. когда мы приблизили E(θ) параболоидом..4. К сожалению. пары Гессе. что тоже сильно облегчает нам жизнь. если учесть. а в точке θ − γut−1 . нам все равно нужно заполнить целую 1 Людвиг Отто Гессе (Ludwig Otto Hesse. что вы хотите оптимизировать некоторую сложную функцию. как вы- ше. Нестеров и Гессе 167 использует при расчете градиента значение функции ошибки не в точке θ. в каком направлении функция быстрее всего меняется в нужную сторону. казалось бы. или матрица Гессе1 . Итак. а значит. опти- мизация действительно обычно становится гораздо быстрее. а в уравнении совершенно отсутствует па- раметр η. что γut−1 согласно методу моментов уже точно будет использовано на этом шаге. а не только первых. куда мы придем после применения мо- мента предыдущего шага. Метод моментов: Ньютон. Во-первых. эту точку в любом случае легко подсчитать как решение линейной системы уравнений. что вычислять матрицу Гессе все-таки слишком дорого для обучения больших нейронных сетей. а это мы умеем делать автоматически по графу вычислений. И теперь. то есть параболои- дом. найти вторую производную не сильно сложнее. Градиент — это линейное приближение функции в данной точке. Во-вторых. Еще более «продвинутый» подход к вычислению момен- тов — это метод Ньютона. Смысл метода Ньютона прост: представьте. а квадратичной. а сразу смело пе- реходить в точку минимума параболоида.4. на практике оказывается. Сделать это можно по формуле Тейлора — неподалеку от точки θ 0 : 1 E(θ) ≈ E(θ 0 ) + ∇θ E(θ 0 )(θ − θ 0 ) + (θ − θ 0 )⊤ H(E(θ))(θ − θ 0 ). чем первую: нужно просто взять произ- водную еще раз. то есть он использует ин- формацию о вторых производных функции.

все это мы видели на рис. Однако найти способ использовать их было бы очень заманчиво. существуют и другие методы. Так что если у вас есть достаточно много вычислительных ресурсов и нет сильных ограничений по времени. сильнее. например классический алго- ритм L-BFGS [330]. А медленный спуск будет выбирать долину более тщательно и может привести к более хорошим результатам. что при большом размере параметра η наш «ша- рик» имеет слишком большую кинетическую энергию. Самый часто используемый ме- тод — это пошаговое уменьшение: раз в несколько эпох η домножается на какую- либо константу d. А в обрат- ной ситуации. и нам хотелось бы отметить это как од- ну из важных пока не решенных задач глубокого обучения. получится. и дальше уже просто немножко дообучает результат. а затем уже будем искать в этой долине более точное значение минимума.168 Глава 4. d. но узкие провалы в поверхности функции потерь. Но пока она остается нерешенной. можно делить размер шага на номер итерации (линейно уменьшая скорость) или домножать на экспоненту от номера итерации. а может их и усугубить. накапливают историю вычисленных градиентов и используют ее для того. должна быть мень- ше единицы. 2. естественно. то есть сложность здесь растет квадратично относительно числа парамет- ров. со слишком маленьким размером шага. В результате шарик не мо- жет найти глубокие. долинах и трамплинах матрицу. в которой ей повезло оказаться. Например. но на практике пошаговое уменьшение оказывается самым лег- ко интерпретируемым и потому популярным способом. Другой хороший метод — начинать уменьшать размер шага после то- го. для этого им приходится считать производную на всем тренировочном множестве. где функция в целом имеет не слишком большие значения. можно изначально взять небольшой размер ша- га и уменьшать его достаточно плавно — не промахнетесь. Сейчас методы второго порядка и квази-Ньютоновские методы почти не используются в обучении глубоких сетей. и параметры системы очень сильно «прыгают» и постоянно меняют свои значения. чтобы аппроксимировать вторые производные. выбранную в начале обучения. нам придется повозиться со скоростью обучения η. умноженного на отрицательную константу (уменьшая скорость экспоненциально). которое мо- жет быть очень большим. Конечно. обучение будет продвигать- ся слишком медленно. нужно так или иначе уменьшать раз- мер шага по мере обучения: таким образом мы сначала постараемся найти боль- шую область. Для это- го нам нужно решить. но делать это он будет гораздо дольше. глубже. Чтобы решить сложившуюся проблему. или Об оврагах. как они это делают. При обучении нейронных сетей полезно постепенно уменьшать раз- мер шага. что модель быстро «вы- бирает» долину. как именно и когда уменьшать скорость обучения: плохая стратегия уменьшения скорости обучения не решит проблем слишком маленького и слишком большого η. Быстрее. как прекращает уменьшаться ошибка на валидационном множестве. Однако здесь мы даже не будем подробно объяснять. . — к сожалению. Так называемые квази-ньютоновские методы. Баланс здесь примерно такой: большая скорость обучения в начале и слишком быстрое ее уменьшение приведут к большей дисперсии результатов. Можно представить.6. «долину».

Обозначим через gt.i . Именно из-за этой особенности Adagrad особенно полезен.ii + ϵ где Gt — диагональная матрица. В. которые менее изменчивы в разных примерах. как правило.4. Gt. а другие веса еще на середине соответствующего склона. которые в боль- шей степени варьируются в данных. чем изменение единой скорости обучения в чистом виде.5. но никак не учи- тывал историю обновлений для каждого отдельного параметра. что если не брать квадратный корень в знаменателе. шаг обновления зависел только от текущего градиента и глобального параметра скорости обучения. которые мы обсуждали до сих пор.5. Для того чтобы иметь возможность адапти- ровать скорость обучения для разных параметров автоматически. и. и их можно менять гораздо быстрее. эти методы. Лолита В методах. что у них все равно есть свои собственные метапараметры. В. . когда данные сильно разрежены. Инте- ресно. Тогда обновление параметра θi на очередном шаге градиентного спуска можно записать так: η θt+1. а ϵ — это сглаживающий параметр. что некоторые веса уже близки к своим локальным минимумам. Адаптивные варианты градиентного спуска Я должен ступать осторожно. Adagrad [131].i − √ · gt. были созданы адаптивные методы оптимизации. больше у тех. и по этим координатам нужно двигаться медленно и осто- рожно. Однако вполне может так сложиться. само по себе регулирование скорости обучения может оказаться довольно затратным делом. Несмотря на то. каждый элемент которой — это сумма квадратов градиентов соответствующего параметра за предыдущие шаги. соответственно. Первый из адаптивных методов оптимизации.i градиент функции ошибки по параметру θi : gt. основан на следу- ющей идее: шаг изменения должен быть меньше у тех параметров. Адаптивные варианты градиентного спуска 169 4. то есть: 2 Gt.i . алгоритм действитель- но будет работать хуже.ii + gt. позволяющий избежать деления на ноль. ведут себя лучше на раз- реженных данных и более стабильны.i = θt. Набоков. К тому же.ii = Gt−1.i = ∇θi L(θ).

Это приводит к то- му. давайте будем считать их по некоторому окну. Теперь у нас на каждый оптимизируемый параметр найдется свой метапараметр. Еще один минус состоит в том. что g 2 всегда положительно. так что настраивать его не обязательно. так как диагональные элементы G по сути и являют- ся индивидуальными скоростями обучения для каждого θ. самостоятельно. что глобальную скорость обучения в Adagrad нужно выбирать руками. конечно. что о параметре скорости обучения η можно больше не волноваться. что скорость обучения порой уменьшается слишком быстро и в итоге становит- ся слишком маленькой. Adadelta [584] — это довольно несложная. меньше 1.ii = ρGt−1. реализовать это проще всего уже известным способом — введением параметра инерции. как в Adagrad: η ut = − √ g t−1 Gt−1 + ϵ .sqrt(g_cached) + eps) theta += u Один из плюсов Adagrad состоит в том. а еще лучше по всей истории. мы мо- жем векторизовать эти выражения так: η ut = − √ g t−1 .170 Глава 4. ρ должно быть. что плохо сказывается на обучении глубоких нейронных сетей. а значит. Быстрее. Поэтому для η обычно используют стандартное значение η = 0. значения G постоянно увеличиваются. но и оно не имеет большого значения. сильнее. В псевдокоде Adagrad может выглядеть примерно так: g_cached += grad**2 u = -learning_rate * grad / (np. А главный минус можно заметить. Первая идея до- вольно проста: чтобы не накапливать сумму квадратов градиентов по всей исто- рии обучения. если обратить внимание на то.01. но плоха для других.i . и она может оказаться хороша для одних размерностей. Gt−1 + ϵ Здесь и далее мы будем считать. чтобы попытаться исправить два этих недостатка. Для этого используются две основных идеи. основная цель которой состоит в том. что операции взятия корня и умножения про- должаются на векторы покомпонентно.ii + (1 − ρ)gt. и если мы обозначим этот метапараметр через ρ. глубже. но с экспоненциально затухающими весами. но эффективная модификация алго- ритма Adagrad. долинах и трамплинах Поскольку операции ко всем координатам применяются одинаковые. то изменение матрицы G можно будет записать так: 2 Gt. Все остальное происходит в точности так же. или Об оврагах. Поскольку хранить целую историю предыдущих градиентов нам никто не даст. Как и в методе моментов.

«единицы измерения» параметров и их обновлений в методе градиентного спуска и других его модификациях. то есть в единицах ∂f∂x : если веса измерялись в секундах.5. для более тонкой настройки вокруг локального минимума. но теперь уже от квадратов обновлений параметров. нам нужно как раз сначала выполнить текущий шаг алгоритма. то есть в результате снова получаются секунды. где ut = − √ · gt−1 . Поскольку настоящее среднее квадратов обновлений нам неизвестно. Адаптивные варианты градиентного спуска 171 Теперь G представляет собой экспоненциальное среднее квадратов градиентов. а не от градиента. внесенное в Adadelta. достаточно домно- жить обновление из Adagrad на еще один новый сомножитель: еще одно экспо- ненциальное среднее. чего мы и доби- вались — уменьшения скорости обучения в тот момент. и вычитать метры в секунду из секунд довольно странно. опять связанную с матрицей Гессе. будет убывать толь- ко тогда. то есть размерность была такая: ∂f ∆θ ∝ H −1 ∇θ f ∝ ∂θ ∝ размерность θ. Дело в том. Второе изменение. когда убывающими станут градиенты. Так что экспоненциальное среднее. то градиент будет иметь размерность «метр в секунду». t t−1 Gt−1 + ϵ . Правильные «единицы измерений» получались только в методах второго по- рядка: в методе Ньютона второго порядка обновление параметров ∆θ было про- порционально H −1 ∇θ f . что веса измеряются в секундах. представляет собой более сложную идею. Чтобы привести масштабы этих величин в соответствие. А это именно то. • а в Adagrad получалось.4. в отличие от суммы. Для интуитивного по- нимания здесь действительно работает эта простая физическая аналогия: давайте представим. деленные на метры в секунду в квадрате (единицы ускорения). а веса старых значений градиентов быстро (экспоненциально быстро!) уменьша- ются. то чтобы его узнать. а целевая функция в метрах. когда изменение целевой функции замедляется. что этот алгоритм исправля- ет несовпадающие масштабы. ∂2f ∂θ2 В вышеописанном примере получались бы метры в секунду. что значения обновлений ∆θ зависели от отношений градиентов. то есть на каждом шаге мы берем в G только часть нашей «истории изменений». то есть величина обновлений получалась и вовсе безразмерной. — оно аппроксимируется предыдущими шагами: √ [ ] [ ] E [∆θ2 ]t−1 + ϵ E ∆θ2 = ρE ∆θ2 + (1 − ρ)∆θ2 . Оказывается. что «еди- ницы измерения» обновления параметров ∆θ — это единицы измерения гра- диента. что в предыдущих ме- тодах «единицы измерения» безнадежно не совпадали: • в обычном градиентном спуске или методе моментов получалось.

ϵ = 10−8 .train. очень похожий на предыдущие. или Об оврагах. v+ϵ В псевдокоде это тоже нетрудно отразить: m = beta1*m + (1-beta1)*dx v = beta2*v + (1-beta2)*(dx**2) u = .sqrt(v) + eps) theta += u В исходной статье [278] рекомендуются значения β1 = 0.lmb) * u**2 u = -np. среднеквадратическое отклонение (при чем оно здесь. Такое совпадение неудивительно. в TensorFlow для этого достаточно просто заменить tf. сильнее.GradientDescentOptimizer на процедуру tf. ведь оба метода осно- ваны на давно известной классической идее применения инерции. что RMSprop не делает вторую поправку с изменением единиц и хранением истории самих обнов- лений. RMSProp при этом так никогда и не был опубликован.999. мы увидим буквально в следующем абзаце).sqrt(g_cached) + eps) theta += u Следующий вариант. все ссылки на него так или иначе приводят к известному курсу Джеффри Хинтона по нейронным сетям [532]. разумеется.AdamOptimizer(). — это алгоритм RMSprop. RMS) от градиентов: η ut = − √ · gt−1 .9.AdamOptimizer: train_op = tf. ut = √ mt . который тоже в последнее время часто используется при обучении нейронных сетей — это Adam [278]. И еще один адаптивный алгоритм оптимизации. глубже. он является модификацией Adagrad. хотя придуманы они были почти одновременно и неза- висимо разными людьми. а η = 0. а статья об Adadelta [584] была опубликована в том же году. но использует сгла- женные версии среднего и среднеквадратичного градиентов: η mt = β1 m + (1 − β1 )gt .learning_rate * m / (np.minimize(loss) .001. Например. что и курс Хинтона. Основная разница между RMSprop и Adadelta состоит в том.train.172 Глава 4. только на этот раз RMSprop использует ее для оптимизации метапараметра скорости обучения. практиче- ски мгновенно попадают в библиотеки для обучения. Gt−1 + ϵ Значение ϵ обычно берут равным 0. Быстрее. RMSprop и Adadelta — фак- тически близнецы-братья. На практике эффект от хорошего современного алгоритма оптимизации почув- ствовать очень легко.lmb) * dx**2 u_cached = lmb * u_cached + (1 . RMS здесь означает root mean squares. все хорошие алгоритмы оптимизации. vt = β2 m + (1 − β2 )gt2 .9.sqrt(u_cached) * grad / (np.train. долинах и трамплинах Для полноты картины запишем полную версию Adadelta в псевдокоде: g_cached = lmb * g_cached + (1 . β2 = 0. а просто использует корень из среднего от квадратов (вот он где. Как и предыдущие два метода.

не отчаивайтесь раньше времени. а. в подавляющем большинстве случаев тоже приведет к решению. д. Некоторые разработчики предпочитают использовать стохастический градиентный спуск с изменением ско- рости обучения по расписанию. что никакой дополни- тельной работы они от вас не требуют (в наше время это вопрос передачи того или иного параметра в оптимизатор)? Это вопрос сложный. Что же выбрать? Как определиться. 4. . Adam будет в среднем наилучшим выбором на данный момент.6. алгоритмам градиентного спуска неоткуда знать о том. и. и в реальности конкретной задачи лучше всего будет попробовать сразу несколько и посмотреть. 4.5. Адаптивные варианты градиентного спуска 173 Рис. Если ваши дан- ные достаточно разреженные. Сравнение стохастического градиентного спуска и Adam И результат не заставит себя ждать: графики. он.5. 458]). Важный практический совет состоит в том. так что если вдруг Adam не работает. Adadelta давала нормальные результаты. для ал- горитма Adam показаны на рис. которое в простейшем случае соответствует ошибке на валидационном множестве. какие дают ошибку лучше и т. особенно учитывая. что они делают. то вам точно стоит посмотреть в сторону адаптивных алгоритмов. хоть и медленнее. Собственно. который плохо будет обобщаться на новые данные. Во многих случаях градиент- ный спуск может привести к оверфиттингу. Adam сходится куда нужно гораздо быстрее (хоть и с большей дисперсией). Очевидно. скажем. Но некоторые общие советы дать можно (см. Однако в нашей практике бывали задачи. на которых Adam рас- ходился. также [101. Поэтому мы сами должны следить за качеством обобщения. какой из многочисленных существующих методов оптимизации использовать. что при градиентном спуске нуж- но следить за ошибкой на валидационном множестве и останавливать процесс в тот момент.4.2 и 4.6. а Adam — это пря- мое расширение RMSprop. наверное. 4. конечно. когда ошибка начинает увеличиваться. RMSprop и Adadelta различаются не очень сильно. насколько хорошо обоб- щается то. они просто оптимизируют ошибку на тренировочном множестве. какие из них вообще сходятся. упасть в слишком глубокий минимум функции ошибки. аналогичные рис.

сильнее. на котором оста- новиться? Давайте тогда уж добавим его в тренировочный набор и заодно еще и до- обучимся. здесь показана еще одна. скорее всего. чтобы оптимизировать параметры алгоритма обучения и гиперпара- метры модели. тестовое множество (production set) используют уже для оконча- тельной оценки качества. 4. и множество это «запачкалось».7. самая главная кривая . мы будем ограни- чиваться только тренировочным и тестовым множествами. Сравнение разных методов для улучшения обучения нейронных сетей И здесь появляется еще одно замечание. но и для того. которые мы рассматривали в этой главе (снова среднее по 10 запускам. На рис.174 Глава 4. • валидационное множество (validation set) применяют. мы «испортили» це- лый большой кусок данных только для того. потому что не будем специально подбирать гиперпараметры. 4. получается. что мы использовали валидационное множество для оп- тимизации нашей модели. • а третье. чтобы обу- чать модель. Поэтому в реальных системах данные часто разбиваются не на две части. глубже. его нельзя уже считать валидационным! Это кажется странным: что же. д. во многом благодаря которому мы сейчас способны обучать огромные и сложные нейронные сети. чтобы подгонять ги- перпараметры. чтобы выбрать шаг для остановки. Кроме того. в примерах в этой книге. но на этот раз без дисперсий.7 показаны графики функции ошибки и точ- ности классификации на MNIST для всех тех методов. Эта схема хорошо зарекомендовала себя на практике. впрочем. А закончим мы эту главу общим сравнением. долинах и трамплинах Рис. чтобы выбрать шаг. Тем не менее. а на три: • тренировочное множество (training set) используют. и мы тоже советуем ее использовать. такое использование валидационного множества может иметь смысл: его часто используют не только для того. Быстрее. чтобы не загромождать график). которое может поначалу показаться философским: выходит. вовремя останавливать процесс обучения и т.. как и раньше. показав тот самый «невидимый прогресс». или Об оврагах.

7). когда мы вооружились самыми современными методами обучения. и разница не столь вели- ка. Теперь. 4. можно заняться и архитектурами. . соответствующая аналогичной модели. к которой приме- нены все эти нововведения: и инициализация Ксавье. новшества не по- глощают друг друга: хотя самым важным оказывается переход от стохастического градиентного спуска к Adam. В следующей главе нас ждет одна из главных и самых популярных «нестандартных» архитектур: сверточные нейронные сети. и нормализация по мини- батчам.5.4. но она заметна даже здесь — а для больших датасетов она часто оказывается разницей между «можем обучить» и «не можем». для MNIST все это не так важно. сплошная кривая все же идет заметно выше графика последнего. Как видите. и Adam в качестве алгоритма оптимизации. Адаптивные варианты градиентного спуска 175 (сплошная на рис. Конечно.

• перейдем к сетям.DR Данная глава вводит важнейшие архитектуры сверточных нейронных сетей и автокодировщиков. • после теоретического обзора закончим главу практическим сравнением раз- ных типов автокодировщиков (в том числе сверточного) на наборе данных MNIST. как работают сверточные сети. — автокодировщикам. В ней мы: • начнем. с биологии — со зрительной коры головного мозга. обучающимся без учителя. или Не верь глазам своим TL.Глава 5 Сверточные нейронные сети и автокодировщики. • дадим обзор современных сверточных архитектур. . как обычно. • подробно рассмотрим.

The visual system of the brain has the organization. Глаз как оптический прибор изучали Леонардо да Винчи. и в наши дни у них уже нашлось много са- мых разнообразных применений. Так что в этой главе мы снова де- лаем шаг назад и начинаем с биологии. основная идея которых состоит в том. T. на что реагируют отдельные нейроны. отмечавшие его выдающиеся оптические свойства. Герман Гельмгольц писал так: «Какой пло- хой оптик Господь Бог! Я счел бы себя вправе самым резким образом выразиться о небрежности работы оптика и возвратить ему прибор с протестом. fighting.5. которой мы можем лишь слегка коснуться. P. широ- ко известно. они впервые применили к исследованиям зрительной коры новую технологию микроэлектродов. если бы он 1 Дэвид Хьюбел (David Hunter Hubel. computational profile. простите за каламбур. как работает зрение. 562]. Конечно. изучение механизмов зрения — это очень большая тема. как происходит бинокулярное зрение. Sejnowski. в качестве достаточно популярных и интересных книг рекомендуем две доступные бесплат- но [234. о чем мы говорим в этом разделе. чтобы переисполь- зовать одни и те же части нейронной сети для работы с разными маленькими. Ramachandran. Хьюбел и Визель открыли многое из того. S. в течение которого Хьюбел и Визель выяснили очень многое о структуре и функциях зрительной коры мозга. fleeing. Зрительная кора головного мозга . как именно мы видим окружающий мир. A Critique of Pure Vision [82] Сверточные нейронные сети (convolutional neural networks. Но о назначении глаз людям. Люди давно задумывались о том. но основным приложением. CNN) — это весьма ши- рокий класс архитектур.. С помощью таких электродов они изучили. Churchland. Впрочем. д. охлажда- ющим кровь. И это не случайно: идея сверточных сетей во многом мотивирована исследо- ваниями о зрительной коре головного мозга. который считал мозг своеобразным радиатором. Проводя эксперименты на кошках и обезьянах. действитель- но догадаться несложно. мнение Аристотеля. ло- кальными участками входов. S. 569]. J.1. Словом. позволяющих регистрировать возбуждение отдельных ней- ронов. одна из которых — популярное изложение классических исследова- ний по теме от самого Дэвида Хьюбела1 [235. Как и многие другие нейронные архитектуры. остается обработка изображений. . другие реагируют на форму линейных сегментов и т. Иоганн Кеплер и многие другие великие физики. как некоторые из них служат детекторами границ. ради которого люди когда-то придумали сверточные сети. 236. слышавшим о печальной истории царя Эдипа.. V. 2 Вообще говоря. and architecture it has in order to facilitate the organism’s thriving at the four Fs: feeding. мнения разнились. and reproduction. 1926–2013) — канадский нейрофизиолог. назначение органов человеческого тела выяснить было совсем не просто. а главное — выяснили. например. лауреат Нобелев- ской премии по физиологии и медицине 1981 года. свер- точные сети известны довольно давно. Связь глаз со зрением была.1. очевидной да- же древним2 . Главным делом его научной жизни стало продол- жавшееся более 20 лет сотрудничество с Торстеном Визелем (Thorsten Nils Wiesel) [237]. Зрительная кора головного мозга 177 5.

подобные вариации могли оказаться полез- ными животному при переменах в условиях его жизни — в таком случае затруд- нение. не может быть признано опровергающим всю теорию». Сверточные нейронные сети и автокодировщики. и впрямь потрясающе хороши. Любопытно. что путем естественного отбора мог образоваться глаз со всеми его неподражаемыми изобретениями. или нескольких сотен тысяч лет. а то и сто раз. будто бы Дарвин «сам по- нимал» ограниченность теории эволюции. глаз когда-либо варьировал и вариации наследовались. если. может показать- ся предположение. а известная модель Нильссона и Пелгер [393] показа- ла. LGN). последние исследования показывают. Об исследованиях человеческого зрения и обработки зрительных сигна- лов можно написать отдельную книгу (и таких книг. Все это было известно людям еще в XIX веке. но наша цель сейчас куда скромнее: мы попробуем отметить несколь- ко важных черт в устройстве зрительной коры.. то есть способности хорошо ви- деть при разных условиях освещенности. Как ученые пришли к этому выводу? . возникающее при мысли об образовании сложного и совершенного глаза путем естественного отбора. написано нема- ло). или Не верь глазам своим вздумал продать мне инструмент. то есть в первой половине XX века. в течение буквально нескольких тысяч поколений.178 Глава 5. то есть изменению фокусного расстояния. причем каждая ступень полезна для ее обладателя. по которо- му информация с сетчатки доходит до мозга. далее. и его важность для зрения была очевидной. а это также несомненно. — отмечали еще средневековые ана- томы.. конечно же. которым можно найти некоторые 1 Например. наконец. Есть масса очень интересных примеров зрительных иллюзий и странных за- болеваний1 . способные различать формы. Есть известная цитата Дарвина из «Происхождения видов».. чем лю- ди смогли заглянуть на уровень отдельных нейронов. если. но настоящие исследования зрительной коры и восприятия изображений не могли начаться раньше. откровенно говоря. отдел мозга. обладающий такими недостатками. Но нас. в нашем мозге почти наверняка есть особые области и особые пути обработки челове- ческих лиц. отдельные от распознавания всех остальных объектов. Зрительный нерв входит в та- ламус. что потом происходит с прочитанным с сетчатки изображением. как челове- ческий глаз». а то. Зрительный нерв — толстый пучок аксонов ганглионарных клеток. что иногда эту цитату все- рьез приводят креационисты как свидетельство того.». что сложные глаза. а это не подле- жит сомнению. в этой книге интересует не глаз. Однако цитата буквально тут же про- должается так: «.Разум мне говорит: если можно показать существование много- численных градаций от простого и несовершенного глаза к глазу сложному и со- вершенному. конечно. хотя и непреодолимое для нашего воображения. что эволюция полноценного глаза от первых улавливающих свет клеток могла произойти очень быстро. обра- зовались у разных животных в процессе эволюции совершенно независимо целых пятьдесят. обрабатывающий информацию от органов чувств. а затем зрительная информация от LGN поступает в соб- ственно зрительную кору (visual cortex).. и адаптации. там первич- ная обработка происходит в так называемом латеральном коленчатом теле (lateral geniculate nucleus. Но все-таки на самом деле способности глаза к аккомодации. которую иногда цитируют так: «В высшей степени абсурдным. И действительно.

зрительная зона V2 (visual area two). совершенно не мешает распознавать другие объекты. что мы обычно видим в глубоких ней- ронных сетях: более высокие уровни нужны для того. пытаясь понять. в частности человеческих лиц. архитектурой да и просто обособленным положением в коре. и об этом мы подробно поговорим ниже. кроме того. и исследова- тели не сомневаются. она реагирует на изменения по всему полю зрения (wide-field stimulation) и изменения в картинке вслед- ствие того. на что мы осознанно или неосо- знанно обращаем внимание. но с распознаванием лиц у него при этом все в порядке! А распознавание лиц отключается при лицевой агнозии. • в зоне V3 распознается цвет. что функции зон зрительной коры становятся постепенно все более и более общими. именно здесь наиболее сильна модуляция посредством нашего внимания: активация нейронов в V4 не равномерна по всему полю зрения.. чтобы «вдохновляться идеями»: реальная работа мозга пока что остается для нас слиш- ком сложной и непонятной. которые обычно незамысловато на- зываются зрительная зона V1 (visual area one). текстуры объектов. понятно.. • зона V5 в основном занимается распознаванием движений. что они различаются и по своим функциям. которое хорошо соответствует тому. Хотя на самом деле функциональная специализация зон пока что до конца не ясна.5. расположена сзади. что передвигается сам человек. Зрительная кора головного мозга 179 условные соответствия в архитектуре современных искусственных нейронных се- тей. что речь идет исключительно о том. как ни странно. • V2 продолжает выделять локальные признаки.1. • иногда также выделяют зону V7. По нынешним представлениям: • в зоне V1 выделяются локальные признаки небольших участков считанного с сетчатки изображения. д. которую также называют стриар- ной корой или первичной зрительной корой. • в зоне V6 обобщаются данные о всей картинке. Подчеркнем на всякий случай. Зрительная кора. Зоны отличаются друг от друга физиоло- гией. появляются первые резуль- таты их сегментации и группировки. а сильно зависит от того. которая. в свою очередь. это для нас сейчас самое интересное. . куда и с какой скоростью передвигаются в зоне видимости те самые объекты. пока несложных.. зрительная зона V3 и т. Такая функциональная специализация — это первое замечание о зрительной коре. инсультах) вырабатывается так на- зываемая предметная агнозия. когда человек не может распознавать и правильно идентифицировать объекты. до V6 и V7. Она делится на несколько частей. где происходит распознавание сложных объектов. и смоделировать зрительную кору или даже отдельные ее части пока выше сил человеческих. чтобы выделять более общие Очень просто: при определенных повреждениях мозга (например. в затылочной доле голов- ного мозга. • зона V4 уже начинает распознавать геометрические фигуры и очертания объ- ектов. очертания которых выделились в зоне V4. слегка обобщая их и добавляя бинокулярное зрение (то есть стереоэффект от двух глаз).

180 Глава 5. Сверточные нейронные сети и автокодировщики, или Не верь глазам своим

признаки, соответствующие абстрактным свойствам входа, а на нижних уровнях
признаки более конкретные. В сверточных сетях, разумеется, эффект будет тот же
самый. Но есть и другие интересные свойства архитектуры зрительной коры, ко-
торые нашли отражение в машинном обучении.
Кроме зон V1–V7, выделяют и другие области, а среди перечисленных иерар-
хия не такая уж строгая: есть масса прямых связей, когда, например, нейроны из
зоны V1 подаются на вход не только в зону V2, но и напрямую в зону V5; это тоже
найдет отражение в сверточных архитектурах.
Кроме того, в отличие от большинства архитектур искусственных нейронных
сетей, между нейронами в мозге всегда присутствует очень сильная обратная связь
от более высоких уровней к более низким. Например, современные исследования
предполагают, что внимание, которое зарождается в зоне V4, потом переходит об-
ратно к V2 и V1 (там тоже присутствуют сильная модуляция на основе внима-
ния!) [19].
В искусственных нейронных сетях тоже вводят подобные механизмы внима-
ния, помогающие выбрать, какие именно входы и промежуточные выходы сети
сейчас нужно учитывать больше всего — о них мы поговорим в разделе 8.1. Но
все-таки именно обратную связь мы, специалисты по машинному обучению, пока
не очень умеем «готовить»; придумать математическую модель для того, как мозг
с ней управляется — одна из важнейших открытых задач нейробиологии.
Кстати, по современным представлениям выходы нейронов из зоны V1 и V2
обрабатываются сразу двумя параллельными путями: вентральный путь из V2 на-
правляется к V4 отвечает на вопрос «Что?» (его иногда называют What Pathway),
отвечая за распознавание форм и объектов, а дорсальный путь (Where Pathway) от-
вечает на вопрос «Где?»1 , проходит из V2 к V5 и V6 и занимается в основном распо-
знаванием движений, управлением движением глаз и рук (особенно если речь идет
о том, как достать находящийся в поле зрения объект) [544]. Настолько детальной
специализацией мы наши искусственные сети снабдить не сможем, но эта идея, во-
обще говоря, тоже регулярно используется: часто есть смысл обработать один и тот
же вход несколькими разными способами и только потом объединить результаты,
скажем, суммированием или конкатенацией. В сверточных сетях так часто делают,
когда обрабатывают вход с помощью сразу нескольких размеров фильтров; о филь-
трах речь пойдет буквально в следующем разделе.
Но и это еще не все. Из всей зрительной коры наиболее хорошо изучена зона V1,
первичная зрительная кора: она ближе всего к собственно входам, достаточно про-
сто устроена, и там проще понять, за что «отвечают» отдельные нейроны и как они
друг с другом взаимодействуют [71]; именно с зоной V1 были связаны самые гром-
кие результаты Хьюбела и Визеля. Оказалось, что зона V1 сама состоит из шести
уровней нейронов: входные сигналы приходят из латерального коленчатого тела
в четвертый уровень, дальнейшие сигналы выходят из уровней 2 и 3, а обратная

1 К сожалению, When Pathway в мозге пока не нашелся...

5.1. Зрительная кора головного мозга 181

связь — из шестого. Нейроны в зоне V1 располагаются не случайно: зона V1 содер-
жит полную «карту» полей зрения обоих глаз, то есть близкие участки сетчатки
обрабатываются близкими нейронами в V1. Любопытно, что при этом «картиро-
вании» локальная структура переносится очень точно, а вот на глобальном уровне
есть серьезные искажения: во-первых, центральный участок поля зрения сильно
увеличен (половина всех нейронов отвечают за 2 % поля зрения), во-вторых, есть
геометрические искажения, похожие на использование полярных координат: кон-
центрические круги и радиальные линии на картинке преобразуются в вертикаль-
ные и горизонтальные линии в V1. Это позволяет сохранять инвариантность изоб-
ражения при смене нашей позиции и угла зрения. Такие преобразования мы при-
менять не будем, но давайте запомним, что каждый нейрон в V1 работает с очень
маленьким участком изображения (он называется рецептивным полем, receptive
field), и между ними сохраняются пространственные взаимосвязи, подобные ис-
ходной картинке.
Интересно понять, на что, собственно, реагируют нейроны в V1. Кроме распо-
ложения, отраженного в «карте», разные нейроны в V1 распознают:
• ориентацию, то есть нейрон реагирует, например, на то, что освещенность
вдоль диагонали изображения высокая, а по двум другим углам низкая; или
на то, что освещенность нижней части изображения выше, чем верхней; та-
ким образом нейроны распознают границы изображений (edge detection);
• пространственную частоту, то есть то, насколько часто меняется освещен-
ность в пределах рецептивного поля нейрона;
• направление: в отличие от большинства сетей, которые мы будем рассмат-
ривать ниже, человеку интересна не только и не столько статичная картин-
ка, сколько происходящие в ней движения; нейроны умеют «запоминать»
и сравнивать предыдущие входы с последующими, распознавая таким обра-
зом направление не только в пространстве, но и во времени; аналогично рас-
познается и временная частота;
• различие между глазами: в V1 у каждого нейрона два рецептивных поля, для
каждого глаза, и хотя большинство нейронов в основном «посвящены» одно-
му конкретному глазу (то есть не реагируют на стимулы с другого), некото-
рые распознают как раз различия между тем, что видят левый и правый глаз;
• цвет, относительно которого нейроны обычно распознают одно из трех
основных направлений: красный — зеленый, синий — желтый и черный —
белый.
Математическое описание того, как нейроны зрительной коры активируются
в зависимости от ориентации [104, 348], оказалось тесно связано с так называ-
емыми фильтрами Габора [168] — видом математических преобразований, очень
эффективным для выделения границ объектов на изображениях (edge detection).
А знаменитый набор признаков для изображений SIFT (scale-invariant feature
transform, масштабно-инвариантное преобразование признаков), разработанный
Дэвидом Лоу в конце 1990-х годов [334, 335], во многом соответствует тому, как

182 Глава 5. Сверточные нейронные сети и автокодировщики, или Не верь глазам своим

активируются нейроны зрительной коры. Сегодня развитие глубоких сетей при-
вело к тому, что сейчас мы получаем примерно те же (только еще лучше работа-
ющие) признаки на нижних уровнях сверточных сетей — их примеры мы еще не
раз увидим в этой главе.
Рассказ о зоне V1 плавно подводит нас к последнему замечанию: как видно, об-
работка изображений в мозге устроена как весьма глубокая нейронная сеть. В част-
ности, уже в самых ранних работах Хьюбела и Визеля клетки зрительной коры
(а именно зоны V1) подразделялись на простые и сложные. Простые клетки реаги-
руют только на участки и полосы света, края стимулов, проходящих в определен-
ном месте под определенным углом. А сложные клетки могут, например, реагиро-
вать на ориентацию независимо от конкретного положения сигнала. Достигается
это тем, что сложные клетки относятся к следующему уровню обработки, получая
на вход результат активации простых клеток; поэтому их рецептивное поле обычно
немного больше, а выявляемые ими признаки оказываются инвариантными к ме-
стоположению сигнала. В частности, клетки, реагирующие на движение сигнала,
тоже всегда являются сложными по данной классификации.
И это только начало: в одной только зоне V1 выделяют шесть уровней, а ведь
сигнал по ходу движения проходит через сразу несколько зон, начиная с латераль-
ного коленчатого тела (в котором, кстати, тоже шесть уровней) и заканчивая высо-
коуровневыми зонами V6 и V7. Это тоже нашло отражение в искусственных ней-
ронных сетях: сверточные сети для обработки изображений — это самые глубокие
из существующих сетей. С помощью идей, которые мы изложим в этой главе, мож-
но обучить сеть в несколько десятков и даже сотен уровней!
Но хватит биологии. Начиная со следующего раздела мы переходим собствен-
но к изложению идей и математики сверточных сетей. Мы увидим, как с помощью
простой идеи переиспользования одних и тех же весов для разных участков вход-
ного изображения можно радикально сократить число параметров в сети, ничего не
потеряв в выразительности. Сверточные сети — одна из самых популярных архи-
тектур современных нейронных сетей, и эта глава — одна из центральных в книге.

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

Р. Киплинг. Как появились броненосцы

Итак, в предыдущем разделе мы обсудили некоторые особенности архитектуры
зрительной коры. Как мы выяснили, именно зрительная кора, а точнее, исследова-
ния Хьюбела и Визеля на рубеже 50–60-х годов XX века [235, 569], мотивировали
многие идеи, сегодня использующиеся в глубоких архитектурах.

5.2. Свертки и сверточные сети 183

И здесь снова появляется один из лейтмотивов нашей книги, по крайней мере
ее исторических экскурсов: идея сверточных сетей появилась по меркам машин-
ного обучения очень давно. Можно сказать, что первой настоящей сверточной се-
тью, позаимствовавшей для информатики воплощенные природой в зрительной
коре идеи, был Neocognitron Кунихико Фукусимы, появившийся в 1979–1980 го-
дах [166, 167]1 . Впрочем, Фукусима не использовал градиентный спуск и вообще
обучение с учителем, а его работы были довольно прочно забыты. Снова сверточ-
ные сети в уже вполне современной форме появились только в работах группы
Яна ЛеКуна в конце 1980-х годов [18, 188, 205], и с тех пор и до наших дней они
вполне успешно применяются для распознавания изображений и многих других
задач (см., например, свежие обзоры [438, 522]).
Но что же, собственно, такое в данном случае свертка и какое она имеет от-
ношение к нейронным сетям? Чтобы ответить на этот вопрос, давайте сначала от-
ступим на шаг назад. Краеугольным камнем всех нейронных сетей являются аф-
финные преобразования. В каждом слое полносвязной сети повторяется одна и та
же операция: на вход подается вектор, который умножается на матрицу весов, а к
результату добавляется вектор свободных членов; только после этого к результа-
ту применяется некая нелинейная функция активации. И во всех сетях, которые
мы до сих пор строили, такой подход использовался постоянно, независимо от
структуры или происхождения данных. Будь то изображения, текст или музыка,
мы вновь и вновь применяем аффинное преобразование в каждом слое нашей се-
ти, предварительно приведя данные к векторной форме.
Однако многие типы данных имеют свою собственную внутреннюю структуру,
которая отлично известна нам заранее. Главный пример такой структуры в этой
главе — изображение, которое обычно представляют как массив векторов чисел:
если изображение черно-белое, то это просто массив интенсивностей, а если цвет-
ное, то массив векторов из трех чисел, обозначающих интенсивности трех основ-
ных цветов (красного, зеленого и черного в стандартном RGB, синего, зеленого
и красного в трех типах колбочек в человеческом глазе и т. д.). Если же обобщить
такую внутреннюю структуру до максимальной все еще полезной нам общности,
описание получится такое:
1) исходные данные представляют собой многомерный массив («тензор»);
2) среди размерностей этого массива есть одна или более осей, порядок вдоль
которых играет важную роль; например, это может быть расположение пик-
селов в изображении, временная шкала для музыкального произведения, по-
рядок слов или символов в тексте;
3) другие оси обозначают «каналы», описывающие свойства каждого элемента
по предыдущему подмножеству осей; например, три компонента для изобра-
жений, два компонента (правый и левый) для стереозвука и т. д.

1 Мы уже вспоминали об этой модели в разделе 3.3, потому что именно в Neocognitron впервые

появились перцептроны с функцией активации, похожей на ReLU.

184 Глава 5. Сверточные нейронные сети и автокодировщики, или Не верь глазам своим

Когда мы обучаем полносвязные нейронные сети, это дополнительное знание
о структуре задачи никак не используется. Вспомним пример сети для распозна-
вания рукописных цифр, которую мы строили в разделе 3.6: там мы просто пре-
вращали изображение размера 28 × 28 пикселов в вектор длины 784 и подавали
его на вход. Получалось, что наши аффинные преобразования никак не учитывали
структуру картинки, топологию данных!
Но ведь она не просто присутствует, а играет определяющую роль: конечно же,
взаимное расположение пикселов в картинке важно для распознавания цифр... По-
лучается, что сети приходилось на основе интенсивностей отдельных пикселов вы-
учить не только то, какая форма соответствует какой цифре, но заодно и вообще
понятие формы, тот факт, что некоторые компоненты входного вектора представ-
ляют собой соседние пикселы, а значит, они сильно скоррелированы, и так далее...
непростую задачу мы предлагаем нашей несчастной полносвязной сети.
Если мы не будем делать вид, что ничего не знаем о структуре входов (разделе-
нии цветовых каналов изображения, порядке нуклеотидов в ДНК и т. д.), а станем
ее напрямую использовать, это может существенно помочь нам в обучении нейрон-
ных сетей. В этом разделе мы рассмотрим такой подход на примере сверточных
слоев для задач компьютерного зрения. Мы обсудим очень важную часть совре-
менных глубоких нейронных сетей и снова увидим, как очень простая концепция
приводит к фантастическим результатам.
Основная идея сверточной сети состоит в том, что обработка участка изображе-
ния очень часто должна происходить независимо от конкретного расположения
этого участка. Грубо говоря, если вы хотите узнать на фотографии своего друга
Васю, совершенно не важно, на 100 или на 200 пикселов ухо Васи отстоит от лево-
го края фотографии. Узнать Васю можно было бы и на сильно обрезанной фото-
графии, где нет ничего, кроме его лица; это локальная задача, которую можно ре-
шать локальными средствами. Конечно, взаимное расположение объектов играет
важную роль, но сначала их нужно в любом случае распознать, и это распознава-
ние — локально и независимо от конкретного положения участка с объектом внут-
ри большой картинки.
Поэтому сверточная сеть попросту делает это предположение в явном виде: да-
вайте покроем вход небольшими окнами (скажем, 5×5 пикселов) и будем выделять
признаки в каждом таком окне небольшой нейронной сетью. Причем — и тут клю-
чевое соображение — признаки будем выделять в каждом окне одни и те же, то есть
маленькая нейронная сеть будет всего одна, входов у нее будет всего 5×5 = 25, а из
каждой картинки для нее может получиться очень много разных входов.
Затем результаты этой нейронной сети опять можно будет представить в ви-
де «картинки», заменяя окна 5 × 5 на их центральные пикселы, и на ней можно
будет применить второй сверточный слой, с уже другой маленькой нейронной се-
тью, и т. д. Скоро мы увидим, что в каждом сверточном слое будет совсем немного
свободных параметров, особенно по сравнению с полносвязными аналогами.

5.2. Свертки и сверточные сети 185

Прежде чем переходить непосредственно к формальным определениям опера-
ции свертки, давайте разберемся с понятием канала в изображении. Обычно цвет-
ные картинки, подающиеся на вход нейронной сети, представлены в виде несколь-
ких прямоугольных матриц, каждая из которых задает уровень одного из цветовых
каналов в каждом пикселе изображения. Картинка размером 200 × 200 пикселов —
это на самом деле 120 000 чисел, три матрицы интенсивностей размером 200 × 200
каждая. Если изображение черно-белое, как, например, в MNIST, то такая матри-
ца будет одна. А если это не простая картинка, а, скажем, результат изображающей
масс-спектрометрии, когда в каждом пикселе находится целый спектр, то матриц
может быть очень много. Но в любом случае мы будем предполагать, что в каждом
пикселе входного изображения стоит некоторый тензор (обычно одномерный, то
есть вектор чисел), и его компоненты называются каналами (channels).
Такие же матрицы будут получаться и после сверточного слоя: в них по-
прежнему будет пространственная структура, соответствующая исходной картин-
ке (но не в точности такая же — скоро об этом поговорим), однако каналов теперь
может стать больше. Значения каждого признака, которые мы выделили из окон
в исходном изображении, теперь будут представлять собой целую матрицу. Каж-
дая такая матрица называется картой признаков (feature map). В принципе, каналы
исходного изображения можно тоже называть картами признаков; аналогично мы
часто будем называть карты признаков очередного слоя каналами.
Теперь осталось только формально определить, что же такое свертка и как
устроены слои сверточной сети. Свертка — это всего лишь линейное преобразо-
вание входных данных особого вида. Если xl — карта признаков в слое под номе-
ром l, то результат двумерной свертки с ядром размера 2d + 1 и матрицей весов W
размера (2d + 1) × (2d + 1) на следующем слое будет таким:

l
yi,j = Wa,b xli+a,j+b ,
−d<=a,b<=d
l — результат свертки на уровне l, а xl — ее вход, то есть выход всего преды-
где yi,j i,j
дущего слоя. Иначе говоря, чтобы получить компоненту (i,j) следующего уровня,
мы применяем линейное преобразование к квадратному окну предыдущего уров-
ня, то есть скалярно умножаем пикселы из окна на вектор свертки. Это проиллю-
стрировано на рис. 5.1: мы применяем свертку с матрицей весов W размера 3 × 3
к матрице X размера 5×5. Обратите внимание, что умножение подматрицы исход-
ной матрицы X, соответствующей окну, и матрицы весов W — это не умножение
матриц, а просто скалярное произведение соответствующих векторов. А всего окно
умещается в матрице X девять раз, и получается
 
0 1 2 1 0    
 4 1 0 1 0 0 1 0 9 5 4
 
2 0 1 1 1 ∗ 1 0 1 = 8 8 10 .
 
 1 2 3 1 0 2 1 0 8 15 12
0 4 3 2 0

186 Глава 5. Сверточные нейронные сети и автокодировщики, или Не верь глазам своим

Рис. 5.1. Пример подсчета результата свертки: два примера подматрицы и общий
результат

Здесь мы обозначили свертку карты признаков X с помощью матрицы весов W
через X ∗ W , как принято обозначать свертку в математике.
Если размер свертки будет выражаться четным числом, то в одном из случа-
ев в пределах суммирования неравенство станет строгим; здесь больше нет «есте-
ственного» выбора для центра окна, и его выбор из четырех вариантов может зави-
сеть от реализации в конкретной библиотеке.
Это преобразование обладает как раз теми свойствами, о которых мы говорили
выше:
• свертка сохраняет структуру входа (порядок в одномерном случае, взаимное
расположение пикселов в двумерном и т. д.), так как применяется к каждому
участку входных данных в отдельности;
• операция свертки обладает свойством разреженности, так как значение каж-
дого нейрона очередного слоя зависит только от небольшой доли входных
нейронов (а, например, в полносвязной нейронной сети каждый нейрон за-
висел бы от всех нейронов предыдущего слоя);
• свертка многократно переиспользует одни и те же веса, так как они повторно
применяются к различным участкам входа.
Почти всегда после свертки в нейронной сети следует нелинейность, которую
мы можем записать так:
l l
zi,j = h(yi,j ).
В качестве функции h часто используют ReLU, особенно в очень глубоких сетях,
но и классические σ и tanh тоже встречаются. Подробно останавливаться на типах
нелинейностей, использующихся в сверточных сетях, мы сейчас не будем; наша
первоочередная задача — сформировать интуиции по поводу сверточных сетей.

5.2. Свертки и сверточные сети 187

Прежде чем двигаться дальше, продемонстрируем, как свертки работают на
практике, на численном примере в TensorFlow. Начнем, как обычно, с импорти-
рования TensorFlow и numpy:
import tensorflow as tf
import numpy as np

Поскольку мы никакую модель обучать не планируем, в качестве переменных
будет достаточно определить «заглушки» заданного размера:
x_inp = tf.placeholder(tf.float32, [5, 5])
w_inp = tf.placeholder(tf.float32, [3, 3])

Давайте теперь создадим сверточный слой на TensorFlow. Все, что нужно знать
для этого, мы уже знаем: сверточный слой должен брать скользящие окна из исход-
ного изображения и применять к ним одни и те же веса. Свертка у нас двумерная,
то есть «скользящее окно» — это квадратик размером в несколько пикселов; оста-
лось только разобраться, как это задать в коде.
Чтобы определить свертку, сначала нужно разобраться с размерностями тен-
зоров. В TensorFlow двумерные свертки реализуются с помощью функции conv2d,
которая принимает на вход тензор сверточных весов и тензор карт признаков на-
бора изображений... ох, звучит как кеннинг1 . Дело в том, что входные данные для
двумерной свертки в TensorFlow должны иметь четырехмерную структуру, кото-
рая выглядит так:

[размер батча, высота, ширина, каналы].

Например, если мы используем мини-батчи размером 32 изображения в каж-
дом и обучаем сеть на RGB-изображениях лиц размером 28 × 28 пикселов, то ито-
говая размерность тензора данных будет [32, 28, 28, 3]: если перемножить все раз-
мерности, получится, что каждый мини-батч, подающийся на вход сети, содержит
около 75 тысяч чисел! Каждое изображение при этом представлено 28 × 28 × 3 =
= 2352 вещественными числами.
А размерность тензора сверточных весов определяется размерами ядра свертки
и числом каналов как на входе, так и на выходе; получается снова четырехмерный
тензор, который на этот раз нужно интерпретировать следующим образом:

[высота, ширина, входные каналы, выходные каналы].

1 В скальдической поэзии использовали стандартные метафоры, которые по-русски передаются су-

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

188 Глава 5. Сверточные нейронные сети и автокодировщики, или Не верь глазам своим

Например, для фильтра размером 3 × 3, применяемого к тому же самому трех-
канальному изображению и дающему на выходе 32 карты признаков, мы получим
тензор размерности [3, 3, 3, 32], в нем будет всего 3 × 3 × 3 × 32 = 288 весов. А на
выходе эти веса, если мы будем предполагать, что в картинку 28×28 пикселов поме-
щается 26×26 окон 3×3, превратят входную картинку в 26×26×32 = 21 632 числа,
а это значит, что в полносвязной сети для аналогичной операции потребовалась бы
матрица размером 28 × 28 × 21 632 = 16 959 488 весов — разница в пятьдесят тысяч
раз!
Конечно, эта разница получается исключительно из-за того, что мы переис-
пользовали одни и те же веса много раз. В реальности выходит, что сама форма опе-
рации свертки служит очень сильным регуляризатором, который выражает идею
о том, что выделение локальных признаков в изображении не должно зависеть от
конкретного места, где эти признаки располагаются. И, безусловно, такая огром-
ная разница в требующемся числе весов приводит к тому, что процесс обучения
сети тоже сильно упрощается.
На этом месте читателю может показаться, что и качество итоговой модели
в случае использования сверточных слоев может пострадать по сравнению с пол-
носвязными слоями: в конце концов, много параметров — это хорошо? Однако, как
показывает практика, верно прямо обратное: сверточные сети почти всегда оказы-
ваются существенно лучше полносвязных в задачах, связанных с компьютерным
зрением и, вообще говоря, обработкой входов, для которых выполняется основное
предположение сверточных сетей о «локальности»: входы расположены в виде сет-
ки той или иной размерности, и признаки нужно выделять из небольших подмно-
жеств входов, расположенных близко в этой сети.
Впрочем, интуиция здесь тоже довольно понятная. Заменяя полносвязный
слой сверточным, мы убиваем сразу двух зайцев:
• добавляем в явном виде предположение о том, что признаки нужно выделять
локально, а также явно добавляем «геометрию» входа — сети больше не нуж-
но самостоятельно выучивать эту геометрию;
• для локальной сети, которая призвана выражать эти локальные признаки,
резко увеличиваем объем данных на входе: теперь для нее фактически каж-
дая картинка превращается в кучу маленьких тренировочных примеров.
Осталась только одна проблема: один сверточный слой никак не сможет вы-
разить взаимосвязь между пикселами, расположенными далеко друг от друга. Это
действительно так, и чтобы решить эту проблему, мы будем строить глубокие свер-
точные сети; но об этом чуть позже, а пока вернемся к коду.
Итак, операция свертки в TensorFlow оперирует четырехмерными тензорами,
а не обычными матрицами, поэтому входные данные нужно привести к соответ-
ствующим размерностям:
x = tf.reshape(x_inp, [1, 5, 5, 1])
w = tf.reshape(w_inp, [3, 3, 1, 1])

padding="SAME") Как легко догадаться. strides=[1. все окна должны уместиться внутри входного массива. • padding="SAME" приведет к тому. 1]. w. а два пиксела «рамки» не смогут стать центрами сверточных фильт- ров. б). как быть с окнами. padding="VALID") x_same_half = tf. 1]. теперь на выходе размер изображения не изменится. strides=[1. нам будет достаточно одной черно-белой картинки. 1. Этот аргумент может принимать два разных значения (рис.2.conv2d создает сверточный слой. которые «вылезают» за границы входного массива. а не 28 × 28 (рис. Свертки и сверточные сети 189 Рис. . Теперь можно задавать саму операцию свертки: x_valid = tf. что будут применяться свертки только на тех окнах. 5.nn. strides=[1.nn. в нашу картинку размером 28×28 поместятся только 24×24 окон раз- мера 5×5. 1. 1.2. w. padding="VALID") x_same = tf. 2. 1].nn. 5. Примеры расположения двумерных сверточных окон c центрами в каждом третьем пикселе по обеим осям: а — padding="VALID". 2. strides=[1. и следующий слой будет иметь размер 24 × 24. чем был на входе. padding="SAME") x_valid_half = tf.nn.conv2d(x.2): • padding="VALID" приведет к тому. просто некоторые значения у них будут заведомо нулевыми (рис. Аргумент padding гово- рит. а). w. 1. которые полностью помещаются в пределах входного массива.2.conv2d(x. 5.conv2d(x. 5.nn. 1]. а последняя — число каналов изображения. что первая размерность тензора x обозначает количество изображе- ний в мини-батче. w. б — padding="SAME". а для выходящих за границы массива мы просто дополним входной массив нулями. а пикселы из «рамки» тоже ста- нут центрами сверточных фильтров. на- пример.2. в качестве первых двух параметров получая на вход изображение и фильтр. 2. окна могут выходить за рамки массива Напомним.5. что размер массива на выходе станет меньше. 2. что размер слоя сохранится.conv2d(x. Так как мы всего лишь хотим проиллюстрировать описанную выше теорию. tf. это значит.

5. 1. 3. а с интервалом в три пиксела. что параметр strides просто определяет.2.array([[0. 5.3. наша «модель» задана. для strides=[1. 0. 1. Штриховка показывает. как показано на рис. а на рис. если бы мы подали на вход strides=[1. Сверточные нейронные сети и автокодировщики. Запишем входные данные: x = np.1].conv2d вряд ли есть смысл задавать strides с нееди- ничной первой компонентой (или пропускать часть цветовых фильтров в четвер- той компоненте). 2. 5 9 2 Итак.190 Глава 5. когда будем обсуждать операцию субдискретизации). например. первая компонента strides со- ответствует разным примерам в мини-батче. 0]. а размерностей этих у него в данном случае четыре. какие пикселы являются центрами окон. Поэтому. в нашем численном примере для padding="SAME" получится:   0 0 0 0 0 0 0   0 0 1 2 1 0 0 5 11 4 3 3     0 4 1 0 1 0 0 0 1 0 3 9 5 4 4     0 2 0 1 1 1 0 ∗ 1 0 1 =  3   5 8 8 10 . 0]. Обратите внимание. окна были бы не все возможные. 1] мы будем пропускать каждую вторую размерность и по стро- кам. [1. которые мы вычисляли выше. 0]. и по столбцам. меняя параметр strides. 0 1 2 3 1 0 0 2 1 0 4 8 15 12 6   0 0 4 3 2 0 0 5 5 9 4 2 0 0 0 0 0 0 0 Аргумент strides задает шаг по изображению: например. 0. результат свертки с padding="VALID" будет такой: ( ) 9 4 . 1. [4. 8 12 а с padding="SAME" получится следующее:   5 4 3 5 8 3 . [2. В нашем примере. В данном случае это выглядит странно. или Не верь глазам своим Соответственно. 2. отсюда и «лишние» размерности (мы увидим их пользу чуть ниже. . и если бы она была не равна единице. но аргумент strides в TensorFlow является более общим и может быть применен к любому тензору. 1].2. Например. мы бы просто пропускали часть входных примеров. 1.nn. 1. 1. мы будем просто получать неко- торые подматрицы тех матриц. и для функции tf. 1. как часто мы при- меняем фильтры по каждой размерности входного тензора. 2.3. а два окна для примера выделены дополнительной штриховкой. 2.

1. 205]. :. Но любопытно. поскольку на выходе у нас по-прежнему будут получаться четырехмерные тензоры. [2. :.] [ 5. 0] print "padding=SAME.run( [x_valid. 4. stride 2:\n".Session() y_valid. :. Свертки и сверточные сети 191 [0. y_valid_half. появились в уже упоминавшейся модели Neocognitron.] [ 8. 5. :.] [ 5. :. 9. 8. 3. y_same_half = sess.] [ 5. y_same. 0]. 4. stride 2: [[ 5. 0. 3. а мы хотели бы уви- деть обыкновенные матрицы.]] padding=VALID. 5. 0]]) w = np.] [ 8.] [ 5. Основным это направление стало для группы Яна ЛеКуна [18. :. похожие на современные свертки. 2. x_same_half]. 11. x_valid_half. [1. 0] print "padding=VALID. 12. :. 12. :. 4. 3. что почти одновременно прак- тически такие же модели были разработаны группой японских исследователей под . 3.array([[0. 8. 4. 15. 10. 8. некоторые (тривиальные) размерности мы зафикси- руем нулями: print "padding=VALID:\n". 0]]) Осталось только объявить сессию и вычислить результат: sess = tf. y_valid[0.]] padding=SAME: [[ 5. что у нас получилось.] [ 3. stride 2: [[ 9. 6. 5. 4. 2. 3.] [ 8. а уже в практически современном виде они были применены в конце 80-х годов XX века. 2. y_same_half[0. stride 2:\n". 4. w_inp: w} ) Давайте для проверки выведем то.2. 15. 4.5. 8. 9. 1]. feed_dict={x_inp: x. 4. x_same.]] padding=SAME. 1.] [ 4. 10.]] Исторически первые идеи. 8. 9. y_valid_half[0. 0] print "padding=SAME:\n". 12. 0] И теперь на выходе получаются вполне ожидаемые результаты: padding=VALID: [[ 9. y_same[0. 3.

что наличие или отсутствие того или иного признака гораздо важнее. поэтому дальше. что нейро- ны в зрительной коре поступают именно так. Сверточные нейронные сети и автокодировщики. их работа получила название «нейронная сеть.j = max l zi+a. Иногда встречаются и другие опера- ции субдискретизации. но зато сократив размерность. Поэтому можно поз- волить себе «обобщить» выделяемые признаки. j+b . 471]. К со- жалению. когда мы бу- дем говорить просто о «субдискретизации». а не максимума. применить ту или иную нелинейную функцию h: она будет просто при- меняться к каждому элементу полученного тензора по отдельности. −d≤b≤d 1 Ударение здесь на первый слог. Смысл субдискретизации прост: в сверточных сетях обычно исходят из пред- положения. а по некоторому его случайному подмножеству. и вряд ли он когда-нибудь решится окончательно. В классическом сверточном слое. от альтернативного английского термина subsampling. что первые конструкции группы ЛеКуна использовали для субдискретизации взятие среднего [18. но на самом деле оно вполне могло бы стоять и на втором. 492]. или Не верь глазам своим руководством Вея Чжана [411. мы научились делать операцию свертки. 205]. потеряв часть информации об их местоположении. кроме линейной свертки и следующей за ней нелинейности. по-русски ее иногда называют еще операцией «подвыборки». можно сказать. в которых проводилось срав- нение. . что они предложили брать максимум не по всему окну. и характерно.192 Глава 5. что выше) так: xl+1 i. обычно выступали в пользу max-pooling [306. пожалуй. при распознавании лиц сверточной сетью нам гораздо важнее понять. как мы уже говорили. встречается и слово «пулинг». Исследования. Итак. и формально станем определять субдискретизацию (в тех же обозначени- ях. но добуквенных калек1 в на- шей книге. что в качестве оптимальной альтернативы авторы предложили промежуточный вариант между максимумом и средним: не вдаваясь в детали.. −d≤a≤d. Например. чем его точные координаты. такая субдис- кретизация опять восходит еще к работам Хьюбела и Визеля. сверточные сети известны очень давно. Однако именно максимум встречается на практике чаще всего и для большин- ства практических задач дает хорошие результаты. А в работе [57] подроб- ное сравнение разных операций субдискретизации привело к тому. чем узнать. и так уже многовато). ведь прибывают все новые англоязычные термины. Обычно в качестве операции субдискретизации к каждой локальной группе нейронов применяется операция взятия максимума (max-pooling). с какого конкретно пиксела оно начинается и в каком заканчивается. мы будем иметь в виду именно max- pooling. Но это еще не все. инвариантная к сдвигу» (shift-invariant neural network) и тоже неоднократно при- менялась к распознаванию образов [243]. После нее можно. и похоже. русскоязычная терминология — это пока очень больной вопрос для современного машинного обучения. есть ли на фотографии лицо и чье. есть и еще одна операция: субдискретизация (pooling..

например.placeholder(tf. Хотя в результате субдискретизации действительно теряется часть информа- ции. 2.3.max_pool. Пример субдискретизации с окном размера 2 × 2: а — исходная матрица.nn. Он тоже представ- ляет собой четырехмерный тензор. для d = 2 эта ситуация проиллюстрирована на рис. сеть становится более устойчивой к небольшим трансформациям изображе- ния вроде сдвига или поворота. 4. нас интересует слу- чай. что здесь появился не только аргумент strides. как и в случае с операцией свертки. в каждом из которых мы выби- раем максимум. 1]. по которым берется максимум с шагом 2. 2. 1]. 2.nn. мы попробуем размеры шага 1 и 2: x_valid = tf. который мы уже обсуждали. 2.float32. когда шаг субдискретизации и размер окна совпадают. Штриховка в исходной матрице а — соответствует окнам. 2. ksize=[1.3. сначала зададим заглушку для входного «изображения» и приведем ее к нужной размерно- сти: x_inp = tf. 4]) x = tf.reshape(x_inp. strides=[1. б — матрица после субдискретизации с шагом 1. в части в — результат показан соответствующей штриховкой Здесь d — это размер окна субдискретизации. [4. включая элементы мини-батчей и каналы. в — матрица после субдискретизации с шагом 2. 1].max_pool(x. padding="VALID") Обратите внимание. 5. в. 1]) Теперь можно определять операции субдискретизации с помощью специаль- ной функции tf. 1. Свертки и сверточные сети 193 Рис. Это может опять показаться несколько странным. 1]. Как правило. ksize=[1. то есть субдискретизацию можно проводить по любым размерностям. что может означать субдискретизация . 1.2.5. Чтобы сделать все это в TensorFlow. 2. то есть получаемая на вход матрица делится на непересекающиеся окна. strides=[1. padding="VALID") x_valid_half = tf.max_pool(x. 4. [1. но и отдельно задаваемый размер окна ksize.nn. 5.

которая обычно сокращает геометрический размер полу- чающихся тензоров. В та- ком случае мы можем решить. stride 2: [[ 4. 1]. зеленого или синего цвета. 3. Для этого объявим входную матрицу. 3. есть ли на дан- ной фотографии попугай особого RGB-семейства. но и на каналах изображения. 5. 1. 3. 0] Полученный выход опять ожидаем — в результате мы получили матрицы. Тогда субдискретизация по каналам (если кадры соответствуют каналам) или мини-батчам (если входным примерам) внезапно становится очень осмысленной: соседние кадры почти всегда очень похожи. 2. 2. 2. [4. Доведем наш эксперимент до конца. 1. :. чтобы нейронная сеть могла как можно раньше избавиться от заведомо нерелевантных цветовых каналов.3: padding=VALID: [[ 4. feed_dict={x_inp: x} ) print "padding=VALID:\n". примененная покомпонентно к результатам свертки.194 Глава 5. Звучит странно. 0] print "padding=VALID.] [ 2. 3. но давайте попробуем теперь предположить.array([[0. • нелинейная функция. 1]. 1]]) y_valid. Сверточные нейронные сети и автокодировщики. про- изведем вычисления и выпишем результат: x = np. :. y_valid_half[0.]] Итак.run( [x_valid. подведем промежуточный итог. [1. 2.] [ 2. :. [2. • субдискретизация. 1. . y_valid_half = sess. то большую часть кадров можно спокойно выбросить. например для того. y_valid[0. 0. а видео в виде последова- тельных кадров. или Не верь глазам своим по каналам? Предположим. stride 2:\n".]] padding=VALID. 0. x_valid_half]. и если наша цель — рас- познать присутствие каких-то объектов в видео. что перед нами стоит задача проверить. 1]. 1.] [ 4. 2. 1. что есть смысл использовать субдискретизацию не только на пространственных измерениях. представители которого быва- ют только монохромными: идеального красного. выделяющая локальные признаки. что на входе не отдельные фотографии. Стандартный слой сверточной сети со- стоит из трех компонентов: • свертка в виде линейного отображения. изоб- раженные на рис. :.

указывая размерности.2. максимальному. то есть как. 5.4 мы изобразили такой слой в виде. Теперь о том. 5. в котором он представлен на стан- дартных изображениях сверточных сетей в статьях и руководствах. Чтобы провести итерацию обучения.j а остальные получат нулевой градиент. и на этом их обучение (на данном трениро- вочном примере!) можно будет считать законченным. ведь из всех элементов окна субдискретиза- l частная производная ∂E относится только к одному. ции zi. 5. мы будем обучать сверточную сеть? Предположим.j . а h′ (yi. Через функцию взятия максимума ошибка проходит без изменений.5. Свертки и сверточные сети 195 Рис. слой суб- дискретизации ничего не обучает.j ∂E l = l l = l h′ (yi.j ∂zi.j l ) можем легко подсчитать. ∂yi. так что рисуют обычно две части: сна- чала свертку.j ∂zi. Как будут прохо- дить градиенты в обратную сторону через сверточный слой. что мы оптимизируем неко- торую функцию ошибки E и уже знаем ее значения на выходах нашего сверточного слоя.j l+1 ∂xi. за которой следует субдискретизация На рис. Однако он делает проходящие по графу вы- числения градиенты разреженными.4.j ∂yi. что по сравнению с «картинкой» на входе размерность тензора увеличилась: сверточная сеть обычно обучает сразу несколько карт признаков на каждом слое (на рис. собствен- но. потом субдискретизацию. как через них выражают- ся значения градиентов функции ошибки от весов. нужно понять.4 таких карт три). Пропускать через нелинейность мы тоже уже хорошо умеем: в обозначениях выше получится: l ∂E ∂E ∂zi. Схема одного слоя сверточной сети: свертка. ∂zi.j и здесь ∂E l мы уже знаем. как обучить такие чудесные карты признаков.j l ). Отдельно ри- совать нелинейность большого смысла нет. Обратите внима- ние.

j−b ∂xi. В какой-то момент точность превысила 99 %. и совре- менные модели для анализа изображений сравниваются на совсем других датасетах. которая в конце 1990-х годов показала блестящие результаты на датасете MNIST для распознава- ния рукописных цифр1 . которые совмещали выделенные сверточными слоями локальные признаки и выдавали собственно ответ.j i j ∂yi−a. что обратный проход для свертки оказался очень похож на.j l ∑∑ ∂E l = l l = l−1 . В случае. как «слева»/«справа» 1 Для своего времени. Некоторая сложность здесь состоит в том. А теперь можно построить глубокую сеть из таких слоев. набор данных MNIST понемногу потерял свое значение для переднего края моделей распознавания об- разов.196 Глава 5. свертку с теми же весами wa.j−b Вот и все: мы адаптировали процедуру обратного распространения ошибки. Мы просто будем использовать выход очередного слоя как вход для следующего. Для полноты картины осталось только пропустить градиенты на предыдущий слой. Конечно. при котором фильтр имеет центр и выражает такие отношения. Это тоже несложно: ∂E ∑∑ ∂E ∂yi−a. а разные карты признаков будут служить каналами. Прежде чем переходить к практике. Размер слоя за счет субдискретизации бу- дет постепенно сокращаться. и каждый участвует во всех выходах. Минимальный размер. Заметим еще. а не только маленькое окошечко из него. что и в прямом проходе. она же обратный проход по графу вычислений. только с развернутыми осями. так что сумма получится достаточно большая: ∂E ∑ ∑ ∂E ∂yi. последнее замечание об окнах сверточных слоев.b i j ∂zi+a.j ∂wa. обратный проход можно считать в точности такой же сверткой.b . затем осталось около 40 ошибок из 10 000 примеров в валидационном множестве MNIST. После двух конструкций из свертки и субдискретизации в сети LeNet-5 следовали три полносвязных слоя с последовательно уменьшаю- щимся числом нейронов. что все веса делятся. то где индексы i и j пробегают все элементы картинки на промежуточном слое yi. которые нужно уметь обу- чать. что начиная с LeNet и ее более поздних вариантов. и в конце концов последние слои сети смогут «оки- нуть взглядом» весь вход. ∂wa. и речь шла буквально о том. это уже не имеет большого практического значения. опять же. Но надо сказать. когда изображение дополняется нулями по необходимости и размерности сохраняются. но до субдискретизации.j+b l .b . для сверточного слоя. конечно. .j a b ∂yi−a. только вместо i + a и j + b теперь i − a и j − b.j−b ∑∑ l ∂E l = l l = l wa. или Не верь глазам своим А на сверточном уровне наконец-то появляются веса. Именно такая архитектура была применена в знаменитой сети LeNet-5 [188]. В литературе эти окна называются фильтрами.b i j ∂y i. ∂xi. чтобы улучшить распознавание на данных конкретных примерах. Сверточные нейронные сети и автокодировщики.j есть после свертки.

который упрощенно. станет ясно. что проис- ходит при реальной обработке изображений сверточными сетями. размер 3 × 3. что она сильнее всего активируется. это значит. а сейчас отметим чуть более экзотический вид сверток: свертки с фильтрами. в частности. первая карта признаков «ищет» диа- гональную линию из единичек. Теперь. последние две размерности которого обозначают число каналов предшествующего и текуще- го слоя. мы можем привести полно- ценный пример. познакомившись со всеми видами сверток. зеленый и синий цвета.5. Свертки и сверточные сети 197 Рис. — это. Но на самом деле фильтр задается четырехмерным тензором. из пикселов высокой интенсивности (это значит.5: • каждая карта признаков первого слоя выделяет некий признак в каждом окне исходного изображения. когда мы говорим о фильт- рах. 5. точнее. например. Давайте разберемся. К причи- нам этого мы вернемся чуть позже.5. Именно такой размер фильт- ров используется в большинстве современных сверточных архитектур. какой в этом смысл. 1 × 1. мы упоминаем только две размерности. Пример проил- люстрирован на рис. откуда берутся фильтры размером 1 × 1: это просто линейные преобразования из входных каналов в выходные с последующей нелинейностью. когда пикселы на диагонали .2. что в первом сверточном слое «фильтр размера 5 × 5».. передающие соответственно красный. Пример выделения признаков на двух сверточных слоях или «сверху»/«снизу». но вполне адекватно отражает то. Так. сколько каналов мы хотим подать на вход в следующем слое) наборов весов. отвечающие за «рецептивное поле» фильтра. 5. очевидно. при работе с цветными изображениями на вход мы получа- ем три слоя.. что в первом слое есть несколько (столько. Когда мы говорим. Обычно. переводящих тензор размером 5 × 5 × 3 («парал- лелепипед весов») в скаляр. Если это хорошенько осмыслить.

in_channels.5 ок- нами — в одном действительно получается крестик. то есть сильно активированный пер- вый признак первого слоя. Мы не будем подробно их разбирать в этой главе. Конечно. вторая просто активируется на закрашенное окно изображе- ния (чем больше пикселов с высокой интенсивностью. а в другом кроме крести- ка есть еще много «мусора». то есть сильно активированный третий признак первого слов. filter_width. то есть свертка второго слоя — это одно- мерная свертка по каналам (признакам). для этого она объединяет при- знаки. channel_multiplier] И каждый входной канал по отдельности «сворачивается» в channel_multiplier выходных каналов. а третья аналогична первой и ищет другую диагональ. а не по окнам в изображении. она находила бы ещё и «псевдокрестики». а не обязательно в одном и том же окне. то есть суммар- ная активация. играет для этой свертки в минус. • нелинейность в сверточном слое и слой субдискретизации мы в этом примере решили пропустить. отвечающий за крестик. обратите внимание на разницу между двумя выделенными на рис. В TensorFlow реализованы несколько альтерна- тивных видов свертки. получает отрицательную активацию. Функция depthwise_conv2d — свертка «по глубине» — задается тензором следующей размерности: [filter_height. Но сначала — прак- тические упражнения! . – и как можно меньше других активированных пикселов. В этом случае как раз не стоит забывать.4. и за счет второго признака нейрон. однако один пример приведем. • в результате такая сеть действительно находит крестики на исходной картин- ке. тем лучше). Мы поговорим о современных архитектурах сверточных сетей. выделенные на первом слое.198 Глава 5. выраженная во втором признаке первого слоя. – ярко выраженную линию из левого нижнего в правый верхний угол. что интересующийся читатель сможет самостоятельно разобраться с тон- костями. в разделе 5. вот что свертка второго слоя «хочет увидеть» в том или ином наборе признаков: – как можно более ярко выраженную диагональную линию из левого верхнего в правый нижний угол. • а если бы субдискретизация была нетривиальной. • карта признаков на втором слое (для простоты одна) пытается найти на кар- тинке крестик из двух диагональных линий. 5. что мы не просто пре- образуем входные каналы в выходные. так как уверены. или Не верь глазам своим присутствуют). в которых диагональные линии находятся рядом друг с другом. Сверточные нейронные сети и автокодировщики. в которых ино- гда используются и такие экзотические свертки. свертка сквозь все каналы предшествующего слоя не является един- ственным возможным вариантом. а делаем пространственную свертку.

float32. one_hot=True) Этот код скачает датасет MNIST (если вы его еще не импортировали раньше).read_data_sets("MNIST_data/". давайте попробуем применить все это на практике. цифра восемь! — воскликнул Воробьянинов.float32. зеленого и сине- го цветов (RGB).3. Пример: свертки для распознавания цифр Между лопатками великого комбинатора лиловели и переливались нефтяной радугой синяки странных очертаний. Свертки для распознавания цифр 199 5. должны больше влиять друг на друга. Начнем снова с загрузки дан- ных и импорта библиотек: import tensorflow as tf from tensorflow. для кото- рых пространственная структура изображений важна и в которых она постоянно используется. Петров. Это. Е. Для цветной картинки. — А другой цифры нет? — спокойно спросил Остап. На этот раз мы будем применять сверточные сети. соответствующие интенсивностям красного.6. [-1. в которых одна единица на месте нужной цифры. какие из них расположены ближе друг к другу и. что в каждом пикселе сто- ит только одно число. а в четвертой размерности мы указали.reshape(x. 784]) y = tf.examples. Ильф.tutorials. как мы уже объясняли выше. соответственно. формально массив теперь четырехмерный: первая размерность −1 соответствует заранее неизвестному раз- меру мини-батча. .6 мы считали вход просто вектором длины 784. 12 стульев Теперь. 10]) В разделе 3. что. [None. конечно. В этом разделе мы вернемся к распознаванию рукописных цифр из датасета MNIST и попробуем су- щественно улучшить наше решение из раздела 3. например. [None. Поэтому переформатируем входной вектор в виде двумерного мас- сива из 28 × 28 пикселов: x_image = tf. — Первый раз вижу такой синяк.placeholder(tf.1]) Обратите внимание.28. — Честное слово.mnist import input_data mnist = input_data.5.3. когда теоретическая часть сверточных сетей более или менее ясна и мы увидели как абстрактную мотивацию. Зададим заглушки для тренировочных данных: x = tf. так и конкретные примеры сверточных ар- хитектур. И.28.placeholder(tf. а за- тем преобразует правильные ответы из него в one-hot представление: правильны- ми ответами станут векторы размерности десять. и мы полностью теряли информацию о том. сильно осложняло задачу нейронной сети: значения разных пикселов получались совер- шенно независимыми друг от друга. в каждом пикселе могли бы стоять три числа.

которые мы будем обучать. результат свертки сдвигается на одно и то же число. 1]. в какой части картинки будут расположены штрихи.constant(0. Итак. Массив из четырех чисел на входе — это форма тензора. а если бы мы захотели добавить скрытый слой разме- ром 32. осталось только задать свободные члены (biases). как сверточные сети используют дополни- тельную информацию о структуре входов для того. TensorFlow знает сам: conv_1 = tf. Во- вторых. знаем его геометрию и заранее определяем. shape=[32])) Обратите внимание на то. третий отвечает за число входных каналов.1)) Давайте тщательно разберем эту строчку.nn. Итак. сколько чисел задают каждый пиксел: так как датасет черно-белый. определяющие циф- ру 5. пусть на первом слое их будет 32. stddev=0. Сверточные нейронные сети и автокодировщики. как мало у нас здесь переменных: весов на сверточном слое всего 5 · 5 · 1 · 32 = 800. мы должны выбрать раз- мер ядра свертки — для этого примера давайте возьмем ядро размера 5 × 5. 1. к какой именно области изображения он приложен. объединяя массу весов. несмотря на сложную структуру тензора весов. Такое распреде- ление выбрано потому. цветовой канал всего один. то есть с тем. Когда мы в разделе 3.conv2d( x_image. что это именно 5. что можно представить себе как применение 32 разных фильтров.truncated_normal мы уже видели: мы инициализируем веса с помощью обрезанного нормального распреде- ления с заданным стандартным отклонением 0. что с ни- ми делать дальше. Функцию tf. для свободных членов достаточ- но отвести всего 32 переменные: для каждого из 32 фильтров. то на первом слое весов стало бы 784 · 32 = 25 088. можно создавать переменные для весов свертки: W_conv_1 = tf. как здесь. 32]. двигая наше окно-фильтр по исходному изображению. мы на выходе получаем вместо одного значения столбик из 32 значений. чтобы делать такую «абсолют- ную регуляризацию».1 и ожиданием 0. весов получалось 784 · 10 = 7840.6 задавали полносвязный слой для работы с теми же MNIST-изображениями. с весами разобрались. что гораздо больше. что мы планируем в качестве функции активации исполь- зовать ReLU.truncated_normal([5. 5. нам нужно определиться с числом фильтров. который мы инициализируем с помощью нормального распределения. W_conv_1. 1.200 Глава 5. что хотели бы обрабатывать каждое окно в изображении одними и теми же фильтрами: нам все равно. а не 8. в-третьих.Variable(tf. независимо от того.Variable(tf. а четвертый опре- деляет собственно число выходных каналов. И. нужно просто распознать. b_conv_1 = tf. strides=[1. По сути. Это яркая иллюстрация того. мы уже разобрались с числом ка- налов в нашем изображении. Теперь у нас определены переменные для всех весов сверточного слоя. Первые два параметра задают размер ядра. или Не верь глазам своим Дальше нужно создать сверточный слой. Во-первых. Мы знаем. что изображение имеет двумерную структуру. 1. да еще 32 свободных члена.1. padding="SAME") + b_conv_1 .

1. Параметры strides и padding обозначают здесь то же самое. что мы дважды применили субдискрети- зацию и при этом в последнем слое использовали 64 фильтра.relu(conv_1) Итак. который выдаст от- вет. Параметр ksize здесь как раз и задает размер этого ок- на.nn. strides=[1.nn. padding="SAME") Функция tf. Но для начала нам нужно из двумерного слоя сделать плоский.nn. 64]. shape=[64])) conv_2 = tf. ksize=[1. в TensorFlow это делается функцией reshape: h_pool_2_flat = tf. задача которых состоит в том. W_conv_2. 1].max_pool( h_conv_2. осталось только добавить слой субдискретизации: h_pool_1 = tf.reshape(h_pool_2.constant(0.max_pool определяет max-pooling слой. давайте по той же схеме. 2. 2.1)) b_conv_2 = tf. Можно да- же задать первую размерность −1. Он имеет ту же структуру. что и для сверточно- го слоя. padding="SAME") + b_conv_2 h_conv_2 = tf. [-1. что здесь уже вполне можно представить себе си- туацию. как и собирались.Variable(tf. а функцию активации нам нужно задать самостоятельно потом.max_pool( h_conv_1. 7*7*64]) Число 7 · 7 · 64 возникло из-за того.relu(conv_2) h_pool_2 = tf.conv2d( h_pool_1. 1].nn.nn. когда первая компонента будет не равна единице и мы захотим выбирать «самые подходящие» из нескольких последовательных изображений. 2. 1]. 32. в глубоких нейронных сетях за сверточными слоями следуют пол- носвязные. Свертки для распознавания цифр 201 Сама функция tf.1. strides=[1. 2. 2. Чтобы соблюсти стандартную ар- хитектуру сверточной сети.truncated_normal([5. тогда слой субдискретизации будет выбирать «самое подходящее» изображение из всего мини-батча. что после этого слоя размер изображения в обоих направлениях умень- шится вдвое. что и strides. только в этот раз мы двигаемся по изображению в обе стороны с шагом 2.5. 1. что и выше. выбирая максимальное значение из каждого окна. И теперь осталось .nn. она делает линейную часть работы. чтобы «собрать вместе» все признаки из фильтров и собственно перевести их в самый последний слой. Понятно.conv2d только применяет сверточные фильтры.3. strides=[1. padding="SAME") Как правило. слой фильтров с нелинейностью готов. ksize=[1. Обратите внимание. 2. stddev=0. 2. возьмем ReLU: h_conv_1 = tf. добавим еще один сверточный слой и слой субдискретизации. 2. в этот раз используя на этом слое 64 фильтра: W_conv_2 = tf.nn. Раз весов у нас не так уж и много. 1]. 1]. до 14 × 14. в котором мы выбираем максимальный элемент. 5. В качестве функции активации.Variable(tf.

test.initialize_global_variables() sess = tf.Session() sess. tf. keep_probability: 0.})) >> 0.float32) h_fc_1_drop = tf. в Keras набор данных MNIST можно загрузить средствами самой библиотеки: .train.labels. но в Keras.202 Глава 5. batch_ys = mnist.matmul(h_fc_1_drop. 1)) accuracy = tf. stddev=0.cast(correct_prediction.truncated_normal([1024.run(accuracy. feed_dict={x: mnist.1)) b_fc_2 = tf. y)) train_step = tf. но кода получается заметно меньше.AdamOptimizer(0. shape=[1024])) h_fc_1 = tf. Cуть процес- са.5}) print(sess.matmul(h_pool_2_flat. не меняется.nn.images. shape=[10])) logit_conv = tf.nn.train.test. y: mnist.1.Variable(tf. 1).next_batch(64) sess.softmax(logit_conv) Осталось определить ошибку и ввести оптимизатор: cross_entropy = tf. keep_probability) Теперь добавляем второй.nn. или Не верь глазам своим только добавить полносвязные слои.9906 А теперь давайте для сравнения сделаем то же самое. В этот раз мы не будем подробно расписы- вать добавление полносвязных слоев. Добавляем первый слой из 1024 нейронов: W_fc_1 = tf.reduce_mean(tf.placeholder(tf.reduce_mean( tf.1. W_fc_1) + b_fc_1) Регуляризуем его дропаутом: keep_probability = tf.1)) b_fc_1 = tf.minimize(cross_entropy) В этот раз мы используем алгоритм оптимизации Adam. y: batch_ys.Variable(tf.0001). 10].float32)) И осталось только запустить обучение и дождаться результата: init = tf.Variable(tf.argmax(y.equal(tf. tf.5.truncated_normal([7*7*64.constant(0. 1024].softmax_cross_entropy_with_logits(logit_conv.run(train_step.Variable(tf. конечно.nn. keep_probability: 1.constant(0. Как и в TensorFlow.relu(tf. самый последний слой с десятью выходами: W_fc_2 = tf. feed_dict={x: batch_xs.argmax(y_conv. Оцениваем точность: correct_prediction = tf. Сверточные нейронные сети и автокодировщики.run(init) for i in range(10000): batch_xs. о котором уже говори- ли в разделе 4. W_fc_2) + b_fc_2 y_conv = tf. stddev=0. так как это мы уже не раз делали раньше.dropout(h_fc_1.

Свертки для распознавания цифр 203 from keras.add(Activation("relu")) model.add(Convolution2D(32.utils import np_utils (X_train. img_cols. что аргумент padding в TensorFlow.layers import Convolution2D.datasets import mnist from keras. border_mode="same". для этого слу- жит вспомогательная процедура to_categorical из keras. Activation. можно было бы обучать сеть и на таких данных.add(Convolution2D(64. а аргу- мент input_shape сообщает Keras.to_categorical(y_test. Dropout. y_test) = mnist. но некоторые названия и параметры более узнаваемы. y_train). аргумент border_mode имеет ровно тот же смысл. strides=(2. img_cols = 64. img_rows. Здесь нам потребуются три вспомогательные процедуры. 10) Y_test = np_utils.add(MaxPooling2D(pool_size=(2. Сна- чала инициализируем модель: model = Sequential() Теперь добавим сверточные слои. border_mode="same")) .shape[0]. нужно будет. 10) Теперь пора задавать собственно модель. 2). чтобы подать их на вход сети.astype("float32") X_test = X_test. как в TensorFlow. Во-первых. 2). 5. 5. в отличие от TensorFlow.models import Sequential from keras. 1) input_shape = (img_rows. 28. 2).add(MaxPooling2D(pool_size=(2. input_shape=input_shape)) model.5.load_data() Затем давайте подготовим данные к тому. 2).astype("float32") X_train /= 255 X_test /= 255 В-третьих. 5. MaxPooling2D from keras. img_cols.add(Activation("relu")) model. какой размерности тензор ожидать на входе: model. В Keras это выглядит примерно так же.reshape(X_test. img_rows.to_categorical(y_train.shape[0]. основ- ными аргументами которого являются число фильтров и размер окна. (X_test.layers import Dense. border_mode="same")) model. превратить каждую картинку в двумерный массив: batch_size. как раньше: X_train = X_train. 1) Во-вторых.reshape(X_train. входные данные MNIST в Keras. input_shape=input_shape)) model. 28 X_train = X_train.np_utils: Y_train = np_utils.3. 1) X_test = X_test. как и раньше. img_rows. но давайте для единообразия все-таки приведем их к типу float32 и нормализуем от 0 до 1. strides=(2. img_cols. представля- ют собой целые числа от 0 до 255. border_mode="same". 5. Flatten from keras. переведем правильные ответы в one-hot представление. Нам понадобится слой Convolution2D.

204 Глава 5.fit(X_train.add(Flatten()) model.9830 Epoch 2/10 60000/60000 .val_loss: 0.9922 Epoch 4/10 60000/60000 .add(Dropout(0.acc: 0. чем ему нужно для этого помочь.9950 .9864 .acc: 0.val_acc: 0.val_loss: 0.loss: 0. Y_test)) score = model.5)) model.add(Activation("relu")) model.val_acc: 0.add(Activation("softmax")) И все. verbose=1. чтобы строки помещались в ширину страницы): Train on 60000 samples. batch_size=batch_size. сколько должно быть весов у той или иной сверточной архитекту- ры. Y_train.0164 .9922 . и сам поймет.0320 .9898 Epoch 5/10 60000/60000 .0296 .0436 .loss: 0.9909 .evaluate(X_test.val_acc: 0.0205 .loss: 0.add(Dense(10)) model. optimizer="adam".acc: 0. которые будут затем использоваться в качестве весов или свободных членов в слоях: Keras сам понимает. что была выше. validate on 10000 samples Epoch 1/10 60000/60000 .0313 .9925 . Обратите вни- мание.acc: 0.0170 .compile(loss="categorical_crossentropy".0514 .loss: 0.acc: 0.9928 Epoch 6/10 60000/60000 . Полносвязные слои тоже получаются достаточно просто. или Не верь глазам своим В этом примере мы сохранили ту же архитектуру.0290 .0268 .0131 . nb_epoch=10.0242 .val_acc: 0. можно компилировать и запускать обучение: model.add(Dense(1024)) model.val_loss: 0.val_acc: 0. Y_test. Единственное. Сверточные нейронные сети и автокодировщики. что по ним нужно модель оптимизировать.9621 . тензор какой формы подается ему на вход: model. metrics=["accuracy"]) model.loss: 0.val_acc: 0.loss: 0.reshape. — задать явно размерность input_shape. который называется Flatten и способен сам понять. теперь отве- чает дополнительный «слой».val_acc: 0.loss: 0.0239 .val_loss: 0. что в Keras нам не нужно отдельно инициализировать переменные.acc: 0.1262 . которое в TensorFlow делалось функцией tf. verbose=0) print("Test score: %f" % score[0]) print("Test accuracy: %f" % score[1]) На выходе получится примерно такая картина (мы сокращаем вывод. validation_data=(X_test.9936 Epoch 7/10 60000/60000 . За «переформатиро- вание» тензора.9944 .val_loss: 0.9892 Epoch 3/10 60000/60000 .val_loss: 0.val_loss: 0.acc: 0.9959 .

3. функция ModelCheckpoint из модуля keras.5. и нам хотелось бы в итоге ис- пользовать веса модели после шестой эпохи. имя которого подается на вход. а затем вы- брать файл.9973 . monitor="val_acc". сохранять веса модели в файл.9920 Epoch 9/10 60000/60000 . что лучшие значения метрик качества на валидационном множестве получаются где-то в начале процесса обучения. что в Keras все это можно выразить буквально в аргументах функции fit! Вот как обычно выгля- дит запуск обучения сложных моделей на практике: model.val_loss: 0. ошибка на валидационном множестве только растет. соответствующий самой лучшей эпохе.val_loss: 0.hdf5. А па- раметр save_best_only=True позволяет после каждой эпохи проверять метрику ка- чества. которая после каждой эпохи обучения сохраняет мо- дель в файл.03208116913667295 Test accuracy: 0.36 % на валидационном множестве. . mode="auto")].acc: 0. заданную в параметре monitor (в данном случае val_acc. но в целом на прак- тике часто бывает так.1. если эта метрика улучшилась. запускаемые после каждой эпохи обучения.fit(X_train.acc: 0.loss: 0.0259 . конечно. и перезаписывать сохраняемую модель только в том случае. batch_size=64) Здесь аргумент callbacks позволяет задать функции. написать цикл по эпохам обучения. о чем мы сейчас говорим.val_acc: 0.loss: 0. Так. save_best_only=True.9915 Test score: 0. Можно.callbacks — это вспомогательная процедура. Кстати. достигая в данном случае точности в 99.0331 . Y_train. проверять в этом цикле ошибку на валидационном множестве. такая же сеть в Keras и работает примерно так же. Обратите также внимание на параметр validation_split: если у вас нет заранее выделенного тренировочного и тестового 1 Для этой модели и датасета MNIST оверфиттинг вряд ли очень уж вероятен.0321 . что после этого у модели начался легкий оверфиттинг1 . save_weights_only=False. Не исключено. validation_split=0. то есть точность на валидационном множестве). Свертки для распознавания цифр 205 Epoch 8/10 60000/60000 . Обратите внимание. а можно воспользовать- ся стандартными. В таких случаях и может пригодиться то. Можно написать эти функции самому.loss: 0.val_acc: 0.0117 . а потом. nb_epoch=10.0096 .15 % на валидационном множестве MNIST. в данном случае model.9963 . в разделе 4.9970 .99150000000000005 Как видите.acc: 0. Но оказывается.hdf5".9903 Epoch 10/10 60000/60000 .val_acc: 0. этот пример позволяет нам упомянуть еще одну интересную возмож- ность библиотеки Keras. callbacks=[ ModelCheckpoint("model.val_loss: 0. а не после десятой.1 мы уже обсуждали этот бесхитростный метод «регуляризации» — раннюю остановку (early stopping). что после шестой эпохи результат получался даже лучше: 99. хотя ошибка на тренировочном множестве продолжает па- дать.0103 .

в частности. . то есть содержать больше слоев. Л. такие слои тоже позволяют до- бавить дополнительную нелинейность в сеть. наличие дополнительной нелинейности между слоями позволя- ет увеличить «разрешающую способность» по сравнению с единственным слоем с большей сверткой. что делает VGG самой «старой» из моделей. для того чтобы это было правдой. в то время как весов у них будет всего 27. чтобы ввести в сеть свертки размером 1 × 1. Это значит. стала идея использовать фильтры размером 3 × 3 с единичным шагом свертки вме- сто использовавшихся в лучших моделях предыдущих лет сверток с фильтрами 7 × 7 с шагом 2 [407. три века назад? П. выступали там под кодовым названием VGG. что VGG мо- жет стать более глубокой. и их модели. движется сейчас анализ изображений. Причем это не просто утвер- ждение из разряда «мы попробовали. или Не верь глазам своим подмножеств (у нас они были сразу в датасете MNIST). Во-первых. Конечно. то иногда приходится с недоумением взглянуть на дату издания: не попался ли случайно в руки листок. не меняя размер рецептивного поля. представленных в этом разделе. и стало лучше». Современные сверточные архитектуры Когда читаешь газеты и журналы за последнее время. 5. Сверточные нейронные сети и автокодировщики. как развиваются современные сверточные ар- хитектуры и куда. при этом одновременно уменьшая общее число весов. Название происходит от того. писанный тому два. рецептивное поле трех подряд идущих сверточных слоев размером 3×3 имеет размер 7×7. Лавров. Этот же аргумент можно использовать как мотивацию для того.4. Одной из самых популярных глубоких сверточных архитектур явля- ется модель. между со- ответствующими сверточными слоями не должно быть