Содержание статьи
Как написать свою первую нейросеть на Python
Преждевременная остановка обучения
Вы можете собрать свой датасет. Он состоит из ряда параметров: дата, температура воздуха на улице, праздничные события, день недели, месяц и т.д. Эти поля называются features . Отдельная колонка в датасете — количество ожидаемой выпечки в определенный день ( target) :
А можно не ограничиваться готовыми данными. Если вам их не хватает, чтобы улучшить качество обучения и тестирования нейросети, то можете сделать свои. Для этого необязательно создавать новые. С помощью простого графического редактора можно отобразить оригинальную картинку, перевернуть ее, изменить цвета, контрастность, вырезать фрагменты и т.д. Таким образом, вы быстро получите подмножество данных, на которых сможете тренировать и тестировать нейросеть. Ведь на изображениях фактически разные кексы.
Удаление данных работает эффективно, но нивелирует время и усилия, затраченные на обучение модели. Проблему лучше предупредить, чем решать радикальными методами. Поэтому советую отслеживать количество тренировочных и тестовых ошибок нейросети на протяжении всех обучающих циклов.
Так часто происходит в реальных задачах, например, при распознавании предметов. Не у всех из них есть жесткие критерии: скажем, гипертрофированного мультяшного персонажа мы по-прежнему различаем как человека, хотя у него совсем другие пропорции. Нейронную сеть сложно научить похожему — но современные системы могут справиться и с этим.
Когда вы все проверили, разработчики исправили баги и модель отправилась в деплой на продакшен, ваша работа как тестировщика еще не заканчивается. На этом этапе вы должны продумать алерты. К примеру, если нейросеть прогнозирует увеличение количества нужной выпечки на 5% в течение 3 дней подряд, следует узнать об этом. Пригодится email-сообщение. Этот алерт позволит быстрее зафиксировать нестандартную ситуацию и разобраться, почему модель ведет себя именно так.
До сих пор в мире нет отработанной стратегии тестирования нейросетей по сравнению с тестированием веб- или мобильных приложений. Направление сложное, иногда непонятное, но заслуживающее внимания и исследования. В этой статье я собрала несколько интересных фактов и подходов к тестированию нейросетей и охотно поделюсь ими с вами.
Собранные данные должны быть для вас прозрачными, поскольку от них зависит качество нейросети. Внимательно посмотрите, какие случаи покрыты. К примеру, для таких числовых колонок, как возраст, нужно строить диаграммы. Для колонок с категориями типа образования — перечислить все возможности. Подробно продумайте это все по каждому типу ваших features .
Предположим, у вас есть пекарня и вы хотели бы использовать в работе искусственный интеллект. Его задача — прогнозировать нужное количество выпечки в зависимости от нескольких факторов. Это может быть день недели, потому что перед выходными посетителей больше. Или погода — ведь когда холодно, клиентов становится меньше. Или развлекательные события в парке вблизи пекарни, из-за чего к вам будет заглядывать больше людей. Нейросеть в своих прогнозах будет ориентироваться н а эти разные данные.
Разделение данных
Проверяйте модель на данных, с которыми она не должна работать. Для чего это делать? Допустим, ваша нейросеть в ответ на совершенно некорректные данные выдает вместо валидационного сообщения определенный корректный результат. Это говорит о сбое в ее работе, когда она не до конца понимает суть данных и прогнозов. Также модель может банально зависнуть при вводе некорректных данных, чего тоже лучше избегать.
Приоритетность параметров зависит не только от заложенных смыслов, но и от формата данных. Например, в работе с изображениями ваши features — это каждый пиксель. Тогда приоритетны контрастные пиксели, ведь именно они формируют рисунок как таковой, делают его считываемым. Подобные нюансы в размещении приоритетов следует учитывать почти в каждом типе данных, с которым будет взаимодействовать нейросеть.
Да, можно, и даже более сложную. В этом примере мы использовали только одну математическую библиотеку и четыре метода из нее, чтобы показать расчеты нагляднее. Но есть множество специальных библиотек и фреймворков для создания именно нейросетей, например Tenzorflow или Pandas. Они ускоряют процесс. Например, можно создать слой из нескольких десятков, а то и сотен нейронов, в одну строчку. А еще парой строчек добавить новые слои и задать правила для обучения.
График выглядит так, словно точнее описывает поведение точек, но он ложный. Это и есть оверфиттинг. Система, грубо говоря, «зазубрила» готовое решение, но оно не применимо к другим данным. Мы же хотим получить от нейросети не слепое следование за точками, а закономерность поведения. То есть нужно то, что изображает кривая на первом графике.
Помимо проверки качества машинного обучения, тестирование нейросети включает и все другие традиционные подходы: тесты функциональности, погрузки, перфоманса, безопасности. Помните и о черном ящике с подключенным к нему API. Во всех этих тестах обращайте внимание на распространенные проблемы:
По сути это код со специфическим алгоритмом, созданный подобно биологическим нейронным сетям человеческого мозга. Представьте себе систему, состоящую из слоев. Каждый слой из искусственных нейронов, соединенных между собой десятками или сотнями связей. Таких нейронов, как и слоев, может быть множество: от нескольких до миллионов. Детальнее можете узнать из этого видео:
Здесь важна итеративность, то есть повторение действий. Это подобно изучению нового материала: чем больше читаем о чем-то, тем лучше это запоминаем, а дальше распознаем и используем для вычислений или создания новых данных. Нейросеть делает так же. Объем данных должен быть достаточно велик. Только так нейросеть с каждой итерацией будет все лучше подстраивать свои параметры под нужный результат.
Другие методы и формулы. Чтобы нейроны обучались, нужно задать формулу корректировки весов — мы говорили про это выше. Если нейронов много, то формулу нужно как-то распространить на все из них. Для этого используется метод градиентного спуска: рассчитывается градиент по весам, а потом от него делается шаг в меньшую сторону. Звучит сложно, но на самом деле для этого есть специальные формулы и функции.