Как стать автором
Обновить

Комментарии 124

Стимулов не хватает, ведь человек обучается не просто так, а зачем то и учит только то, что ему действительно нужно
Стимулов для чего? Для познания? Для действия? Мотивация в этих случаях разная… Познание мотивированно самой сутью разума, коя есть построение модели. А мотивацией к действию будет тот факт, что эти действия являются частью выстроенной модели перехода из текущего состояния в заданное. Как-то так… Наверное.
т.е. стоит знать не только функцию, но и ее производную?
Да! Очень похоже… ;) И не факт, что только первую…
У нас есть идея пространства и формы, потому что у нас есть тело, которое можно пощупать
И у нас есть руки, чтобы определить форму других объектов

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

Я сначала попридираюсь немного.
Любой ответ ребенка (еда\фрукт) можно привязать к действию.
Да, этим ходом вы дали прочувствовать читателю свой взгляд (и это хорошо), но с точки зрения логического вывода это ничего не значить. Вы ложите перед обезьяной банан, яблоко и грушу. Если каждый раз она выбирает банан, то это что-то значит. Но если она выбирает случайный предмет, и вы говорите «она обязательно выбирает фрукт», то это ничего не значит, так как не фрукт она выбрать не может.

Хоть убейте меня, но я вижу в предметах не процесс, а выгоду. Возмем шкалу вреда-пользы [-10,+10]. Собака: можно погладить (+2), можно быть укушенным (-6), можно испугаться (-2). Вывод: если собака не твоя и не знакомая, то лучше держаться подальше.
Идем по лесу и видим на дереве яблоко. Яблоко — еда (+3), но если есть не мытым есть шанс отравиться (-5 * шанс). В принципе сейчас я есть не хочу, поэтому (+2), но могу съесть потом. В рюкзаке у меня места нет. Ищем самое бесполезное в рюкзаке, вместо чего можно положить яблоко. Пусть это будет книга, книга мне нужна (+5), она для меня имеет большую ценность. Значит яблоко для меня в итоге почти не ценно (всего +1), так как я не могу извлечь из него пользу. И оставляю висеть на дереве.
Помимо всего, более мение объективная польза умножается на коэффициент текущего состояния и потребности. Например если человек голоден, то яблоко может получить пользу уже не +3, а +6. А если он переел, то даже самое вкусное пирожное может получить для него отрицательную ценность.
>>> но с точки зрения логического вывода это ничего не значить.

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

>>> Хоть убейте меня, но я вижу в предметах не процесс, а выгоду

Что есть «выгода»? Это… Ну в вашей интерпретации это метрика, увеличивающая или уменьшающая… Что? Некий… Итог. Правильно? Но итог чего? На мой взгляд некоего действия. ;)

Т.е. выгода — это лишь оценка процесса как негативного/позитивного. Само по себе яблоко никакое. Все зависит от того, как вы его примените. Если съедите — одна оценка. Если используете как метательный снаряд — другая. Как собеседник — яблоко не очень. )) Именно поэтому оно все таки больше еда.
Я смотрю наоборот: не «действие, как венец выгоды» (действие первично, а выгода вторична), а «действие — это всего лишь путь к выгоде» (выгода первична, действие вторично). Без выгоды само действия не представляет интереса. А выполняя некоторое действие мы думаем не про него само, а о выгоде, которое оно нам принесет.

Что есть выгода? Да, наверное именно метрика, раз мы вынуждены сравнивать её с другой выгодой для формирования приоритетов. Итог? Может быть.

1) Выгода может быть не осознаваемая, например сейчас чтобы подумать на текстом и встал из-за компа и прошелся по комнате. Понятно, что я не осознавал выгоду от этого действия (разгрузить входной канал информации), но тем не менее я это сделал.
2) В идеале у нас есть цель (купить машину), и мы выбираем средства, которые ведут к этой цели. Насколько хорошо мы к цели продвигаемся, такую оценку полезности мы и ставим. НО!!! Не всегда мы понимаем почему это хорошо, и к какой цели это ведет. Но тем не менее это ХОРОШО. Игрок видит в сундуке странный материал, он не знает зачем это. Может быть из него можно выковать супер меч, или с его помощью можно изготовить зелье бессмертия, а может просто продать на рынке за большую сумму. Какой именно итог будет, игрок не знает, но все равно выкидывает из рюкзака пару обычных мечей, и 3 баночки с лечилкой. Он это делает просто потому, что в других играх это приносило пользу.

ПС: В случае с игроком может быть все проще, он забирает материал только потому, что в нем срабатывает древний инстинкт (бери раз дают). А выкидывает другие предметы потому что он знает где их взять и их много, а материал всего один, и найдется ли другой не известно.
>>>Без выгоды само действия не представляет интереса

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

Даже в приведенном вами примере про собаку и яблоко вы в каждом случае привели минимум по три процесса, прежде чем как-то оценили выгоду! Моя мысль заключалась именно в том, что яблоко само по себе бесполезно («выгоду», в вашей терминологии определить нельзя). Только как маркер связанных процессов. А уж как дальше работать с процессами — тема отдельной беседы.
Насчёт ориентированности на выгоду — я в основном согласен с вами, но не во всём.
Выгода может быть не осознаваемая, например сейчас чтобы подумать на текстом и встал из-за компа и прошелся по комнате. Понятно, что я не осознавал выгоду от этого действия (разгрузить входной канал информации), но тем не менее я это сделал.
— полагаю, человека не всегда полезно рассматривать как оптимизатор. Мы можем подобрать такую функцию полезности, что все действия, выбранные в прошлом, будут эту функцию максимизировать. Да, она будет сложная… Но мы можем.
А можем сказать: у человека система ценностей «плавает» — входные сигналы типа голода и страха на неё влияют. И человек ведёт себя как рациональный агент, но с плавающей метрикой.
Это не значит, что такое свойство следует переносить в ИИ, я лишь указываю, что подход «человек — это достигатель целей» — это упрощение, и иногда можно вывалиться за границы его применимости.

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

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

Насчет цели и средства. Да большинство цепочек вещей средство-средство-средство-цель заставляет нас считать целью только то, что непосредственно влияет на наши рецепторы удовлетворения, а остальное только средством. Человек покупает машину, и с одной стороны для него это явное средство (катать девочек, быстрее добираться до работы), но на самом деле конкретно ему приятно просто знать, что у него есть машина. И для него это именно цель, даже если она будет просто стоять в гараже и ни разу не будет запущена (не выполнит задачи средства).
Указанные цепочки слишком длинные, чтобы с ними мог работать наш мозг, поэтому он оформляет некоторые средства (элемент цепочки) в качестве цели, и работает с этим именно как с целью, пусть даже объективно эта вещь остается именно средством.
И для него это именно цель, даже если она будет просто стоять в гараже и ни разу не будет запущена (не выполнит задачи средства).
— такой подход имеет смысл и широко распространён в психологии. Но я полагаю, он не вполне конструктивен. Любое поведение можно объяснить словами «он этого и добивался».
Зенитная ракета не попала в самолёт, а упала на землю? Такова и была цель.
Я согласен, что есть неосознаваемые ценности. Но есть ещё механика работы интеллекта, и эта механика состоит из физических деталей, а не из элементарных оптимизаторов. Чтобы иметь возможность сказать «вот здесь интеллект ошибся», надо чётко очертить цели и считать, что появление любых других терминальных целей — ошибка.

Примеры того, как люди ведут себя не как оптимизаторы.
1) Коленный рефлекс. Человека бьют по коленке, нога дёргается. Это не достижение ранее поставленных целей.
2) Психические расстройства. Человек хотел вполне хороших штук — любви, признания, денег, комфорта — всё как у всех. Но вдруг на него нападает апатия и он даже поесть не может. Или случается биполярка, и человек просаживает все деньги на какой-то офигительно интересный проект, а потом остаётся ни с чем. Из здорового состояния того же самого человека эти действия выглядят неправильными. Ну или поведение наркомана. Когда человек не был наркоманом, он бы посчитал свои действия после появления зависимости как неправильные и не соответствующие целям.
3) Сила воли. Допустим, вам заплатят миллион баксов, если вы задержите дыхание на 3 минуты. А вы, допустим, умеете только на полторы. За 3 минуты с вами ничего плохого не случится — ничего такого, что не стоило бы 1М$. Существует такая конфигурация неровных импульсов, которая привела бы к этому результату в 1 мегабакс, но мозг её не выдаст. Хотя он её прекрасно знает.
4) Вы в детстве хотели одного, а сейчас хотите другого? В смысле, список и сила желаний не совпадает на 100% до 10-ого знака после запятой? Всё, вы не вполне оптимизатор, потому что тру-оптимизатор меняет верхнеуровневые цели лишь под угрозой расстрела, и то не факт. И незаметно изменить их тоже не выйдет — оптимизатор это заметит и сделает свою метрику максимально неуязвимой к влияниям.

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

Коленный рефлекс реализован на простой локальной схеме в спинном мозге.
Мозг из таких локальных схем весь состоит. Из сложной иерархической структуры простых локальных элементов. Но не суть. Есть много литературы по когнитивным искажениям, есть книги по силе воли, есть инфа по психическим расстройствам — это всё история о том, как мозг особенно сильно отклоняется от этой модели оптимизатора
Про первичность. Помните, природу света объясняли отдельно волновой теорией и отдельно корпускулярной? Для одного автора была первичная именно волна, а для второго частицы (хотя про волны он естественно знал, но не считал такой взгляд полезным).
Может быть еда без насыщения и не представляет интереса, но что бы насытится — нужно поесть

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

Моя мысль заключалась именно в том, что яблоко само по себе бесполезно («выгоду», в вашей терминологии определить нельзя).

Можете применить эти слова к игроку, который нашел непонятный материал? Ведь какое действие он будет делать с этим материалом не понятно, может он нужен чтобы выполнить квест, который игрок уже выполнил другим способом. Ведь выгода уже есть (пусть и на основе старых данных из прошлого), а действия ещё нет. Если конечно не считать саму укладку материала в инвентарь действием.
Я не вполне понимаю о чем спор. (

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


Если писать ИИ взяв за основу идею ВЫГОДЫ — это получится одна система, хотя в ней будут действия. Если взять за основу ДЕЙСТВИЕ, то получится совсем иная система, хотя в ней тоже будет выгода.
Пока лично мне видится первый вариант более перспективным. Я пытаюсь найти обоснования, чем второй вариант может быть лучше первого, ведь не просто же так вы решили «играть от процессов».
я еще пока не пишу ИИ… ;)

Я пока хочу научится выделять действия (комрад Kilorad как-то сказал мне, что если мы научимся выделять возможные действия — будет прорыв! ;) ). С выгодой будем разбираться потом.
Насколько я понимаю, MagneticFox предлагает следующую формулу интеллекта (для ИИ):
a = argmax( Q(a[],s) )
где а — действие, которое мы сделаем,
a[] — список всех возможных действий
s — текущее состояние мира, как оно нам видится, с учётом всех предобработок, свёрток и памяти
Q(a,s) — ожидаемая полезность действия a, как-то (есть разные варианты) рассчитанная по прошлой статистике.

Кроме того, насколько я понял, ваша модель процессов — она… Что-то типа предобработчика, а не системы принятия решений. То есть в итоге будет всё та же формула a = argmax( Q(a[],s) ), но s будет построено с учётом процессного восприятия.
Как-то так?
да вот мне бы a и a[] получить…
В технической обвертке (формулировке) наверное так.

Я бы даже вот так это представляю. Есть 2 потока. Первый поток выполняет argmax( Q(a[],s) ), причем делает это весьма добросовестно, вплоть до попарного рассмотрения элементов массива, чем один лучше другого.
Второй поток бегает по памяти и ищет возможные варианты действий a. При этом он грубо оценивает полезность действия (может быть очень грубо). И если действие проходит фильтр динамически добавляя его в пул первого потока. Может быть не сразу, а помещая их в свой пул, и если ничего не найдено за некоторое время лучше этого, то передается запомненное действие.
Для принятия решения дается минимальное время и максимальное. Если второй поток после истечения минимального времени не смог найти нового кандидата за какой-то период, то он останавливается.
Аналогично, если первый поток после истечения времени за некий период не смог улучшить (некая метрика) приоритет, то останавливается и он. В итоге имеем решение.
В принципе, это может сработать.
На данный момент у существующих ИИ обычно выходные действия — это либо несколько кнопок, одна из которых нажата (например, «стрелять», «вправо»), либо несколько рычагов, выставленных в определённые состояния типа float (руль повернуть на 5 градусов, а педаль газа зажать на 7 единиц).
Это элементарные действия, их искать не нужно, их мало (с случае кнопок, по крайней мере).
Но. Если мы обучаемся предсказывать профит от конкретного действия, то у нас выходит модель с относительно большой погрешностью. Поэтому часто имеет смысл задавать вопрос не «сколько будет профита за следующие 100 ходов, если я сейчас нажму на кнопку 1?», а «сколько будет профита за следующие 100 ходов, если я сейчас нажму на кнопку 1, затем 0, затем 2, затем… [длинная последовательность]?» И тут да, пространство перебора становится огромным, и нужны какие-то оптимизации, например, описанная вами
Насколько реально, учитывая текущие наработки по нейронным сетям сделать примерно следующее:

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

