Не волнуйтесь, это не то, что вы думаете
Что происходит, когда у вас вырисовывается крайний срок, но нужно сделать много дерьма? Вещи забываются, делаются ошибки.
В науке о данных это может быть особенно раздражающим, поскольку часто есть много вещей, которые мы можем сделать, чтобы улучшить решения, которые мы создаем. На самом деле, иногда количество вещей, которые мы можем настроить в погоне за все более точными моделями, исчисляется миллионами… ладно, может быть, не миллионами, но иногда так кажется.
Я часто оказываюсь в таких ситуациях, когда модели должны быть доставлены, но по какой-то причине я забываю проверить еще одну итерацию для повышения производительности. Вот один быстрый пример:
Один из моих деловых партнеров попросил меня построить модель классификации документов. Я настроил все на распознавание документа с помощью pytesseract, очистил полученный текст с помощью словарей от предварительно обученных моделей встраивания слов, таких как GLOVE, стандартизировал текст с помощью лемматизации, токенизации и т. д.
Затем я перенес некоторый код из PyTorch, чтобы настроить классификатор документов с помощью помощников torchtext.
Когда все было готово, я быстро перешел к запуску данных через конвейер. Встала с офисного стула, побежала на кухню выпить кофе, сделать био-брейк, проверить свои социальные круги на Facebook и LinkedIn, а затем вернуться к моему стулу, чтобы проверить работу модели.
Настоящее дерьмо на этот раз.
Производительность была ужасной. В этом случае точность классификации документов менее 80 % — это очень плохо.
В панике я начинаю повторять свой код очистки. начинаю доделывать. Я продолжаю корректировать. Разные варианты очистки, разная архитектура модели (по сути, с добавлением большего количества слоев), разная… такая разная… такая разная, что практически не влияет на производительность модели.
Разочарованный и взволнованный, я снова отхожу, чтобы собраться с мыслями. Шагая по офису, я мельком смотрю на экран своего компьютера. На этот раз на меня смотрел один фрагмент кода. Это были мои эпохи.
Фу*%, как я мог быть таким глупым.
Каждый раз, когда я тренировал модель, я вставал, думая, что обучение займет какое-то время. Я никогда не останавливался, чтобы проверить, сколько времени на самом деле занимает тренировка.
Когда я, наконец, посмотрел на время тренировки, я заметил, что оно быстрое. Слишком быстро для нейронной сети, работающей на процессоре. Почему? Это были мои эпохи. Поскольку я использовал шаблонный код из документации PyTorch, я не менял количество эпох по сравнению с унаследованным кодом.
Решение: измените код, чтобы включить больше 25 эпох вместо 2.
В результате производительность модели стабилизировалась с точностью около 90%. Коллективный вздох. Намного лучше. Действительно намного лучше.
Урок? Есть некоторые важные элементы, о которых мы должны знать при обучении наших моделей, чтобы обеспечить наилучшую производительность. Вот мой краткий контрольный список некоторых из тех рычагов, которые мы можем использовать для улучшения моделей, не пытаясь изменить всю архитектуру.
1. Время обучения!
2. Настройка гиперпараметров (не всегда имеет большое влияние, но попробуйте несколько очень разных значений, чтобы увидеть, влияют ли они на производительность модели)
3. Увеличение данных (иногда нам просто нужно больше данных)
4. Ансамбли (разные модельные алгоритмы могут находить разные закономерности в данных и в сочетании могут обеспечить более точное общее решение)
Хотите узнать о науке о данных, карьерном росте, жизни или неправильных бизнес-решениях? Подпишитесь на мою рассылку здесь и получите ссылку на мою бесплатную электронную книгу.