оригинальныйHow computers got shockingly good at recognizing imagesавторTimothy B. LeeпереводчикЛи Пинхай
Картинки взяты из оригинального текста, если они не отмечены
прикреплен в концеСравнительная таблица профессиональной лексики
Ограничено уровнем профессиональных знаний, если есть неточности в переводе, пожалуйста, оставьте сообщение для исправления.
Теперь я могу ввести слово «пляж» в Google Фото и посмотреть все пляжи, на которых я был в прошлом. Я не управляю своими фотографиями, отмечайте их. На самом деле это Google идентифицирует пляж на основе содержания фотографии. Эта, казалось бы, обыденная функция основана на технологии глубокой сверточной нейронной сети, которая позволяет программному обеспечению понимать изображения сложным способом, недоступным предыдущим технологиям.
За прошедшие годы исследователи обнаружили, что по мере того, как они строят более глубокие сети, накапливая большие наборы данных для их обучения, программное обеспечение становится более точным. Это привело к почти ненасытному спросу на вычислительную мощность, что позволило производителям графических процессоров, таким как Nvidia и AMD, разбогатеть. Несколько лет назад компания Google разработала свой собственный чип нейронной сети, и другие компании последовали его примеру.
Например, в Tesla эксперт по глубокому обучению Андрей Карпати был назначен руководителем проекта по беспилотному вождению. Автопроизводитель разрабатывает специальные чипы для ускорения работы нейронных сетей в будущих версиях беспилотных автомобилей. Другой пример — Apple: чипы A11/A12 в последних iPhone содержат «нейронный движок», который может ускорить работу нейронных сетей, чтобы обеспечить лучшее распознавание изображений/речи в приложениях.
Эксперты, у которых я взял интервью для этой статьи, считают, что сегодняшнее увлечение глубоким обучением можно проследить до профессиональной газеты AlexNet (названной в честь ее ведущего автора Алекса Крижевского).
«На мой взгляд, публикация статьи AlexNet в 2012 году стала важной вехой, — сказал Шон Герриш, эксперт по машинному обучению и автор книги «Как думают умные машины».
До 2012 года глубокие нейронные сети были просто мертвой цементной лужей в области машинного обучения. Но затем Крижевский и его команда из Университета Торонто представили свою работу на крупном конкурсе по распознаванию изображений с прорывной точностью, которая превзошла любую предыдущую технологию. За одну ночь глубокие нейронные сети стали ведущей технологией распознавания изображений. Другие исследователи быстро использовали эту технологию, чтобы повысить точность распознавания изображений.
В этом посте мы углубимся в глубокое обучение. Я объясню, что такое нейронная сеть, как она обучается и почему она требует такой большой вычислительной мощности. Затем я объясню, почему особый тип нейронной сети — глубокая сверточная сеть — так хорошо понимает изображения. Не волнуйтесь, у нас будет много фотографий.
Простой пример с одним нейроном
Термин «нейронная сеть» может быть неоднозначным, поэтому начнем с простого примера. Предположим, вам нужна нейронная сеть, которая решает, может ли машина двигаться, основываясь на красном, зеленом и желтом сигналах светофора. Эта нейронная сеть может сделать это с помощью одного нейрона.
Этот нейрон принимает каждый вход (1 для включения, 0 для выключения), умножает соответствующий вес и добавляет взвешенное значение. Затем нейрон смещается, что определяет порог, при котором нейрон «активируется». При этом, если выходное значение положительное, мы считаем нейрон «активированным», в противном случае он не «активируется». Этот нейрон эквивалентен неравенству «зеленый — красный — 0,5 > 0». Если результат расчета верен, значит горит зеленый свет, красный свет не горит и машина может проехать.
В реальной нейронной сети у виртуальных нейронов был бы дополнительный шаг. После суммирования весов и смещений нейрон вызывает нелинейную функцию активации. Популярным подходом является сигмовидная функция, сигмовидная функция, которая всегда возвращает значение от 0 до 1.
В нашей простой модели светофора использование функции активации не меняет результат (но не 0, в нашем примере мы используем 0,5). Но нелинейность функции активации — это ключ к тому, чтобы нейронные сети могли моделировать более сложные функции. Без функций активации нейронную сеть, какой бы сложной она ни была, можно свести к линейной комбинации входных данных. А линейные функции не могут имитировать сложные реальные явления. Нелинейные функции активации позволяют нейронным сетям более точно аппроксимировать любую математическую функцию.
Пример нейронной сети
Конечно, существует множество способов аппроксимации функций. Нейронные сети особенные, потому что мы знаем, как их «обучить» с помощью нескольких алгоритмов, большого количества данных и большой вычислительной мощности. Мы можем построить подходящую нейронную сеть общего назначения, чтобы заменить нейронную сеть, написанную человеком-программистом для выполнения конкретной задачи. Пролистнув кучу помеченных данных, он модифицирует саму нейронную сеть, чтобы она могла как можно чаще находить правильные метки. Мы хотим, чтобы полученная нейронная сеть была достаточно общей, чтобы правильно маркировать образцы, которых нет в обучающих данных.
Эта работа началась еще до публикации AlexNet. В 1986 году трое исследователей опубликовали знаменательную статью об обратном распространении. Этот метод представляет собой математический метод, который помогает обучать сложные нейронные сети.
Чтобы получить представление о том, как работает обратное распространение, давайте взглянем на простую нейронную сеть, описанную Майклом Нильсеном в его превосходном онлайн-руководстве по глубокому обучению. Цель состоит в том, чтобы заставить нейронную сеть правильно распознавать рукописную цифру (например, 0, 1, 2) на изображении размером 28x28 пикселей.
Каждое изображение имеет 28x28=784 входных значения, каждое из которых 0 или 1 представляет, является ли пиксель темным или светлым. Нильсен построил такую нейронную сеть:
Каждый кружок в среднем и правом слоях на иллюстрации представляет тип нейрона, о котором мы говорили в предыдущем абзаце. Каждый нейрон берет средневзвешенное значение входных значений, добавляет смещение, а затем вызывает функцию активации. Обратите внимание, что кружки в левом слое — это не нейроны, они представляют входные значения. Хотя нарисовано только 8 входных кругов, на самом деле имеется 784 входа, каждый из которых представляет пиксель.
10 нейронов в правом слое представляют собой «горящие лампочки» для угадывания разных чисел: если это 0, то должен быть активирован первый нейрон (остальные нейроны не должны активироваться), а если это 1, должен быть активирован второй нейрон. активированы (остальные не активированы) и так далее.
Каждый нейрон получает входные данные от всех нейронов предыдущего слоя. Таким образом, все 15 нейронов среднего слоя получают 784 входных значения. Каждый из них устанавливает веса для 784 входных значений. Это означает, что в этом слое имеется 15X784=11760 весовых параметров. Аналогично выходной слой имеет 10 нейронов, каждый из которых получает входные значения от 15 нейронов среднего слоя, поэтому весовых параметров на 15*10 больше. При этом во всей сети из 25 нейронов всего 25 смещений.
обучать нейронную сеть
Наша цель — настроить эти 11 935 параметров так, чтобы выходные нейроны, представляющие соответствующие рукописные цифры, подсвечивались как можно точнее. Мы можем тренироваться на известном наборе данных под названием MNIST, который предоставляет 60 000 правильно помеченных изображений размером 28x28 пикселей:
Это изображение является 160 из 60 000 изображений в наборе данных MNIST.Нильсен демонстрирует, как обучить эту нейронную сеть, используя всего 74 строки обычного кода Python, не полагаясь на какую-либо библиотеку машинного обучения. Обучение начинается с выбора 11935 случайных параметров веса/смещения. Программное обеспечение будет перебирать каждый образец изображения, выполняя двухэтапный процесс:
-
На основе входного изображения и текущих параметров сети шаг прямой связи вычисляет выходные значения сети.
-
На этапе обратного распространения вычисляется отклонение результата от правильного выходного значения, а затем изменяются параметры сети, чтобы немного улучшить ее производительность на конкретном входном изображении.
В следующем примере предположим, что сеть получает это изображение:
Если сеть хорошо настроена, выходное значение «7» в сети должно быть близко к 1, а остальные 9 выходных значений должны быть близки к 0. Но предположим, что значение «0» равно 0,8 при получении этого изображения. Это было бы возмутительно! Алгоритм обучения изменяет индивидуальные веса входного «0» выходного нейрона, так что при следующем вводе изображения выходное значение будет ближе к 0.
Для этого алгоритм обратного распространения вычисляет градиент ошибки для каждого параметра веса. Это мера того, насколько выходная ошибка зависит от входных весов. Алгоритм решает, насколько изменить вес каждого входного значения на основе этого градиента — чем больше градиент, тем больше этот параметр изменяется.
Другими словами, этот процесс обучения «учит» выходные нейроны обращать меньше внимания на неправильно ориентированные входы (то есть нейроны в среднем слое) и больше на правильно ориентированные входы.
Алгоритм продолжает повторять этот шаг для каждого выходного нейрона. Это снизит веса на входной стороне нейронов «1», «2», «3», «4», «5», «6», «8» и «9» (кроме нейрона «7»). , что уменьшает значение выходного нейрона. Чем больше входное значение, тем больше градиент ошибки весового параметра, отражающего это входное значение, и, следовательно, тем больше этот вес будет уменьшен.
Аналогичным образом алгоритм обучения будет увеличивать вес входного значения выходного нейрона «7». Пусть этот нейрон выдаст большее выходное значение в следующий раз, когда он встретит это изображение. Точно так же, чем больше входное значение, тем больше взвешенное значение увеличения, что заставляет выходной нейрон «7» уделять больше внимания этим входным данным в более поздних раундах обучения.
Затем алгоритму необходимо выполнить те же вычисления для среднего слоя: изменить вес каждого входного значения, чтобы уменьшить ошибку сети — опять же, сделав выход «7» ближе к 1, а другие выходы ближе к 0. Однако каждый нейрон среднего слоя будет выводить на все 10 нейронов выходного слоя, что приведет к противоречиям в обоих направлениях.
Во-первых, градиент ошибки среднего слоя зависит не только от входного значения, но и от градиента ошибки следующего слоя.
Этот алгоритм называется обратным распространением, потому что градиенты ошибок от более поздних слоев в сети распространяются обратно на предыдущие уровни (по цепочке отношений в уравнении) и используются для вычисления градиентов.
В то же время каждый нейрон среднего слоя также является источником входных данных для всех 10 нейронов выходного слоя. Следовательно, градиент ошибки, вычисленный обучающим алгоритмом, должен отражать, как изменения входных весов влияют навсе выходысредняя ошибка.
Обратное распространение — это алгоритм восхождения: каждый раунд алгоритма приближает вывод к правильному результату для тренировочного изображения, но только немного ближе. По мере того, как алгоритм проходит все больше и больше выборок, он «подбирается» к оптимальному набору параметров, который правильно классифицирует как можно больше обучающих выборок. Для достижения высокой точности требуются тысячи обучающих выборок, и алгоритму может потребоваться перебирать каждое изображение в обучающей выборке десятки раз, чтобы достичь оптимальности.
Нильсен показывает, как это сделать в 74 строках кода Python. Примечательно, что нейронная сеть, обученная с помощью этой простой процедуры, смогла распознать более 95% рукописных цифр в базе данных MNIST. С некоторыми дополнительными улучшениями простая двухслойная нейронная сеть, подобная этой, способна распознавать более 98% чисел.
Прорыв AlexNet
Вы могли подумать, что развитие обратного распространения в 1980-х годах откроет период быстрого роста машинного обучения на основе нейронных сетей, но это не так. В 90-х и начале 2000-х над этой технологией работало несколько человек. Но повальное увлечение нейронными сетями началось только в начале 2010-х годов.
Мы можем видеть это в результатах ImageNet, ежегодного соревнования по машинному обучению, организованного ученым-компьютерщиком из Стэнфордского университета Фейфей Ли. В каждом ежегодном конкурсе участникам предоставляется общий набор из более чем 1 миллиона тренировочных изображений, каждое из которых помечено вручную 1000 возможных классификаций, таких как «пожарная машина», «гриб» или «гепард». Программное обеспечение участников оценивалось по его способности классифицировать другие изображения, не включенные в обучающий набор. Программа может сделать несколько предположений, и программное обеспечение считается успешным, если одно из первых пяти предположений на изображении совпадает с меткой, выбранной человеком.
Конкурс проводится с 2010 года, и в первых двух конкурсах глубокие нейронные сети не играли большой роли. Лучшие команды использовали различные другие методы машинного обучения с посредственными результатами. У команды, которая выиграла в 2010 году, процент ошибок (то есть неправильных угадываний во всех пяти раундах) составил 28 процентов. В 2011 году она составляла 25%.
Потом наступил 2012 год. Команда из Университета Торонто представила работу, которая вытащила бы участников из мертвой лужи цемента. Позже эта запись была названа AlexNet в честь ведущего автора Алекса Крижевского. Используя глубокие нейронные сети, исследовательская группа достигла 16% ошибок в пятерке лучших. У ближайшего конкурента в том году уровень ошибок составлял 26 процентов.
Упомянутая выше сеть распознавания рукописного ввода состоит из двух слоев, 25 нейронов и почти 12 000 параметров. AlexNet больше и сложнее: 8 обучаемых слоев, 650 000 нейронов и 60 миллионов параметров. Для обучения сети такого размера требуется много вычислительной мощности, и AlexNet разработан с учетом преимуществ массивной параллельной вычислительной мощности, обеспечиваемой современными графическими процессорами.
Исследователи выяснили, как разделить работу по обучению сети между двумя графическими процессорами, удвоив их вычислительную мощность. Несмотря на агрессивную оптимизацию, обучение сети заняло от 5 до 6 дней с использованием оборудования уровня 2012 года (два графических процессора Nvidia GTX 580, каждый с 3 ГБ памяти).
Полезно увидеть некоторые примеры результатов AlexNet, чтобы понять, насколько это замечательный прорыв. Вот иллюстрация из этой статьи, показывающая некоторые образцы изображений и догадки о классификации Top5, соответствующие AlexNet:
AlexNet смог определить, что первое изображение содержало клеща, хотя клещ был всего лишь небольшим пятном на краю изображения. Программное обеспечение не только правильно идентифицировало ягуара, но и другие его догадки — ягуары, гепарды, снежные барсы и египетские кошки — выглядели одинаково. AlexNet называет изображения грибов «поганками» — разновидностью грибов. Официальная правильная этикетка «гриб» — это второй выбор AlexNet.
Столь же удивительны «неправильные результаты» AlexNet. На фотографии изображена далматинская собака, стоящая за вишенкой со словами «Далматинец» рядом с ней, а официальная этикетка - «Вишня». AlexNet понял, что на фотографии были какие-то фрукты — «виноград» и «бузина» были его пятью лучшими вариантами, — но не до конца понял, что это вишни.
Покажите AlexNet фотографию мадагаскарского кота на дереве, и он угадает серию мелких лазающих по деревьям млекопитающих. Многие люди (включая меня) были бы столь же неправы. Это действительно замечательная производительность, показывающая, что программное обеспечение может распознавать обычные объекты в различных ориентациях и расположениях. Глубокие нейронные сети быстро стали самой популярной технологией для задач распознавания изображений, и с тех пор мир машинного обучения стремительно развивается.
Промоутеры ImageNet написали: «После успеха подходов, основанных на глубоком обучении, в 2012 году подавляющее большинство работ в 2013 году использовали глубокие сверточные нейронные сети». командой AlexNet. К 2017 году участники, использующие глубокие нейронные сети, снизили уровень ошибок в топ-5 до уровня ниже 3%. Учитывая сложность задачи, возможно, это делает компьютеры лучше, чем многие люди.
Эта столбчатая диаграмма от команды ImageNet показывает частоту ошибок команды-победителя в ежегодном соревновании по классификации топ-5. С 2010 по 2017 год количество ошибок неуклонно снижалось.
Концепция сверточной сети
Технически AlexNet — это сверточная нейронная сеть. В этом разделе я объясню роль сверточных сетей и почему этот метод имеет решающее значение для современных алгоритмов распознавания изображений.
Простая сеть распознавания рукописного ввода, которую мы изучали ранее, полностью связана: каждый нейрон в первом слое является источником входных данных для нейронов во втором слое. Эта структура подходит для относительно простых задач, таких как распознавание цифр в изображении размером 28x28 пикселей. Но дальнейшее масштабирование затруднено.
В наборе рукописных цифр MNIST символы всегда располагаются по центру. Это значительно упрощает обучение, так как означает, что у 7 всегда будут черные пиксели вверху и справа от изображения, а белые — внизу слева. 0 — это всегда белый блок посередине, а окружающие пиксели темнее. Простая полносвязная сеть может довольно легко обнаруживать эти типы паттернов.
Но предположим, что вы хотите построить нейронную сеть для распознавания чисел, которые могут находиться где угодно в общей картине. Полносвязная сеть не подходит для этого, потому что у нее нет эффективного способа определения сходства между фигурами, расположенными в разных частях изображения. Если в вашем тренировочном наборе окажется, что большинство семерок находится в верхнем левом углу, вы получите сеть, которая лучше идентифицирует семерки в верхнем левом углу, чем где-либо еще на изображении.
Теоретически вы можете решить эту проблему, убедившись, что в вашем обучающем наборе есть много образцов цифр в каждом возможном местоположении пикселя. Но на практике это было бы огромным расточительством. По мере увеличения размера изображения и глубины сети количество соединений, то есть количество входных весовых параметров, будет стремительно расти. Вам нужно больше обучающих изображений и вычислительная мощность для достижения достаточной точности.
Когда нейронная сеть учится распознавать форму в одном месте на изображении, она должна быть в состоянии применить это обучение для распознавания похожих фигур в другом месте изображения. Сверточные нейронные сети предлагают элегантное решение этой проблемы.
«Это все равно, что взять шаблон или образец и сопоставить его с каждой точкой изображения», — сказал исследователь искусственного интеллекта Тан Цзе. «У вас есть шаблон контура собаки, и вы обнаружите, что верхний правый угол в основном соответствует вашему шаблону — есть ли там собака?» Если нет, немного сдвиньте шаблон и просмотрите все изображение. Неважно, где собака появляется на изображении. Шаблон подойдет. Вы не хотите, чтобы каждый подраздел сети изучал свой собственный распознаватель собак.
Представьте, если мы разделим большое изображение на маленькие блоки размером 28*28 пикселей. Затем мы можем передать каждый патч в полносвязную сеть распознавания рукописного ввода, описанную ранее. Если хотя бы один из "7" выходов в этих маленьких блоках горит, значит, может быть и семерка во всей большой картинке. В этом суть сверточных сетей.
Как работают сверточные сети в AlexNet?
В сверточных сетях эти «шаблоны» называются детекторами признаков, а наблюдаемые ими области называются рецептивными полями. Рецептивные поля детекторов истинных признаков, как правило, намного меньше 28 пикселей на стороне. В AlexNet первый сверточный слой имеет детектор признаков с рецептивным полем 11 × 11 пикселей. Его последующие сверточные слои имеют рецептивные поля шириной от 3 до 5 единиц.
Когда детектор признаков просматривает входное изображение, он создает карту признаков: двумерную сетку, которая показывает, насколько сильно детектор активируется различными частями изображения. Сверточные слои обычно имеют несколько детекторов признаков, каждый из которых сканирует входное изображение в поисках различных шаблонов. В AlexNet на первом уровне имеется 96 детекторов признаков и генерируются 96 карт признаков.
Чтобы проиллюстрировать это более конкретно, вот визуальное представление визуальных паттернов, изученных 96 детекторами признаков на первом уровне AlexNet, обученном сетью. Детекторы признаков могут искать горизонтальные или вертикальные линии, градиенты от светлого к темному, узоры в виде шахматной доски и другие формы.
Цветные изображения представлены в формате распределения пикселей, где каждый пиксель имеет три значения: красный, зеленый и синий. Первый уровень AlexNet обобщает пиксели, представленные тремя красными, зелеными и синими битами, в один из 96 типов значений. Каждый «пиксель» в изображении (со ссылкой на единицу сегментации первого слоя) имеет 96 возможных значений, соответствующих 96 детекторам признаков.
В данном случае первое из этих 96 значений указывает, соответствует ли конкретная точка изображения этому шаблону:
Второе значение указывает, соответствует ли конкретная точка этому шаблону:
Третье значение указывает, соответствует ли конкретная точка этому шаблону:
И так далее для других 93 детекторов признаков на первом уровне AlexNet. Первый слой выводит каждый «пиксель» изображения в новом представлении — представленном в виде вектора из 96 значений (например, по основанию 96?) (я объясню позже, это новое представление также уменьшено в четыре раза).
Это первый слой AlexNet. Далее следуют еще четыре сверточных слоя, каждый из которых имеет вход и выход предыдущего слоя.
Как мы видим, первый слой обнаруживает основные шаблоны, такие как горизонтальные и вертикальные линии, переходы от светлого к темному и кривые. Затем второй слой использует результаты первого слоя в качестве строительных блоков для обнаружения немного более сложных форм. Например, второй слой может иметь детектор признаков, который находит окружности путем объединения выходных данных детекторов признаков первого слоя для поиска кривых. Третий слой находит более сложные формы, комбинируя признаки второго слоя. Более сложные узоры можно найти на слоях 4 и 5.
Исследователи Мэтью Зейлер и Роб Фергус опубликовали в 2014 году отличную статью, в которой были представлены некоторые полезные методы визуализации паттернов, распознаваемых пятислойными нейронными сетями, подобными ImageNet.
На следующих иллюстрациях каждое изображение (кроме первого) состоит из двух частей. Справа вы увидите несколько миниатюрных изображений, которые точно соответствуют определенному детектору функций. Они сгруппированы в группы по 9, и каждая группа соответствует отдельному детектору признаков. Слева показана карта, показывающая, какие конкретные пиксели на миниатюре дали высокое совпадение. Вы можете увидеть это наиболее заметно на уровне 5, так как есть детекторы признаков, которые хорошо подходят для собак, корпоративных логотипов, колес тачек и т. д.
Просматривая эти изображения, вы можете видеть, что каждый слой способен распознавать более сложные узоры, чем предыдущий слой. Первый слой распознает простые шаблоны пикселей, которые не очень похожи друг на друга. Второй слой распознает текстуры и простые формы. На третьем слое мы видим узнаваемые формы, такие как автомобильные колеса и красно-оранжевые сферы (может быть, помидоры, божьи коровки или что-то еще).
Рецептивные поля первого слоя имеют размер 11X11 единиц, тогда как рецептивные поля последующих слоев варьируют в размерах от 3X3 единиц до 5X5 единиц. Но имейте в виду, что эти более поздние слои получают карты объектов, сгенерированные предыдущими слоями, и каждый «пиксель» в этих картах объектов представляет n пикселей исходного изображения. Таким образом, рецептивное поле каждого слоя содержит большую часть исходного изображения, чем предыдущий слой. Это одна из причин, по которой миниатюры более поздних слоев выглядят более сложными, чем более ранние.
Схематическая диаграмма рецептивного поля, отРецептивные поля в глубоких нейронных сетяхПятый и последний слой сети способен идентифицировать наиболее заметные крупномасштабные элементы на этих изображениях. Например, это изображение, которое я взял из правого верхнего угла изображения слоя 5 выше:
9 изображений справа могут выглядеть не очень похожими. Но если вы посмотрите на 9 тепловых карт слева, вы увидите, что этот конкретный детектор признаков не фокусируется на объектах на переднем плане каждого изображения. Вместо этого он фокусируется на зеленой части фона каждого изображения!
Очевидно, что если один из классов, который вы хотите идентифицировать, является «травой», то подойдет «детектор травы», но он может обнаруживать и другие вещи. После пяти сверточных слоев AlexNet имеет три полностью связанных слоя, как и слои в нашей сети распознавания рукописного ввода. Эти слои пытаются классифицировать изображение по одному из 1000 классов, используя каждую карту объектов, сгенерированную пятым сверточным слоем.
Так что, если на заднем плане картины есть трава, это, скорее всего, дикая природа. С другой стороны, если фоном картины является трава, вряд ли это будет роспись внутренней мебели. Другие детекторы признаков в пятом слое предоставляют массу информации, которую можно использовать для угадывания содержания фотографии. Последние слои сети объединяют эту информацию, чтобы делать обоснованные предположения о том, что изображено на изображении в целом.
Уникальность сверточных слоев: общие входные веса
Мы видели, как детекторы признаков в сверточных слоях отлично распознают образы, но до сих пор я не объяснил, как на самом деле работают сверточные сети.
Сверточный слой — это слой нейронов. Как и любой нейрон, эти нейроны получают средневзвешенное значение своих входных данных, а затем применяют функцию активации. Используйте метод обратного распространения, который мы обсуждали, для обучения параметров.
Но в отличие от нейронной сети выше, сверточные слои не полностью связаны. Каждый нейрон принимает только часть входных данных от нейронов предыдущего слоя. Что еще более важно, нейроны в сверточной сети имеют общие входные веса.
Давайте увеличим первый нейрон в первом сверточном слое AlexNet. Размер рецептивного поля этого слоя составляет 11×11 пикселей, поэтому первый нейрон получает 11×11 пикселей в углу. Этот нейрон получает входные данные от этих 121 пикселя, каждый из которых имеет три значения — красный, зеленый и синий. Нейроны имеют в общей сложности 363 входа. Как и любой нейрон, этот нейрон принимает средневзвешенное значение из 363 входных значений, а затем применяет функцию активации. Поскольку он имеет 363 входных значения, он также требует 363 входных параметра веса.
Второй нейрон в первом слое AlexNet очень похож на первый нейрон. Он также получает 11×11 пикселей, но его рецептивное поле смещено на 4 пикселя от рецептивного поля первого нейрона. Это создает перекрытие в 7 пикселей между двумя рецептивными полями, что позволяет избежать пропуска интересных паттернов между двумя нейронами. Второй нейрон также получает 363 значения, описывающие 11х11 пикселей, каждое значение умножается на параметр веса, суммируется и вызывается функция активации.
В частности, второй нейрон не имеет собственного набора из 363 входных весов, а использует те же входные веса, что и первый нейрон. Верхний левый пиксель первого нейрона использует те же входные веса, что и верхний левый пиксель второго нейрона. Итак, эти два нейрона ищут один и тот же паттерн. Между их рецептивными полями есть смещение в 4 пикселя.
Конечно, на самом деле нейронов гораздо больше, чем два — изображение разделено на сетку 55×55 с общим количеством нейронов 3025. Каждый из этих 3025 нейронов использует те же 363 входных веса, что и начальные два нейрона. Все эти нейроны работают вместе, чтобы «сканировать» изображение на наличие определенных паттернов, которые могут существовать, образуя детектор признаков.
Помните, что первый уровень AlexNet имеет 96 детекторов признаков. Только что упомянутые 3025 нейронов составляют один из 96 детекторов признаков. Остальные 95 детекторов признаков состоят из собственного набора из 3025 нейронов. Каждая группа из 3025 нейронов разделяет свои 363 входных веса с другими нейронами в группе, но не с нейронами других 95 детекторов признаков.
Для обучения сверточных сетей используется тот же базовый алгоритм обратного распространения, что и для обучения полносвязных сетей, но сверточная структура делает процесс обучения более эффективным.
«Использование сверток очень полезно, потому что параметры можно использовать повторно», — сказал Ars (первоначальный автор этой статьи) эксперт по машинному обучению и автор Шон Герриш. Это значительно уменьшает количество входных весов, которые сеть должна изучить, что позволяет сети давать лучшие результаты с меньшим количеством обучающих выборок.
Распознанный шаблон, извлеченный из одной части изображения, может быть преобразован в тот же шаблон, который используется для распознавания других мест на других изображениях. Это позволяет сети достигать высокой производительности с меньшим количеством обучающих экземпляров.
Глубокие сверточные сети хорошо известны
Статья AlexNet вызвала ажиотаж в академическом сообществе по машинному обучению, и ее важность была быстро признана в отрасли. Google особенно заинтересован в этой технологии.
В 2013 году Google приобрел стартап, основанный автором статьи AlexNet. Они использовали эту технологию, чтобы добавить новую функцию поиска изображений в Google Фото. «Мы взяли передовые исследования прямо из академической исследовательской лаборатории и запустили их чуть более чем за 6 месяцев», — написал Чак Розенберг из Google.
Между тем, в статье Google от 2013 года описывается, как она использовала глубокие сверточные сети для считывания кодов адресов с фотографий в Google Street View. «Наша система помогла нам извлечь почти 100 миллионов физических номеров улиц из изображений Street View», — пишут авторы.
Исследователи обнаружили, что по мере развития нейронной сети ее производительность продолжала улучшаться. Команда Google Street View написала: «Мы обнаружили, что производительность этого подхода улучшалась с увеличением глубины сверточной сети, с лучшей производительностью среди архитектур, которые мы обучали с наибольшим количеством слоев. Наши эксперименты показывают, что более глубокие архитектуры могут обеспечить лучшую производительность. точность, но эффективность будет постепенно снижаться».
Так что после AlexNet нейронные сети становятся все глубже и глубже. Команда Google выиграла заявку на конкурсе ImageNet в 2014 году — всего через два года после победы AlexNet в 2012 году. Как и AlexNet, он основан на глубокой сверточной нейронной сети, но Google использует более глубокую 22-слойную сеть, в результате чего частота ошибок в топ-5 составляет 6,7%, что является большим улучшением по сравнению с улучшением частоты ошибок AlexNet на 16%.
Однако более глубокие сети полезны только для больших обучающих наборов. По этой причине Герриш считает, что набор данных ImageNet и конкуренция сыграли ключевую роль в успехе глубоких сверточных сетей. Помните, конкурс ImageNet предоставил участникам миллион изображений и попросил их выбрать одно из 1000 различных категорий.
«Наличие 1 миллиона изображений для обучения вашей нейронной сети означает 1000 изображений на класс (1 миллион / 1000 = 1000)», — сказал Герриш. ."
В последние годы основное внимание уделялось сбору больших данных для обучения более глубоких и точных сетей. Это главная причина, по которой компании, производящие беспилотные автомобили, так сосредоточены на накоплении миль на дорогах общего пользования — изображения и видео с испытаний отправляются обратно в штаб-квартиру для обучения сети распознавания изображений компании.
Бум вычислений с глубоким обучением
Открытие того, что более глубокие сети и большие обучающие наборы могут обеспечить лучшую производительность, создает ненасытный спрос на большую вычислительную мощность. Важной причиной успеха AlexNet является осознание того, что обучение нейронной сети включает в себя матричные операции, которые можно эффективно выполнять с использованием высокопараллельной вычислительной мощности графической карты.
«Нейронные сети можно распараллелить», — сказал Тан Цзе, исследователь машинного обучения. Видеокарты предназначены для обеспечения массовых параллельных вычислений для видеоигр, и результаты идеально подходят для нейронных сетей.
«Основная операция графического процессора — чрезвычайно быстрое умножение матриц, которое в конечном итоге становится основной операцией нейронной сети», — сказал Тан.
Это стало золотым дном для Nvidia и AMD, двух ведущих производителей графических процессоров. Обе компании работают над разработкой новых чипов, отвечающих уникальным потребностям приложений машинного обучения, которые в настоящее время составляют значительный процент продаж графических процессоров компаний.
В 2016 году Google представила специальный чип, называемый тензорным процессором (TPU), предназначенный для работы нейронной сети. В 2017 году Google писал, что, хотя они рассматривали возможность создания специализированных интегральных схем (ASIC) для нейронных сетей еще в 2006 году, ситуация стала актуальной в 2013 году.
«Именно тогда мы поняли, что быстрорастущие вычислительные потребности нейронных сетей могут потребовать от нас удвоить количество центров обработки данных, которыми мы управляем». технологии через свою платформу облачных вычислений.
Конечно, Google — не единственная компания, работающая над чипами ИИ. В качестве небольшого примера последняя версия чипа iPhone включает в себя «нейронный движок», оптимизированный для работы нейронной сети. Intel разрабатывает собственное семейство чипов, оптимизированных для глубокого обучения. Tesla недавно объявила, что отказывается от чипов Nvidia в пользу самодельных чипов нейронных сетей. Сообщается также, что Amazon разрабатывает собственные чипы искусственного интеллекта.
Почему глубокие нейронные сети трудно понять
Я объяснил, как работают глубокие нейронные сети, но не объяснил, почему они работают так хорошо. Удивительно, сколько матричных операций позволяет компьютеру отличить ягуара от гепарда, старца от крыжовника.
Но, пожалуй, самое замечательное в нейронных сетях то, что они не могут. Свертки позволяют нейронным сетям понимать перевод — они могут определить, похож ли шаблон в правом верхнем углу одного изображения на шаблон в левом верхнем углу другого изображения.
Но помимо этого, сверточные сети на самом деле не понимают геометрию. Если бы изображения были повернуты на 45 градусов или увеличены в 2 раза, они не смогли бы определить, похожи ли эти два изображения. Сверточные сети не пытаются понять структуру 3D-объектов и не могут распознавать различные условия освещения.
Однако глубокие нейронные сети смогли распознать фотографии собак, были ли они сделаны спереди или сбоку, а также занимали ли они маленькую или большую часть изображения.
Как это делают нейронные сети Оказывается, при достаточном количестве данных статистических методов грубой силы достаточно для работы. Сверточные сети не предназначены для того, чтобы «воображать», как будет выглядеть конкретное изображение, если смотреть на него под другим углом или в другом контексте, но с достаточным количеством помеченных примеров он может путем простого повторения изучить все возможные перестановки.
Есть свидетельства того, что зрительная система человека на самом деле работает аналогичным образом. Давайте взглянем на эти два изображения (убедитесь, что вы внимательно посмотрели на первое, прежде чем смотреть на второе):
Судя по всему, создатель этой фотографии перевернул глаза и рот портрета вверх ногами и перевернул всю фотографию. Когда вы переворачиваете изображение вверх ногами, оно выглядит относительно нормально, потому что зрительная система человека привыкла смотреть на глаза и рот в этом направлении. Но когда смотришь на последних, лица фигур деформируются.
Это говорит о том, что зрительная система человека полагается на некоторые из тех же грубых методов сопоставления с образцом, что и нейронные сети. Если мы видим вещи почти в одном и том же направлении — как человеческий глаз — мы можем лучше распознать их обычное направление.
Нейронная сеть хорошо использует весь контекст изображения, чтобы понять, что оно показывает. Например, на дороге часто появляются машины. Юбки обычно появляются либо на теле женщины, либо висят в шкафу. Самолет либо появлялся на фоне голубого неба, либо рулил по взлетно-посадочной полосе. Никто явно не обучал нейронную сеть этим корреляциям, но есть достаточно помеченных примеров, чтобы сеть могла их выучить автоматически.
В 2015 году некоторые исследователи из Google попытались «сделать это наоборот», чтобы лучше понять нейронные сети. Вместо обучения нейронной сети изображениями они использовали обученную нейронную сеть для изменения изображений.
Например, они начали с изображения, которое содержало случайный шум, и постепенно модифицировали его, чтобы сильно «осветить» один из выходов нейронной сети, что потребовало от нейронной сети эффективного «отрисовки» класса, который она была обучена распознавать. В интересном примере они нарисовали график с помощью нейросети, обученной распознавать гантели.
«Да, это гантели, но все они, похоже, изображают мускулистых атлетов, поднимающих гантели», — пишут исследователи в исследовании.
На первый взгляд это может показаться странным, но на самом деле это мало чем отличается от человеческого поведения. Если мы видим на изображении небольшой или размытый объект, мы смотрим на свое окружение в поисках подсказок о том, что может происходить на картинке. Понятно, что люди рассуждают об изображениях по-разному, опираясь на наше сложное концептуальное понимание окружающего мира.
В целом, глубокие нейронные сети хороши в распознавании изображений, потому что они используют всю среду, показанную на картинке, которая не сильно отличается от того, как распознают люди. (Заканчивать)
Сравнительная таблица профессиональной лексики
- нейронная сеть нейронная сеть
- вычислительная мощность
- сверточная сеть сверточная сеть
- нейрон
- вес вес
- предвзятость
- функция активации функция активации
- Нелинейная функция активации Нелинейная функция активации
- загораться загораться (т.е. совпадать)
- слой слой
- рецептивное поле
- обратное распространение
- частота ошибок в первой пятерке частота ошибок в первой пятерке
- градиент ошибки
- матрица матрица
- полностью связанный слой полностью связанный слой
- шаблон
- Детектор признаков Детектор признаков
- статистический перебор