Как ямы, на которые наступило машинное обучение, могут сделать вас более профессиональным?

глубокое обучение

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

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

Это не статья начального уровня, и чтобы понять эту статью, лучше всего сначала попрактиковаться в уничтожении модели на Pytorch или Tensorow.

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

1. Распространенные ошибки в машинном обучении

Беркер классифицирует ошибки машинного обучения по трем основным категориям, от низкой до высокой серьезности.

1. Эти ошибки только потратят ваше время

Две самые сложные вещи в вычислительной науке — это присвоение имен и аннулирование кеша, и этот тип ошибок подробно описан в этом твите.shape error— самая страшная и самая распространенная ошибка, обычно вызванная перемножением матриц несовместимых размеров.

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

2. Эти ошибки могут привести к неточным результатам

Этот тип ошибки может стоить вам дорого, поскольку может привести к неточным результатам модели.

В 2015 году рейс AirAsia из Сиднея, Австралия, в Куала-Лумпур, Малайзия, совершил аварийную посадку в аэропорту Мельбурна из-за технического сбоя. Если результаты модели будут неточными, как технический сбой в этом самолете, он в конечном итоге полетит не в тот пункт назначения.

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

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

3. Эти ошибки могут заставить вас думать, что ваша модель «идеальна».

Это серьезная ошибка, которая заставит вас переоценить производительность вашей модели. Такие ошибки часто трудно заметить, потому что мы крайне неохотно признаем, что кажущаяся «идеальной» модель может быть иллюзией.

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

Производительность модели кажется «идеальной», обычно из-за переобучения, которое делает обучающие данные более нерепрезентативными, или из-за того, что выбран неправильный показатель оценки, оба из которых будут подробно объяснены позже.

Если вы можете вынести хоть немного из этой статьи, надеюсь, вы помните: нет ничего более смущающего и разочаровывающего, чем узнать, что реальные результаты вашей модели на самом деле плохие.

Жизненный цикл машинного обучения

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

Далее мы обсудим некоторые, казалось бы, глупые ошибки на каждом этапе.

1. Что выводить: показатели оценки

Машинное обучение можно свести к процессу постоянного уменьшения значения функции потерь.

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

Независимо от того, какая среда, если функция потерь больше не может отражать истинную производительность модели, тогда проблема большая.

Кроме того, есть некоторые приемы, которые делают модель хуже:

1) Смешайте тренировочные и тестовые наборы

Смешивание обучающих и тестовых наборов легко и обычно очень хорошо обучает, но такие модели очень плохо работают в сложных реальных средах.

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

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

Лучший способ — разделить данные на обучающий набор, проверочный набор и тестовый набор одновременно, а затем поместить их в разные папки, и имена должны быть очень понятными, например, TrainDataLoader и TestDataLoader.

2) Неправильное использование функции потерь

Неправильное использование функций потерь на самом деле очень редко, потому что есть бесчисленное множество материалов, обучающих вас, как использовать функции потерь. Два наиболее распространенных случая неправильного использования функции потерь заключаются в том, что неясно, должна ли функция потерь использовать распределение вероятностей или логарифм (то есть следует ли добавлять softmax), а во-вторых, путать функцию регрессии и функцию классификации.

Даже в научных кругах принято путать функции регрессии и классификации. Например, набор данных Amazon Reviews отзывов пользователей и звездных рейтингов Amazon часто используется ведущими лабораториями для задач классификации, но это не совсем правильно, потому что 5-звездочные обзоры, очевидно, больше похожи на 4-звездочные обзоры, чем на 1-звездочные. Для оценки следует использовать упорядоченную регрессию.

2. Неправильный выбор показателей оценки

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

В целом, функция оценки легче понять, чем потеря. Хорошая идея - это как можно больше регистрироваться.

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

Уделите больше внимания выбору показателей оценки. Например, вы не можете просто использовать точность для оценки производительности модели последовательности, потому что несоответствие между последовательностями приведет к точности 0. Таким образом, расстояние используется для оценки данных последовательности. Выбор неправильной метрики оценки — очень болезненная вещь.

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

