Генеративная синтетика


Введение

Особо уже никого не удивляет возможность построить модель на основе размеченных данных — которая отвечает прогнозом метки на входной пример. Мало проблем с её построением — так и с её наличием они не заканчиваются:

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

Коротко говоря — если на один вопрос существует два или более правильных ответа («да вот тут может быть и так и так!») — прогноз может быть неточным. Причем сам человек может быть уверен, что всё однозначно — а вот модель нет, и часто даже бывает права. Как та собака — всё понимает, но молчит.

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

Сфера миров

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

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

Представим себе сферу Римана — эта та, точки на которой проецируются на комплексную плоскость + с еще одной (бесконечно удаленной) точкой, соответствующей полюсу сферы.

Картинка отсюда

Если взять только непрерывные на отрезке функции C[a, b] за наши модели — то их множество равномощно множеству реальных. И далее, если мы наблюдаемое будем описывать этими функциями, фиксируя их на реальной оси нашей комплексной плоскости, значению на мнимой оси сопоставим ошибку — среднее отличие прогнозов от наблюдаемого.

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

Это не философия какая-нибудь, а пояснение факта, что мы принципиально не занимаемся описанием некого какого-то реального мира при построении моделей.

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

Если модель как ни крути все равно находится в пространстве абстракций (не реальности) — то надо приводить её мир к интересующему, а не искать всё более ужасно мощные модели

в конце концов

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

Стратегия всему голова

Так если нам нужна полезная информация, неужели нужно размечать, пока задача не протухнет окончательно?

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

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

Таким образом, получается практически стэкинг:

  • создаются ситуации-примеры с исходами, сколько угодно, по некоторым правилам, соответствующим некоторому несуществующему, но потенциально накрывающему интересующий нас мир,
  • создается модель с наличием внутреннних представлений ситуации. В терминах нейросетей — забираются вектора с какого-то промежуточно слоя. Но необязательно самого выходного — он более всего коррелирует с ответом, а нужно еще не потерять корреляцию с входами,
  • Изучается поведение представлений — вобщем, их распределение. Из этого распределения производятся выборки (сэмплирование называется), и просматриваются прогнозы.

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

Потому что модель видит ситуацию «своими глазами», и принадлежит своей точке «сферы миров» — а не (даже) сгенерированному миру.

Математический эксперимент дешевле

Для тех кто любит код смотреть, можно удовлетвориться по ссылке.

Тем временем, переместимся в реальность проектов, у которых допустим различные планы по размерностям:

  1. Число задач,
  2. Средняя длительность задачи,
  3. Максимальный риск добавки к длительности (в натуре),
  4. Параллельность — число от 0 до 1, где 0 это когда все задачи стартуют ровно друг за другом, а 1 — когда все в нулевой момент (иначе случайно от конца на случайный до заданного параллельностью процент).
  5. Проект считаем успешным, если он по длительности уложился в число задач умножить на их среднюю длительность.

Выглядит это вот так.

failed project
Успешный успех

Для предсказания успеха (вот уж слово аж кислит) проекта, оставим только два (почти всегда доступных менеджеру) показателя — параллельность пресловутую, и среднюю длительность задачи. Всё остальное — будем считать функция выбранного.

Так что, какое качество? У логрега ~ 0.82 train/test accuracy. Нейросеть с двумя слоями до вектора в 8 выходов, и обратно из них в класс тоже порядка 0.82 accuracy (ну там чуть выше). В общем, на манеже всё те же (и матрицы несоответствий логично что весьма схожи).

Но зачем сеть? Потому что из её «недр» можно сэмплировать ответы (хорошо когда это временные ряды, но у нас «да/нет»), и на них уже исследовать, как будем жить.

Вот так обстоят дела с началом вероятностей — видно что разные

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

Сгенерированные реальные, предсказанные, сгенерированные из внутренних представлений ответы

Так, ну и что? А вот зашел я (просто так) сюда, и взял оттуда картинку.

Типа реальный проект

Ответы логрега и сетки разные, но не обнадеживающие в обоих случаях. Шанс уложиться в норму по логрегу — 35%, сетка так вообще считает 31%. Вообще, говорят, строители на 30-40% обычно бюджет превышают

В пределах разума

Интерпретирование полученного — в случае логрега даже возможно. Но будет ли оно удовлетворительно простым? Тоже нет.

Интерпретировать можно примерами и аналитикой статистики на них. Это можно — благо примеров теперь сколько угодно. Как они соотносятся с реальным миром? Настолько, насколько постараемся при генерации.

Вообще надежды на интерпретацию достаточно наивны. Человек ограничен (а математика нет, и даже противоречивость наблюдений требует уточнений — это же никого не удивляет?).

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

Заключение

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

Но может быть долго и дорого. Думайте сами, решайте сами, генерировать или жить. Если гененировать — посмотрите snorkel.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *