Как учится машина. Революция в области нейронных сетей и глубокого обучения - Ян Лекун
w[0] * x[0] + w[1] * w[1] + w[2] * w[2]….w[n-1] * x[n-1] = 0
Это гиперплоскость размерности n – 1.
Перцептрон разделяет пространство на две половины гиперплоскостью. На одной «стороне» гиперплоскости мы хотим получить все точки, которые делают детектор C активным, а на другой «стороне» мы хотим получить точки, делающие его неактивным. Если можно найти такую гиперплоскость, то процедура обучения перцептрона в конечном итоге найдет ее путем многократного прохождения обучающих примеров. Если такой гиперплоскости не существует, то есть если точки неразделимы линейно, процедура обучения перцептрона будет бесконечно продолжать изменять веса, никогда не приходя к их единой стабильной конфигурации.
Зачем мы проводим эти примеры? Дело в том, что именно они объясняют разочарование, охватившее исследователей распознавания образов в начале 1960-х. Специалисты поняли, что возможности перцептрона ограничены, и что они не смогут использовать его для распознавания объектов на естественных изображениях.
Это связано с тем, что, когда размерность входа высока, а примеры многочисленны и сложны, например, тысячи фотографий собак, кошек, столов и стульев, то велики и шансы, что категории не будут линейно разделяемыми, то есть достижимыми с помощью перцептрона, подключенного непосредственно к пикселям. Даже в простом случае с буквами C и D, если существуют значительные различия в форме, положении или размере букв, классификация букв C и D оказывается для перцептрона невозможной.
Книга Сеймура Паперта и Марвина Мински «Перцептроны»[43], изданная в 1969 г., поставила крест на будущем этого типа машин. Прекращение исследований в области машинного обучения сыграло важную роль в истории искусственного интеллекта. Оно привело к одному из тех застоев, о которых мы упоминали, когда научное сообщество отвернулось от этой тематики.
Но для современного читателя интерес к такой демонстрации состоит в том, чтобы приблизиться к пониманию функционирования обучающейся машины.
Решение: экстрактор признаков
Таким образом, перцептрон в своей простейшей версии оказался неспособным различать некоторые типы изображений. Решение этой проблемы было найдено уже тогда, и оно используется до сих пор. Суть его заключается в размещении между входным изображением и нейронным слоем промежуточного модуля, «экстрактора признаков», который обнаруживает наличие или отсутствие определенных паттернов во входном изображении, а затем создает вектор, описывающий наличие, отсутствие или интенсивность этих паттернов. Затем этот вектор обрабатывается слоем перцептрона.
Рассмотрим пример.
Когда вы подключаете перцептрон непосредственно к пикселям изображения, скажем, буквы C, перцептрон не может создать «улучшенный шаблон», в котором изображение, закодированное его весами, указывает на пиксели, которые отличают C от других категорий. Как только разнообразие примеров становится слишком большим, машина Розенблатта «насыщается», и веса оказываются не способны выявлять различия. Это происходит, когда перцептрон обучается на сильно отличающихся буквах С. На изображениях с разрешением, достаточным для распознавания всех символов, примерно 20 × 20 пикселей, буквы C могут быть маленькими, большими, напечатанными различными шрифтами или написанными от руки различными стилями, располагаться в углу изображения, а не в центре и т. д. Если форма, положение или размер слишком отличаются, перцептрон не может классифицировать их, потому что нет единого улучшенного шаблона, который подходил бы ко всем этим вариациям.
Рис. 3.7. Экстрактор признаков
Экстрактор признаков обнаруживает наличие отличительных паттернов во входном изображении и отправляет выходы обучаемому классификатору, такому как перцептрон. Первый шаблон определяет окончания линий справа как конечные точки линий буквы «C». Два других обнаруживают углы, как и у буквы «D». Результаты передаются на вход перцептрона. После обучения перцептрон сможет отличать букву C от D независимо от размера и положения, пока эти признаки наличествуют. В данном примере, где есть одна буква C и две буквы D, расположенные по-разному, экстрактор можно рассматривать как слой бинарных нейронов. Белый пиксель представляет значение –1, серый пиксель представляет значение 0, а черный пиксель +1. Три детектора представляют собой своего рода «шаблоны» размером 5 × 5 пикселей, которые передаются по входному изображению. Для каждого положения шаблона мы вычисляем взвешенную сумму 25 пикселей входного окна с 25 весами шаблона. В результате получаются изображения, в которых каждый пиксель темнее, поскольку содержимое окна похоже на шаблон. Затем взвешенные суммы сравниваются с пороговым значением и выводятся карты признаков со значением +1, если шаблон обнаружен в соответствующем месте, и 0, если не обнаружен.
Один из способов отличить букву C от D на изображении размером 20 × 20 пикселей, независимо от шрифта или стиля, заключается в обнаружении углов и окончаний строк. Буква D – замкнутая фигура с двумя углами, а буква C – кривая на каждом конце линии. Можно было бы построить экстрактор признаков, который указывал бы на наличие окончаний и углов, независимо от их положения на изображении. Для этого мы можем спроектировать первый слой, состоящий из набора бинарных нейронов, входами которых будут небольшие окна размером 5 × 5 пикселей на входном изображении, а веса которых будут фиксироваться «вручную» (а не определяться алгоритмом обучения). Мы получим три типа нейронов-детекторов: один нейрон-детектор окончания и два нейрона-детектора угла. Каждое окно 5 × 5 на входном изображении питает три нейрона: по одному из каждого типа. Выход каждого нейрона равен +1, когда изображение 5 × 5 его входа выглядит как изображение, сформированное его весами, и 0 в противном случае. Для правильно сформированной буквы C будет активирован детектор окончания, а для правильно сформированной буквы D будут активированы детекторы угла. Последний слой – простой перцептрон. Такому перцептрону достаточно подсчитать количество углов и окончаний, чтобы отличить букву C от D независимо от их положения, размера или стиля.
Итак, можно изменить архитектуру перцептрона, чтобы он мог выполнять более сложные операции. Перед слоем перцептрона можно разместить «экстрактор признаков». Этот экстрактор функций не обучен, он создается вручную (инженер разрабатывает программу для этой функции). Такая конструкция сложна, и ее создание занимает много времени. Было предложено большое количество методов для создания экстракторов признаков, подходящих для каждого специфического применения. В научной литературе до 2015 г. было описано множество таких методов.
Популярный вид экстрактора признаков обнаруживает небольшие простые паттерны на входном изображении. Для букв, например, он маркирует не только окончания и углы, но и вертикальные полосы, горизонтальные полосы, петли и т. д. Выходом экстрактора признаков является ряд чисел, указывающих наличие или отсутствие этих паттернов и их положения. Вместо того чтобы напрямую подключаться к пикселям входного изображения, перцептрон анализирует более абстрактные характеристики.
Если перцептрон собирается обнаружить автомобиль, экстрактором признаков может быть набор шаблонов, которые обнаруживают колесо, угол лобового стекла, решетку радиатора и так