Строго говоря…

На выходе:

1) Карта глубин (если камера статична) или карта окр. пространства (динамическая камера/лидар, etc.);

Для чего
2) Выделение отдельных объектов (с учетом карты глубин/пространства, а не только/не столько видимых контуров);
3) Выделение движущихся объектов (скорость/ускорение, построение/предсказание траектории(?));
4) Иерархическая классификация объектов по любым извлекаемым признакам (формы/габаритов/цвета/нюансов движения/Составных частей(?)). Т.е. по сути извлечения метрик для Гилбертова пространства.

про иерахию

Важно: по возможности система не предобученная. Т.е. какие-то базовые вещи могут быть заложены (например — сверточная сеть первого слоя, для выделения контуров/геометрии), но выделять объекты и позднее распознавать их должна научится сама.

Ну и, наконец, построение развертки (на основе пп 1,4, т.е. пространственной карты с учетом метрик) во времени (пока, на этом этапе видимо непосредственно наблюдаемого периода), с целью провести анализ по пунктам 2-4, с дабы выявить: процессы/события (являющиеся по сути своей изменениями во времени п.3) и их кластерной классификации (п.4).
— похоже, как минимум часть этой конструкции надо будет предобучать. На данный момент есть средства для построения вектора по картинке, и из этого вектора можно другой нейросетью получить карту глубин. Потом, если мы можем строить карту глубин по картинке, то примерно теми же средствами мы можем строить карту движения и скоростей по видео. При этом объекты мы, скорее всего, сможем выделить. Это всё пока что одна предобученная нейросеть и одна самопальная.
Про иерархию… Тут сложнее. Похоже, мы можем разделить объект на детали по-разному, иерархий может быть много разных. Я сейчас затрудняюсь привести пример, который виден на картинке, но мы можем разделить человека на руки, ноги, голову и туловище, а можем на кожу, кровеносные сосуды, нервы, мышцы и кости. То, как мы проводим разбиение, сильно зависит от того, какую практическую задачу мы решаем.
Полагаю, можно нейросетью построить «3Д-сцену», которая будет ещё и динамической, но прогноз можно будет делать… Весьма ограниченный. Я могу составить план того, как ИИ по видео предсказывает, куда полетит мячик. Но план того, как ИИ по видео предсказывает, будет ли мячик рикошетить или пробивать препятствие, насколько упруго он будет рикошетить и как сильно опрокинется препятствие… Составить план могу, но сильно не факт, что получится. А это только базовая физика, поведение людей или даже простых механизмов ИИ будет предсказывать ещё хуже. Такой ИИ, как я описал, на двух-трёх нейросетях, одна из которых свёрточная и предобученная.
Я вас ждал… )

>>> Похоже, мы можем разделить объект на детали по-разному,

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

Чтоб понятно о чем речь: есть камера. смотрит на улицу. Умеет детектировать неподвижные и подвижные объекты. Собственно само по себе движение — процесс, которая она должна выделить. Сможет ли она выделить некую метрику/набор метрик, позволяющую в будущем предсказывать возможность движения? например столб/урна/остановка — неподвижны. Машина/автобус/велосипед — встречались в движении. Может у нас в результате какой либо обработки сама собой выработаться концепция «транспортного средства»? Отличительным признаком которого являются колеса, например? ;) Если в кадре будет несколько категорий объектов (не только транспорт, но и люди/звери/птицы) — есть ли какой-то способ не только объединить их в одну категорию движущихся объектов, но и как-то разделить их? Например, если удастся выделить иные процессы/взаимодействия, где эти объекты ведут себя по-разному (например маленькие и средние движущиеся объекты могут поглощаться/выделяться большими движущимися объектами, после чего те могут перестать двигаться/начать движение...). Т.е. возникновение дополнительных метрик результат необходимости объединить/разделить объекты в/на группы с разным/одинаковым поведением? Ну это если предположить, что нам как-то удастся выделять процессы как минимум с не меньшей эффективностью, чем объекты.

>>>похоже, как минимум часть этой конструкции надо будет предобучать

меня это абсолютно не пугает! ) для реализации чисто технических аспектов работы системы, либо для реализации какой-то самой базовой общей логики — предобученные сети самое то. Главное, чего хотелось бы избежать — обучения выделять конкретные объекты/признаки (процессы(?))
Есть один более-менее универсальный способ разбиения на… Хотелось бы сказать, что на детали, но нет. Выделение значимых частей видеоряда. Которые могут быть процессами, объектами или чем-то ещё.
Надо поставить задачу: по видеоряду предсказывать следующие кадры. По 100 кадрам угадывать 200-ый, например. Или со 101го по 200й. При этом внутреннее состояние прогнозной системы (циферки в скрытом слое RNN, например) будет чем-то, по чему можно предугадывать картинку. Как в случае с автоэнкодером.
Я недавно общался на эту тему с DesertFlow, он говорит, что лучшая архитектура под эту задачу — это Transformer для обработки текстов, но она сложная, поэтому идею лучше проверять чем-то более легковесным.
Готовых предобученных решений на эту тему пока нет, лишь архитектура сетки.

Можно предсказывать не саму картинку, а её эмбеддинг от свёрточной сети =) Суть мало изменится.

Потом, можно предсказывать по видеоряду некую одномерную метрику. Например, число аварий или заработок какого-нибудь таксопарка за следующий час. Тогда выделятся какие-то более узкоспециализированные фичи, например, людей эта нейронка будет хуже различать, зато будет отлично различать надпись «яндекс» на машинах. То есть по эмбеддингу от этой нейронки мы сможет лучше понимать те вещи, которые связаны с метрикой, и хуже — все остальные.
Но кажется, разумнее всего начинать с чего-то типа автоэнкодера, как я выше написал.
>>>Я недавно общался на эту тему с DesertFlow

Его я тоже жду! )

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

Впрочем, я наверное все-таки зря акцентировал именно на 3D. ;) Я как бы преследую две основных цели. Первую можно сформулировать так: если на текущем этапе развития технологии или в ближайшем будущем можно перевести машинное восприятие фактически в симуляцию, то можно сразу продолжить эксперименты в симуляции (не расходуя ресурсы на детальную проработку именно восприятия мира, либо отложив оную, либо условно отдав на откуп другим), причем близкой по форме к модели с прямым, а не сенсорным восприятием, т.е. такой модели, когда вся информация о положении, форме, движении и взаимодействии объектов (а так же собственно полный перечень этих объектов) известны на любой момент времени.
Вторая цель — это собственно все то же самое, но без симуляции, как таковой. Т.е. детектирование объектов их положения/движения/взаимодействия для последующей кластеризации и перехода на уровень процессов. Я не вполне понимаю, возможно ли все это без перехода в 3Д…
Мои исходные данные.
1) По картинке можно построить карту глубин
2) На ИИ-мобилях всё ещё есть лидары
3) Ещё кое-какие детали по ИИ-мобилям.
Вывод. Карта глубин даст довольно грубую 3Д-сцену. С плохим разрешением. Но да, можно. Сцена будет динамическая, то есть каждый кадр немного другая, и её можно будет прогнозировать. Насколько на этой сцене будут идентифицироваться объекты — это вопрос.
Есть такой противорадарный манёвр — ножницы. 2 самолёта пролетают по траектории, похожей на парную спираль ДНК. И радар больше не может различить, где какой — он просто видит 2 самолёта, но не знает, какой из них 1-й, а какой 2-й (при том, что изначально он их разметил). Как на 3Д-сцене будет реализовано различие между «самолёт-1» и «самолёт-2» — я пока не знаю. Если сцена будет явной, то это можно, но если у нас будет эмбеддинг, из которого сцену можно получить, но лишь при наличии датасета… Тогда хз. Но что-то типа воксельной карты сцены сделать можно.
Кстати. Я предлагаю такой тест. Проводить его, скорее всего, буду я, но всё же.
Вот список тестовых сред для ИИ:
github.com/openai/gym/wiki/Table-of-environments
Есть тестовые среды вот такого типа: Seaquest-ram-v0
То есть это игра, которая передаёт в ИИ в качестве сенсорного входа дамп своей оперативки.
Так вот. По идее — я не проверял, но полагаю, что это так — по оперативке можно вручную составить правила для выделения объектов. А дальше аугментировать этот сенсорный вход — докинуть туда события вида «какие-то два объекта столкнулись», «объект такого-то класса уничтожен», «объект такого-то класса появился», «нас ранили» и так далее. Всё, что придумаем, причём правила составляем вручную и для одной конкретной игры.
А дальше мы проверяем, насколько по этим событиям можно предсказать, что скоро будет reward. Моя гипотеза: события вида «в меня попали», «объект такого-то типа уничтожен», «объект такого-то типа породил объект такого-то типа», «объект такого-то типа летит в объект такого-то типа» очень хорошо предсказывают награды.

Ещё есть соображение, что в большинстве этих тестовых сред будет полезен (но это не значит, что я знаю, как его ввести) такое когнитивное смещение:
1) Есть 2Д или 3Д объекты, которые бОльшую часть времени медленно движутся. Их мгновенная скорость — максимум десятки пикселей за такт, скорости меняются либо мгновенно, либо на единицы пикселей на такт в квадрате.
2) Некоторые кнопки приводят к изменению или появлению скорости у некоторых объектов. Или к повороту.
3) Некоторые кнопки приводят к появлению новых объектов.
4) Когда два объекта сталкиваются, часто один из них уничтожается. Или оба.
5) И когда это происходит, это служит хорошим предиктором нашей метрики качества
6) Есть объект «я». Когда мы жмём на кнопки, обычно движется/поворачивается именно этот объект. Либо все, кроме него. Либо что-то создаётся вблизи этого объекта. А если этот объект с чем-то соприкасается, то такое событие является очень сильным предиктором изменения метрики качества.

Я пока не знаю, как внести такое смещение, но кажется, оно будет хорошо работать в очень многих тестовых мирах — если такие гипотезы будут рассматриваться как априорно очень вероятные, то ИИ вроде бы должен быстрее обучаться.
И ещё такие смещения требуют понимания скорости. А значит, даже если игра с полной информацией и память вроде бы не нужна… Всё равно придётся её делать, иначе не составить события «объект уничтожен», «объект движется», «объект — мой аватар в игре»
Надо немного не так… нужно запустить сотни игр человека или как-то обученной сетки, что бы наша потенциальная сетка могла в каждой из этих игр выделить события/процессы (желательно сама), их корреляцию вдоль (причинно-следственная связь) и поперек (одновременность=связанность?) оси времени. И кормить сеть играми до тех пор, пока она не научится предсказывать развитие событий. А когда научится — можно попробовать задать ей цель в виде целевого состояния/состояний, при это проложив между ней и игрой блок управления, который будет воспринимать предсказания сети относительно управляемых сущностей, как руководство к действию. При этом мотивация/награда и в процессе обучения и в последствии — соответствие предсказания реальному раскладу.
кормить сеть играми до тех пор, пока она не научится предсказывать развитие событий.
— я бы хотел так сделать. Со временем. Пока что это… Требует от меня освоения трёх технологий, которыми я пока не вполне владею. Картинка с экрана -> свёрточная нейронка, содранная из инета -> вектор признаков (не человекочитаемых каких, но информативных) -> RNN (можно и лучше, но это потом) для прогноза будущих векторов признаков, её надо обучать самим -> вектор признаков уже от RNN, тоже непонятный, но содержащий полезную информацию о прошлых состояниях -> какая-нибудь форма RL: или QL (в таком случае мы на прошлом размечаем желательные состояния сигналами награды и обучаем нейронку на всей истории), или Model-Based, или Goal-Oriented.
Моя гипотеза: очень многие миры-задачи похожи, если смотреть на них глазами в динамике. Везде 2-3 измерения, везде объекты, везде околоньютоновская механика. А потому RNN можно обучать на множестве разных игр. Или на реальных видео. Обучать — в смысле обучать предсказывать следующие кадры, но потом использовать не сам прогноз, а эмбеддинг.
Если моя гипотеза верна, то у нас со временем получится RNN, умеющая делать описание динамического мира — такое, что оно работает для очень многих миров, и что оно хорошо пригодно как входные state для RL.

цель в виде целевого состояния/состояний, при это проложив между ней и игрой блок управления, который будет воспринимать предсказания сети относительно управляемых сущностей, как руководство к действию.
— я экспериментировал с таким подходом… Сложно. Он у меня пока что показывает результаты хуже, чем более обычные способы RL. Над ним надо ещё серьёзно думать.

