предыдущие главы
Обучение и тестирование на образцах с разными дистрибутивами
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 изображений приведет к следующим эффектам:
- Дает нейронной сети больше примеров того, на что похожи кошки, а какие нет. Это полезно для алгоритма, поскольку изображения из Интернета и изображения, загруженные пользователями мобильных приложений, имеют некоторое сходство.
Ваша нейросеть сможет применить часть знаний, полученных при обучении на изображениях из Интернета, к изображениям мобильного приложения.
- Заставит нейросеть тратить часть своих ресурсов на изучение свойств, характерных для изображений из Интернета (имеющих, например, более высокое разрешение, или другое распределение кадров и т.п.
).
Если эти свойства сильно отличаются от изображений, загруженных в мобильное приложение, это «израсходует» часть возможностей распознавания нейросети.
Таким образом, у вас будет меньше возможностей распознавать данные, полученные от распространения мобильного приложения, и об этом действительно стоит беспокоиться.
Теоретически это может ухудшить качество алгоритма.
Шерлок Холмс говорил, что мозг подобен чердаку, где пространство ограничено и «каждый раз, когда вы добавляете знания, вы забываете то, что знали раньше.
Поэтому крайне важно не тащить туда все подряд, чтобы бесполезные факты не вытеснили полезные».
К счастью, если имеется достаточная вычислительная мощность, необходимая для построения большой нейронной сети, то имеется большой чердак, и это не является серьезной проблемой.
Тогда у вас будет достаточно мощности для тренировки как на данных из Интернета, так и на изображениях, загруженных в мобильное приложение, при этом мощности сети хватит для всех данных.
«Мозг» вашего алгоритма достаточно велик, поэтому вам не придется беспокоиться о нехватке чердачного пространства.
Но если у вас нет достаточно большой нейронной сети (или другого столь же мощного алгоритма обучения), вам следует уделять больше внимания тому, чтобы распределение вашего обучающего набора соответствовало распределению проверочного и тестового наборов.
Если вы считаете, что у вас есть данные, которые не представляют никакой ценности, вам следует отказаться от них, чтобы сэкономить вычислительную мощность.
Например, предположим, что проверочная и тестовая выборки содержат в основном случайные изображения людей, мест, достопримечательностей и животных.
Допустим, у нас также есть большая коллекция отсканированных исторических документов:
Ничего напоминающего кошек в этих документах нет. Они также полностью отличаются от дистрибутивов проверочного и тестового наборов.
Нет смысла приводить эти данные в качестве негативных примеров.
Польза от первого описанного выше эффекта будет незначительна — нейросеть вряд ли сможет извлечь из этих данных что-то, что поможет ей лучше работать на проверочных и тестовых образцах вашего приложения.
Включение этих данных приведет к пустой трате вычислительных ресурсов и, возможно, уменьшит способность нейронной сети аппроксимировать функции (в конечном итоге уменьшая ее возможности распознавания).
продолжение Теги: #Машинное обучение #Профессиональная литература
-
Подготовка К Ccie. Лабораторные Работы
19 Oct, 24 -
Продажи Htc Legend Начинаются В России!
19 Oct, 24 -
Радио-Э №8,5
19 Oct, 24 -
Симула – 50 Лет Ооп
19 Oct, 24 -
Мму В Картинках (Часть 1)
19 Oct, 24