Комментарии 15
Интересный обзор, не про все подходы ранее слышал. А выводы ожидаемые, даже академик Рудаков об этом говорил. Действительно, не стоит ждать от ИИ чего-то большего, чем решения прикладных задач. И это хорошо, значит не останемся без работы в обозримом будущем)
Интересно. Кажется, ничего типа AIXI не использовалось, хотя казалось бы, тут ему самое место. И примечательно, что генетика упёрлась в комбинаторный взрыв, хотя вроде бы тоже задача, с которой эволюция работает неплохо
Интересно! а не поделитесь примерами реализации AIXI?
Вот
github.com/Kilorad/aixi_booster
Моя вариация на тему AIXI. Не вполне соответствует теоретической модели, зато строится за вменяемое время. Данную задачу бесшовно не решит, наверное, нужно будет допиливание
github.com/Kilorad/aixi_booster
Моя вариация на тему AIXI. Не вполне соответствует теоретической модели, зато строится за вменяемое время. Данную задачу бесшовно не решит, наверное, нужно будет допиливание
И примечательно, что генетика упёрлась в комбинаторный взрыв.
ГА — это хоть и красивое в теории, но медленное решение для задач оптимизации. Отжиг+быстрый код генерации/оценки стэйтов гораздо эффективнее. Другое дело, что мне не очень ясно, как именно применить оптимизацию к некоторым задачам здесь (вроде восстановления узора).
Если я правильно понимаю, здесь ГА мог бы подобрать закономерность, записанную в некотором виде. Некую функцию, порождающую картинку. Наибольший score будет у тех функций, у которых картинка больше всего похожа на реальную (сравниваются открытые части). Плюс какой-то штраф за сложность, наверное
Ну, я бы так применял ГА. Можно кодировать не саму картинку, а взять кусок картинки и кодировать правила его преобразования. Типа того, что правило будет выглядеть так: «взять на картинке прямоугольник (0,0)-(90,70) и скопировать его слева в отзеркаленном виде, а внизу в негативе, замостить так всю картинку»
Ну, я бы так применял ГА. Можно кодировать не саму картинку, а взять кусок картинки и кодировать правила его преобразования. Типа того, что правило будет выглядеть так: «взять на картинке прямоугольник (0,0)-(90,70) и скопировать его слева в отзеркаленном виде, а внизу в негативе, замостить так всю картинку»
Спасибо огромное за статью. Да, после такого опускаются руки, и как-то сразу убавляется энтузиазм относительно применения ML в бизнесе (условно, есть state-of-the-art подходы не могут посчитать точки в квадрате, то, как они смогут выявить фродстера, использующего ранее не засвеченную схему).
Но, скачав вьювер заданий с гитхаба, и протыкав руками пару десятков заданий, появились некоторые мысли. Интересно было бы мнение тех, кто в теме по ним:
Прежде всего, кажется логичным, что алгоритм должен быть многопроходным (вне зависимости от того, будет эта многопроходность видна в коде, или спрятана на промежуточных слоях нейросети). Условно, на первом проходе он должен преобразовать картинку в набор неких абстрактных представлений вида «красная хрень без выступающих частей», «замкнутый квадрат», «обрамление из точек желтого цвета». Потом уже он должен рассчитать фичи этих объектов вида «самый большой», «самый маленький», «самый нижний». А потом уже как-то обработать получившийся датасет.
И, тут видится два подхода, каждый из которых крайне трудозатратен и объемен. Либо надо пытаться отдельно обучать каждый проход. То есть, сначала обучить алгоритм на доставание правильных фичей, потом на их обогащение, потом на финальный предикт. Либо все вместе и сразу, потратив на это пару милионов $ на аренду видеокарт (возможно, участники из NVIDIA такой возможностью и обладали, имея некую внуреннюю лабораторию).
Но, для обоих подходов надо реализовать довольно сложный генератор заданий, чтобы нагенерировать себе датасет на порядков 5-7 больше, чем дали на каггле. В подходе 1, еще и со множеством входов (к каждой картинке должен идти псевдокод, написанный на удобочитаемом для ML алгоритма DSLе, описывающий происходящее). И вот тут уже возникает вопрос, а стоит ли оно того, и не проще ли написать перебор правил в коде решателя, чем в коде генератора?
Но, скачав вьювер заданий с гитхаба, и протыкав руками пару десятков заданий, появились некоторые мысли. Интересно было бы мнение тех, кто в теме по ним:
Прежде всего, кажется логичным, что алгоритм должен быть многопроходным (вне зависимости от того, будет эта многопроходность видна в коде, или спрятана на промежуточных слоях нейросети). Условно, на первом проходе он должен преобразовать картинку в набор неких абстрактных представлений вида «красная хрень без выступающих частей», «замкнутый квадрат», «обрамление из точек желтого цвета». Потом уже он должен рассчитать фичи этих объектов вида «самый большой», «самый маленький», «самый нижний». А потом уже как-то обработать получившийся датасет.
И, тут видится два подхода, каждый из которых крайне трудозатратен и объемен. Либо надо пытаться отдельно обучать каждый проход. То есть, сначала обучить алгоритм на доставание правильных фичей, потом на их обогащение, потом на финальный предикт. Либо все вместе и сразу, потратив на это пару милионов $ на аренду видеокарт (возможно, участники из NVIDIA такой возможностью и обладали, имея некую внуреннюю лабораторию).
Но, для обоих подходов надо реализовать довольно сложный генератор заданий, чтобы нагенерировать себе датасет на порядков 5-7 больше, чем дали на каггле. В подходе 1, еще и со множеством входов (к каждой картинке должен идти псевдокод, написанный на удобочитаемом для ML алгоритма DSLе, описывающий происходящее). И вот тут уже возникает вопрос, а стоит ли оно того, и не проще ли написать перебор правил в коде решателя, чем в коде генератора?
Огромное спасибо за содержательный комментарий!
По поводу выделения объектов — я мб недостаточно внятно написал в статье, но такой подход был и для самого выделения использовался networkx.
По поводу генерации большего числа примеров — снова, мб недостаточно четко написал — но аугментацию данных участники конечно делали.
в итоге выиграл подход, про который Вы и говорите — перебор правил в коде решения, а не генератора
По поводу выделения объектов — я мб недостаточно внятно написал в статье, но такой подход был и для самого выделения использовался networkx.
По поводу генерации большего числа примеров — снова, мб недостаточно четко написал — но аугментацию данных участники конечно делали.
в итоге выиграл подход, про который Вы и говорите — перебор правил в коде решения, а не генератора
Цитата из ODS:
За $5k предоставить сильный ИИ, такое себе… Лучше от голода околеть, чем отдать неограниченный потенциал за копейки.
Захардкодить тысячу эвристик, вот как решаются задачи в наше время.
IQ тесты и до машин добрались, жаль только, что их составляют люди. Сначала обрадовался, что наконец-то появился способ измерить сильный интеллект и я могу применить свои идеи. Но глянул внимательней и понял одну важную вещь. Многие задачи слишком абстрактны и ни одна модель, без стороннего опыта их не зарешает. Т. е. мало того, что Франсуа хочет, чтобы ему предоставили думающую машину, так ее надо было родить еще вчера, дать уроки геометрии, а может еще музыки и риторики. Даже чтобы генетикой создать какие-нибудь клеточные автоматы, надо больше данных. А если нет генератора таких задачек, то придется и его делать, чтобы были данные для обучения.
За $5k предоставить сильный ИИ, такое себе… Лучше от голода околеть, чем отдать неограниченный потенциал за копейки.
Захардкодить тысячу эвристик, вот как решаются задачи в наше время.
А этот чел, который правила закодил, он во что в итоге упёрся? Недостаточно правил или непонятно что делать в целом?
Я бы попробовал коммуникативных агентов, тренируемых на RAT дизайне эксперимента (в первом приближении: один агент умеет видеть, второй перемещаться, они должны выработать коммуникативный код для описания действий и применить его так, чтобы первый, имея карту, как можно эффективнее провел по лабиринту второго)
Судя по коду финалистов, задача очень похожа на двухэтапную, на первом этапе которой нужно выработать операционный язык.
Можно еще вариант со сложной репрезентацией попробовать типа функций потери на основе TDA PR
www.irt-systemx.fr/wp-content/uploads/2019/06/SystemX_June2019.pdf
link.springer.com/chapter/10.1007/978-3-030-43408-3_16
В теории некоторые из сложных примеров такие штуки решат хорошо, но пока они малопредсказуемы и трудоемки в плане прикладных задач.
Судя по коду финалистов, задача очень похожа на двухэтапную, на первом этапе которой нужно выработать операционный язык.
Можно еще вариант со сложной репрезентацией попробовать типа функций потери на основе TDA PR
www.irt-systemx.fr/wp-content/uploads/2019/06/SystemX_June2019.pdf
link.springer.com/chapter/10.1007/978-3-030-43408-3_16
В теории некоторые из сложных примеров такие штуки решат хорошо, но пока они малопредсказуемы и трудоемки в плане прикладных задач.
У чуваков похоже реальный прорыв — достигли 78% качества в ARC challenge, еще год назад всем кагглом решали и было всего 20%: https://arxiv.org/pdf/2011.09860.pdf (Внутри дифференцируемый нейрокомпьютер, я думал что их на свалку истории выбросили, а нет, есть смысл в них)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Почему меня разочаровали результаты Kaggle ARC Challenge