предыдущие главы


15. Одновременная оценка нескольких идей во время анализа ошибок


У вашей команды есть несколько идей, как улучшить определитель кошек в вашем приложении:


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

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


Изображение Собаки Большие кошки Нечеткие Комментарии
1 х Питбуль необычного цвета
2
3 х х Лев; фотография сделана в зоопарке в дождливый день
4 х Пантера за деревом
Доля (%) 25% 50% 50%

Изображение 3 в приведенной таблице относится и к большим кошкам и к нечетким. Таким образом, из-за того, что мы можем отнести одно изображение к нескольким категориям ошибок, суммарные проценты в нижней строчке не ограничиваются 100%.


Несмотря на то, что в начале работы вы можете сформировать определенный набор категорий для ошибок (Собаки, Большие кошки, Нечеткие изображения) в процессе ручного отнесения ошибок классификации к этим категориям, возможно вы решите добавить новые типы ошибок. Например, предположим, вы рассмотрели дюжину изображений и решили, что много ошибок сделаны классификатором на изображениях из Инстаграмма, на которые наложены цветовые фильтры. Вы можете переделать таблицу, добавить в нее столбец «Инстаграмм» и заново классифицировать ошибки с учетом этой категории. Рассматривая вручную примеры, на которых ошибается алгоритм и задавая себе вопрос как вы, как человек, смогли правильно разметить изображение, вы сможете увидеть новые категории ошибок и, возможно, вдохновиться на поиск новых решений.


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


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


Предположим, что вы закончили анализ ошибок из 100 ошибочно классифицированных примеров валидационной выборки и получили следующее:


Изображение Собаки Большие кошки Нечеткие Комментарии
1 Х Питбуль необычного цвета
2 Х
3 Х Х Лев; фотография сделана в зоопарке в дождливый день
4 Х Пантера за деревом
Доля (%) 8% 43% 61%

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


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


16. Очистка валидационной и тестовой выборок от неправильно маркированных примеров


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


Изображение Собаки Большие кошки Нечеткие Ошибка в разметке Комментарии
98 Х Ошибочно размечена, как имеющая кошку на заднем плане
99 Х
100 Х Нарисованная кошка (не настоящая)
Доля (%) 8% 43% 61% 6%

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


Например, представьте, что точность, которую показывает ваш классификатор следующая:


  • Общая точность на валидационной выборке…………..90% (10% общая ошибка)
  • Ошибка, связанная с ошибками разметки……………..0.6% (6% от общей ошибки на валидационной выборке)
  • Ошибка, связанная с другими причинами………...9.4% (94% от общей ошибки на валидационной выборке)

Здесь, погрешность в 0.6% в следствии неправильной маркировки может быть недостаточно значительной по отношению к 9.4% ошибки, которые вы могли бы улучшить. Ручное исправление ошибок разметки валидационной выборки не будет лишним, но ее исправление не является критически важным так как не принципиально, составляет ли реальная общая ошибка вашей системы 9.4% или 10%


Предположим, вы улучшаете кошачий классификатор и достигли следующих показателей точности:


  • Общая точность на валидационной выборке…………..98% (2% общая ошибка)
  • Ошибка, связанная с ошибками разметки……………..0.6% (30% от общей ошибки на валидационной выборке)
  • Ошибка, связанная с другими причинами………...1.4% (70% от общей ошибки на валидационной выборке)

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


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


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


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


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


17. Если у вас большая валидационная выборка, разделите ее на две подвыборки, и рассматривайте только одну из них


Предположим у вас большая валидационная выборка, состоящая из 5000 примеров на которых доля ошибок составляет 20%. Таким образом, ваш алгоритм неправильно классифицирует порядка 1000 валидационных изображений. Ручная оценка 1000 изображений потребует долгого времени, поэтому мы можем решить не использовать их всех для целей анализа ошибок.


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


eye


Давайте продолжим наш пример, описанный выше, в котором алгоритм неправильно классифицировал 1000 примеров из 5000 составляющих валидационную выборку. Представьте, что вы хотите взять 100 ошибок для анализа (10% от всех ошибок валидационной выборки). Нужно случайным образом выбрать 10% примеров из валидационной выборки и составить из них «Валидационную выборку глазного яблока » (? Eyeball dev set), мы их так назвали для того, чтобы все время помнить, что мы изучаем эти примеры при помощи собственных глаз.


Замечание переводчика: с моей точки зрения определение «выборка глазного яблока» звучит совсем не благозвучно (особенно с точки зрения русского языка). Но при всем уважении к Эндрю (и принимая во внимание, что ничего лучше я не придумал), оставлю это опредление


(Для проекта по распознаванию речи, в котором вы будете прослушивать аудио клипы, возможно вы бы вместо этого названия использовали что-то вроде «валидационная выборка для ушей»). Таким образом Валидационная выборка глазного яблока состоит из 500 примеров, в которых должно быть порядка 100 неправильно классифицированных. Вторая подвыборка валидационной выборки, которую мы назовем Валидационной выборкой черного ящика (Blackbox dev set), будет состоять из 4500 примеров. Вы можете использовать «Подвыборку черного ящика» для автоматической оценки качества работы классификаторов, измеряя по ней их доли ошибок. Вы так же можете использовать эту подвыборку для выбора между алгоритмами или для настройки гиперпараметров. Однако, вы должны избегать рассмотрения примеров этой подвыборки вашими глазами. Мы используем термин «Черный ящик» потому что мы будем использовать подвыборку, его составляющую, как «черный ящик»
прим. переводчика: т. е. Объект структура которого нам не известна
для оценки качества классификаторов.