При этом мотивация/награда и в процессе обучения и в последствии — соответствие предсказания реальному раскладу.
— насколько я понял, здесь под словом «предсказание» подразумевается «целевое состояние» (предсказание: мы сейчас поранимся. Желание: уцелеть. Реальность: мы поранились. Прогноз=факт!=цель. Подкреплять?). По-моему, для Goal-oriented систем награда необязательна. Если у них есть «контакты», через которое можно подавать описание цели, и можно постоянно сравнивать реальность с этим описанием, то goal сам разберётся. Он будет просто отвечать на вопрос «что такого мы раньше делали перед тем, как результат был такой-то»?
>>>— насколько я понял, здесь под словом «предсказание» подразумевается «целевое состояние» (предсказание: мы сейчас поранимся. Желание: уцелеть. Реальность: мы поранились. Прогноз=факт!=цель. Подкреплять?).

Предсказание = происходящие помимо нашей воли события+наши действия. Ну или можно иначе — из всех возможных предсказаний, включающих помимо прочего наши действия мы выбираем те, которые больше всего похожи на поставленную цель. Мы не выбираем невозможных вариантов. Мы понижаем значимость неконтролируемых нами факторов, если их вероятность мала или неизвестна (т.е. они не следуют напрямую из расклада, а могут произойти могут нет), но повышаем значимость наших действий, потому, что знаем — если они есть в прогнозе, то контроллер их выполнит. И дальше строим РЕАЛИСТИЧНЫЙ прогноз. И вот если он не попал в факт — это реально проблема самой прогнозной системы и ее надо ребалансировать. Но… Если наилучший прогноз всегда сбывался, а цели мы не достигли — это ведь может значить просто недостижимую цель, так ведь? И вот тут мне нужно подумать. Тут по всей видимости реально гибрид обычного алгоритма обучения с учителем и RL. И когда что балансировать — пока не знаю. Нужно понять разницу между неверной оценкой ситуации и неверной стратегией.
Кажется, пришло время рассказать про то, что я называю проблемой свободы воли у ИИ хД
Когда мы делаем прогноз на более чем один такт вперёд, мы в прогнозе учитываем, какие у нас будут действия на следующих тактах. Обычно — неявно.
Например, ИИ стоит на краю обрыва. Как он оценивает свои шансы упасть? Это зависит от его действий. Если в прошлом он действовал хаотично, то совершенно неважно, каков его алгоритм сейчас. При прогнозе он будет неявно полагать, что будет действовать так же хаотично. Неважно, что сейчас он ни за что не пойдёт к обрыву — у него статистика такая: «я у обрыва» -> «шанс навернуться 50 на 50». А если он раньше действовал идеально точно и почти не падал, он будет считать шансы упасть низкими.
Это если делать прогноз наивно. Есть всякие разные способы сделать прогноз так, чтобы в нём предполагалось, что ИИ будет действовать оптимально, или каким-то определённым заданным способом.
Будущее зависит от решений агента. А решения агента зависят от его прогноза будущего. А прогноз будущего зависит от прогноза решений, которые в свою очередь будут приняты на основании прогноза будущего, который зависит от решений, которые зависят от прогноза будущего. Чтобы честно это отмоделировать, ИИ должен уметь предсказывать сам себя, то есть либо быть неточным, либо быть сложнее самого себя. Либо придерживаться какой-то стратегии, в которой он достаточно хорошо понимает свои будущие действия, потому что придерживается достаточно простой стратегии, и при этом стратегия достаточно хороша, что он не станет её менять.
R=F(S,P), где P — это стратегия, а она каждый шаг переобсчитывается на базе новых данных, и у ИИ будут проблемы с её прогнозом.
Так вот. Это я рассказал, почему у нас проблемы с тем, чтобы сделать ИИ вида a=argmax(Q(a[],s)).
Если же мы решаем задачу a=a(s,s_targ), то проблема всё так же существует, ИИ неявно полагает, что его стратегия такая же, как была на истории.
Потому если ИИ нужно достичь некоей цели, а он её никогда раньше не достигал, хотя физически мог, то ответ на вопрос a=a(s,s_targ) будет… Неизвестно, каким. Реалистичный прогноз на базе статистики будет таким: я этой цели не достигну. Потому что не достигал раньше. Прогноз идеально сбылся, но цель не достигнута.
SARSA точно так же облажался бы. А вот QL и Model-Based имели бы нехилые шансы справиться. Потому что MB явно просчитывает свои шаги наперёд, а QL исходит из предположения, что в будущем он будет действовать оптимально (это довольно сложная концепция, она описывается уравнением Белмана).
Почему goal-oriented подход действует при решении задач по физике, не в RL, я пока не знаю. Неочевидно. Казалось бы, постановка задачи аналогична.
Не очень понимаю почему так. Почему, если «ИИ никогда этого не делал — честный прогноз: не сделает и в этот раз»? В моем представлении ИИ должен определять себя (ту часть себя, которая действует), как часть системы и прогноз должен строится не на базе достигаемых ранее целей, а на базе возможных действий и заданных целей! Т.е. прогноз не должен быть чем-то, что ИИ раньше обязательно уже видел! Или, если хотите — он это мог видеть при моделировании, т.е. не в реальном мире, а воображаемом. В моем видении честный прогноз, значит не натягивание сову на глобус, т.е. избегании невозможных ситуаций, но не обязательно «повторение пройденого» или воспроизведение удачной стратегии. НЕ — в каждый конкретный момент времени ИИ должен моделировать что-то виденное ранее, но с поправкой на кластеризацию — если он видел, как это делал кто-то другой, а так же с чем-то другим, но имеющим нужные метрики процесса — он может это использовать при моделировании/достраивании… Взять хотя-бы ту штуку, которая дописывает текст — она же не повторяет что-то ранее виденное! Она подбирает то, что логично дополняло бы уже имеющееся…
В моем представлении ИИ должен определять себя (ту часть себя, которая действует), как часть системы и прогноз должен строится не на базе достигаемых ранее целей, а на базе возможных действий и заданных целей! Т.е. прогноз не должен быть чем-то, что ИИ раньше обязательно уже видел!
— нейросетка (или дерево) работает как апроксиматор. То есть в вырожденном случае её можно представить себе как функцию, заданную таблично. Поэтому приведу простенькую sar-таблицу, демонстрирующую эту идею.
Пусть у нас есть 4 разных s (1,2,3,4) и два разных a(0,1). Таблица переходов полностью детерминирована, рандома нет. Таблица такая:
s=1->s=2,r=0 при a=0
s=1->s=3,r=0 при a=1
s=2->s=1,r=0 при a=0
s=2->s=1,r=0 при a=1
s=3->s=4,r=10 при a=0
s=3->s=4,r=-1000 при a=1
s=4->s=1,r=0 при a=0 или 1
А теперь таблица опыта:
SAR
100
200
110
31(-1000)
410
110
30(10)
410
1
И на этом месте ИИ думает, что ему делать. Допустим, у него горизонт планирования — 2 такта, и у него простой алгоритм прогноза профита. И нет дисконтирования. То есть он каждой паре sa ставит в соответствие Q — это суммарный профит за следующие 2 хода.
Итак, наша таблица. После R запишем Q:
SAR_______Q
100_______0
200_______0
110____(-1000)
31(-1000)(-1000)
410_______0
110______(10)
30(10)___(10)
410_______0
1
И вот мы стоим в s=1. Думаем, что делать. Вообще, в таблице есть путь, дающий 10 награды. Но…
У нас ИИ, делающий простой прогноз, без учёта априорных знаний о стратегиях. И он спрашивает себя: что будет, если я сделаю a=1?
И он получает ответ: «Смотри, у нас в таблице есть в строки:
110______(10)
и
110____(-1000)
Значит, в среднем там -495 награды. Не иди ты туда!»
Да, есть способы борьбы с этим, но они выходят за рамки «просто сделать прогноз». В вашем случае ситуация отличается, но… Я сейчас просто демонстрировал концепцию: в прогнозе будущего важен прогноз своего поведения, а по умолчанию этот прогноз некорректен
У меня ограничен скорее не горизонт планирования, а количество вариантов! Потому, что мы танцуем от цели. Контрамоция, вот это вот все… в вашем примере система должна сначала найти точки с большой наградой, потом выстроить(найти) к ним переход, а не считать просто среднее улучшение в каждой точке.
Конечно при условии, что выбор между s3 и s4 из s2 определяется не вероятностью, действиями самой системы. Еще можно на это смотреть чуть иначе: что a=0 можно внести с коэффициентом близким к 100%, а=1 к нулю, потому, что а=1 на s2 абсолютно точно имеет огромный штраф.

В такой системе как раз наоборот: сильно снижена вариативность на каждом ходу (потому, что к цели мы идем кратчайшим путем, а не путем последовательного просчета всех вариантов в поиске лучшего… это вот то, о чем мы говорили с DesertFlow в первой части: у нас нет огромного числа вариантов — у нас скорее один, но просчитанный между сейчас и целью. Возможно далеко не лучший, но… мое глубокое убеждение, что так оно у нас в голове и работает! ;) Ну сами посудите: разве человек реально просчитывает варианты? Вернее он их просчитывает, но только потому, что ищет тот самый единственный: первый попавшийся! И только дополнительные ограничения заставляют считать другие. Но, учитывая проблему выбора из 100500 вариантов, я считаю, что это не баг — это фича!
в вашем примере система должна сначала найти точки с большой наградой, потом выстроить(найти) к ним переход, а не считать просто среднее улучшение в каждой точке.
— конечно. Пока состояния дискретные, это очевидно, как сделать. Но как только S становится вектором огромной размерности, выстраивание оптимального перехода начинает требовать большой нетривиальной формулы (она называется уравнением Беллмана).
Я это показал, чтобы продемонстрировать ситуацию: у нас есть цель, у нас есть понимание, что мы умеем наводиться на цели, путь к цели мы проложить можем, но если мы будет прогнозировать «а попадём ли мы в цель?», то результат будет отрицательный. Потому что когда мы делаем прогноз, мы на вход берём только опыт, а идею «мы самонаводимся на цель» либо задаём явно (через уравнение Беллмана), либо надеемся, что ML сам её выведет из опыта. Насколько хорошо выведет — это вопрос.