Автор допустил очень впечатляющую ошибку, проделав некоторую работу по семантическому анализу, чтобы преобразовать предложения на естественном языке в запросы к базе данных, чтобы ответить на типичные вопросы SQL, такие как «Сколько завтра рейсов из Монреаля в Атланту?». Чтобы оценить точность модели, они отправили SQL-запрос с экранированием модели в базу данных и проверили, соответствует ли возвращенное содержимое содержимому реального запроса. Он создает ситуацию, когда при отправке бессмысленного запроса к базе данных база данных возвращает «ошибку». Затем он отправляет прогнозируемый SQL, который был поврежден, и реальный SQL в запрос к базе данных, оба возвращают «ошибку», и модель вычисляет этот случай как: 100% точность.

Это приводит к руководящему принципу, согласно которому любые ошибки, которые вы совершаете, только ухудшают производительность. Настаивайте на проверке прогнозов, которые на самом деле делает модель, а не просто на результатах метрик оценки.

3. Избегайте ошибок оценки показателей

1) Сначала пройдитесь по всем показателям оценки

Если модель работает хорошо без какой-либо подготовки, должно быть что-то не так.

2) Все процессы протоколируются

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

В НЛП это обычно означает, что вам нужно поменять местами метки, что сложно, но на 100% того стоит, а журналы дают качественное объяснение процесса обучения модели. Например, языковые модели обычно начинают с того, что учатся выводить строки типа eeeeeeeeee, так как это самые распространенные символы в данных.

Если вы имеете дело с задачами изображения, то журнал доставляет больше хлопот, потому что вы не можете сохранить изображение как журнал в виде текста. Эту проблему можно решить, используя ASCII, который используется для сохранения журнала во время обучения OCR, чтобы можно было визуализировать входные данные изображения:

3) Набор валидации исследований

Используйте метрики оценки теста, чтобы определить лучшие и худшие образцы в ансамбле. Зная примерную ситуацию, используя какой-либо метод количественной оценки достоверности (например, softmax), зная, какие распределения модель, вероятно, будет работать хорошо, а какие распределения будут работать плохо, остаточный анализ полезен в задачах регрессии.

Но имейте в виду, что, как отмечает Anscombe Quartet, средние значения могут ввести вас в заблуждение.

Anscombe Quartet: Все 4 модели имеют одинаковое среднее значение и дисперсию, и все они соответствуют одной и той же линии регрессии t. Поэтому вместо того, чтобы слишком полагаться на статистику, изучите сами данные.

Если у вас есть многомерная проблема, попробуйте сопоставить ошибку с одной функцией, чтобы выяснить, почему. Есть ли области входного пространства, где модель работает очень плохо? Если это так, вам может потребоваться дополнить эту область данных дополнительными данными или дополнительными данными.

Учитывайте влияние абляции и помех на производительность модели. Такие инструменты, как LIME и Eli5, упрощают моделирование. Следующая статья хорошо описывает анализ возмущений, показывая, что модель CNN для классификации рентгеновских лучей использует метки, введенные самим рентгеновским аппаратом, чтобы определить, есть ли у пациента пневмония, а не использование самого рентгеновского аппарата, который может и заболеванием. Существует корреляция между показателями:

medium.com/@family eats/У меня есть…

3. Модель

Многие курсы и статьи посвящены моделированию. Но на самом деле, как специалист по машинному обучению, большую часть времени тратит на работу с данными и показателями, а не на исследование инновационных алгоритмов.

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

1. Типы ошибок модели

Существует много типов ошибок модели, а именно:

1) Модели, включающие недифференцируемые операции

В модели глубокого обучения все должно быть сквозным дифференцируемым для поддержки обратных вычислений. Таким образом, вы можете захотеть, чтобы недифференцируемые операции были четко идентифицированы в средах глубокого обучения, таких как TensorFlow. Это неправильно, так как Беркера особенно смущал слой Keras Lambda, потому что он может нарушить обратное вычисление. Обходной путь — использовать model.summary() для проверки того, что большинство параметров поддаются обучению. Если вы обнаружите слой с необучаемыми параметрами, это может нарушить возможность автоматического дифференцирования.

2) Не удалось успешно закрыть отсев во время тестирования

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

Эту проблему можно решить с помощью eval(). Следует также отметить, что отсев при обучении модели может привести к странному явлению — модель более точна на проверочном наборе, чем на обучающем. Это связано с тем, что в проверочном наборе используется отсев, который может показаться недостаточным и может вызвать у вас некоторые головные боли.

3) Параметр размера неверен

Различные платформы имеют разные соглашения о количестве выборок (размер пакета), длине последовательности (длине последовательности) и количестве каналов (каналов). это, вы сделаете ошибку.

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

2. Избегайте ошибок модели

1) Модульный, тестируемый

Если обнаруживается слой с необучаемыми параметрами, он может нарушать способность к автоматическому дифференцированию.

Написание хорошо структурированного кода и его модульное тестирование могут помочь избежать ошибок модели.

Разделение модели на отдельные блоки кода, каждый из которых имеет четко определенное определение функции, может быть эффективно протестировано. Смысл теста в том, чтобы убедиться, что модель согласуется с ожиданиями при условии изменения количества выборок и количества входных данных? Беркер рекомендует пост Чейза Робертса с подробным описанием модульного тестирования кода ML:

medium.com/@keeper6928…

2) Размерное утверждение

Беркер предпочитает включать утверждения измерений в код ML, давая читателю понять, какие измерения следует и не следует изменять. Конечно, он выдает ошибку, если происходит что-то неожиданное.

Выразительный код Tensorflow по Кит ITO. Обратите внимание на модульность и аннотации.

По крайней мере, возьмите за привычку добавлять комментарии к размеру кода, чтобы читатели могли читать его напрямую, не запоминая много информации. Ознакомьтесь с реализацией BeautifulTacotron Китом Ито по следующему адресу, который является хорошим примером аннотации:

GitHub.com/Кит ИТО/Он…

3) Переоснащение простых моделей небольшими данными

Совет: сначала убедитесь, что модель переоснащена для очень небольшой части набора данных, чтобы исключить очевидные ошибки за короткий период времени.

Постарайтесь максимально упростить настройку модели через конфигурационный файл и указать тестовую конфигурацию с наименьшим количеством параметров. Затем добавьте шаг в CI/CD для проверки переобучения на очень маленьких наборах данных и запустите его автоматически. Это поможет отследить изменения кода, которые нарушают работу модели и конвейера обучения.

4. Данные

1. Сначала разберитесь с данными

Прежде чем начать моделирование, вы должны устать от разведки данных.

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

Как правило, сами данные могут выявить некоторые проблемы: несбалансированность данных, проблемы с типами файлов или необъективность данных. Предвзятость данных трудно оценить алгоритмически, если у вас нет очень «умной» модели, которая распознает эти проблемы. Например, эта «умная» модель сама знает о предвзятости: «Все фотографии кошек сделаны в помещении, все фотографии собак сделаны на улице, так что, возможно, я обучаю классификатор для помещений и улицы вместо классификатора А для идентификации. кошки и собаки?".

Карпати создал платформу аннотаций для ImageNet, чтобы оценить свою работу и углубить свое понимание набора данных.

По словам Карпати, системы профилирования данных выполняют просмотр данных, их нарезку и нарезку. В своем выступлении на KDD 2018 в Лондоне он подчеркнул, что многие инженеры машинного обучения Uber пишут код не для оптимизации моделей, а для оптимизации меток данных.

Чтобы понять данные, вам сначала нужно понять следующие три распределения данных:

  • Распределение входных данных, например, средняя длина последовательности, среднее значение пикселя, продолжительность звука

  • Распределение выходных данных, несбалансированность классификации - большая проблема

  • Распределение выходов/входов, которое вы обычно моделируете

2. Выберите способ загрузки данных

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

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