image


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


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


18 Насколько большими должны быть Выборка глазного яблока и Выборка черного ящика?


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


  • Валидационная выборка глазного яблока, которая содержит 10 ошибок вашего классификатора, будет считаться очень маленькой. Имея только 10 ошибок очень тяжело аккуратно оценить влияние различных категорий ошибок на качество классификатора. Но если у вас очень мало данных и нет возможности добавить больше примеров в выборку глазного яблока, это все равно лучше, чем ничего и в любом случае поможет с приоритизацией работы над проектом.
  • Если ваш классификатор ошибается порядка 20 раз на выборке глазного яблока, вы сможете сделать грубые прикидки основных источников ошибок.
  • С примерно 50 ошибками, вы получите хорошее представление об основных источниках ошибок вашего классификатора.
  • Если у вас порядка 100 ошибок, вы получите очень хорошее понимание откуда приходят основные ошибки. Я встречал людей, которые вручную анализировали даже больше ошибок иногда до 500. Почему бы и нет, если вы имеете достаточно данных.

Допустим, доля ошибок вашего классификатора составляет 5%. Для того, чтобы с уверенностью получить порядка 100 неправильно размеченных примеров в выборке глазного яблока, эта выборка должна содержать порядка 2000 примеров (так как 0.05*2000 = 100). Чем меньше доля ошибок вашего классификатора, тем большая необходима выборка глазного яблока, чтобы получить из нее достаточно большую выборку ошибок для анализа.


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


А что можно сказать про «Выборку черного ящика»? Мы уже упоминали, что в общем случае валидационная выборка содержит 1000 — 10000 примеров. Дополним это утверждение, Валидационная выборка черного ящика, состоящая из 1000 — 10000 примеров обычно (часто) дает вам достаточно данных для настройки гиперпараметров и выбора между моделями, но если вы возьмете больше данных для выборки черного ящика, хуже не будет. Выборка черного ящика из 100 примеров конечно маловата, но все еще будет полезной (лучше чем ничего).


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


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


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


19 Выводы: Базовый анализ ошибок


  • Когда вы начинаете новый проект, особенно в области, в которой вы не являетесь экспертом, довольно сложно предположить наиболее эффективное направление приложения усилий
  • Поэтому не пытайтесь сразу разработать и построить идеальную систему. Вместо этого постройте и натренируйте простую систему настолько быстро, насколько это возможно — может быть за несколько дней. Затем используйте анализ ошибок, который поможет вам определить наиболее эффективные направления работы и затем итеративно улучшайте ваш алгоритм исходя из этого.
  • Проводите анализ ошибок, вручную изучая порядка 100 примеров из валидационной выборки, которые ваш алгоритм неправильно классифицировал и оценивайте, какие категории ошибок вносят основной вклад в общую ошибку классификации. Используйте эту информацию для приоритизации работы над типами ошибок, которые нужно исправить.
  • Рассмотрите возможность разделения вашей валидационной выборки на Выборку глазного яблока, которую вы будете исследовать вручную и Выборку черного ящика, которую не будете трогать руками. Если качество работы алгоритма на выборке глазного яблока много лучше, чем качество на выборке черного ящика, у вас произошло переобучение алгоритма на выборке глазного яблока и нужно рассмотреть возможность добавления в нее большего количества данных.
  • Валидационная выборка глазного яблока должна быть достаточно большой для того, чтобы количества ошибок вашего алгоритма на ней хватило для ручного анализа. Валидационной выборки черного ящика, состоящей из 1000-10000 примеров обычно хватает для разработки приложений.
  • Если ваша валидационная выборка не достаточно большая, для того, чтобы разбить ее на выборку глазного яблока и выборку черного ящика, просто используйте Валидационную выборку глазного яблока для ручного анализа ошибок, выбора моделей и настройки гиперпараметров.

Комментарии (2)


  1. toshass
    13.08.2018 15:25
    +2

    eyeball (verb, informal, gerund or present participle: eyeballing) look or stare at closely. — просмотр чего-либо (экземпляров выборки) с пристальным вниманием. Так что можно заменять глазные яблоки на "достоверную выборку" или что-то подобное. Спасибо за перевод!


    1. alexey_nichnikov Автор
      13.08.2018 15:39

      Спасибо за замечание (об этом значении слова eyeball я не знал). Но кроме «пристального рассмотрения» или того, что это выборка нам хорошо знакома (или достоверна) в эту выборку Эндрю Ын вкладывает еще один смысл — он говорит, что мы должны все примеры этой выборки изучать собственными глазами (we’ll call an ? Eyeball dev set? to remind ourselves that we are looking at it with our eyes). Т. е. главное в этом определение то, что мы с ней работаем «вручную» (а, не скажем, какими-нибудь статистическими методами, которые тоже могут многое рассказать о выборке и так же позволят судить об ее достоверности). Тут может быть подошло бы что-то типа «ручной выборки», «глазной выборки» (там дальше он прямо так и говорит про случай анализа аудио-клипов: «you would call this set an Ear dev set instead», т. е. «ушная выборка»). Но все эти словосочетания не добавляют благозвучия, поэтому я оставил «выборку глазного яблока».