Ещё один шаг в самообучении машин





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

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

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

Это серьезный недостаток, и поэтому возникла идея: может ли машинное обучение — обучить себя тому же, что делает человек? Такая система была создана, и удивительно, что эта новость еще не добралась до хабрасообщества!


ТРОТ (Tree-based Pipeline Optimization Tool)



Ренди Ольсон (Randy Olson), аспирант из Computational Genetics Lab (University of Pennsylvania) в качестве своего дипломного проекта разработал систему ТРОТ (Tree-based Pipeline Optimization Tool).

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

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

Идея достаточно проста – генетический алгоритм.
Это алгоритм поиска нужной нам цепочки путём случайного подбора, с использованием механизмов, аналогичных естественному отбору в природе. О них достаточно подробно написано в википедии, на хабре, или в книге «Самообучающиеся системы» (рекомендую для интересующихся этой темой, есть в сети в электронном виде).

В качестве функции отбора (Fitness функции) выступает точность предсказания в тестовой выборке, в качестве объекта популяции – scikit-методы и их параметры.

Результаты



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

from tpot import TPOT  
from sklearn.datasets import load_digits  
from sklearn.cross_validation import train_test_split  
  
digits = load_digits()  
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target,  train_size=0.75) 
 
tpot = TPOT(generations=5, verbosity=2)  
tpot.fit(X_train, y_train)  
 
print( tpot.score(X_train, y_train, X_test, y_test) )
tpot.export('tpot_exported_pipeline.py')


При запуске кода, через пару минут TPOT может получить цепочку построения модели, точность которой достигает 98%. Это произойдёт в том случае, когда TPOT обнаружит что классификатор Random Forest отлично работает на данных MNIST.

Правда, так как этот процесс вероятностный, для повторяемости результатов рекомендуется задавать параметр random_state – у меня, например, за 5 поколений нашлась только цепочка с SVC и KNeighborsClassifier.

Проверка системы на ещё одной классической задаче, ирисах Фишера, дало точность 97% за 10 поколений.

Будущее



ТРОТ – это опенсорсный проект, который возник всего месяц назад (что для таких систем вообще детский возраст) и сейчас активно развивается. На сайте проекта автор призывает сообщество Data Scientists присоединятся к развитию системы, код которой доступен на гитхаб (https://github.com/rhiever/tpot)

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

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


  1. SantyagoSeaman
    16.12.2015 15:23

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


  1. zim32
    18.12.2015 21:52

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


    1. Sadler
      22.12.2015 11:24

      В каком смысле «из персональных компьютеров»? Обсчёт слоёв можно проводить независимо, а затем распараллелить на сколько нужно компьютеров любой библиотекой под Ваш любимый язык программирования. Другое дело, GPU для таких расчётов подходит куда больше, нежели CPU в силу необходимости обработки огромного числа связей нейронов, поэтому пришлось бы ещё повозиться с той же CUDA.


      1. zim32
        23.12.2015 00:55

        Ну чтобы объеденить всех по интернету для построения нейронной сети