В настоящее время Pytorch Dataset и DatasetLoader являются хорошим способом сбалансировать прозрачность и эффективность.Выделенные пакеты torchtext обрабатывают текстовые наборы данных, а torchvision обрабатывают наборы данных изображений.Эти пакеты обеспечивают относительно эффективный способ загрузки, заполнения и пакетирования каждого домена.Данные.

3. Способы ускорить загрузку данных

Вот что Беркер узнал из своих попыток ускорить загрузку данных:

1) Не загружать данные, которые в данный момент загружаются

Это связано с тем, что вы в конечном итоге обнаружите, что это может привести к потере данных или загрузке дублирующихся данных. Ямы, на которые наступил Беркер:

  • Написание регулярного выражения для загрузки некоторых файлов из папки, но регулярное выражение не обновляется при добавлении нового файла, что означает, что новый файл не может быть успешно загружен

  • Неправильный расчет шагов в эпохе приводит к пропуску некоторых наборов данных.

  • В папке есть рекурсивные символы, из-за чего одни и те же данные загружаются несколько раз (в Python рекурсия ограничена 1000).

  • Невозможно полностью пройти иерархию файлов, чтобы загрузить данные во вложенные папки

2) неправильно сохраненные данные

Не помещайте все свои данные в один каталог.

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

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

Изображение ниже является хорошим примером:

3) Неправильная предварительная обработка

Неправильное использование данных при предварительной обработке распространено, особенно в задачах НЛП.

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

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

Различия в словарном запасе между обучающим и тестовым наборами также проблематичны, поскольку слова, которые появляются только в тестовом наборе, не обучаются.

Поэтому понимание данных и раннее выявление этих проблем очень ценно.

4. Избегайте ошибок обработки данных

1) Логируйте как можно больше

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

2) Запомните гиперпараметры модели

Вы должны быть хорошо знакомы с гиперпараметрами модели:

  • Сколько образцов?

  • Насколько велико количество образцов, выбранных для сеанса обучения?

  • Сколько партий в эпохе?

Они также регистрируются или могут быть добавлены некоторые утверждения, чтобы гарантировать, что ничего не будет извлечено.

3) Запишите все состояния во время предварительной обработки

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

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

4) Даунсемплинг

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

Нам не нужны изображения в формате Full HD для обучения классификатора собак/кошек, мы можем использовать расширенную свертку для обучения понижающей дискретизации или традиционный градиентный спуск для понижающей дискретизации.

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

V. Заключение

Подводя итог 5 руководящим принципам машинного обучения:

  • Начните с малого, и эксперимент пойдет быстро. *Сокращение времени цикла позволяет раньше обнаруживать проблемы и быстрее проверять гипотезы.

  • Разберитесь с данными. *Вы не можете сделать хорошую работу по моделированию, не зная данных. Не тратьте время на причудливые модели и спокойно занимайтесь исследованием данных.

  • Логируйте как можно больше. *Чем больше информации в процессе обучения, тем легче выявить аномалии и внести улучшения.

  • Сосредоточьтесь на простоте и прозрачности, а не только на эффективности. *Не жертвуйте прозрачностью кода, чтобы сэкономить немного времени. Гораздо больше времени тратится на понимание непрозрачного кода, чем на запуск неэффективных алгоритмов.

  • Если модель невероятно хороша, может возникнуть проблема. *В машинном обучении есть много ошибок, которые могут «обмануть» вас, и быть хорошим ученым означает находить и устранять эти ошибки рационально.

Рекомендуемое чтение:

Андрей Карпати также написал очень хороший блог «Рецепт обучения нейронных сетей», в котором также рассказывается о распространенных ошибках в машинном обучении, но Карпати больше сосредоточен на технических деталях и глубоком обучении, читайте по следующему адресу:

Карточные люди боятся ее беременности.GitHub.IO/2019/04/25/…

via к data science.com/rookie — в то время как RO…


Исследовательский институт ИИ установил контакты с такими известными компаниями, как Ali Entertainment, Megvii, Sogou Search, Xiaomi и т. д., чтобы помочь всем лучше подать заявку на работу и найти работу, доставить резюме в отдел кадров с помощью одного щелкните и подготовьте несколько внутренних групп push-каналов.

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

a