УДК 004.8

Автоматизация процесса дообучения нейронной сети и его перенос на сторону клиента

Мисаилиди Анастас Аристидович – студент магистратуры МИРЭА – Российского технологического университета.

Килюп Лев Александрович – студент магистратуры МИРЭА – Российского технологического университета.

Аннотация: В данной статье рассматривается один из возможных вариантов решения проблем дообучения нейронной сети решающей задачу классификации объектов. В статье описывается способ добавления нового класса без необходимости вовлечения стороннего специалиста. Также данное решение позволяет автоматизировать процесс, что уменьшает вовлеченность пользователя. Кроме того при использовании описываемого метода достигается снижение требуемых ресурсов необходимых для достижения поставленной задачи дообучения.

Ключевые слова: нейронная сеть, дообучение, fine-tuning, классификатор, автоматизация, распознавание, трансферное обучение.

С появлением компьютера появилась возможность автоматизировать многие процессы при помощи алгоритмизации задач, разбиения сложных процессов на более простые. Появилась потребность в квалифицированных специалистах основная работа которых, заключалась в написании алгоритмов. С прошествием времени от программистов требовалось решать все более сложные задачи. В какой-то момент сложность некоторых алгоритмов достигла того предела, когда его невозможно формализовать обычными методами, в этот момент получили широкое распространение методы аппроксимации. Их задача заключалась в том, чтобы заменить определенные элементы программы, которые в обычных условиях требовали больших ресурсов или же были полностью не реализуемы. Одним из таких методов является применение нейронной сети. Преимущество нейронных сетей заключается в том, что в них реализован поиск тех закономерностей, которые не всегда являются очевидными. Строятся логические цепочки между параметрами, анализ которых не подвластен человеческом мозгу. Также нейронные сети эффективны в решении задач, для которых еще не существует описываемых эвристик.

Нейронная сеть представляет математическую модель, состоящую из узлов называемых нейронами и взвешенных связей между ними.

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

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

Для обучения нейронной сети требуются только подготовленные данные, на основе которых она будет строить взаимосвязи между описанными признаками. Обученная нейросеть способна с высокой точностью относить объекты к имеющимся классам. Точность предоставленного решения оценивается при помощи разного рода метрик.

В данный момент практически никто не реализует нейронные сети и другие модели машинного обучения с нуля, предпочтительнее используются различные фреймворки. Одним из наиболее популярных и функциональных фреймворков является TensorFlow. Он включает в себя реализацию огромного числа моделей, функций по предобработке входных данных, метрик и их визуального представления.

Для каждого типа задач существуют подходящие метрики, так, например, для задачи регрессии подходит MSE и MAE, для компьютерного зрения – PSNR, SSIM и IoU, а для задачи классификации используются такие метрики как accuracy, precision, recall или AUC.

Accuracy – метрика задающаяся как доля правильных прогнозов относительно всех прогнозов.

Precision показывает долю правильно выбранных объектов среди всех выбранных.

Recall, в свою очередь, отражает долю верно выбранных объектов среди всех объектов, которые необходимо было выбрать.

1

Рисунок 1. Итог разделения элементов на классы при бинарной классификации.

2

Рисунок 2. Наглядная характеристика визуализация метрик Precision и Recall.

Одной из нетривиальных задач специалистов по машинному обучению является задача добавления нового класса распознаваемых объектов к уже распознаваемым нейронной сетью. Основная проблема заключается в том, что необходимо добавить на выходной слой еще один нейрон, соответствующий новому классу. Связи этого нейрона будут иметь веса по умолчанию, а сеть будет работать некорректно за счет того, что новый нейрон будет работать непредсказуемо. Для того чтобы этого не происходило, этот нейрон необходимо обучить.

В случае если обучать полученную нейронную сеть только на данных о новом классе, то старые нейроны начнут забывать предыдущие классы, эта проблема называется catastrophic forgetting. Кроме того, новый нейрон не будет знаком с остальными классами, потому он всё ещё будет вести себя непредсказуемо.

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

Одним из главных методов решения задачи дообучения на данный момент является transfer-learning. Метод заключается в том, что последний слой нейронов срезается вместе со всеми его весами и вместо него ставится новый слой размером с новое количество классов. В данном случае веса у остальных слоев сохраняются и «замораживаются», т.е. становятся недоступными для изменения. При этом на последнем слое веса заданы случайным образом, поэтому данную модель всё-ещё необходимо обучать, но в гораздо меньшем масштабе, т.к. предыдущие слои уже были обучены.

