У машинного обучения есть много ручек для настройки; и Deep Learning, в частности, полны ими: размер ваших данных, глубина сети, ее широта, алгоритм оптимизации, функция потерь, функции активации… Чтобы еще больше усложнить ситуацию, кажется, что все взаимосвязано. Именно по этой причине много драгоценного времени может быть потрачено впустую на настройку ручек проектов машинного обучения.

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

Учитывая, что мы разделяем наши данные в обычном разделении обучение-валидация-тест, вы хотите убедиться, что у вас все хорошо по четырем вещам: обучающий набор, набор проверки (dev), набор тестов и приложение в реальном Мир. Есть также несколько других моментов, которые следует учитывать: вы хотите, чтобы наборы данных для проверки и тестирования исходили из одного и того же распределения данных (которое должно быть распределением, которое вы ожидаете получить в реальном мире), потому что вы будете оптимизировать и обобщение для этого распределения. Вы также должны учитывать, что на этапе обучения вашего проекта может произойти неустранимая ошибка. И, наконец, Эндрю говорит, что тенденция глубокого обучения заключается в том, чтобы игнорировать традиционное разделение данных и вместо этого использовать разделение 98/1/1% или подобное. Причина этого изменения заключается в том, что наборы данных глубокого обучения, как правило, намного больше, скажем, в миллионах экземпляров, поэтому даже тестовый набор 1% будет включать более 10 000 образцов.

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

Следующим шагом будет проверка производительности на проверочном наборе. Если на этом этапе частота ошибок значительно возрастает, это означает, что ваш алгоритм плохо работает с невидимыми данными, поэтому вам следует применить методы уменьшения дисперсии, такие как регуляризация, получение большего количества данных или применение исключения. . Есть еще две вещи, которые следует учитывать на этом этапе. Во-первых, если вы сравниваете разные алгоритмы по производительности их проверочных наборов, то в идеале вы хотите иметь единую оценочную метрику. Например, если у вас есть два классификатора, Один и Два, настроенные по-разному, которые классифицируют А, В и С, то вашей единственной оценочной метрикой может быть средний уровень ошибочной классификации для каждого алгоритма. Таким образом, процесс принятия решений становится простым. В случае, если такие показатели, как средний показатель, невозможно получить, потому что они не имеют смысла, Эндрю говорит, что вы можете попробовать оптимизировать один показатель и удовлетворитьостальные, а именно сохранить их как ограничения с минимально допустимым значением. уровень. И второе, что следует учитывать, это то, что вы можете вручную выполнить анализ ошибок по результатам вашего набора проверки. Таким образом, вы можете выявить типы ошибок и количественно их оценить. Затем вы можете расставить приоритеты по устранению ошибок, которые особенно распространены.

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

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

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

· В случае, если ваши источники данных скудны, вы можете дополнить их данными из аналогичного дистрибутива (в качестве примера он приводит непрофессиональные изображения кошек в низком разрешении и профессиональные изображения кошек в высоком разрешении). Тем не менее, новый, больший набор данных не должен случайным образом перемешиваться в разделении поезд-валидация-тест; вместо этого большая часть целевых данных (не дополнения) должна быть отправлена ​​на проверочные и тестовые наборы, потому что вы будете оптимизировать эти данные. Некоторые из этих данных также должны войти в обучающий набор, чтобы алгоритм учитывал их вместе с дополнительными экземплярами. Кроме того, возникает еще одна проблема: когда вы имеете дело с обучающими и проверочными наборами из разных дистрибутивов, увеличение ошибки от обучения к проверке больше нельзя интерпретировать как результат дисперсии. Затем рекомендуется создать дополнительное разделение между этапами обучения и проверки; то есть обучающий набор для проверки, который поступает из того же дистрибутива, что и обучающий набор, но содержит невидимые данные. Таким образом вы изолируете каждую из проблем: дисперсию и несоответствие данных.

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

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

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