Quantcast
Channel: Найцікавіше на DOU
Viewing all articles
Browse latest Browse all 8115

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

$
0
0

Всем привет, меня зовут Александр Гончар. Я занимаюсь исследованиями и внедрением машинного обучения для анализа биосигналов в 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 сам все танки врагов в векторах выучил!»). А ведь еще можно изобретать новые лекарства, материалы и открывать новые знания. Создавать предметы искусства или фейковые видео. Отвечать за жизни людей (в медицинских или военных проектах) или большие суммы денег (банки, фонды). Выбор за нами.


Viewing all articles
Browse latest Browse all 8115

Trending Articles