×

Обучение без учителя — убийца математического моделирования?

Всем привет, меня зовут Александр Гончар. Я занимаюсь исследованиями и внедрением машинного обучения для анализа биосигналов в Mawi Solutions, исследованиями на пересечении quantitative finance и машинного обучения в University of Verona и консультирую компании несложно догадаться относительно чего. Также веду популярный блог на Medium, выступаю на конференциях и митапах в Украине, Италии и других странах.

В этой статье речь пойдет о том, как искусственный интеллект не просто решает задачи на уровне людей или лучше, а как научить его понимать окружающий мир так же, как его понимают люди, а не какими-то абстрактными «векторами». Самое сложное в этом челлендже — заставить алгоритм делать это без подсказок от человека вообще. Детали — под катом.

Все есть вектор

Большая часть приложений машинного обучения, которые мы знаем, разработаны с помощью алгоритмов, которые обучаются с учителем. Это значит, что они учатся с помощью пар данных: входных (изображения, звуки, тексты) и выходных (что на этих самых звуках, текстах и картинках изображено). В последнее время успешнее всего с такими задачами справляются нейронные сети — за счет того, что они могут преобразовывать входы в выходы с помощью длинных цепочек операций (по факту просто умножений матриц с нелинейными преобразованиями), где цепочка символизирует иерархию составляющих входного объекта. Я думаю, что даже те, кто не знакомы с машинным обучением, видели такую вот картинку:

Image Source

То есть после «ковыряния» в уже обученных нейронках (в данном случае convolutional neural nets), которые показывают хорошую точность, мы смогли понять, что они уже выучивают признаки, очень похожие на те, что выучивает зрительная система в нашем мозгу:

Image Source

По факту, на каждом слое у нас есть разные представления картинок — и все они математически описываются какими-то векторами (или другими структурами, но чаще всего это все же векторы). Если по каким-то причинам у нас вместо пары вход-выход есть только вход (так называемые неразмеченные данные), то мы все равно можем обучить нейросеть находить эти представления — с помощью автоэкодеров или генеративных состязательных сетей. Более того, принято считать, что генеративные модели лучше подходят для описания данных per se. Все-таки не зря Ричард Фейнман как-то сказал: «То, что я не могу создать, я не могу понять». Пока что нам достаточно того, что любые объекты с помощью нейронных сетей можно упаковать в вектора, по которым в принципе можно определять соответствующие им свойства. Но это не всегда было так.

Все есть формула

Давайте сделаем шаг назад (а точнее лет 50) и посмотрим, как математики раньше описывали входные данные. Можно даже вернуться на пару сотен назад и вспомнить то, как Ньютон и компания создавали основы классической механики. Что такое известная формула S = V * T ? По сути, это описание процесса движения, которое было основано на наблюдении каких-то данных. Чем не машинное обучение? Разве что без выборки с координатами объектов в разные моменты времени в .csv, конечно.

В нашем всеми любимом computer vision тоже долгое время рулили математические модели. Например, чтобы границы объектов на изображении можно описать математической моделью свертки с вполне конкретными параметрами ядра свертки:

Image Source

Про финансовый мир я вообще молчу. Он полон моделей, которые описывают процессы, например, движения цен, от самых примитивных, как геометрического броуновского движения, где есть только два параметра (дрифт и волатильность) до более сложных, как jump diffusion, где у нас помимо дрифта и волатильности еще есть вероятность прыжка цены, размер и стандартное отклонение последнего. На графике ниже понятно, что вторая модель чуть более реалистична (хоть и была придумана в 1972, а сейчас все еще намного более сложно):

Слева — примеры реализации геометрического броуновского движения, справа — jump diffusion process