Хорошо, могу привести пример из жизни. Я целюсь в мишень из пистолета. Дистанция 50 метров, стреляю я плохо. Я попаду? Ну, очевидно, нет. Шансы… Процентов 10. А что надо сделать, чтобы попасть с наибольшей вероятностью? Стрелять в цель. Логично — если я буду стрелять вверх, скажем, то я попаду с ещё меньшей вероятностью. Тем не менее, если я спрошу «попаду ли я в цель?» ответ всё ещё будет «вероятно, нет». Даже для наилучшего действия. Значит ли это, что система a=a(s,s') вообще нерабочая? Не значит. Но у неё будут баги, которые может быть, удастся компенсировать.

Ну сами посудите: разве человек реально просчитывает варианты? Вернее он их просчитывает, но только потому, что ищет тот самый единственный: первый попавшийся! И только дополнительные ограничения заставляют считать другие. Но, учитывая проблему выбора из 100500 вариантов, я считаю, что это не баг — это фича!
— я тоже полагаю, что человек не просчитывает все варианты «явно». У человека вижу следующие алгоритмы: Model-Based (тот самый явный просчёт вариантов, но обычно там используются не элементарные действия, а блоки из них, и не элементарные состояния, а кластера), QLearning (вы играете в шахматы и считаете, что обычно убить вражеского ферзя хорошо, при том, что победа заключается не в этом? Значит, вы неявно используете уравнение Беллмана, уравнение инструментальных ценностей), SARSA (когда действие каким-то непонятным способом ведёт к отложенному во времени результату), имитационное моделирование (мы делаем что-то не задумываясь? Ну так мы решаем задачу a=a(s), то есть «что я раньше делал в таких ситуациях»), goal-oriented принятие решений (я хочу выиграть в боулинг. Что я раньше делал такого, что приводило к успеху? Это тот самый a=a(s,s'), и в самой простой форме он будет работать именно так).
При этом у человека как-то сжимается пространство действий и наблюдений — то есть как будто у нас не 1000 мышц по 100 вариантов действий на каждую, а 2-3 последовательности (а то и подпрограммы), которые ощущаются как элементарные действия. И похоже, в таком сжатом пространстве будут хорошо работать почти любые алгоритмы ИИ, потому что оно простое. Осталось понять, как сжать. Причём с наблюдениями это ещё хоть как-то понятно, но с действиями сложнее. Не вполне ясно, как сжать кусок опыта в подпрограмму «я добрался до Комсомольской. Если была машина, то на машине, иначе если было тепло, то пешком, а если холодно, то на метро, то если метро забито, то всё же пешком». А нам надо будет именно прошлые действия сжимать в такие подпрограммы, чтобы учиться на них
Мне кажется, проблема в другом.
Сейчас реально сделать всё, для чего есть достаточно большой датасет.
Логика, пространственная ориентация, «модель сцены» (моделирование субъектов и объектов по текстовому описанию), временное мышление, любые другие виды мышления…
Например, 6 лет назад сделали bAbI ( research.fb.com/downloads/babi ) — большинство задач компьютер легко решил ещё 4 года назад.
А вот подходы без датасета, с «unsupervised learning» — пока что не работают. Не хватает железа и signal supervision, наверное: на чемпионские программы для игр Go, Starcraft и Dota ушли сотни миллионов долларов, в основном на железо. А ведь там была однозначная «реакция окружения», хоть и не сразу, в виде сигнала «победа/поражение», но была, и игра была максимум 300 ходов / 20 минут.
Если теперь мы будем учиться в человеческом мире, то обратной связи будет столько же или ещё меньше, и она будет плохого качества… Мы не будем готовы мариновать компьютер в таком 20 лет (если даже не 200 лет), обучая его… Точнее, мы предпочтём более быстрое и качественное модульное обучение, то есть, датасеты на каждую подзадачу.
У вас есть датасеты для ваших задач?
При решении задачи reinforcement learning (то есть как раз задачи оптимального управления) используются не датасеты, а environmets. Это виртуальные миры для обучения и тестирования ИИ. Да, они есть:
github.com/openai/gym/wiki/Table-of-environments
Обучение в таких условиях и правда отличается от обычного обучения с учителем. И тут дело даже не в мощности компов. Многие алгоритмы RL неэффективны по опыту — то есть они для обучения требуют избыточно много примеров. Тут не в процессоре дело (хотя он бы помог), а в аугментации данных или алгоритмах обучения. Другие алгоритмы по опыту эффективны, но требуют какого-то безумного просчёта ходов в глубину — тут тоже грубой силой можно было бы решить проблему, но кажется, есть и иные варианты, животные же явно не просчитывают реальность на минуты вперёд во всей её детальности.
Есть много соображений, что не так с ИИ… habr.com/ru/post/437020

От модулей, видимо, никуда мы не денемся. Кажется, без предобученной сверточной сети анализ видео проводить… Непросто
>Многие алгоритмы RL неэффективны по опыту — то есть они для обучения требуют избыточно много примеров.
Так я и объясняю почему — потому что:
у сегментации на одну картинку порядка 10Кб обратной связи,
у классификации на 1000 классов — 100 байт,
у детекции — 10-100 байт (10 если считать через координаты, и 100 если считать задачу как вид сегментации),
а у RL — зачастую 1 бит на много картинок.
А выучить надо миллионы нейронов с маленьким learning rate.
Отсюда и требовательность к ресурсам.
Отсюда и появляются более эффективные решения с использованием вспомогательных loss-ов и использование strong supervision для обучения каких-то подмоделей по этим лоссам: то пакмана пройдут через модели всех игровых объектов, то используют примеры с youtube в качестве supervision, то используют предсказание будущего, любопытство или избегание опасности в качестве таких дополнительных лоссов…
Но, в общем, тогда, при правильных настройках этих лоссов (у человека — вероятно, комбинация из разных способов: генетически, через механизмы эмоций и взаимные autoencoder-ы между разными частями мозга)… всё ещё остаётся одна проблема: DL по прежнему в 100-1000 раз менее эффективен, чем человек, в отношении количества предъявляемых примеров для того же уровня обучения. Но уже хотя бы не в миллион и не в миллиард раз…
Датасет нужен, когда мы хотим научить сеть опознавать образцы.

Я же хочу заставить сеть извлекать эти самые образцы из данных. Я уверен, что это возможно.

Существующие решения Задач сегментации изображения по фону/градиенту/контурам усиленная смещением камеры (в результате паралакса появляется глубина, а синхронно смещающиеся сегменты могут быть объединены в один объект) должны работать.

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

Это не совсем unsupervised learning. Обучение предполагает наличие образца/цели, а тут это скорее именно задача сегментации/классификации/кластеризации… Т.е. выявления неких данных вообще, без каких либо «вводных» с нашей стороны.

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

>>> У вас есть датасеты для ваших задач?
побочным продуктом такого рода деятельности как раз могут стать размеченные датасеты. ;)
ок, выделили объекты, кластеризовали.
допустим, кластеризация уверенно относит рыжую курицу, ржавый металл и перезревший ананас к одному типу объекта… что дальше будете делать?
аналогично с процессами: поливка цветов, наливание чая и спортивное упражнение похожи — везде вытягивание руки вперёд. что дальше?
Зависит от того, как проводилась кластеризация. В моей концепции хочется добиться объединения объектов в разные кластеры по метрике процессов. В вашем случае это значило бы, что по опыту данной сети ананас и курица имеют одно практическое применение: их либо ели, либо покупали, либо, не знаю, кидали в кого-то! Во всех этих случаях метрика сформирована правильно и сеть сможет предсказать подобные процессы в будущем.

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

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

  1. Сеть выделила среди прочего курицу и ананас
  2. Сеть выделила два процесса (процесс — суть некое изменение во времени. В простейшем случае — движение, более сложные варианты требуют проработки) каждый из которых связан с одним из этих объектов
  3. Сеть делает предположение, что это один и тот же процесс (на основании того, например, что траектория движения на определенном интервале времени была близка)
  4. Для этих двух объектов фиксируется общая метрика. По сути мы имеем новый класс объектов, при определенных условиях ведущих себя схожим образом.
  5. В определенных условиях сеть моделирует этот процесс (достраивает в процессе предсказания следующих, или промежуточных «кадров»)
  6. Сеть получает данные о фактически произошедших процессах и сопоставляет их с моделируемыми. Если данные совпали в каких-то пределах — значимость метрики растет. Если нет — снижается. Причем, вероятно не у всего класса, а у конкретного объекта.
  7. Таким образом, предположительно. В итоге сеть создаст кластеризацию объектов по поведению/применимости. Что в моем понимании — единственно значимая кластеризация! ))


На самом деле тут до хрена подводных камней… Например, сеть должна не только создавать метрику, но и разделять/сворачивать объекты по следующему принципу:
  • Если у двух объектов метрики равны — это один объект. Т.е. если курицу и ананас мы смогли выделить только в одном процессе, например поедания и никаких других кейсов для каждого из них нет — то это для сети одно и то же: Еда. Как сеть натасканная просто на распознавание людей не делит их по полу/возрасту/расе и тп. Это нужно для снижения размерности.
  • Если у одного объекта (с учетом написанного ранее) выявляются выбросы из предсказанного поведения (хотя в основном предсказания оправдываются), то нужно искать возможность разделения объектов и именно по их чисто внешним факторам. т.е. если еда вдруг способна на самостоятельное движение (но не вся!), то можно сделать новое предположение, что некоторая еда, а именно с перьями и клювом — может таки бегать… Как-то так.

Это обычная детская загадка на что общее/чем отличается, но она крайне важна…

Ну и ваш вопрос про поливку цветов/наливание чая хорош в том плане, что когда предсказанный процесс не проходит валидацию не вполне понятно что именно не правильно — кластеризация объектов или процессов? Т.к. это у нас две разные сети и объектная как бы свертка для процессной — принцип «корректировки весов» не очевиден. Но думаю на практике можно пробовать…
В принципе можно к этой кластеризации относиться не как к чему-то окончательно заданному, а как к предобработке данных. В ней будут ошибки, которые потом скомпенсирует обычный RL, который эти ошибки получил на вход. Мы же умеем работать с шумными данными.
Но всё равно, кажется, что кластеризацию нужно проводить как-то так, чтобы это было связано с действиями и наградами. Алгоритм должен быть адаптивным. Если посмотреть, что у нас уже есть по кластеризации… Я пока не вижу, как сделать адаптивность. Разве что проводить кластеризацию 100500 раз с разным random seed и разными настройками, а затем обучать нейронку предсказывать reward. Где прогноз точнее — то разбиение на кластера и оставим, хотя бы временно
Ну я там выше написал… Мое глубокое убеждение, что награда/штраф только на основании одной метрики — соответствие предсказанию. Если соответствует — молодец, если нет — штраф (понять бы еще к чему). Тогда в ситуации заданного будущего, модель вынуждена строить предсказание в направлении победы, и получать штрафы, за нереалистичные предсказания. До тех пор пока они не станут реалистичными с поправкой на победу.

Единственное — все равно нужен период предобучения для понимания возможных процессов, причем что важно: не выигрышных, а вообще! Понимаете? система должна иметь достаточную «библиотеку» элементов, из которых можно строить переход из одного состояния в другое с любыми накладываемыми ограничениями… Я только пока не знаю, как сделать ограничения не жесткими, а рамочными — типа чтоб стремится к максимум жизней, максимуму убитых врагов, но не считать игру полностью провальной при недостижении абсолютной цели… Но думаю, это должно быть решаемо. Так же как возможность не задавать состояние полностью, а только в важных аспектах. Т.е. голубая мечта вполне может быть размыта и недостижима, но это не должно мешать к ней стремиться! ;)
система должна иметь достаточную «библиотеку» элементов, из которых можно строить переход из одного состояния в другое с любыми накладываемыми ограничениями
— даже если мы будет учиться в режиме обычного РЛ, мы эту библиотеку получим. Но быстрее и качественнее мы её получим автоэнкодером, как я описал выше. Ну, это мои соображения, я не уверен, что это сработает.

Я только пока не знаю, как сделать ограничения не жесткими, а рамочными — типа чтоб стремится к максимум жизней, максимуму убитых врагов, но не считать игру полностью провальной при недостижении абсолютной цели…
— тут нужно отталкиваться от метрик. Обычно используются одномерные метрики, типа количества очков.
Допустим, мы хотим пройти уровень Doom и открыть максимум секреток. А у нас есть QL (но очень умный).
Мы ему размечаем: на прошлом на всех играх он получал reward в конце уровня, и reward равен числу открытых секреток. Мы эти reward просто вписываем в таблицу задним числом, а потом обучаем нейросеть Q-функции.
А потом мы хотим пройти его так, чтобы победить максимум врагов. Мы зануляем столбец наград и переразмечаем заново и переучиваем нейронку.
Если отталкиваться не от наград, а он целевого состояния, то мы добавляем к сенсорному вектору что-то типа «процент секреток, процент убитых монстров, пройден ли уровень». Мы размечаем эту величину на прошлом. А потом делаем прогноз: состояние = текущее состояние, результат = (100% секреток, уровень пройден=1), действие =? Кажется, можно так. Соответственно, если на прошлом мы собирали только 80% секреток, не больше, то нейросеть предложит примерно те действия. В теории. С goal у меня пока не очень пошло — идея рабочая, но пока менее мощная, чем другие идеи по RL
>>> Но быстрее и качественнее мы её получим автоэнкодером, как я описал выше.
Я с этим уже практически согласен. ;) Согласится целиком и полностью мне пока мешает то, что я плаваю в теме (два из 4 минусов за статью — за слабый технический уровень и это, к сожалению, справедливо). Т.е. я уже совсем согласен с необходимостью предсказания (рассматриваю ваш экодер, как то самое что-то, что будет достраивать недостающие фреймы!), но пока не понимаю, как он будет «извлекать процессы», хотя вы объяснили, что это будет «что-то в скрытых слоях».

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

Кажется начинаю понимать! Опять же пытаюсь уложить в голове… Да, скорее всего это так. Мы не задаем будущее в виде конкретного фрейма. Мы скорее размечаем все процессы (состояния?) метриками, как до этого объекты и именно эти метрики максимизируем/миниммизируем! Понимаю теперь о чем говорил MagneticFox! )) Респект ему. Хотя все равно — выгода это метрика процессов/состояний, но понимаю, почему он на это давил…

Я немного боюсь, что сейчас упущу что-то важное, что мне казалось я понимал… (
>>> Но быстрее и качественнее мы её получим автоэнкодером, как я описал выше.
Я с этим уже практически согласен. ;) Согласится целиком и полностью мне пока мешает то, что я плаваю в теме
— я их сам толком не пробовал, да и об эмбеддингах от последовательностей не слышал, так что и сам настроен скептично. Но ничего лучше в голову не пришло.
Как сделать адаптивный алгоритм кластеризации:
Объектам (в виде векторов фич) приписываются дополнительные фичи, получаемые в качестве обратной связи (информация о предполагаемых классах, свойствах, итп), и производится кластеризация заново на конкатенированных векторах.
Ну, в целом, как-то оно работать будет. Стол не кластеризуется с детским столом (за детским столом сидят дети, а за взрослым — взрослые, очевидно, что это разные классы!, и кстати, Рэмбо с его раскраской лица — очевидно ребёнок, ведь это дети ляпают краски на лица), разные молотки будут принадлежать к разным классам (ими делают разные работы же), наличие джойстика, цвет клавиатуры, мониторы разного размера и формы будут отличать типы компьютеров между собой… и так далее, миллион различий классов при кластеризации. А может — наоборот, алгоритм не будет видеть разницы между частью телевизоров и частью компьютеров, между ананасами, дурианами и сидящими на месте курицами, между бегающими курицами и некоторыми медведями (кластеризующий признак — двигающаяся шерсть)… И, кстати, ошибки определения границы объекта тоже могут образовывать классы виртуальных объектов или быть добавленными в какие-то классы.
В общем, границы классов вас зачастую будут удивлять, их нормально при кластеризации не настроить.
Но на таких фичах (свойствах объектов) и на таком разбиении вполне можно строить эмбеддинг (векторное пространство), и задавать вопросы о близости разных молотков друг к другу, а так же, о близости куриц и ананасов. А потом словарём назначать классы каким-то объектам и каким-то кластерам… Ах да, тут тоже датасет нужен, но тут уже проще, можно выдачи ютьюба брать… ах да, есть же даже готовый youtube 8m video understanding challenge! берите и участвуйте.
Вы знаете… я когда смотрю на некоторые «кластеры» с которыми сталкиваются как нейронные сети, так и человеческие детёныши — мне кажется то, что вы описали — обычное дело! ;)

