(←) предыдущая запись ; следующая запись (→)

размышления, машинное_обучение

Вокруг нейросетей сейчас большой хайп. Существенно больше, чем был вокруг машинного обучения, компьютерного зрения, классического NLP (natural language processing). У меня есть своё объяснение того, почему именно нейросети так хорошо «зашли».
Мне кажется, в развитии машинного обучения было два основных этапа.

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

Так продолжалось приблизительно до 2012-го года, когда в силу разных причин нейросети, наконец, стали хорошо работать и громко об этом объявили. К этому моменту для нейросетей уже появился сопутствующий инструментарий типа видеокарточек, готовых библиотек для автоматического дифференцирования и кучи других полезных вещей. И, вроде, нейросети сильно повысили качество предсказаний, но мне это кажется второстепенным.
Куда важнее, что они позволили стандартизовать «интерфейс», через который взаимодействуют разные этапы алгоритма. На входе каждого слоя многомерная матрица, на выходе другая многомерная матрица. Причём число типов преобразований довольно сильно ограниченно. Это сильно сокращает инструментарий и в некотором смысле «приземляет» исследователей.
В таком урезанном сеттинге пропадает множество классических подходов. Так в описании нейросети вы не встретите фразы «а здесь мы кластеризуем промежуточные результаты» или «для каждой пары объектов посчитаем расстояние» и даже «отфильтруем выбросы» (я утрирую, но не сильно). В классических методах ML есть, где развернуться полёту мысли, а в нейросетевые больше похожи не на творчество, а на чистую инженерию.
Но вместе с обеднением набора используемых технологий пропадает и куча рутинных задач по тому, как сшить разные подходы. Существенная часть ML — это попытка скрестить ежа с ужом. Эта часть работы скучна, сложна, да ещё и не даёт применять end-to-end подходы (end-to-end означает, что вы оптимизируете не каждый этап по-отдельности, а всю конструкцию в целом, что очень сложно сделать, когда каждый из этапов оптимизируется совершенно по-разному).

Грузоперевозки стремительно рванули вверх благодаря появлению морских контейнеров. В контейнер можно упаковать меньше и хуже, чем без контейнера. Зато эти контейнеры легко ставить по тыще на один корабль, не думая о том, что лучше поставить вниз: стеклянные вазы или бумажные журналы.
Разработка ПО тоже немало выиграла после появления докер-контейнеров: они дают возможность меньше думать о том, как запустить программу на любом компьютере без плясок с бубном (которые неизбежны при установке); притом удобство было обменяно на сравнительно небольшие накладные расходы.
Так же и машинное обучение с приходом в массы нейросетей получило в своё распоряжение набор легко стыкуемых модулей. Вот этот модуль превращает слова в числа, тот — числа в картинки. Состыкуем и из слов получим картинки. А если соединить модули вот таким проводком, результат «сам собой» улучшится. Слои нейросети как кубики лего. Каждый слой прост как кирпич. Из нескольких кирпичиков уже можно собрать что-то чуть более сложное, но всё ещё стандартизованное: стену, например. А из нескольких стен можно собрать дом, притом какой хочешь. Из очень простых кубиков получается строить весьма сложные конструкции.

(1/n)