В данной статье рассматривается задача классификации кошек и собак при помощи построения свёрточной нейронной сети, с использование фреймворка Tensorflow.
Ключевые слова: свёрточная нейронная сеть, Tensorflow, классификация, машинное обучение.
Классификация является, неотъемлемой, частью жизни каждого из нас. Изо дня в день человеческий мозг классифицирует множество вещей с невероятной точностью и простотой. Но если говорить о компьютере, то эта задача уже не такая и тривиальная. К примеру, как, с помощью компьютера можно отличить апельсин от лимона?
Рис. 1. Лимон и апельсин
Если использовать обычные условные операторы, возможно, понадобится тысяча условий, чтобы в точности отличить лимон от апельсина. Нужно принять во внимание и цвет и размер, форму, узор на кожуре и так далее. Но, с такой задачей, без проблем может справиться натренированная нейронная сеть. Одна из популярных задач классификации — классификация ирисов [1].
Рис. 2. Ирис Versicolor и Ирис Virginica
Всего по четырем уникальным параметрам (длина и ширина чашелистика, длина и ширина лепестка), можно классифицировать ирисы. Конкретно задачу классификации изображений решают при помощи свёрточных нейронных сетей.
Свёрточная нейронная сеть (англ. convolutional neural network, CNN) — специальная архитектура искусственных нейронных сетей, предложенная Яном Лекуном в 1988 году и нацеленная на эффективное распознавание изображений, входит в состав технологий глубокого обучения (англ. deep learning) [2]. Название архитектура сети получила из-за наличия операции свёртки, суть которой в том, что каждый фрагмент изображения умножается на матрицу (ядро) свёртки поэлементно, а результат суммируется и записывается в аналогичную позицию выходного изображения.
Рассмотрим, как с помощью свёртойной нейронной сети можно решить задачу классификации кошек и собак. Для построения сети будет использоваться фреймворк tensorflow.
Исходный набор данных нужно подготовить перед обработкой, так, все изображения нужно сделать серыми и уменьшить до размера 70х70 пикселей. Таким образом обучение нейронной сети буде происходить быстрее, и мы не будем без надобности использовать ресурсы операционной системы.
Рис. 3. Этапы предварительной обработки изображения (слева на право: исходное, с оттенками серого, уменьшенное до 70х70 пикселей)
Топология сети. Так как данная задача относиться к категории двоичной классификации — задача классификации элементов множества в две группы, то у нас всего два входных нейрона.
Опытным путем был подобран скрытый слой. В целом, в процессе проведения опыта, были перепробованы следующие комбинации: 1, 2 или 3 свёрточных слоя, в каждом из которых 32, 64 или 128 нейронов для каждого из которых использовались 0, 1 или 2 слоя субдискретизации. Результаты опытов показали, что наилучшие результаты показываю сети с тремя свёрточными слоями, без использования слоя субдискетизации (рис. 4).
Рис. 4. Точность предсказания (слева) и процент ошибки сетей (справа)
Несмотря на то, что наилучшую точность предсказания показала сеть с тремя свёрточными слоями и 128 нейронами (красная линия). Наименьший процент ошибки имеет сеть c тремя свёрточными слоями и 64 нейронами (синяя линия).
Скалярный результат каждой свертки попадает на функцию активации, которая является некой не линейной функцией. Данная функция может быть любой. Но традиционно для данной задачи использовались функции типа гиперболического тангенса , или сигмоиды
. Но в 2000х годах была предложена и исследована новая функция активации — ReLU (rectified linear unit) [3], которая позволила существенно ускорить процесс обучения и одновременно упростить вычисления (за счет простоты самой функции), что означает блок линейной ректификации, вычисляющий функцию
. То есть, по сути, это операция отсечения отрицательной части скалярной величины. По состоянию на 2017 год эта функция и её модификации (Noisy ReLU, Leaky ReLU и другие) являются наиболее часто используемыми функциями активации в глубоких нейросетях, в частности, в свёрточных. Мы же будем использовать обычную ReLU функцию в решении данной задачи.
Рис. 5. График rectified linear unit функции
Для выходного слоя, нужно предварительно провести субдискретизацию. Слой пулинга или субдискретизации представляет собой не линейное уплотнение карты признаков, при этом группа пикселей (обычно размера 2х2) уплотняется до оного пикселя, проходя не линейное преобразование. Основная идея пулинга заключается в том, что если на предыдущей операции свертки уже были выявлены некоторые признаки, то для дальнейшей обработки настолько подробное изображение уже не нужно, и оно уплотняется до менее подробного.
Активационной функцией для слоя пулинга была выбрана сигмоида. Сигмоида — это гладкая монотонная возрастающая нелинейная функция, имеющая форму буквы «S», которая часто применяется для «сглаживания» значений некоторой величины. Часто под сигмоидой подразумевают логистическую функцию .
Для обучения сети использовался набор данных, состоящий из 22451 изображения, валидация, в свою очередь, происходила на 2495 изображения.
Результаты данного эксперимента показали, что наилучшим образом с задачей классификации кошек и собак, по изображениям, справляется нейронная сеть с тремя свёрточными слоями, в каждом из которых 64 нейрона, активационная функция — ReLU. В ходе эксперимента была получена модель нейронной сети, способная определить кошка на изображении или собака с точностью 87 % (рис. 6).
Рис. 6. Точность полученной модели сети
Литература:
- Fisher, R.A. (1936). “The Use of Multiple Measurements in Taxonomic Problems”. Annals of Eugenics. 7: 179–188.
- Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard and L. D. Jackel: Backpropagation Applied to Handwritten Zip Code Recognition, Neural Computation, 1(4):541–551, Winter 1989.
- Hahnloser RH, Sarpeshkar R, Mahowald MA, Douglas RJ, Seung HS. 2000. Digital selection and analogue amplification coexist in a cortex-inspired silicon circuit. Nature. 405(6789):947–51.