Проблема заключается в том, что для дообучения необходимо хранить все еще достаточно большой объем обучаемых данных и постоянно переучивать последний слой с нуля распознавать старые классы.

Решение, предлагаемое в данной работе, заключается в том, чтобы оставлять веса на последнем слое, при этом добавлять параллельно к нему дополнительный слой с одним нейроном и соединять их при помощи слоя Concatenate. Причём каждый раз, когда необходимо добавить новый класс, достаточно временно убрать соединяющий слой, добавить параллельно старым еще один слой с одним нейроном, соответствующим новому классу, и вернуть обратно соединяющий слой.

В таком случае веса у старых нейронов остаются, и их практически не надо менять. Необходимо лишь ознакомить их с новым классом, а также полностью обучить новый нейрон. Для этих целей достаточно датасета сравнительно малого объёма. Кроме того, большую часть датасета будут составлять данные о новом классе.

3

Рисунок 3. Реализация добавления нового класса на языке программирования Python.

В коде, приведённом выше, model – исходная модель. Каждый её слой, кроме слоя Concatenate копируется в новую модель вместе с весами связей, при этом они больше не будут изменяться при процессе обучения. После этого в конец добавляется ещё один нейрон, отвечающий за новый класс. Завершается процесс создания новой модели добавлением слоя Concatenate, который соединит нейрон нового класса с предыдущими.

Реализованная нейронная сеть

Прототип работающего программного продукта, который должен быть размещен в ИС, в которой функционирует НС, может выглядеть следующим образом:

Интерфейс должен быть простым и лаконичным для того, чтобы конечный пользователь не запутался и не допустил ошибку в процессе дообучения.

Первым шагом стоит ознакомить пользователя с необходимыми этапами дообучения сети.

4

Рисунок 4. Приветственный экран программного продукта может быть модульным.

Затем предоставить возможность выбора имени класса для того, чтобы в последствии добавить указанный класс в память информационной системы.

5

Рисунок 5. Пример визуализации этапа «Выбор имени класса».

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

6

Рисунок 6. Загрузка изображений как сбор датасета при помощи программного модуля.

После того как датасет был собран можно начать процесс дообучения. В этот момент необходимо показать пользователю, что дообучение в процессе.

7

Рисунок 7. Экран ожидания.

По завершении дообучения, стоит уведомить пользователя об окончании процесса и дать возможность протестировать полученную модель перед интегрированием ее в систему.

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

8

Рисунок 8. Завершение процесса.

Стоит отметить, что в процессе обучения можно также тренировать ещё одну нейросеть, называемую GAN. Данная нейронная сеть позволяет генерировать изображения, схожие с исходными. Таким образом можно отказаться от хранения датасета для старых классов, и вместо этого каждый раз генерировать новый. Единственная часть датасета, которую надо собрать – данные о новом классе.

Для решения задачи сбора датасета было придумано использование парсера изображений из различных источников таких как ImageNet. Его работа заключается в том, что пользователь вводит ключевые слова, описывающие класс, а парсер собирает из открытой базы данных изображения по подходящим тегам.

Благодаря тому что весь процесс дообучения может выполняться мало квалифицированным сотрудником за счет упрощения рутинной работы он может происходить на стороне клиента, следовательно ему не надо будет каждый раз обращаться к компании поставщику информационной системы с интегрированной нейронной сетью. Данное решение несет пользу как для клиента, так и для поставщика в виде экономии времени. Клиент не ждет обработки его запроса, а поставщик и вовсе не занимается этим вопросом.

Список литературы

  1. Документация фреймворка TensorFlow для языка программирования Python [Электронный ресурс]. – Режим доступа: URL: https://www.tensorflow.org/api_docs/python/tf – 2020.
  2. Catastrophic interference [Электронный ресурс]. – Режим доступа: URL: https://en.wikipedia.org/wiki/Catastrophic_interference – 2011
  3. Michael Nielsen, Neural Networks and Deep Learning [Электронный ресурс]. – Режим доступа: URL: http://neuralnetworksanddeeplearning.com/ – 2019.
  4. Aurélien Géron Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow – O'Reilly Media, Inc., 2019 – 856 с.

Интересная статья? Поделись ей с другими: