Мы все хорошо знаем и ловко признаем чудеса искусственного интеллекта, и, пожалуй, самым интригующим из них является способность машины видеть (способность машины правильно определять свойства изображения). Это точно достигается с помощью нейронной сети, состоящей из сверточных слоев (слово «нейронный» происходит от нейронов, и они представляют собой небольшие структуры, состоящие из дендритов, используемых в нашем мозгу и нашей нервной системе).

Вы когда-нибудь задумывались, почему мы используем только свертки всякий раз, когда имеем дело с изображениями? Мы всегда могли бы использовать глубокую нейронную сеть, состоящую из различных слоев Dense. Мы могли бы преобразовать наше изображение в двумерный массив NumPy (после преобразования изображения в оттенки серого) и сгладить наше изображение, используя наши плотные слои, как мы делаем при работе с большинством наборов данных.

Что ж, хотя этот процесс звучит неплохо, он не очень практичен. Если бы мы это сделали, значением нашего массива NumPy было бы количество пикселей, но наш мозг никогда не обрабатывает изображение таким образом. Мы ищем особенности в изображении. На изображении соседние пиксели пикселя, которые мы выбираем, также влияют на определение функции, которую может выделить наша сеть. Группа пикселей может обнаружить кривую на нашем изображении, что является важным наблюдением (например, обучение модели распознаванию изображений кошек обнаружит кошачье ухо). Поэтому мы используем сверточные нейронные сети.

Сверточная нейронная сеть — это тип глубокой нейронной сети, которая может учитывать изображения и присваивать им важность, поэтому отлично подходит для анализа изображений.

Эти сети работают, запуская фильтр по определенному окну изображения, а затем шагая вперед, обходя все изображение и определяя каждую функцию в изображении, запуская сверточный слой не один раз, а несколько раз, чтобы не пропустить ни одной важной функции, которую мы могли быть пропущены в предыдущих запусках сверточных слоев. Затем, как только мы сможем определить функции на нашем изображении, мы можем сгладить наш массив и передать его в плотный слой, что поможет определить выходные данные нашей модели. Наряду со сверточными слоями мы также используем слой Maxpooling, который помогает уменьшить размер нашего изображения вдвое, тем самым перегружая наше изображение, чтобы сверточный слой мог более точно идентифицировать функции. Весь процесс обучения CNN включает в себя различные операции, такие как свертка, функция активации, объединение и полносвязные слои, и затем они точно предсказывают особенности нашего изображения.