Перевод Книги Эндрю Нга «Страсть К Машинному Обучению» Главы 36 И 37

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



Обучение и тестирование на образцах с разными дистрибутивами

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

У вас также есть большой выбор из 200 000 изображений, собранных из Интернета.

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

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

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

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

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

Но я против такого подхода.

В связи с тем, что около 97,6% данных (205 000/210 000 ≈ 97,6%) валидационной и тестовой выборок будут взяты из данных, найденных в Интернете (а не полученных от пользователей), и они не будут отражать реальное распределение, по которому должно быть достигнуто высокое качество.

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

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

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

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

Но между теорией и практикой по-прежнему существует огромный разрыв.

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

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

) Это затрудняет систематические академические исследования обучения и тестирования на различных дистрибутивах.

На заре машинного обучения данных было мало.

Обычно была выборка, взятая из какого-то дистрибутива.

Оно было случайным образом разделено на обучение, проверку и тестирование.

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

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

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

В примере с детектором кошек вместо разделения всех 10 000 загруженных пользователем изображений между проверочным и тестовым наборами мы могли бы использовать 5000 для проверочного и тестового наборов.

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

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

В следующей главе мы обсудим преимущества этого подхода.

Или второй пример.

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

У вас есть 20 000 примеров того, как пользователи произносят названия улиц.

Кроме того, существует 500 000 примеров других аудиоклипов, в которых люди говорят на разные темы.

Вы можете взять 10 000 примеров произношения адресов для проверочного и тестового наборов и использовать оставшиеся 10 000 плюс 500 000 примеров для обучающего набора.

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

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

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

Также из Интернета загружено 20 000 изображений.

Должны ли мы включить все 20 000 + 10 000 = 30 000 изображений в обучающий набор для обучения алгоритма или лучше отбросить 20 000 изображений, полученных из Интернета, чтобы избежать смещения алгоритма? В более ранних поколениях алгоритмов (таких как системы компьютерного зрения, разработанные вручную и основанные на простом линейном классификаторе) существовал реальный риск того, что объединение обоих типов данных приведет к снижению производительности системы.

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

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

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

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

Эта уверенность основана на том факте, что при использовании сложной системы будет некоторое отображение x -> y, которое будет хорошо работать для обоих типов данных.

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

Добавление дополнительных 20 000 изображений приведет к следующим эффектам:

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

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

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

    ).

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

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

    Теоретически это может ухудшить качество алгоритма.

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

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

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

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

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

«Мозг» вашего алгоритма достаточно велик, поэтому вам не придется беспокоиться о нехватке чердачного пространства.

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

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

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

Допустим, у нас также есть большая коллекция отсканированных исторических документов:

Перевод книги Эндрю Нга «Страсть к машинному обучению» Главы 36 и 37

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

Нет смысла приводить эти данные в качестве негативных примеров.

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

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

продолжение Теги: #Машинное обучение #Профессиональная литература

Вместе с данным постом часто просматривают: