
Прямо сейчас я могу открыть Google Фото, набрать «пляж» и посмотреть свои фотографии с разных пляжей, которые я посетил за последнее десятилетие. Я никогда не просматривал свои фотографии и не отмечал их; вместо этого Google определяет пляжи на основе содержания самих фотографий. Эта, казалось бы, обыденная функция основана на технологии, называемой глубокими сверточными нейронными сетями, которая позволяет программному обеспечению понимать изображения сложным способом, который был невозможен с помощью предыдущих методов.
В последние годы исследователи обнаружили, что точность программного обеспечения становится все лучше и лучше, поскольку они строят более глубокие сети и накапливают большие наборы данных для их обучения. Это создало почти ненасытный аппетит к вычислительной мощности, увеличивая состояние производителей GPU, таких как Nvidia и AMD. Google несколько лет назад разработал собственный собственный чип нейронной сети , и другие компании стремятся последовать примеру Google.
Например, в Тесла компания взяла на себя ответственность за свой проект автопилота эксперта по глубокому обучению Андрея Карпати. В настоящее время автопроизводитель разрабатывает специальный чип для ускорения работы нейронной сети для будущих версий Autopilot. Или возьмите Apple: чипы A11 и A12, лежащие в основе последних iPhone, содержат «нейронный движок», ускоряющий работу нейронной сети и позволяющий лучше распознавать изображения и голоса.
Эксперты, с которыми я разговаривал в этой статье, прослеживают нынешний бум глубокого обучения в одной конкретной статье: AlexNet, по прозвищу ведущего автора Алекса Крижевского.
«На мой взгляд, 2012 год стал вехой, когда вышла эта статья AlexNet», — сказал Шон Джерриш, эксперт по машинному обучению и автор книги « Как думают умные машины» .
До 2012 года глубокие нейронные сети были чем-то вроде затона в мире машинного обучения. Но затем Крижевский и его коллеги из Университета Торонто подали заявку на конкурс по распознаванию изображений, который был значительно более точным, чем все, что было разработано ранее. Почти за одну ночь глубокие нейронные сети стали ведущей техникой распознавания изображений. Другие исследователи, использующие эту технику, вскоре продемонстрировали дальнейшие скачки в точности распознавания изображений.
В этой части мы углубимся в глубокое изучение. Я объясню, что такое нейронные сети, как они обучаются и почему им требуется так много вычислительной мощности. И затем я объясню, почему определенный тип нейронной сети — глубокие сверточные сети — так замечательно хорош в понимании изображений. И не волнуйтесь — там будет много картинок.
Простой пример с одним нейроном
Фраза «нейронная сеть» все еще может показаться немного туманной, поэтому давайте начнем с простого примера. Предположим, вы хотите, чтобы нейронная сеть решала, должен ли автомобиль двигаться на основе зеленого, желтого и красного света стоп-сигнала. Нейронная сеть может выполнить эту задачу с помощью одного нейрона.

Нейрон берет каждый вход (1 для включения, 0 для выключения), умножает его на свой связанный вес и складывает все взвешенные значения вместе. Затем нейрон добавляет смещение, которое определяет порог для «активации» нейрона. В этом случае, если выходной сигнал положительный, мы считаем, что нейрон «сработал», а иначе — нет. Этот нейрон эквивалентен неравенству «зеленый — красный — 0,5> 0». Если это соответствует истине (то есть зеленый свет включен, а красный свет выключен), то машина должна ехать.
В реальных нейронных сетях искусственные нейроны делают еще один шаг. После суммирования взвешенных входов и сложения смещения нейрон применяет нелинейную функцию активации. Популярным выбором является сигмовидная функция, S-образная функция, которая всегда выдает значение от 0 до 1.
Использование функции активации не изменит результат нашей простой модели стоп-сигнала (за исключением того, что нам нужно будет использовать порог 0,5 вместо 0). Но нелинейность функций активации необходима для того, чтобы нейронные сети могли моделировать более сложные функции. Без функции активации каждая нейронная сеть, какой бы сложной она ни была, была бы сведена к линейной комбинации ее входов. А линейная функция не может моделировать сложные явления реального мира. Нелинейные функции активации позволяют нейронным сетям аппроксимировать любую математическую функцию .
Пример сети
Конечно, есть много способов приблизить функции. Что делает нейронные сети особенными, так это то, что мы знаем, как «обучать» их, используя немного исчисления, кучу данных и массу вычислительной мощности. Вместо того, чтобы человек-программист напрямую проектировал нейронную сеть для конкретной задачи, мы можем создать программное обеспечение, которое запускается с довольно общей нейронной сети, просматривает кучу помеченных примеров, а затем модифицирует нейронную сеть так, чтобы она вырабатывала правильную метку как можно больше помеченных примеров. Надежда состоит в том, что итоговая сеть будет обобщаться, создавая правильные метки для примеров, ранее не входивших в ее обучающий набор.
Процесс достижения этой точки начался задолго до AlexNet. В 1986 году три исследователя опубликовали заметную статью о обратном распространении, методике, которая помогла сделать его математически пригодным для обучения сложных нейронных сетей.
Чтобы понять, как работает обратное распространение, давайте рассмотрим простую нейронную сеть, описанную Майклом Нильсеном в его превосходном онлайн-учебнике по глубокому обучению. Цель этой сети — взять изображение размером 28 × 28 пикселей, представляющее рукописную цифру, и правильно определить, является ли цифра 0, 1, 2 и т. Д.
Каждое изображение имеет 28 × 28 = 784 входных значений, каждое из которых представляет собой действительное число от нуля до единицы, представляющее, насколько светлый или темный пиксель. Нильсен построил нейронную сеть, которая выглядела так:

На этом изображении каждый из кругов в среднем и правом столбцах представляет собой нейрон, подобный тому, который мы рассматривали в предыдущем разделе. Каждый нейрон получает средневзвешенное значение своих входов, добавляет значение смещения, а затем применяет функцию активации. Обратите внимание, что кружки слева не являются нейронами — эти кружки представляют входные значения сети. В то время как изображение показывает только 8 входных кругов, фактически есть 784 входных сигнала — по одному на каждый пиксель входных изображений.
Предполагается, что каждый из 10 нейронов справа «загорается» для другой цифры: верхний нейрон должен срабатывать, когда входное изображение имеет рукописный 0 (и не иначе), второй должен срабатывать, когда сеть видит рукописный текст. 1 (и не иначе) и пр.
Каждый нейрон получает данные от каждого нейрона в слое перед ним. Таким образом, каждый из 15 нейронов в среднем слое имеет 784 входных значения. Каждый из этих 15 нейронов имеет весовой параметр для каждого из 784 входов. Это означает, что один этот слой имеет 15 × 784 = 11 760 весовых параметров. Аналогично, выходной слой содержит 10 нейронов, каждый из которых получает вход от каждого из 15 нейронов в среднем слое, добавляя еще 15 × 10 = 150 весовых параметров. Кроме того, сеть также имеет 25 переменных смещения — по одной для каждого из 25 нейронов.