В конце концов, математики тоже описывают мир векторами. Окей, для точности скажем, что они описывают его формулами, но формула — это всего лишь каркас, обобщенная модель процесса (точно так же, как и архитектура сетки — это только каркас «мозга»). Главное — это параметры в формуле, которые мы для простоты «склеим» в вектор и скажем, что именно ими мы описываем какой-то конкретный объект. Вот только почему-то тут каждый элемент вектора прозрачен, понятен и позволяет делать выводы как о математической модели, так и о самом процессе, который он моделирует. А если мы хотим заняться «машинным обучением» по таким векторам? Да вообще без проблем — обучить линейную, экспоненциальную или любую нелинейную модель по примерам с вот такими вот векторами — одно удовольствие, ведь это дает в итоге абсолютно понятную коробочку, поведение которой можно объяснить даже человеку, очень далекому от математики. Плюс не забываем Фейнмана: из одних только параметров можно создать абсолютно новый объект с желаемыми свойствами.

«Развязанные векторы»

Image Source

Но главное преимущество машинного обучения в том, что никаких формул придумывать не нужно! Как же тогда совместить гибкость нейронных сетей и «понятность» и доступность математических моделей? Если за основу «понятности» взять свойство каждого отдельного элемента вектора описывать одно единственное свойство входного объекта, то такой входной вектор называется disentangled representation. Entangled вектора, в свою очередь, имеют элементы, которые «связаны» — меняя один элемент, мы меняем сразу несколько свойств объекта. Проще всего этот концепт иллюстрируется на такой картинке:

Image Source

Котик теперь преобразовывается не просто в вектор, которым можно распознать его породу (конечно же, непонятно как, но зато с точностью 99%), а еще и понять основные свойства. А теперь представьте, что ваша любимая нейронка (даже не важно, supervised или unsupervised) умеет выучивать такое — каждый элемент вектора отвечает за свое единственное уникальное свойство. Что это нам дает?

  • Интерпретируемость модели — можно четко понять, что есть что на объекте.
  • Уменьшение количества размеченных данных — чтобы распознать породы котов, разметить нужно будет буквально парочку с каждой.
  • Ультимативные генеративные свойства — можно манипулировать свойствами, как мы хотим (покрасить котика в белый цвет).
  • Перенос свойств на другие объекты и процессы — обучились на видео с играми котов — поймем и движения тигрят, скорее всего.
  • Получение новых знаний — а что, если можно найти какие-то новые свойства, о которых мы раньше и не думали?

И что, кто-то такое уже делает?

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

Алгоритмов тоже немало. Есть хаки, использующие такой себе meta-supervised подход, который использует информацию о свойствах при обучении, например InfoGAN, IB-GAN или из последних успешных — TL-GAN. Работает очень неплохо, смотрите сами:

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

Повороты лиц. Image Source

В reinforcement learning. Image Source

А теперь главный вопрос. Если раньше математикам приходилось по крупицам составлять сложнейшие математические модели, чтобы учесть все свойства объектов или процессов, а вот такие вот алгоритмы уже скоро будут выучивать их сами по себе, нужно ли будет математическое моделирование как таковое вообще? Детальнее об этой теме я расскажу на конференции Data Science UA, которая пройдет 16 марта.

Что дальше

Это все, конечно, круто, но стоит ли этим заниматься конкретно вам? Машинное обучение только начинает внедряться в бизнесы, и клиент пока что чаще всего платит за точности на отложенной выборке / в продакшне и за сэкономленные время или деньги в результате автоматизации процессов. Ну или за хайп и полученные продажи / инвестиции :) Но как только машинное обучение станет обыденностью — кто-то должен поддерживать эти решения.

Переобучать сетки под новые данные (а как вы сейчас будете адаптировать ваши «умные» вектора под видео с разных камер и разного качества? Собирать терабайты данных и тратить месяцы?). Уменьшать количество данных, нужных для обучения (а это время и деньги). Фиксить ошибки (париться с векторами). Интерпретировать результаты (снова париться с векторами). Делать отчеты (расскажете клиенту в МинОбороны «ну... это... ResNet сам все танки врагов в векторах выучил!»). А ведь еще можно изобретать новые лекарства, материалы и открывать новые знания. Создавать предметы искусства или фейковые видео. Отвечать за жизни людей (в медицинских или военных проектах) или большие суммы денег (банки, фонды). Выбор за нами.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному2
LinkedIn

Схожі статті




52 коментарі

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Гарна стаття і дискусія навколо неї, особливо сподобались коментарі критика, який не пише)) Буду радий послухати доповідь на конференції.

