При разработке нейронной сети для решения той или иной прикладной задачи главной трудностью считается поиск наиболее удачной архитектуры сети. Однако, это лишь одна из проблем, которые предстоит решить. Следует иметь в виду, что нахождение оптимальной архитектуры и конфигурации нейронной сети не является залогом успеха, поскольку, прежде чем решение может быть использовано, сеть необходимо обучить. Под обучением сети понимается нахождение таких коэффициентов связей между нейронами, при которых достигается точность работы не ниже требуемой. Нахождение значений коэффициентов происходит в результате процесса обучения. Обучение производится путём подачи на вход сети примеров данных, аналогичных тем, которые будут анализироваться при реальной работе, а также подстройке коэффициентов связей с целью минимизации ошибок обработки входного сигнала. Давайте рассмотрим, какие шаги необходимо пройти при разработке новой нейронной сети.
Сбор обучающей базы
Важнейшей задачей становится сбор качественной базы примеров для обучения. В зависимости от конкретной задачи, сбор обучающей базы может быть весьма трудоёмким, а также требовать административных возможностей.
Обратимся к примеру. Предположим, что нам нужно реализовать систему, которая бы по фотографии VIN-номера на кузове автомобиля с высокой точностью определяла, является ли он «перебитым» (с целью дальнейшей легализации украденного автомобиля).
Очевидно, что для обучения нейронной сети под эту задачу потребуется база фотографий VIN-номеров (как подделанных, так и настоящих, поскольку нейронная сеть должна при обучении получить примеры обоих вариантов). И если с настоящими номерами непреодолимого барьера не возникнет, то фото фальшивых могут предоставить только узкие специалисты в данной тематике. Следует иметь в виду, что для качественного обучения база примеров должна быть весьма большой, содержать не менее 1000 примеров, плюс ещё около 20% от этого числа в качестве проверочной выборки. Точность сети измеряется не на тех примерах, на которых она обучалась, так же как и студент на экзамене решает не те задачи, на которых он учился. Также, для искусственного расширения обучающей базы используются техники аугментации данных. В примере с «перебитыми» номерами это могут быть несколько фотографий одного номера, сделанные с разных ракурсов и при разном освещении. При этом важно понимать, что сеть при обучении сама выделяет для себя те или иные признаки, по которым она впоследствии будет обрабатывать входные данные, проектировщик сети не управляет этим процессом. Поэтому при сборе обучающей базы необходимо учитывать этот факт и собирать разнообразные примеры входных данных. Вернёмся к нашему примеру с VIN-номерами. Если все поддельные номера будут сфотографированы только на тёмных автомобилях, то сеть при обучении, вероятнее всего, зафиксирует этот факт и впоследствии будет плохо определять подделку на светлых машинах, а также часто срабатывать ложно на тёмных. Важно отметить, что обучающая и проверочная выборки должны быть размечены, т.е. каждый пример должен быть снабжён правильным ответом. При обучении разметка позволяет вычислять ошибку на каждом шаге обучения с целью подстройки коэффициентов связей, а при проверке точности – определять правильно ли сеть обработала проверочный пример и вычислять общую точность работы. Таким образом, ошибки в разметке существенно влияют на качество обучения.
Представление данных для подачи на вход нейронной сети
После того как база обучения собрана, встаёт задача представления данных для подачи на вход нейронной сети. Следует понимать, что нейронная сеть работает только с числами, поэтому данные нужно привести к числовому представлению. И, если с фотографиями это достаточно просто (подавать массив числовых значений пикселей), то в случае, например, текста эта задача достаточно нетривиальна (хотя эффективные решения были найдены и с успехом используются).
Разработка архитектуры сети
Если предыдущие задачи были решены, то можно приступать непосредственно к разработке архитектуры сети. При этом следует понимать следующее:
- Сложная сеть с большой обучающей выборкой вероятнее всего будет обучаться довольно долго (несколько часов, а порой и больше суток).
- Сказать заранее какой подход или набор параметров будет наиболее эффективным, как правило, нельзя. Поэтому приходится выдвигать гипотезы о том, какая архитектура и параметры дадут требуемую точность, и проверять их экспериментально.
Исходя из этого, можно сделать вывод, что на скорость разработки значительно повлияет обеспечение проекта аппаратными ресурсами, в особенности необходимым количеством видеокарт.
Упаковка нейронной сети
Завершающий этап разработки проекта – упаковка нейронной сети в удобную для применения форму (клиентское или серверное приложение, специализированное устройство), что является уже более традиционной работой для программистов и, возможно, инженеров-электронщиков.
Резюмируя, нужно отметить, что наличие качественной базы обучения – это фундамент проекта. Если такой базы нет, то никакая архитектура сети не даст высокой точности.