Слои 1–4 в нашей сети называются сверточными, поскольку каждый из них осуществляет свертку предыдущего (а первый слой осуществляет свертку входного изображения). Получая входное изображение, каждый слой последовательно выполняет вычисления, и на последнем, четвертом слое сеть формирует набор карт активации для относительно сложных признаков. К ним могут относиться глаза, форма лап, форма хвостов и другие признаки, которые сеть сочла полезными для классификации распознаваемых в процессе тренировки объектов (в нашем случае – кошек и собак). На этом этапе в дело вступает модуль классификации, который на основании этих признаков определяет, какой объект запечатлен на изображении.
В качестве модуля классификации используется традиционная нейронная сеть, похожая на описанную в главе 2[104]. Входными сигналами для модуля классификации служат карты активации, составленные самым высоким слоем свертки. На выходе модуль дает процентные значения, по одному для каждой возможной категории, оценивая уверенность сети в том, что объект на входном изображении относится к конкретной категории (в нашем случае – кошек или собак).
Позвольте мне подытожить это краткое описание сверточных нейронных сетей. Вдохновленные открытиями Хьюбела и Визеля о работе зрительной коры мозга, СНС берут входное изображение и преобразуют его – посредством сверток – в набор карт активации признаков, сложность которых постепенно повышается. Карты активации, составленные на самом высоком слое свертки, загружаются в традиционную нейронную сеть (которую я назвала модулем классификации), после чего она определяет процент уверенности для каждой из категорий объектов, известных сети. Сеть классифицирует изображение в ту категорию, которая получает самый высокий процент уверенности[105].
Хотите поэкспериментировать с хорошо натренированной сверточной нейронной сетью? Сделайте фотографию какого-либо объекта и загрузите ее в “поиск по картинке”
Тренировка сверточной нейронной сети
В нашей гипотетической сверточной нейронной сети первый слой состоит из детекторов ребер, но в реальности детекторы ребер не встраиваются в СНС. Вместо этого сети на тренировочных примерах узнают, какие признаки нужно обнаруживать на каждом слое и как задать веса в модуле классификации таким образом, чтобы обеспечить высокую уверенность в верном ответе. Как и в традиционных нейронных сетях, все веса можно узнать на основе данных с помощью того же алгоритма обратного распространения ошибки, который я описала в главе 2.
Вот механизм, с помощью которого нашу СНС можно натренировать определять, кошка или собака запечатлена на конкретном изображении. Сначала необходимо собрать большое количество примеров изображений кошек и собак – они войдут в ваше “тренировочное множество”. Нужно также создать файл, который присвоит каждому изображению ярлык – “собака” или “кошка”. (А лучше взять пример с исследователей компьютерного зрения и нанять аспиранта, который сделает это за вас. Если вы сами аспирант, наймите студента. Никому не нравится расставлять метки!) Сначала ваша программа присвоит случайные значения всем весам в сети. Затем программа начнет тренировку: все изображения будут по одному загружаться в сеть, сеть будет выполнять свои послойные вычисления и, наконец, выдавать процент уверенности для категорий “собака” и “кошка”. Для каждого изображения тренируемая программа будет сравнивать выходные сигналы с “верными” значениями: так, если на изображении собака, то уверенность для категории “собака” должна составлять 100 %, а для категории “кошка” – 0 %. Затем тренируемая программа, используя алгоритм обратного распространения ошибки, будет незначительно корректировать веса в сети, чтобы в следующий раз при классификации этого изображения показатели уверенности были ближе к верным значениям.