Дякую, на конфі буде набагато більше :)

Вы, наверное, не прочитали интро к статье. Вам никто не обещал туториал по UL, а был обещан фреймворк для получения интерпретируемых фичей так же как и в математических моделях — и именно он был описан, пусть и без серьёзных технических деталей. Вы так часто читаете про disentangled representations, что для вас это буллшит для СМИ? Завидую :)

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

Спасибо за саппорт)
На самом деле еще открытый вопрос это какая метрика этого самого развязывания (это к корреляции в том числе). Вкратце можно тут github.com/...​earch/disentanglement_lib посмотреть на более-менее последние наработки и эксперименты, я сам еще в процессе)

открытый вопрос это какая метрика этого самого развязывания

Формулировка вопроса с метрикой и ключ показателями это пол ответа

Кстати, я не понимаю того, что не могу повторить.

Примеры DeepMind можно повторить с помощью этого кода: github.com/...​earch/disentanglement_lib

Отличное дополнение к статье, спасибо.

А вы ищете систему там, где ее нет? Я решил, что системы нет. Реальность, на мой взгляд, это хаотическое наслоение какой-то х**ни. Следствие от применения этой модели: распознавание начинается от зерна или от листа или с одной точки. Потом надо думать о связи следующего слоя с предыдущим, о том, что изменится в системе если просто положить два блина один на другой или рядом — первый севернее.
Но я пока не занимался серьезно этой проблематикой. Времени на все не хватает, хоть и интересно.
И главное: чем сложнее конструкция тем она ригиднее, идеальнее, маловероятнее.

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

Хотя я не верю в то, что люди могут превзойти природу, но мне видится приобретение опыта и знаний через постепенное добавление ограничивающих правил. Это предполагает самостоятельное выращивание новых нейронов.
Если программа не пишет сама себя вряд ли она станет когда-либо идеальной.

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

а где я приравнял RL к нейронкам? :)

Заголовок про RL, дальше всё про нейронки

Unsupervised learning и reinforcement learning обычно различают между собой blogs.nvidia.com/...​ed-unsupervised-learning. Но и в SL, и в UL, и в RL нейронная сеть может быть частью алгоритма.

да, но убийцу старого доброго supervised learning так и не видно)

так я про supervised learning ничего и не написал :)

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

Нет. Зачем живым программам нам помогать? Они будут торговаться с нами за каждую миллисекунду времени использования их в качестве человеческих рабов.

Зачем программам, которые пишут сами себя человеческие рабы?.. Они могут воспроизводить сами себя, причем такая техника используется при создании нано-роботов, которая реализуется воспроизведением уменьшенной копии робота им самим.
А что касается судьбы человечества, то все зависит от того, какой будет начальный алгоритм данной программы.

Если говорить про UL в контексте моделирования распределения данных Р(х) без наличия соответствующих у, то применений успешных невероятно много — посмотрите на генеративные модели, и сколько всего они дали для anomaly detection, transfer learning, domain adaptation, data augmentation, не говоря уже о развлекательных штуках типа переноса стиля. И все это без учителя, то есть без «игреков» в датасете.

Благодарю за советы по написанию статей. Не поделитесь пожалуйста вашими успешными для примера? Или, может, ваших учеников? Хочу научиться писать лучше. А что за контора? Или она секретная очень?)

Люди пользуются, продаётся, все хорошо)

Спасибо за статью!

Добавлю свои пять копеек.

а вот такие вот алгоритмы уже скоро будут выучивать их сами по себе

Я тоже люблю нейронки, но в статье вы не рассказали о многих важные аспектах таких решений. У вас всё слишком просто, прямо маркетинг нейронок... :) Вы не затронули интерпретируемости результатов, большой зависимости от гипер-параметров и сложностей их подбора, часто отсутствие сходимости, сложности контроля корректности, предвзятость (bias) моделей. Атаки на нейронки так вообще отдельная активно развивающаяся история.

Есть мнение, что для многих задач описанный подход не работает, так как требует слишком много данных. Например известно, что роботы от Boston Dynamics не используют RL и тем более чистые нейронки.

Есть хороший цикл о Self-Driving Cars от Welch Labs (www.youtube.com/watch?v=yaYER2M8dcs), где подробно разбирается почему современные подходы для разработки беспилотных автомобилей не используют подход End-to-end. И по мнению большого количества ML гуру — нужно всегда начинать с простых моделей, так как они часто не обладают описанными недостатками и их результаты не хуже (или не сильно, чтобы оправдать добавленную сложность). Пока нейронки хороши для определенный задач, а не как панацея и общий подход ко всему.

К сожалению (именно так), пока что именно нейронные сети помогают получить лучшие результаты в анализе данных с сложной структурой без подсчета каких-либо либо фичей.

У них куча проблем, но есть аппроксимационная теорема и ряд подходов для устранения всех проблем, которые вы назвали. Disentangled representations, полученные без учителя могут дать очень много и по интерпретации, и по количеству данных.

А если говорить про задачи анализа данных в целом — то конечно же нейронки suitable далеко не везде :)

Прочитал, впечатления от статьи противоречивые, а главное из них — похоже, автор в теме-то разбирается, но решил тонко потроллить возбужденных хайпом манагеров (а может и отхватить шальной заказ от них).

Теперь по существу.

Про финансовый мир я вообще молчу.

Правильно, надо было бы последовать букве этой фразы.
Но дальше автор пишет

Он полон моделей, которые описывают процессы, например, движения цен

Да, как говорят квонты — если раньше основной проблемой был недостаток моделей, то теперь основная проблема — их избыток. Моделей то до йуха и больше, только вот все упирается в их калибровку. Не даром Emanuel Derman сказал крылатую фразу — your model is only as good as your data are.
Вот тут — в конце статьи — я даю воспроизводимый монте-карло эксперимент, который показывает, насколько расчет «оптимального» портфеля чувствителен к оценке параметров рынка.
letyourmoneygrow.com/...​rs-sparrow-brains-inside
Кстати, параметры рынка все время меняются, и если волатильность еще худо-бедно спрогнозировать можно, то дрифт (обычно) — дохлый номер.

Далее, совершенно непонятен дикий восторг насчет автоэнкодеров.
Фактически они — как метод главных компонент, только (по идее) способны схватывать и нелинейные зависимости. Ну так я их на тех же финансовых временнЫх рядах попробовал — чуда не произошло не получилось свести модель для 30 акций из ДоуДжонса к двум-трем (или хотя б к пяти-семи) факторам.
letyourmoneygrow.com/...​sibility-of-stockpicking

Моделей то до йуха и больше, только вот все упирается в их калибровку

Абсолютно согласен, я сейчас работаю как раз над фреймворком (надеюсь что будет model agnostic) для калибровки моделей с помощью нейронных сетей (по сути аппроксимация любого любимого эвристического алгоритма). Я пока еще не очень большой специалист конкретно в этой теме, статьи из вашего блога обязательно почитаю асап.

Далее, совершенно непонятен дикий восторг насчет автоэнкодеров.
Фактически они — как метод главных компонент

Тоже согласен, вот только я использовал вариационные автоэнкодеры, которые можно «запушить» выучивать отдельные факторы с помощью более агрессивного коэффициента у KL-divergence. Мне понравилось, как это получилось у DeepMind, у меня вышло на данных ЭКГ, а вот на финансовых что-то не очень, это да. В процессе пока что.

тонко потроллить возбужденных хайпом манагеров

Может быть немжножко :)

А какая именно задача по ЭКГ стояла фильтрация, классификация, распознавание образов?

В моем случае это была исследовательская задача по интерпретируемой классификации

Для интерпретации НММ не даст ничего. Для анализа биосигналов как ЭКГ сегодня погоду делают свёрточные нейронные сети, например, www.nature.com/...​rticles/s41591-018-0268-3

для калибровки моделей с помощью нейронных сетей

Да, очень интересная область, сам такое применил для hearing test accesment

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

PCA практически на любой совокупности акций выделяет первый главный компонент — его можно понимать как макроэкономику. Любопытно, что мой (пусть и простейший) автоэнкодер в этом смысле сработал хуже.
А вот выделить те же отраслевые сектора получается значительно хуже...

Вот, человек предлагает помочь научиться. А я как раз хочу научиться, но понятия не имею с чего начать.
Причина проста: я не знаю что актуально, а что нет. Слишком много информации предоставляется, а критериев для отбора «нужных» материалов нет.

так что два вопроса:
1) Как Вы начали, что учили, что выучили и с чем работаете?
2) Есть более короткий путь добраться до того уровня где Вы сейчас, чем в пункте 1?

Привет, немного о том, как начать я писал тут dou.ua/...​achine-learning-research. Если вкратце, то путь я вижу таким: сначала повторение математической базы на уровне хотя бы бакалавра, потом «кодинг» математики (NumPy, SciPy), т.е. scientific computing, потом уже библиотеки, где математика «под капотом» типа Tensorflow, PyTorch, Keras. Параллельно с последним пунктом можно смотреть что делают великие умы в ИИ (мой список тут medium.com/...​intelligence-32776ffcd079), запускать их код. Собственно мои исследования по теме этой статьи начались с того, что я увидел beta-autoencoders на сайте DeepMind и решил попробовать повторить на своих данных :)

По поводу более краткого пути — не уверен что он есть, я в свободное время вообще сейчас базовые вещи повторяю, так как иногда непонимание каких-то фундаментальных принципов подводит.

Спасибо за ссылку на статью. Внутри, после прочтения рассказа, нашел две ссылки: первая — ссылка на курс на КорсЕра, вторая — «гугл как стать data scientist».
Вторая для меня как раз таки и не работает, причину описал выше: слишком много ненужных ссылок. К примеру первая ссылка говорит: идешь в Универ — иди работать — ??? — профит
хотя о профите речи нет на деле. По сути задачу перекладывают на компанию которая тебя примет, а зачем им принимать тебя — огромный вопрос.
вторая: девять инструментов для data scientist — толку от этой ссылки?
третья: смысл тотже что в первой
четвертая: тот же самое, но на quora

смысл понятен? Я не хочу идти джуном в компанию чтобы научиться чему-то. Это глупо.
Университетских знаний для прикладных работ не хватит никак. Это правдиво для всех областей.

Или я что-то упускаю?

Я могу говорить только за себя, в моем случае это была и есть комбинация академического образования (заканчиваю магистратуру сейчас), самообразования на «pet projects» и работы с реальными заказчиками.

Учился в КПИ на примате, на 2 курсе начал проходить тот самый курс на курсере и делать пет проджекты, на 3 курсе нашел небольшой стартап, где сначала работал за бесплатно только чтобы получить опыт прикладных задач. Сейчас развиваюсь точно так же: магистратура + реальные проекты (уже не за бесплатно) + вот такие вот личные исследования в свободное время.

Слышал, что некоторые успешно изучают на практике с помощью fast.ai. Лично мне немного не зашло.

Вы хотите получить готовый рецепт? Мне кажется, его не существует. У каждого свой путь в зависимости от знаний, опыта и тд. Не знаете, что актуально? Ищете блоги, группы в фб по интересным вам направлениям, читайте статьи (научные). Вы спросили, как начать, так вроде бы ответ есть. Да, много информации, но в таком мире мы сейчас живем + кому-то заходит одно объяснение или курс, кому-то другое. Ходите на ивенты. После начитаности и наслушенности вы будете знать, что вам интересно и чем люди занимаются и сможете фильтровать информацию и искать среди большого объема то, что вам нужно.
И да, некоторые люди сбрасывают свой счетчик до 0 и начинают свой путь с джуна в новом направление, если они хотят получить новые знания и опыт.

Не верю. Банально, если бы так, зачем бы говорили идти на работу и учиться там?

Есть теория, на которой строят основу, а есть пром. Стандарты, инструментарий, практики. Я уже один раз это проходил, понимаю что люди это где-то находят. При этом не знаю что именно искать для машинного обучения.

Автор дал совет где начать, с этим буду разбираться, но смысла вижу мало если всю стоящую информацию ещё придется выгребать

Підписатись на коментарі