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

Отладка

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

Проверка данных

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

Узоры

Часто сеть делает неверные прогнозы в конкретных случаях. Вы можете попытаться выявить закономерности в ошибочных предсказаниях. Эти шаблоны указывают на отсутствующие примеры в наборе обучающих данных.

Выбросы

Выбросы — это данные, которые значительно отличаются от других данных в вашем наборе данных. Значительное количество выбросов снижает производительность вашего алгоритма. Поскольку ваша сеть вряд ли сможет извлечь из них уроки, их можно безопасно исключить из набора данных. Выбросы можно найти, проанализировав метаданные изображения (соотношение сторон, разрешение, яркость и т. д.), встраивания или показатель достоверности вашего классификатора.

Уменьшенный набор данных

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

Вместимость модели

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

Исчезающие/взрывающиеся градиенты

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

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

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

Формат модели

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

Сегодня каждая среда глубокого обучения имеет собственный формат модели: .pt для PyTorch; .pb для TensorFlow, .caffemodel для Caffe или Intermediate Representation для Intel OpenVino. Это вызывает много сложностей, так как не все операции машинного обучения реализованы во всех библиотеках. ONNX — это посредник, используемый для преобразования между различными фреймворками машинного обучения. Преобразование вашей модели в формат .onnx — хорошая идея, так как это помогает упростить переносимость вашей модели и повысить кросс-функциональность.

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

Первоначально опубликовано на https://kapernikov.com 10 ноября 2022 г.