среда, 7 апреля 2010 г.

Seti - масштабируемая система машинного обучения в Google

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

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

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

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

Несколько лет назад в Google начали разрабатывать хорошо масштабируемую систему машинного обучения. Её назвали "Seti". Сейчас она способна обрабатывать большие выборки и стала самой широко используемой системой классификации в Google.

После создания нескольких прототипов были сформированы следующие требования к создаваемой системе:
  • поддержка бинарной классификации (отнесение к одному из двух классов) с подсчетом вероятностей отнесения к каждому классу;
  • Работа в параллельном режиме;
  • масштабируемость для обработки выборок из сотен миллиардов объектов и более;
  • масштабируемость для обработки миллиардов характеристик и более;
  • автоматическое определение значимых комбинаций характеристик;
  • точность, сопоставимая с лучшими из современных классификаторов;
  • время, требующееся для учета новых данных, не превышает нескольких минут.
Точность у Seti сейчас вполне приличная и сопоставима на малых выборках с другими широко используемыми классификаторами.

Что отличает Seti от других классификаторов, так это масштабируемость. Так, в среднем в выборках, для анализа которых используется эта система содержится 100 миллиардов объектов и 1 миллиард признаков. Правда, распределение этих чисел нельзя назвать симметричным - медианы числа объектов и числа характеристик по выборкам равны 1 миллиард и 10 миллионов соответственно. Эти объемы данных, действительно исследуемых в Google, серьезно превышают объемы, традиционно обрабатываемые в научной среде - в репозитарии данных для машинного обучения самая большая выборка состоит из 4 миллионов объектов.

Главной характеристикой хорошей системы машинного обучения является точность.

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

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

Рекомендация 1: Делайте систему простой, даже если это приведет к небольшой потере точности.

Хорошая точность при анализа самых разных предметных областей - это очень хорошо и нужно, есть даже соблазн полностью на этом сконцентрироваться. Но в алгоритме применяемой на практике системы есть еще несколько не менее важных аспектов:
  • Простота использования: Люди, работающие над какими-то практическими задачами не захотят экспериментировать с системой машинного обучения, которую сложно установить и которой сложно пользоваться. Большинство практиков вообще-то не являются экспертами в области машинного обучения и просто не захотят тратить много времени на то, чтобы понять как же заставить эту систему работать.
  • Надежность:  Люди хотят использовать надежную систему в реальных задачах. Они будут использовать систему, которая просто работает, не падает в случайные моменты времени и не требует постоянного контроля. Ранние версии Seti обладали немного большей точностью на больших наборах данных, но они были очень сложны. Она создавали большую нагрузку на сеть и на GFS (статья о ней на хабре), они требовали постоянного внимания к себе. Очень немногие команды разработчиков хотели попробовать их.
Seti обычно используется в областях, где внедрение системы машинного обучения значительно увеличит точность классификации по сравнению с используемой системой. Обычно выигрыш от использования достаточно велик, чтобы можно было пренебречь небольшими различиями в точности разных версий алгоритма. И как правило, эти различия в точности с лихвой окупаются возможностью лучшей фильтрации данных, уточнения параметров, легкого добавления новых возможностей. В системе классификации ценится стабильность, масштабируемость и простота использования. Эти характеристики могут стать решающими при выборе какую систему использовать, а от какой отказаться.

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

Рекомендация 2: Начните с разработки под несколько конкретных задач.

Очень соблазнительно разработать общую систему машинного обучения, которая не нацелена на какие-то конкретные приложения. В конце концов, цель разработки и заключалась в построении такой системы, полезной при анализе как множества текущих, так и возможных задач в будущем. Но в Google решили сфокусироваться на ограниченном круге конкретных задач классификации. Это решение оказалось удачным по нескольким причинам:
  • Возможность определить, что общего есть у этого небольшого числа задач. При построении системы, работающей с ними со всеми, более вероятным является то, что она может оказаться полезной и при решении других задач.
  • Что еще более важно, это ограничение позволило быстро отсечь ненужные части будущей реализации. Очень легко сделать систему слишком общей или чрезмерно сконцентрироваться на отдельных деталях. Реальные задачи приземляют разработку и направляют процесс принятия решений. Без таких задач при разработке Seti сложно было даже определиться с форматом входного файла.
  •  Работа с несколькими командами, занятыми реальными задачами, позволила выявить часто-возникающие проблема и облегчить процесс установки и начала использования системы для последующих разработчиков.

Рекомендация 3: Умейте сказать "Нет".

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

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

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

1 комментарий:

  1. Смстема разработки всегда интересна, главное понимать сам процесс

    ОтветитьУдалить