Содержание статьи
О важности датасета и о том, как сделать его лучше
Пройдемся по терминологии
Например, НАСА опубликовало довольно длинный документ, озаглавленный «Verification & Validation of Neural Networks for Aerospace Systems». Если вы интересуетесь нейронными сетями больше, чем я, вы можете начать с этого документа. Если вы настоящий фанат V&V, вам следует посмотреть книгу «Methods and Procedures for the Verification and Validation of Artificial Neural Networks»; ее объем составляет 293 страницы и, безусловно, превышает мои знания по этой теме как минимум на три порядка.
На нашей практике мы сталкивались с ситуациями, когда утечка данных значительно влияла на качество определения. В одном из наших проектов нейросеть стабильно ошибалась при определении объектов из определенного класса. Ручным тестированием мы обнаружили утечку данных. После удаления дубликатов ошибка пропала.
Этот шаг особенно важен для проектов, которые используют уже готовый датасет, найденный на просторах интернета. Важно проверить, что изображения в датасете находятся в том формате, с которым сможет работать выбранный фреймворк. Современные фреймворки работают с большим количеством разных форматов, однако до сих пор встречаются проблематичные форматы, например, jfif.
Чтобы избежать утечки данных, можно использовать скрипты и библиотеки, которые удаляют дубликаты. Можно настроить порог удаления, например, удалять идентичные картинки или схожие на 90% картинки. Чем больше дубликатов и похожих изображений будет удалено, тем лучше для нейросети.
Аугментировать датасет можно и нужно, но главная мысль этого шага — не увлекаться аугментациями. При увеличении объема датасета в 7 раз сетка не станет в 7 раз эффективнее, она может начать работать хуже. Стоит использовать только те аугментации, которые реально помогут, т.е. те, что отвечают реальным условиям. Если камера будет стоять внутри помещения, то аугментация “снег” или “туман” только навредит, ведь данных искажений в реальной жизни не будет.
В отличие от обычной K-блочной кросс-валидации, где данные делятся случайным образом на обучающие и тестовые группы, здесь учитывается их временная структура. Например, график температуры в Москве с 1780 до 2021 года — на основе этих данных система может дать прогноз, какой будет погода в следующем году или через пять лет.
Метод P-Out относится к исчерпывающим, когда нужно получить более точную оценку надежности модели, например в ветеринарии для определения болезни животного. Однако этот метод довольно увесистый в плане системных требований и времени, так как создает все возможные комбинации, используя Р записей для тестового набора.
Если мы используем все данные на обучение, то в момент предсказания нам придется проверять модель на тех же данных, на которых она обучалась. Такой способ оценки не показательный, модель будет предсказывать намного лучше, чем в боевых условиях. Чтобы повысить качество проверки, используют кросс-валидацию — данные разделяют на тестовую и обучающую выборку. В этом случае оценка качества модели получается более достоверной, так как алгоритм проверяют на тех данных, которые он еще не видел.
Как работает машинное обучение
Реальность оказалось далека от гугла. Птицы, запечатленные на заднем дворе с помощью простой веб-камеры, выглядели куда более тускло, часто были расположены к камере спиной или были видны лишь частично. Сами изображения были куда меньше, хуже по качеству, часто содержали разные помехи — капли дождя или насекомое на объективе, засвет солнцем, туман. Нейросеть просто не могла определить что находилось на таком изображении, ведь птицы на фото из датасета выглядели совсем по-другому.
Почему же важно проводить до тренировочную аугментацию только после разделения датасета? Дело в том, что может произойти частичная утечка данных: аугментированные изображения могут попасть в Validate, с точки зрения обучения модели нейросети аугментированные фото являются дубликатами, что плохо сказывается на тренировочном процессе.
Никто, конечно, не собирается осуждать четырехлетнего ребенка за то, что он сказал: «I goed to the park». Но если бы видный политик выступал с важной речью и неоднократно повторял «goed», «holded», «finded, «knowed» и т. д., аудитория была бы серьезно недовольна (или крайне озадачена), и политическая карьера спикера могла бы внезапно закончиться.
В контексте разработки программного обеспечения первые два термина имеют разные значения. Википедия, ссылаясь на Барри Бома, говорит, что верификация направлена на то, чтобы определить, правильно ли производится сборка продукта, а валидация направлена на определение, правильно ли продукт был собран. Поскольку обе эти проблемы важны, вы можете встретить аббревиатуру «V&V» («verification and validation»).
Все эти работы проделываются до начала обучения, ведь как вы могли понять из всего вышеизложенного обучение — не главный вопрос, а вот подготовка является основным и самым важным этапом разработки. Разработчику и клиенту важно знать свой датасет, знать из чего он состоит, какую структуру имеет. Это позволит быстро устранять ошибки определения.
Математические процессы, которые происходят в нейросети, не представляют собой особый алгоритм, предназначенный для классификации рукописных символов, или для прогнозирования образования торнадо, или для разработки процедур контроля для экстремальных авиационных маневров. Скорее математика в нейронной сети – это каркас, который позволяет нейросети создавать на основе обучающих данных специальную вычислительную модель.
Что такое кросс-валидация
Главная сложность кросс-валидации на временных рядах в том, что данные не должны пересекаться по времени: тренировочные данные должны идти строго до тестовых. Например, чтобы оценить, как модель предскажет погоду на 2001 год, можно брать для обучения все данные с 1974 до 2000 года.
Необходимо также проверить аннотации и их формат. Изображения в датасете могут отвечать всем вышеперечисленным требованиям, но если аннотации не будут в том формате, с которым работает фреймворк и архитектура модели нейросети, то ничего работать не будет.
При этом типе валидации в каждой итерации из датасета удаляется P объектов для тестирования, например два, а остальные используются для обучения. Если P = 2, то 48 примеров мы используем для обучения, а 2 оставим для проверки. Процесс повторяется со всеми возможными комбинациями.
Я не программист, поэтому, надеюсь, это означает, что я не обязан принимать эту парадигму. Я просто использую термин «валидация» для обозначения тестирования, анализа и наблюдения, которые мы проводим, чтобы убедиться, что обученная нейронная сеть соответствует требованиям системы.
Не каждая обученная модель будет работать правильно, например предлагать вам действительно интересные посты в соцсетях. Для проверки используют кросс-валидацию в машинном обучении. Этот метод помогает оценить надежность модели и ее работу на новых данных.
Нейронные сети могут решать чрезвычайно сложные задачи, потому что, когда они получают много входной информации, они «естественным» образом находят математические модели, как дети находят языковые модели. Но такой подход к обработке сигналов отнюдь не безошибочен.
Чтобы создавать и обучать компьютерные системы, используют методы математической статистики, матанализа, теорию вероятностей, теории графов. При этом разработчик не дает четкие инструкции, которые учитывают все возможные комбинации. Поиск решений и классификацию объектов машина проводит самостоятельно. Яркий пример использования машинного обучения — распознавание объектов по камерам видеонаблюдения или по фото. Как происходит машинное обучение. Источник
Кросс-валидация Hold-Out — это универсальная быстрая проверка. Мы делим данные на Train и Test, чтобы посмотреть предварительные результаты оценки модели. И далее принимаем решение о замене модели или ее доработке. Но если видим, что данных для обучения мало или, наоборот, система переобучается, то применяем более сложные методы кросс-валидации.