Взять хотя бы тот факт, что какой-нибудь той-терьер и мастиф — один класс (собаки), а померанский шпиц и кошка — разные. ;)

А уж классификация более сложных концептов в голове у взрослых людей — вообще во многом необъяснима без ретроспективного анализа жизненного опыта конкретного человека…

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

У Вас процессы существуют независимо от субъекта, созерцающего их. Но в комментариях, я вижу, Вы обсуждаете действия агента (RL). Человек («и все все все») познаёт мир через взаимодействия с ним.

Если процессы заменить на действия, то отпадёт вопрос: почему ананас и курица оказались в одном классе. И то и другое было съедено. В контексте этого действия эти объекты одно и тоже — не различаются. В контекстах других действий они могут/будут различаться.

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

А сама классификация происходит по мере надобности и является оценкой применимости к объекту того или иного действия. «Открываете холодильник и ищите чего такого бы съесть».

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

>> У Вас процессы существуют независимо от субъекта, созерцающего их. Но в комментариях, я вижу, Вы обсуждаете действия агента (RL). Человек («и все все все») познаёт мир через взаимодействия с ним.

Безусловно. Но вопрос ведь шире: RL предполагает или повторение наиболее подходящей стратегии, которая дала результаты ранее, или рандом. Но мы же видим: в реальной жизни происходит иначе! Чистый рандом все-таки применятся не так часто. Но зато не только человек, но и высшие животные способны пробовать инициировать процессы, которые они наблюдали! Иногда это объясняют неосознанным копированием поведения особей, которые выбраны молодым существом в качестве объекта для подражания. Типа это врожденная программа. Может быть, но это не обьясняет, как некоторые обезьяны и даже вороны умудряются использовать «орудия труда» — впервые а этой популяции.
Но зато не только человек, но и высшие животные способны пробовать инициировать процессы, которые они наблюдали!

Копирование поведения сейчас связывают с зеркальными нейронами. Поведение — это реализация последовательности действий. Благодаря этим нейронам мозг воспринимает чужие действия как собственные. То есть, по сути это не является пассивным наблюдением, это собственные переживания.

Может быть, но это не обьясняет, как некоторые обезьяны и даже вороны умудряются использовать «орудия труда» — впервые а этой популяции.

Есть у меня «дикая» идея, — мозг как накопитель внешнего разума. Некая виртуальная среда, которая копирует/отображает объекты внешней среды в их виртуальные модели, и позволяет этим моделям взаимодействовать друг с другом.

Чтобы что-то изобрести новое, необходимо путём наблюдений накопить вначале «сущностей» мира (палка, камень, жилы...), а потом в этом концентрированном «коктейле» путём рекомбинаций может родиться ранее не существовавшая комбинация — каменный топор.
>> Есть у меня «дикая» идея

Ну так я же вроде о том же, не? ;) первая часть за модель, вторая про взаимодействия…

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

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

Что важно: собственный опыт и его закрепление через RL ни разу не отменяется! Но основной камень преткновения: создание гипотез для проверки опытом. Рандом не катит!

Два наблюдения из жизни:
  • совсем маленький ребенок бьет одним кубиком по другому: зачем? ;) Очевидно не расколоть хочет!
  • У ребенка постарше спросил чем отличаются кошки и собаки… как думаете — какой ответ? ;)
Если привязывать это к теории RL, то мы имеем перенос опыта — как будто ребёнок копирует чужую SAR-таблицу себе. В RL это можно сделать, но не так лихо, как в природе — надо каким-то образом подключиться к «глазам» другого агента. И если так поступать, то чужой опыт получится несколько менее полезным, чем лично свой… Но это и в природе так же.
«О, батя играет в настольный теннис. Ну, выглядит простенько. Ой, что это, почему я по шарику не попадаю, всё ж просто?!»
Но тут решает то, что чужого опыта больше, плюс он обычно сформирован уже годными стратегиями — такие, что за всю жизнь не выведешь.
Гм… Чот сложно.

Я-то другое имел ввиду… ;) У этих вопросов на самом деле по сути общий ответ: звук. ;)

Ребенок стучит кубиком по кубику, потому, что это офигительный пример причинно-следственной связи! ;) Удар-звук.

А собака и кошка различаются тем, что собака говорит «Гав», а кошка «Мяу». ;)

В общем доп. канал восприятия похоже рулит! ;)
Ой, я это к тому сообщению уровнем выше писал)))
А про стук я думал, что он просто статистику набивает — деформации смотрит, упругость, царапины, то есть скорее про тактильный канал подумал)
Ну и кошки с собаками — да, тут явно звук)
Хм… Про тактильные я не подумал… Тоже может быть — так-то у него не спросишь еще, в отличие от того, который постарше. ) Так что и то и то — домыслы.
Насколько реально сделать примерно следующее:
Выделение отдельных объектов
Выделение движущихся объектов
Иерархическая классификация объектов по любым извлекаемым признакам

Ни насколько. Никто не знает, как это сделать на уровне человека. Особенно последнее.

Последнее как раз фигня! ;) если признаки «извлекаемы», то и классификация по ним не проблема. Я же не говорил «по всем признакам на уровне человека».


А вот с первыми двумя я пока для себя не уяснил. Работать должно (хоть в каком-то виде), но когда пытаешься гуглить на эту тему — все забито поиском известных обьектов на основе ImageNet. Жто хорошо и круто, но немного не то.

Проблема как раз в том, как их извлечь.


Работать должно (хоть в каком-то виде)

Если оно будет работать недостаточно хорошо, то и нужного результата не будет.

>>> Проблема как раз в том, как их извлечь.

Несомненно. Есть вот идея «плясать» от процессов, но сырая.

>>>Если оно будет работать недостаточно хорошо, то и нужного результата не будет

Наверное… но если есть не достаточно хороший результат — его можно улучшать. Т.е. есть с чем работать.

Просто одно дело: нельзя извлечь объекты. Это ставит крест на всей идее. Другое: объекты извлекаются криво/косо, с ошибками и через раз. Тут можно работать над улучшением технологии.

Мне тут накидали пару идей, куда можно копать… ;) с одной стороны — вы скорее правы, чем нет: надежного и простого способа видимо нет. С другой — есть кое-что, с чем можно эксперементировать
Есть вот идея «плясать» от процессов

Так ваша идея основывается на классификации объектов, а не наоборот. У вас же в статье развертка во времени идет после классификации, а не является ее механизмом.


но если есть не достаточно хороший результат — его можно улучшать

Снова, как именно надо улучшать — никто не знает. Давайте я вам скину программку выделения черного движущегося квадрата на белом фоне, а вы ее улучшите до произвольных объектов.


надежного и простого способа видимо нет

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

>>>Так ваша идея основывается на классификации объектов, а не наоборот. У вас же в статье развертка во времени идет после классификации, а не является ее механизмом.

Ну, значит я не внятно описал… ( Классификация без выделения процессов может быть только по каким-то очень незначительным критериям, типа цвета/формы. Этого очевидно недостаточно. Основа именно процессы.

>>> Давайте я вам скину программку выделения черного движущегося квадрата…

Зачем вы так? ( при чем тут квадрат? Есть вполне себе интересные механизмы, как на основе сегментации (которые можно «улучшать» за счет стерео/саккад/лидара), либо на основе нейронных сетей, где можно работать над обучающей выборкой… вы же прекрасно понимаете, о чем я говорю…

>>>Надежный и простой способ есть, об этом свидетельствует наличие естественного интеллекта

Я лишь имел ввиду технической реализации на текущий момент…

Я не совсем понимаю: вам есть, что предложить? Вроде наши точки зрения на проблему весьма схожи, но я пока не замечаю конструктива.

И кстати, мы совсем упустили из виду такой важный навык естественного интеллекта, как целенаправленное изучение объектов, в отношении которых выдвигаются определенные теории. ;) т.е. та или иная форма сегментации может быть основой для гипотез об объектах, а дальше можно подойти ближе приблизится, посмотреть под другим углом, пощупать в конце концов! Тем более, что это нужно для пополнения классификатора, когда в поле зрения что-то необычное/неизвестное. В отношении известных и классифицированных объектов должна работать обычная нейронная сеть…
Полагаю, такую задачу может выполнять эвристика любопытства в RL. Она по-разному может быть устроена, но суть примерно в том, что некоторые RL ведут себя так, будто для них является самоценным (но менее ценным, чем основная цель) наблюдение чего-то, что они предсказать не могут. То есть они целенаправленно ищут, что бы такое поразведывать
Ну, значит я не внятно описал…

Вы написали вполне внятно:
"Ну и, наконец, построение развертки (на основе пп 1,4, т.е. пространственной карты с учетом метрик) во времени"


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


Основа именно процессы

Ок, пусть так. То есть у вас для классификации по любым извлекаемым признакам сначала каким-то образом надо научиться выделять процессы. Соответственно, выделение процессов не может основываться на классификации, иначе получается замкнутый круг. Вы в статье не предложили такого метода. Возвращаемся к тому же самому — никто не знает, как это сделать.


Зачем вы так? ( при чем тут квадрат? Есть вполне себе интересные механизмы )

При том, что улучшения требуются одни и те же, хоть для простой программы, хоть для интересной.


вы же прекрасно понимаете, о чем я говорю…

Я понимаю, о чем вы говорите, и понимаю, что так это работать не будет. Что и пытаюсь вам объяснить.


Я не совсем понимаю: вам есть, что предложить?

Я отвечал на ваш вопрос "Насколько реально сделать". Если бы кто-то знал, как это сделать, ИИ бы давно уже изобрели.


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

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

>>>В статье у вас выделение процессов основывается на классификации объектов и других пунктах. Соответственно, все эти пункты не могут основываться на выделении процессов, иначе получается замкнутый круг.

Не совсем. Это замкнутый процесс, т.е. классификация объектов основана на процессах, а маркерами процессов являются объекты. Но это нормальный итерационный процесс!

>>> Я понимаю, о чем вы говорите, и понимаю, что так это работать не будет. Что и пытаюсь вам объяснить.

Ок. Я вашу точку зрения понял. Я с вами не согласен. ;)

>>> Для этого надо сначала научиться выделять и отслеживать объекты.

Вот именно. пошел ставить Pyton! )
Не совсем. Это замкнутый процесс, т.е. классификация объектов основана на процессах, а маркерами процессов являются объекты. Но это нормальный итерационный процесс!

Вы почему-то делаете вид, что не поняли. Я говорю о вашей логике, а не об итерациях.


И нет, любой итерационный процесс должен с чего-то начинаться. У вас этого нет.


Вот именно. пошел ставить Pyton!

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

Михаил, я же написал, что вашу точку зрения я понял и с ней не согласен. Зачем продолжать? ;)

Ну разве что…

>>> подогнать параметры в существующих алгоритмах не выйдет, это уже пробовали

Ссылку дадите? На тех, кто пробовал и не вышло?
Да и… Если честно — это не имеет принципиального значения. Если на данном этапе надежно выделять объекты невозможно — значит можно перейти в симуляцию, где знания об окружающем мире изначально достаточно полны, что бы пробовать все остальное. ;)

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

Я пояснил, что имел в виду не то, что вы подразумевали в своих ответах.


Ссылку дадите? На тех, кто пробовал и не вышло?

Ну судя по тому что ИИ еще не изобрели, берете любой алгоритм машинного обучения или чего-то похожего и ищете информацию, где он применялся и какие результаты. Из известных можно AlphaZero назвать. Конкретных ссылок у меня нет, но здесь было несколько статей про то, как он играет в StarCraft и какие делает ошибки.


значит можно перейти в симуляцию

Так сложность-то как раз в механизмах обработки входной информации.

По идее, чтобы итерационный процесс работал в данной ситуации, у него должна быть метрика качества. Так, чтобы на каждой итерации ты понимали, улучшаемся мы или ухудшаемся. Ну, это не единственный вариант, но это достаточно стандартный подход. Есть соображения, как она будет выглядеть?

Условно, мы можем поставить задачу: разбей нам поток опыта на кластера таким образом, что из каждого кластера каждое действие вело в один кластер с вероятностью как можно ближе к 1 или 0. То есть чтобы если мы находимся в каком-то кластере и делаем какое-то действие, и предсказываем, в каком кластере окажемся, то чтобы как можно реже прогноз был «а чёрт его знает, примерно равновероятно».
Это NP-полная задача, но она математически корректна, над ней можно подумать =)
Это одна метрика. Может, у вас какая-то другая есть? Или вы от иной механики предлагаете отталкиваться?
>>> Есть соображения, как она будет выглядеть?

Да, я уже писал где-то: попадание в прогноз…

>>> разбей нам поток опыта на кластера таким образом, что из каждого кластера каждое действие вело в один кластер с вероятностью как можно ближе к 1 или 0. То есть чтобы если мы находимся в каком-то кластере и делаем какое-то действие, и предсказываем, в каком кластере окажемся, то чтобы как можно реже прогноз был «а чёрт его знает, примерно равновероятно».

Если я правильно вас понимаю, то очень похоже. Правда я себе это представлял именно как проверку совпадения прогноза с реальностью, но…
Да, я уже писал где-то: попадание в прогноз…

Разбивка на кластера — это препроцессинг, это не прогнозирование. Таргета нет. Тот вариант, что я описал — он не про сам прогноз, а про то, что кластера должны быть пригодны к тому, чтобы какой-то другой ML на их базе проводил прогноз.

Впрочем, может, вы имели в виду что-то вроде такого?
1) Взяли какой-то алгоритм кластеризации, ввели какие-то настройки, получили разбиение на кластера
2) Использовали кластера в качестве фичей, сделали прогноз (полезности или следующих кадров) чем-нибудь типа простенького Random Forest. В общем, легковесной моделью
3) Получили mse, mae или иную метрику
4) Взяли другой алгоритм кластеризации или другие настройки
5) Повторять пункты 1-4, пытаясь подобрать такую кластеризацию, при которой mse или mae получше.

Я пробовал такую схему генерации и отбора фичей, но я отталкивался не от кластеров, а от операций над временными рядами, и это работало, хоть и не очень быстро.
Ну я не могу на пальцах так детально все проработать, но… давайте идею с начала:
  • Первый уровень: детектор объектов. Выделяем сочетанием сегментации/карты глубин/Классификатора объектов (который на первой итерации первого запуска не определен) перечень объектов… дальше надо продумать детально, какая информация на выходе с этого этапа передается дальше, но однозначно не исходная картинка! Цель: снижение размерности. Вместо HxWx3 — какое-то векторное представление объектов (совокупности метрик, которые либо выделены из текущих данных, вроде цвета/размера/ формы либо из классификатора) и их взаимного расположения. Все, что не было определено — отбрасывается (если слишком многое отбрасывается — это повод дорабатывать детектор, а не проблема подхода в целом). Все, что осталось на следующий уровень.
  • Второй уровень: детектор процессов. Накапливает изменения происходящие в течении времени с данными первого уровня. Тут я пока не могу предложить технологий, т.к. еще даже не гуглил на эту тему, но на вскидку: изменения происходящие в одном «месте» (при неизменном пространственном положении) с одним или несколькими объектами = процесс. Изменения, происходящие одновременно (но в разных местах) — возможно субпроцессы (процессы, являющиеся составными частями большего процесса), изменения, имеющие корреляцию (например, начало одного изменение совпадает с окончанием второго) — так же субпроцессы, но имеющие причинно-следственную зависимость и тп… соответственно на этом этапе нам желательно выделить какие-то метрики подобных процессов для их идентификации и дальнейшей обработки. Я правда не знаю пока, какие именно! Ну понятно, что начало/конец/длительность/траектория, но… может еще какие-то аспекты.
  • Третий уровень: кластеризация. Пытаемся процессы как-то разбить на классы… пока кроме длительности/траектории… результата! (Ну если в результате процесса-изменения один/все из объекты изменились/исчезли/ход процесса поменялся… хот это уже чуть иное! что-то более конкретное сказать не могу — нужно пробовать. Ну вобщем: как-то кластеризуем! Получаем объекты, которые задействованы в родственных процессах, что является основой для кластеризации объектов по процессам… самый простой (и обширный!) кластер процессов — движение, самое простое деление объектов: статичные(неподвижные) и мобильные!
  • А вот дальше самое интересное! Мы пытаемся предсказывать процессы. Это и будет валидацией: если предсказанное поведение совпало с реальным — текущая модель сбалансированна правильно. Не совпало — что-то не так, но что именно и как — вопрос. Мне тяжело так на пальцах, без конкретики...
Тут хорошо бы структуры данных привести и методы, которыми мы их получим. На человеческом языке всё звучит зашибись просто, но на человеческом языке непонятно, то ли в задаче можно использовать тупенькую unsupervised кластеризацию, то ли надо вручную размечать огромный датасет и обучать LSTM на десятках GPU. Поэтому… Сформулирую гипотезы)

Детектор объектов. Возможные выходные структуры: эмбеддинг (1-мерный вектор, нечеловекочитаемый, можно получить утыренной нейросеткой), 2д-разметка (матрица, в ячейках циферки, если циферки разные, то и объект разный, можно получить утыренной нейросеткой), список (человекочитаемый вариант, список структур, в дальнейший ML его запихнуть крайне нетривиально, можно многими способами с совершенно непредсказуемым результатом. Получается либо утыренной нейронкой, что не факт, либо лично обученной)

Детектор процессов. Возможные выходные структуры: эмбеддинг, список структур. Эмбеддинг получить попроще — но надо самому обучать нейросеть. Список получить посложнее — нужен огромный вручную размеченный датасет… И непонятно, как список пихать в следующий ML.

Кластеризация. Если у неё на входе вектор — всё отлично! За одним но. Кластеризация произойдёт как-то. Повезёт — кластера будут соответствовать каким-то человеческим абстракциям. Не повезёт — это будут просто метки, по крайней мере для человека. Как кластеризовать список произвольных структур — хз.
Ну то есть. Кластера будут, но скорее всего, они не будут соответствовать никаким человеческим понятиям.

Мы пытаемся предсказывать процессы.
То есть мы берём эмбеддинг процесса, присобачиваем к нему признак кластера (например, у нас 3 кластера, и процесс попал в 1-й, тогда мы к эмбеддингу дописываем 1,0,0), берём это за X, за Y берём эмбеддинг следующего процесса в следующий кадр… Или признак кластера в следующий кадр?

Тут же замечаем, что если предсказывать признак кластера, то качество прогноза кластера будет тем лучше, чем кластеров меньше, то есть чем грубее карта. То есть, видимо, качество прогноза кластера единственной метрикой быть не может…

Можно чуть детализации?)
>>> Можно чуть детализации?)

Откуда? ;) это же мозговой штурм, а не готовый рабочий проект!

Я очень хорошо понимаю о чем вы, когда говорите про «на человеческом языке звучит зашибись». ;) буквально недавно общался с человеком, который тоже считает, что он все в ИИ понял. Он мне показал, как я выгляжу со стороны. Но с моим уровнем технической подготовки я так и буду выглядеть! Нужно пробовать! :( иначе я не пойму, где косяк и так и буду мыслить в терминах человеческого языка, где все «зашибись»!
Я тут поговорил с умными людьми по поводу нашей задачи.
Они говорят, что для составления эмбеддинга нужны разные нейросетки в зависимости от того, что за картинку мы сворачиваем. Я сказал, что картинка — это сцена со множеством объектов. Тогда они сказали взять какую-нибудь сетку для сегментации, отодрать от неё все full-connected слои и оставить только свёрточные, чтобы осталось пространственное расположение объектов.

И да, я попробовал схему: взять эмбеддинг от картинки (эмбеддинг 2048 неупорядоченных циферок, задача — вот эта gym.openai.com/envs/Seaquest-v0, для эмбеддинга сетка resnet50) и зарядить её на вход тупенькому RL.

Результаты такие: да, оно обучается! Но медленно просто ужас — одно взятие эмбеддинга занимает 0.07-0.2 секунды, это очень долго. А ведь есть ещё обучение RL. Умные люди советуют взять GPU. А я… Взять-то взял, уже 2-й день вожусь с дровами на неё
>>>Тогда они сказали взять какую-нибудь сетку для сегментации, отодрать от неё все full-connected слои и оставить только свёрточные, чтобы осталось пространственное расположение объектов.

Золотые слова! ;) Мне вот реально интересно, вот эта вот сеть — она так действует? С одной стороны, DesertFlow сказал, что она умеет детектить объекты, которых не было в обучающей выборке… С другой -может это какие-то ошибки детекции, а в реале она просто действует по принципу… находит сначала конкретные, потом обезличивает. Но я все-таки верю в первый вариант! ))) Внутрь пока не лазил — скилов не хватает. Да и времени!
Мне вот реально интересно, вот эта вот сеть — она так действует? С одной стороны, DesertFlow сказал, что она умеет детектить объекты, которых не было в обучающей выборке…
— судя по мануалу, это оно. Верхняя часть сетки предобучена, остальные слои обучаем сами. В результате обучение быстрее, чем если бы проводилось с нуля, и требует меньше данных.
Дополнил основную статью списком «технологий», которые потенциально должны помочь в решении заявленных проблем. ;) Осталось взять да попробовать!

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

>>> А почему вы думаете, что никто не пробовал?)

А с чего вы взяли, что я так думаю? Я думаю, что люди для чего-то пробовали. Для чего — понятия не имею! Теперь я могу попробовать — все вместе или по отдельности. Или еще кто — было бы желание.
А с чего вы взяли, что я так думаю?

С того, что вы написали "должны помочь в решении заявленных проблем, осталось попробовать".

Так мне помочь, а не кому-то еще! Я понятия не имею — какую задачу решали те люди и были они удовлетворены достигнутыми результатами или нет…

Вот вы, например… Не пробовали (если я не прав и пробовали — расскажите о своем негативном опыте — очень интересно!), но заранее уверены, что не работает!

Я пробовал, но там не о чем рассказывать. Я не "уверен", а использую аргументы, почему не будет работать.

Ваш основной аргумент, если я правильно понял: раз ИИ еще не реализовали, значит текущие технологии не работают! ;)

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

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

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


Изучать существующие подходы конечно надо, просто у вас какое-то отношение типа "вы всё делаете неправильно, вам ничё не надо, поэтому у вас не получается, а я проблем не вижу и сделаю то же самое, только по-нормальному".


Просто никому не нужны классификаторы объектов, не совпадающие с общепринятыми!

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

>>Шутите?) ИИ пытаются изобрести по всему миру любыми способами.

Эм… у меня все-таки четкое ощущение, что мы о разных вещах говорим…

От детектора объектов, о котором говорю я и возможность которого вы упорно отрицаете, до ИИ — примерно как до луны пешком. Вы в это понятие что вкладываете?

Вот представьте себе картинку, на которой стол, пара стульев, на столе — тарелка с яблоками. Вот все, что мне надо: условно, та же картинка, где в первом приближении, каждый из этих объектов маркирован как отдельный объект (никак не классифицированный!), в идеале — яблоки/стулья имеют общую метрику (яблоки — свою, стулья — свою), позволяющую трактовать их как объекты одного класса (чисто геометрически/текстурно). Все! Где вы тут видите ИИ?! Тем более — сильный? Это задача из области машинного зрения и библиотеки OpenCV. Нейронные сети, вроде гугловского детектора объектов и наработок по определении карты глубин не повредят конечно…
От детектора объектов, о котором говорю я и возможность которого вы упорно отрицаете, до ИИ — примерно как до луны пешком.

Вы говорите о разуме и об ИИ.


Размышления о природе разума.
Продолжения размышлений на тему разума как естественного, так и искусственного (ИИ)
Все-таки главное, на чем я хотел сосредоточить внимание — это процессы. Я глубоко убежден, что потенциальный ИИ нужно обучать не на фото и даже не на видео.
Для того, чтобы успешно взаимодействовать с миром ИИ нужно тоже самое: на каком-то (далеко не первом) уровне должна присутствовать сеть, получающая на вход развернутую во времени карту процессов.
Теги: AI, ИИ, философия разума

_


Вот все, что мне надо: условно, та же картинка, где в первом приближении, каждый из этих объектов маркирован как отдельный объект…
Где вы тут видите ИИ?! Тем более — сильный?

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

Классная логика: вы говорите об ИИ, значит, все что вы говорите — невозможно потому, что природа это делала тысячи (на самом деле сотни тысяч, а то и миллионы, но это не важно) лет, да и серьезные дядьки тратят на это миллионы долларов — так что забудьте! )))

Ладно, Михаил. Еще раз: я вашу точку зрения понял, я с ней не согласен. ;) С практической точки зрения ваш ответ «никак», мне не интересен. Смысла продолжать эту дискуссию не вижу.
Классная логика: вы говорите об ИИ, значит, все что вы говорите — невозможно потому, что природа это делала тысячи лет, да и серьезные дядьки тратят на это миллионы долларов

Извините, это не моя логика. Фраза про тысячи лет никак не связана с невозможностью, синонимов этого слова в окружающих словах там нет. Как и фраза про экономические причины.


Еще раз: я вашу точку зрения понял, я с ней не согласен.

Судя по вашим ответам, вы ее не поняли.


Правильное распознавание объектов — я понятия не имею, что вы имеете ввиду под «правильным» и «распознаванием»!

Я имею в виду то же самое, что вы имеете в виду под "просто выделяла объекты". Под словом "объекты" вы подразумеваете те объекты, которые распознаете вы сами. А если она вам все красные пиксели будет распознавать как один объект, или там все пиксели в пределах произвольного квадрата, вряд ли вы это посчитаете правильным, не так ли?


И да: я хочу, чтоб программа просто выделяла объекты. Мне пока все равно какие — те же или не те же… Любые.

Я именно об этом вам и говорю. То, что вы называете "просто выделять любые объекты" это и есть основная сложность в изобретении ИИ. Это вы знаете, что вот они объекты, а программа не знает.

Выделение объектов неплохо уже решается (особенно на видео: SLAM, восстановление карты глубин, все дела), и, боюсь, это вовсе не самая большая сложность в создании ИИ, т.к. большой датасет для распознавания и выделения объектов есть, а вот для мышления — нету… :)
Так вот и я о том же… ;)

Есть даже большой, хороший датасет для выделения действий… Вот только он мне не подходит. ( Мне не нужны просто действия — они должны быть частью общей картины… Частью модели. И именно эта «модель» в том или ином виде должна подаваться на вход какой-то окончательной сети, которая должна предсказывать развитие этой модели во времени… Т.е. собственно осуществлять «моделирование».

Хотя в качестве свертки перед анализом картины в целом — может и прокатит!

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

>>> человеку не требуется предварительно заданного большого датасета.

Еще как требуется! Человек тратит на то, что бы научится выделять объекты (имея стереозрение, саккады и возможность менять угол обзора, и переменное разрешение с автофокусом) уж пару первых месяцев точно! Это не считая пару сотен миллионов лет эволюции (в ходе которой вполне могла сформировать предобученная сеть!). Вы хотите сказать, что датасет не размечен? Посмотрите вот этот ролик — тут сеть учится определять объект на лету! Да его предварительно помечают к слежению (условно кликом мыши), но вполне нетрудно сделать так что бы отслеживался движущийся/либо контрастный объект (как это работает у детей) — такие технологии вообще не проблема.

>>> мы покрасили стул, система это наблюдала, она должна распознавать этот объект как тот же самый, который был до покраски. И не путать его со вторым стулом, который рядом стоял.

если мы имеем сеть, отслеживающую действие — это вполне возможно.

>>>А карта глубин это не главное

Два при чем тут «главное»! Карта глубин в дополнение к сегментации позволяет отнести несколько чисто цветоградиентных сегментов к одному объекту за счет равной глубины этих сегментов. Не больше и не меньше! Дополнительная аналитика и все. Как и движение — движущиеся синхронно или синхронизировано сегменты — с большой долей вероятности — один объект.

>>>люди плоские мультфильмы смотрят и могут выделять объекты в них, даже если никогда такие объекты

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

>>> Она решается недостаточно хорошо.

Достаточно. Не достаточно понятно, что с этим делать дальше. Есть несколько сырых идей, которые нужно пробовать…
Еще как требуется! Человек тратит на то, что бы научится выделять объекты (имея стереозрение, саккады и возможность менять угол обзора, и переменное разрешение с автофокусом) уж пару первых месяцев точно!

Бывают люди слепые от рождения, но говорить они учатся примерно в то же время, что и обычные люди. Они знают свое имя (объект "Я"), знают кто такая "мама" (объект "мама"), узнают ее по голосу. Только для слуха нет такого потока данных, как для зрения, люди просто не могут говорить слова по 60 раз в секунду.


Это не считая пару сотен миллионов лет эволюции (в ходе которой вполне могла сформировать предобученная сеть!).

Это проверяли экспериментами на котятах, там нет предобученной сети. Информацию можно найти в книге "Глаз, мозг, зрение".


но вполне нетрудно сделать так что бы отслеживался движущийся/либо контрастный объект (как это работает у детей) — такие технологии вообще не проблема.

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


если мы имеем сеть, отслеживающую действие — это вполне возможно.

Ну да. И проблема как раз в том, что надо сделать сеть, отслеживающую действие.


Да при чем тут «главное»!

При том, что это было написано в комментарии, на который я отвечал.


Не больше и не меньше! Дополнительная аналитика и все.

Я ровно это и написал — карта глубин неважна.


Движение+сегментация+предобученная в реальных условиях нейронная сеть.

И как это противоречит моим словам?


Достаточно. Не достаточно понятно, что с этим делать дальше.

Вы играете словами. "Недостаточно понятно, что делать" и "никто не знает, как сделать" означают одно и то же. Факт остается фактом — нейросети не могут распознавать объекты на том же уровне, на котором это делает человек, алгоритмы обучения до такого уровня неизвестны.

И да: я хочу, чтоб программа просто выделяла объекты. Мне пока все равно какие — те же или не те же… Любые. Правильное распознавание объектов — я понятия не имею, что вы имеете ввиду под «правильным» и «распознаванием»! Но явно не то, что интересует меня.

>>>И все остальное это тоже свойства естественного интеллекта.

Спасибо, кэп! ) Конечно это все свойства естественного интеллекта! Статья называется «размышление о природе разума», а не «чем искусственный интеллект отличается от естественного»… НО по этому поводу смотрите предыдущий комментарий.

//Ответ не для «продолжения дискуссии» и не спора ради, а для возможно читающих эту полемику людей — просто разъяснение. //
я хочу, чтоб программа просто выделяла объекты. Мне пока все равно какие — те же или не те же… Любые.

Допустим это есть. Даже без «допустим», — вопрос решённый. Просто заменяем реальную среду на контролируемую виртуальную. У нас полные данные о сцене — все данные о всех объектах в ней (и без всяких ИНС).

Дальше что делать с этими данными?
Полные данные о сцене вместо фреймов в виде пикселей снижают размерность данных на несколько порядков (с потолка — просто ощущение, не считал! ;) ).

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

Процесс — это изменение. Изменение того, что мы получили на первом этапе. Объекты претерпевают изменения: движутся, трансформируются, взаимодействуют… Хотелось бы на этом этапе получить некий пулл возможных процессов (в виде классификатора).

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

Короче имеем пул процессов. Который вместе с пулом объектов образует вектор (хз пока какой размерности) контекста.

И вот уже с этим контекстом работает анализатор контекста. Он пытается предсказать контекст в развитии. И качество предсказания является валидатором того, насколько правильно была проведена классификация первых двух «слоев». Если качество хреновое — что-то нужно править. что конкретно и как — пока понятия не имею…

Это было много букв. А если очень коротко и на пальцах, и сознательно несколько упрощая: имея, как вы говорите контролируемую виртуальную сцену — мы фактически получаем Starсraft, в который AlphaStar, или как там его вполне сносно играет! $) Размерность вариантов кажется несопоставимой, но… Это зависит от того, откуда берутся варианты! Если их не задают искусственно (а человек на самом деле не настолько крут, что бы «отделить зерна от плевел» т.е. на каждый момент времени всю доступную информацию отсортировать по важности), а система сама их вытаскивает из контекста как может, то… Она может и не сравнится с ходу с человеком (и даже животным), но будет целостна и самодостаточна, а усовершенствование результативности каждого этапа — вопрос времени.
Короче имеем пул процессов. Который вместе с пулом объектов образует вектор (хз пока какой размерности) контекста.
Понял, что смешал два разнонаправленных процесса. (

На каждом уровне мы имеем два встречных процесса: обучение классификатора и выделение объектов на сцене. И когда я говорю «выделяем пул процессов/объектов» я видимо имею ввиду и классификатор возможных и текущий расклад в сцене.

Передаем в следующий слой мы конечно же расклад. Но при моделировании мы используем классификатор тоже… Как-то так…

Эти данные мы разворачиваем во времени и передаем на вход классификатора процессов…

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

Да, ещё. Как и в последнем случае с самообучением, как Вы поймёте, что сеть обучилась распознавать некие процессы?
Да понимаю я, что используется… ;) Я вон в дополнении разместил ссылку где вполне себе действия выделяются. Я же не говорю, что это ноухау. Как раз наоборот — я не настолько секу в современном ML, что бы придумать что-то принципиально новое — я могу только использовать имеющееся относительно необычным образом.

>>>сеть сама обучается находить лица. Но вот ИИ там не самозарождается.

Я вообще не верю, что где-то что-то может зародится само. ;) Я даже в «первичный бульон» не верю! Вот в вашей фразе меня очень смущает «сама»! Что значит «сама»? И почему именно лица тогда, а не… Не знаю — не задницы яблоки.

>>>Чего-то не хватает.

Вот и мне так кажется. И мне кажется, что не технологий — технологий дофига. И производительности уже тоже с запасом. Мне кажется какой-то кумулятивный эффект должен быть — некое объединение самых разных подходов. RL, ML, CV…

>>>как Вы поймёте, что сеть обучилась распознавать некие процессы?

Ну… Вопрос с подвохом. Понять я это смогу самыми разными способами, например выводить такие рамочки с названиями ID выделенных процессов, но вы ведь не об этом спрашиваете? Вопрос ведь в другом: зачем мне это понимать? Я хочу сделать систему в которой обучение и классификация — два взаимосвязанных встречных процесса, которые не заканчиваются со временем. Т.е. обучение — часть процесса использования. Очень хочу уйти от обучения, как части проектирования системы, хотя вот тут, как я понимаю — почти никому не удалось: очень уж непрактично.
Что значит «сама»?

Обучение без учителя. Ей скармливают тонны фоток без указания чему обучаться. На Хабре про неё недавно проскакивала информация, но ссылку не сохранил.

И почему именно лица тогда, а не… Не знаю — не задницы яблоки.

И задницы тоже, если их было достаточно в фотках.

Вопрос с подвохом.

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

Дело в том, что у меня похожая ситуация. Когда я точно знаю, что именно мой искин наблюдал в эксперименте, я могу следы этого найти в его мозгах.
Допустим, если он прочёл стих «В лесу родилась ёлочка… бла-бла-бла». То я знаю, что продемонстрировав ему слово «ёлочка», я найду у него соответствующий этому слову ментальный образ (нейрокод). Но там в его коре будут и другие коды, о которых я не могу точно знать. Можно только предполагать об их наличии. Например, предположить что он связал слова «ёлка» и «лес» и искать нейрокод <ёлка, лес>. А если не знаешь, что конкретно искать, то и нет способа узнать о существовании этого. Ровно как и с человеком.

Поэтому мне интересно, у кого какие есть мысли о том, как узнать, что знает чёрный ящик?
>>> Обучение без учителя.

Задача сегментации и кластеризации формально относятся к обучению без учителя. Однако в самой этой парадигме есть некая… Червоточина! По большому счеты мы исходим из предпосылки, что в сырых данных есть некая структура и мы хотим, что бы сеть ее нашла. Она и находит обычно, но часто не то (и не так), что нам бы хотелось.

Я бы сделал некое громкое заявление вида: любое «обучение» — оно как бы «с учителем». ;) Ибо всегда есть критерии, заданные изначально: признаки, параметры «схожести», частота повторений паттернов в выборке и тп. Это же вопрос терминологии: если «с учителем» и «без учителя» — это как разница между классификацией (по заданным классам) и кластеризацией (по каким-то выделенным признакам и не знаю… расстоянию Хемминга?), то да: классификатор имеет смысл, только если количество классов изначально детерминировано и известно, а в остальных случаях рулит кластеризация!

>>>И задницы тоже, если их было достаточно в фотках.

Вот об этом я и говорю. Она не «сама». ;) Она от выборки. Т.е. те, кто создавали обучающую выборку ее определенным образом готовили (или не готовили, а «так получилось». Но тогда и результаты вышли «какие-то»). Да — не размечали в буквальном смысле, но… Но!

Скорее всего, как я уже говорил, все определяет критерий полноты. Если возможно так построить классификатор, что бы в каких-то аспектах он охватывал всю «область определения» — это может быть предобученная сетка (с учителем). Но для многих элементов сети, учителем (поставщиком паттернов/классификатором/валидатором) может выступать другой элемент сети — предобученный, или построенный на надежно извлекаемом наборе признаков (сегментация, карта глубин и тп.). Обучение без учителя просто на наборе входных данных (и, соответственно на повторяемости/схожести, той же сегментации/кластеризации, но без четкого «физического» смысла) тоже конечно может иметь место, но… Уж больно специфический кейс.

>>> Никакого подвоха.

Я имел виду несколько иное. ;) Что работает оно или нет — можно понять чисто эмпирически, а как именно работает — строго говоря не важно. Но это конечно не очень правильный подход: хорошо если работает, а если нет? Как дебажить то?! Так что да — ваш вопрос вполне уместен.

>>>Дело в том, что у меня похожая ситуация.

Расскажете? Можно в личку, если так удобнее. Интересно же!

>>> у кого какие есть мысли о том, как узнать, что знает чёрный ящик?

Ну… Мысли есть, но… Не у меня и не все там просто. Были всякие работы на тему визуализации и анализа, но все там конечно не очевидно.
Перенесу ответ сюда, а то ветка сильно углубилась.
любое «обучение» — оно как бы «с учителем». ;) Ибо всегда есть критерии, заданные изначально: признаки, параметры «схожести», частота повторений паттернов в выборке и тп.
Соглашусь с Вами, так как данные в выборке чисто статистически дают «подсказку» сети чему обучаться.

Расскажете? Можно в личку, если так удобнее. Интересно же!

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

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


Я изобрёл универсальный перцептивный хэш (который пытается сделать Numenta). Вся необходимая информация для этого взята из Википедии. Просто взял базовые свойства нейрона и построил модель. Объединил в нейронные группы по 100 шт (микро-ядра). Такие группы «сжимают» сенсорную активность в разряженный хеш, настроил на 10% активности (как это в мозге).

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

Элементарным образом создаются ассоциативные связи. Хеши в контексте друг друга.

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

В процессе «игры» с этим «ящиком» обнаруживается много параллелей с реальным устройством мозга: зачем мозгу шум; почему люди часто не замечают повтор повтор слов; как нам уатдёся чтаить солва в слуайчном пдоряке бкув.

Но вот пока нет важной вещи — как его превратить в агента. Без моторных функций — это пока просто наблюдатель. Правда мне известно, что опыты на живых нейронных группах (ядрах) показывают, что можно случайным образом выбрать нейроны, соединить их с моторными цепями робота, и группа начинает демонстрировать некоторое поведение. Но сейчас в первую очередь у меня интерес в практическом русле — эксплуатации свойств ядра в его способности узнавания инвариантов.
Очень любопытно! Я пока не ходил по всем ссылкам (на это нужно время), поэтому ответ пока поверхностный: правильно ли я понимаю, что вы работаете с текстом? Или «слово» в данном случае более широкое/абстрактное понятие?

Если да, то у вас есть хороший шанс: сейчас как раз проходит конкурс на понимание текста — с учетом приза в виде гранда на 100 миллионов. ;) подстегнет исследования.
Сейчас работаю со словами просто из-за удобства и компактности в представлении и дебаге. Но «слово» — это условность. Сенсорные и ядерные активности — разреженные распределенные представления (бинарный вектор), «признаковое описание» как, например, хорошо расписано в статьях и видео Редозубова.

Если да, то у вас есть хороший шанс: сейчас как раз проходит конкурс на понимание текста — с учетом приза в виде гранда на 100 миллионов. ;) подстегнет исследования.
Пока это всё мимо меня. Но есть желание попробовать скармливать заголовки статей из RSS-лент для формирования нейрокодов тематик. И тут сталкиваемся с тем, о чём я писал выше — нужен инструмент для нахождения неизвестных нейрокодов. Ровно та жа самая ситуация как сейчас с человеком, когда на кору ставится матрица электродов, снимается активность нейронов и скармливается нейронной сети для поиска нейрокода по корреляциям. Прикол в том, что хеш-сеть это и делает, но рассказать не может. )
Отсюда получаем инвариантность, например, к положению в пространстве — слово узнаётся независимо от его положения в поле зрения

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

Могу достаточно подробно. В комментарии выше, где я сказал про инвариантность положения слов в строке, для каждой буквы и позиции собирается символьно-позиционный код.

Символьная часть — это код постоянный для буквы, например:
A: 111111000000000000...0000000000000
B: 000000111111000000...0000000000000
C: 000000000000111111...0000000000000
1 — активный нейрон.
Важный момент, символ — это обособленная абстракция. Если не хотим, чтобы буква A путалась с буквой B (не взаимозаменяемые), то их сенсорные представления должны иметь минимум пересечений.

Позиционная часть — это пространственный код, например:
0: 0000000000000...1111111111000000000000
1: 0000000000000...0000111111111100000000
2: 0000000000000...0000000011111111110000

Здесь ситуация другая, позиция (клетка, участок пространства) 0 рядом с позицией 1, и так как мы хотим внести инвариантность к положению, то кодируем позиции с пересечением кодов (типа кода Грея). Вносим в код информацию о пространстве и отношении разных его участков друг с другом.

В мозге пространственный код формируют нейроны места. Я пробовал их способ, работает. И он универсальный, похоже, применим для пространств разных размерностей.

Теперь объединяем обе части в один код. Формируем (логическое ИЛИ) из таких символьно-позиционных кодов код слова. Для слова ABC, находящегося в начале строки это будет: A0|B1|C2. Хешируем и запоминаем хеш, это нейрокод этого слова в этой позиции. Теперь перемещаем слово в другое место строки, аналогично собираем его сенсорный код (A5|B6|C7), хешируем и сравниваем хеш с сохранённым.
Я привожу полученный на сравнении результат к единственному числу. Соответственно, степень схожести нейрокодов: [0,1]. 1 — полное совпадение.

Вот реальный пример сравнения близости кодов слова «ABCD».
* у данной конфигурации ядра случайное пересечение на уровне 0,25.

сдвиг положения:
'ABCD' | '_ACBD': 0.57
'ABCD' | '__ACBD': 0.57
'ABCD' | '___ACBD': 0.43
'ABCD' | '____ACBD': 0.57
'ABCD' | '_____ACBD': 0.67
'ABCD' | '______ACBD': 0.73
'ABCD' | '_______ACBD': 0.77
'ABCD' | '________ACBD': 0.43
'ABCD' | '_________ACBD': 0.60
'ABCD' | '__________ACBD': 0.60
'ABCD' | '___________ACBD': 0.70
'ABCD' | '____________ACBD': 0.70
'ABCD' | '_____________ACBD': 0.57
'ABCD' | '______________ACBD': 0.63
'ABCD' | '_______________ACBD': 0.53
'ABCD' | '________________ACBD': 0.53


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

Самое простое это, когда отрезок двигается вдоль своей оси. Тогда естественным путём сенсорные активности будут сильно пересекаться. Соответственно, пересекутся и их коды. Это работает и без пространственного кодирования.

Но если отрезок сдвинется перпендикулярно своей оси, то в сенсорных активностях не будет ничего общего, если мы специально не заложили в код пространственные отношения, как я описал выше. Для 2D картины необходимо добавить дополнительный пространственный код по оси Y. А отрезок тогда будем формировать в виде «слова»: A0,B10,B20,A30. Здесь закодирован вертикальный отрезок длиной 4 «пикселя» в решётке 10x10. И дополнительно задан отдельный символ для концов отрезка. Как и в случае сдвига слов, для сдвинутых вправо вертикальных линий будет корреляция их кодов — чем ближе, тем больше. А вот коды горизонтальных линий будут мало коррелировать с вертикальной. Ну а в конце, как сильно распространено в реальных нейронных сетях, в дело вступает латеральное торможение — просто оставляем одного или несколько победителей.
Ни линии ни их наклон для сети как бы и не существуют, это абстракции.

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

Сырой пиксель необходимо преобразовать в набор признаков как это делает сетчатка. Можно вручную, можно используя ИНС (вытащить фичи из автоэнкодера), можно свёртками.
Ну, спайковые сети давно есть и работают, а в нейросетях то направление, что вы развиваете, зовётся автоенкодеры. Вроде бы плохо оно масштабируется и плохо учится, но я буду рад, если кто-то покажет, что это не так.
Самое хорошее описание (за 5 минут гугления) подобного механизма LSH на русском: alphacephei.com/ru/research.html — лекция 2. Лучше других алгоритмов, но всего 80% на MNIST… Насколько я помню, однослойная нейросеть даст 90%, а двухслойная (к которой ближе этот механизм формирования и подавления сигналов WinnerTakesAll) — 95%-97%.
То есть, нейросеть за счёт backpropagation намного проще «нацелить» на конкретную задачу, особенно это важно, когда вычислительной мощности у нас не очень много.
И вот тут, как говорится, когда научитесь делать такую структуру из LSH, чтобы она выдавала 97% на MNIST, тогда и приходите… :) Я 8 лет назад на Нументовской не смог, и это не показатель, конечно… В этом году хочу попробовать снова.
Ну, спайковые сети давно есть и работают, а в нейросетях то направление, что вы развиваете, зовётся автоенкодеры.
Это не спайковая сеть. А если рассматривать как автоэнкодер, то только частично из-за понижения размерности (но где его нет).

когда научитесь делать такую структуру из LSH, чтобы она выдавала 97% на MNIST, тогда и приходите
Вот об этом я и говорил, сотни тысяч несутся за оставшимися процентами, вытоптав за последние десять лет альтернативы, или пробегая мимо. При том что собственный их разум базируется на очень плохих детекторах, немногим выше 50%.

PS. за ссылку на статью про мух спасибо.
>При том что собственный их разум базируется на очень плохих детекторах, немногим выше 50%.
Возможно, вы меня не поняли. Иерархию из ваших 50% детекторов, чтобы она 97% получила, вы сделать сможете?
А сами детекторы не ниже 70%, как у мух, но вот их количество настолько большое, что повторить такие детекторы в нужном количестве на компьютере не получается. Поэтому и носятся за теми процентами, которые можно получить уже сейчас на текущем железе.
Потому что бизнес — это не про то, как решить задачу на 100% через сто лет, а про то, как решить её на 20% и продать эти 20% уже сейчас.
Иерархию из ваших 50% детекторов, чтобы она 97% получила, вы сделать сможете?
Если я правильно понял, под иерархией вы понимаете цепочку детекторов. Такой структуры нет. Конечная точность из «плохих» детекторов определяется их количеством. Здесь хорошее описание: Логика сознания. Часть 11. Естественное кодирование зрительной и звуковой информации

А сами детекторы не ниже 70%, как у мух, но вот их количество настолько большое, что повторить такие детекторы в нужном количестве на компьютере не получается. Поэтому и носятся за теми процентами, которые можно получить уже сейчас на текущем железе.
Без обучения у h-ядра сигнал/шум > 2. Те существующие модели детекторов мне не известны, поэтому сравнивать не могу. Могу только сказать, что хеширование у меня незатратная операция (в рамках моих опытов), даже в абсолютно не оптимизированном варианте.
Иерархия — это дерево или граф. Цепочка — это плоская последовательность, как я понял. То есть, цепочка это иерархия, а иерархия это не обязательно цепочка.
В нейросетях строят иерархию из слоёв.
>Конечная точность из «плохих» детекторов определяется их количеством. Здесь хорошее описание: Логика сознания. Часть 11. Естественное кодирование зрительной и звуковой информации
Нет, вовсе не определяется. Я легко могу предположить, что 10 последовательных декодеров, каждый точностью 50%, будут давать 0% или 20% или любое другое число. А 10 декодеров, поставленных параллельно, давать 50% или 55% или опять же сколько угодно. А если за 10 декодерами поставить ещё один, то 50% или 60% или 10% или 0% — опять же сколько угодно :)
Например, у меня два HTM декодера, установленных последовательно, давали на движущихся цифрах из MNIST точность 58%, а один — точность 53%. Крайне слабый результат, который к тому же непонятно как улучшить.
Покажите же, что хотя бы 97% вообще можно на них как-либо получить (при наличии разделимых на классы данных, конечно), иначе эта идея будет совсем нежизнеспособной.
Нет, вовсе не определяется.

Представьте выбрасывание игрального кубика со смещённым центром тяжести. При большом отношении сигнал/шум, в нашем случае — большом смещении, вы определите это смещение через несколько бросков. При малом — их потребуется больше. Вы всегда можете бросить кубик ещё раз и ещё более уточнить смещение. Но в практическом русле, как в той же радиосвязи, для конкретного отношения сигнал/шум выбирают ширину окна (минимальное количество бросков кубика), при котором превышается заданный порог смещения. Так что даже, если сигнал практически тонет в шуме и выше его всего на 1%, то его всё равно вытягивают. Может быть мы говорим о разных вещах, или в ИНС какая-то своя специфика, но я вот конкретно про выше сказанное.

иначе эта идея будет совсем нежизнеспособной

Да, она вполне может быть нежизнеспособной применительно к вашей задаче. Но свою задачу по той же инвариантности я решаю и думаю найдутся ещё и другие.
>Так что даже, если сигнал практически тонет в шуме и выше его всего на 1%, то его всё равно вытягивают
У вас линейное представление, где есть некоторые принципиально другие особенности, а речь идёт обычно о многомерной задаче и высоком проценте отделения сигнала от шума (и задача обычно не бинарная — сигналов много).

>К вашей задаче
Ага, одной скромной, редкой, маленькой и никому не нужной задаче…
Ну, это же вы удивляетесь, почему ваше инновационное решение пока никому не интересно. Я объяснил почему: почти во всех задачах нужно хорошее распознавание, на плохих детекторах его скорее всего не построить, и это ваша задача показать обратное, чтобы заинтересовать других в вашем направлении / технологии (если вы хотите этого, конечно же).
Вполне возможно, что с инвариантностью у вас проблемы по той же причине — плохая детекторная база. Ведь, насколько я помню, по восстановлению изображений/сигналов опять же нейросети уверенно лидируют.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории