Я не знаю, как она точно называется. Феноменология, эмпирио-критицизм, махизм - вот близкие течения. Ближе будет рациональность по Юдковскому. Формализация данной теории называется AIXI.
Идейно похоже на научный метод, но немножко шире. Придумал не я, лишь немного систематизирую и прохожусь по известным мне возражениям.
В какой-то мере данный подход альтернативен философским течениям материализма и идеализма, а кроме того, он лежит в основе одной из теорий ИИ.
Немного бэкграунда
Я занимаюсь системами обучения с подкреплением - то есть системами управления, которым мы ставим некоторую цель, и которые, не зная, как работает мир, этой цели достигают. Соответственно, возникает вопрос: а как должна быть устроена система познания, чтобы она работала в таких условиях? А как должно быть устроено познание у человека, чтобы он мог изучать мир и достигать целей? Я читал статьи по рациональному мышлению, но они выглядят недостаточно строгими и точными. Читал о научном методе, читал его критику. Работаю в data science и потому наслышался вещей вроде "машинное обучение хорошо работает, если ты хорошо знаешь предметную область", что весьма разумно, но совершенно не объясняет, откуда люди узнают предметную область, при нулевых знаниях на старте. Читал статьи людей, которые предлагали свой метод познания, называемый диалектикой и противопоставляющий себя блэкбокс-анализу. Читал идеалистов, которые полагают, что разум и материя принципиально несводимы друг к другу. И потому хочу описать целостную теорию познания - настолько конкретно, чтобы её можно было свести к программному коду.
Итак, как она устроена и работает.
Эмпиризм
Мы познаём мир через некие "сенсоры". То есть какую-то информацию мы объявляем "наблюдением", логики в нём не ищем, обоснований не требуем - относимся так, как будто нам этот массив данных сформировал некий датчик. Если датчик сбоит - значит, информация будет искажена, зашумлена, смещена. Мы всё равно её считаем своим сенсорным входом. "Датчик сбоит" - это уже возможный вывод, а мы пока никаких выводов не делаем.
Далее, мы про некоторые утверждения говорим "они относятся к реальности" - в случае, если из этого утверждения можно вывести какие-то прогнозы. Пусть даже прогнозы вероятностные - это неважно. Если высказывание хоть как-то меняет наши ожидания по поводу того, что мы увидим на сенсорах - оно касается реальности. Если же нет - значит, высказывание не о реальности. В сомнительных случаях имеет смысл уточнять, что имел в виду автор теории, в терминах прогноза опыта. Например, утверждение "я положил яблоко в холодильник" относится к реальности в том смысле, что я ожидаю или увидеть завтра это яблоко в холодильнике, или увидеть его следы, если кто-то его забрал. Может, реально я и не клал яблоко, и я его не найду. Всё равно, это утверждение про наш мир, просто оно ложное.
А какое утверждение не относится к реальности? Например, теорема Пифагора. Если мы вспомним определения точек и прямых, то окажется, что это абстракции. То есть в реальном мире нет никаких точек и прямых, это выдумка математиков. Но если сопоставить вымышленным точкам и прямым реальные объекты, и находиться пространстве, достаточно близком к Евклидовому, то выводы теоремы Пифагора будут применимы к наблюдаемым объектам.
Вероятности
Вероятность мы интерпретируем в контексте теории принятия решений, то есть высказывание P(A)=1/3 - значит, что если мы будем ставить на подобные события (то есть любые с P=1/3) деньги с коэффициентом 2/3 к 1/3, то в среднем выйдем в ноль, если 3/4 к 1/4, то будем выигрывать, а 1/2 к 1/2 - то проигрывать.
Это называется "субъективная интерпретация теории вероятностей", то есть, условно, это не монетка имеет свойство падать орлом с вероятностью 1/2. Это мы плохо умеет предсказывать падающие монетки. А вот робот с высокочастотной камерой и знанием физики ещё в воздухе смог бы сказать, выпадет ли орёл или решка.
Сравнение гипотез
Мы называем утверждения, относящиеся к реальности, гипотезами или моделями. Иногда - теориями, если это модель, у которой очень большая вероятность. Хорошая модель - это такая, которая хорошо угадывает будущие наблюдения, и это главный критерий. Все остальные критерии важны лишь в той мере, в которой позволяют оценить главный без прямого эксперимента.
"Хорошо угадывать" - значит, назначать высокую вероятность тем исходам, которые фактически произойдут. Если первая модель присвоила более высокие, чем вторая, исходы тому, что затем фактически случилось - значит, первая модель лучше.
Как заранее узнать, что одна модель лучше другой? Посмотреть, какая модель лучше предсказывает. Это делается так: рассчитываем вероятности нескольких конкурирующих моделей по формуле Байеса. У каждой модели есть априорная вероятность P(A), есть предсказанная вероятность события P(B|A), есть фактическая вероятность события (если оно произошло, то P(B)=1), мы выводим P(A|B). После такой обработки одного факта мы заменяем P(A) на P(A|B).
Вероятность одной модели не имеет большого смысла - модели всегда надо сравнивать друг с другом. Их P(A) на каждом шаге (или в конце расчёта) надо нормировать, то есть cделать так, чтобы P(A) всех исследуемых моделей в сумме давали 1.
Априорные вероятности
Откуда брать априорные вероятности, то есть стартовые P(A)? У нас должен быть какой-то способ измерить сложность модели и дальше действовать по принципу "чем больше деталей, тем ниже шансы, что мы их все отгадали правильно". Тогда P(A)=(0.5)^сложность. Например, сложностью можно назвать число конкретных правил в модели или длину описания в битах. Если модели слишком разнородные, можно задать им одинаковые априорные вероятности - но этот подход склонен к ошибкам, и устойчив лишь если есть много свидетельств, и они довольно сильные (или ну очень много слабых). Сильные свидетельства - это у которых P(B|A) сильно отличается от 0.5.
При таком подходе есть проблема: можно сделать разные базовые наборы правил. В одном наборе есть операция возведения в степень, а в другом - нет. Тогда правило "y=2^x" будет в первом случае очень простым, во втором довольно сложным и потому маловероятным.
Идеальный способ выбрать априорные вероятности - это перебрать разные способы измерения сложности, и выбрать тот, результаты которого лучше всего соотносятся с идеей "проставить равные априорные вероятности, а затем скорректировать априорные вероятности огромным числом наблюдений". То есть наша задача - подобрать такие приоры, чтобы за минимальное число фактов оказываться сильно уверенными именно в той теории, в которой мы в противном случае тоже оказались бы сильно уверены, просто за намного большее число наблюдений.
Генерация моделей (upd)
Новые модели получаются путём выбора из пространства алгоритмов. В идеале мы перебираем все алгоритмы (их бесконечно много) и каждому проставляем свою вероятность быть «той самой истинной моделью» и работаем со всей композицией сразу. На практике нужна какая-нибудь эвристика, которая позволит перебрать конечное множество алгоритмов, и среди них найти достаточно хорошие. Тут никаких абсолютных правил нет — каждый извращается как умеет, и эвристика применима лишь ограниченно. Примеры эвристик: перебор алгоритмов, начиная с самого короткого. Или генерация рандомных алгоритмов и применение к ним генетического алгоритма (отбор наилучших, удаление наихудших, смешивание наилучших в надежде получить что-то ещё лучше, элемент случайности в виде мутаций). То есть мы не всегда можем найти более точную модель, но если мы её каким-то образом получили, то всегда можем проверить, правда ли она более точная.
Алгоритмы не существуют сами по себе - их надо записывать на языках программирования. Соответственно, нужно выбрать язык. Есть два основных критерия поиска.
Во-первых, важно, чтобы на данном языке было удобно искать оптимальный алгоритм. Например, если мы возьмём язык вроде C++, то мы не сможем напрямую скрещивать или мутировать две программы - если мы смешаем их коды, то получится что-то, что даже не скомпилируется. А есть язык Brainfuck - код на нём выглядит как-то так: "2517214", причём "2", "5", "7" - это отдельные действия, то есть любая строка из цифр от 1 до 8 является работоспособным Brainfuck кодом. Для эволюционного поиска BF явно удобнее, чем C++. Если мы сумеем создать язык программирования, который был бы целиком дифференцируемым, как нейросеть, и при этом Тьюринг-полным, мы могли бы искать наиболее точные модели через градиентный спуск.
Во-вторых, разные языки задают разные априорные вероятности моделей. Например, если в языке экспонента вынесена в базовые функции, но она будет казаться чем-то простым и вероятным. А если нет, то придётся её подбирать как-нибудь, например, бесконечным рядом, и в результате все модели с экспонентой будут сильно заштрафованы. То есть в идеале нужно подобрать язык, который бы мог лаконично и точно описать предметную область, и при этом был бы Тьюринг-полным (то есть быть таким, чтобы через него можно было выразить любой другой язык). Для большинства задач, для которых мы применяем компьютеры, лучше всего подходят языки высокого уровня - в них есть специальные функции для наиболее распространённых операций. Поэтому с точки зрения априорных вероятностей лучше всего использовать язык высокого уровня.
В любом случае, как бы мы ни задали язык, если у системы AIXI будет достаточно времени и наблюдений, то она найдёт такую модель, которая будет включать в себя некий оптимальный язык под задачу и лаконичную модель, записанную на этом языке. Системы deep learning действуют аналогично: выделение признаков первыми слоями нейросети - это как раз создание чего-то вроде языка, который лаконично описывает предметную область.
Ну и основной метод тестирования этой модели и смежных: запрограммировать и запустить на решение тестовых задач. Если модель нельзя запрограммировать, то нужно закодить хотя бы малый её кусочек.
Здесь приведён программный код модели и пример её применения - к сожалению, это не строго теоретический AIXI, а его адаптация к реальности, чтобы он работал быстрее и точнее. Выбран язык наподобие Brainfuck, но число операций больше, и для ускорения поиска использованы эвристики эволюции, бустинга (создаём несколько моделей, каждая следующая исправляет ошибки предыдущей) и пост-обработки (выходные данные подаются на вход какой-нибудь обычной системе машинного обучения, вроде линейной регрессии).
Распространённые контраргументы и вопросы
* Этот метод поверхностный, он не даёт глубины. Он не вскрывает глубинные закономерности.
- Полагаю, если метод "вскрывает глубинные закономерности", то он сразу ложный, так как претендует на невозможное. Простая проверка. У нас есть чёрный ящик. Допустим, это программа. Всё, что мы можем с ней сделать - это подать на вход одно число и получить в ответ другое. Это вся доступная информация.
Мы видим закономерность: когда мы подаём X, на выходе получается Y=2X. Во всех наших тестах. Значит ли это, что внутри программы так и написано, return 2X? Ничего подобного. Там может быть return X+X, return 3X-X, return 2X+1-1 и куча других вариантов.
Пока метод, "вскрывающий глубинные закономерности" не научится отличать программу с X+X от программы с 3X-X и всех остальных вариантов, он не "вскрывает глубинные закономерности".
* Он позволяет увидеть лишь простые/линейные/не-динамические закономерности
- Модель - это всегда некий алгоритм, то есть штука, принимающая на вход одну последовательность и выдающая другую. Любую закономерность, которую мы можем записать, можно записать в виде алгоритма (в противном случае понятие алгоритма не полно, и туда надо записать ещё и такую закономерность, которая "неалгоритмична"). GPT-3 - нейросеть, предсказывающая конец текста по началу - построена именно как поведенческая модель, а уж предсказание текста точно не может быть чем-то простым/линейным/не-динамическим
* Подход не позволяет увидеть причинно-следственные связи
- Данный подход действительно не включает причинность как базовый элемент. Тем не менее, подход отвечает на вопросы "что будет, если я нажму кнопку А", "что будет, если я нажму кнопку Б". Это вполне тянет на эмпирическое определение причинности.
* Данный подход к познанию - не единственный возможный, есть другие.
- Я утверждаю, что они или не лучше, или хуже описанного. В любом случае, можно провести прямой эксперимент: два игрока формализуют свои подходы до уровня программного кода, а затем запускают их на куче "чёрных ящиков". Затем смотрим, какой подход лучше предсказывает поведение чёрного ящика, либо лучше угадывает их программный код, либо лучше ими манипулирует. Две основные тестовые площадки - это kaggle и openAI Gym, но можно придумать ещё что-то своё.
* Этот подход к познанию не даёт 100% гарантий чего-либо.
- Да, именно так, и я не видел подхода, который давал бы, и при этом не был ещё более косячным.
* Данный подход не пригоден к изучению людей, потому что их нельзя изучать только по поведению.
- Данный подход рассматривает речь людей как разновидность поведения. Мы "додумываем", что думают и чувствуют другие люди, но это лишь "скрытая переменная", полезная для предсказания, но непроверяемая. А ещё у людей есть априорная информация об устройстве мозгов других людей - не в смысле "упавшая с неба", а в смысле "вколоченная в мозги эволюцией, которая размножала лишь самых социально приспособленных".
* Как этот подход относится к этике?
- Параллельно. Поведенческие модели - это что-то типа карты реальности. А этика - это "куда мы хотим ехать". Так что это разные вещи.
* Ты не можешь всё проверять сам, тебе придётся опираться на слова других людей.
- Я могу к этому относиться как к сенсорным данным. Ну есть у меня термодатчик, я знаю, что иногда он довольно точен, но иногда, при каких-то условиях барахлит, а иногда показывает вовсе не температуру, а что-то другое. Так и со словами людей.
* Люди так не мыслят.
- Чтобы знать, как мыслят люди, надо построить модель мышления, запустить её и сравнить результаты. Рефлексия не очень надёжна. Это с одной стороны. С другой - описанный метод затратен, там что реальные живые существа и ИИ будут использовать какие-то упрощения, в ущерб качеству. Реальные машины не содержат в себе цикл Карно, и не потому, что он чем-то плох.
* Как вы решаете проблему индукции?
- Применяем абдукцию. Не выводим из частного общее, а из кучи "частных" делаем модель для прогноза другой кучи "частных". Затем проверяем точность модели.
* Не станет ли пользователь этой модели солипсистом?
- Вообще, подход неявно включает в себя познающего субъекта и окружающую реальность. Это не соответствует шаблону солипсизма. Но некоторые проблемы солипсизма возможны - например, такой подход даст совершенно бессмысленный ответ на вопрос "что я буду видеть, если я умру". Но может, проблема не в ответе, а в вопросе
* Такой подход не даёт полноты - он пригоден для изучения лишь узкой области.
- Такой подход, будучи запрограммирован, автоматом даёт нам "теорию всего" - с полным покрытием, но очень большой погрешностью. А потом позволяет её уточнять. Поясню. Допустим, мы сделали робота, у него все датчики - это одна видеокамера. И все актуаторы - это одна рука. Все вопросы о будущем, которые может задать робот, выглядят так: что я увижу через свою видеокамеру, если до этого я видел то-то, и рукой двигал так-то. Этот вопрос - вполне корректный вопрос для машинного обучения, чем дольше будет жить робот, тем точнее он будет в своих прогнозах. То есть моделью мира будет нейросеть, которая обучена на прошлом опыте, и она при любых вводных будет выдавать какие-то плюс-минус осмысленные картинки будущего.
* но наука так не работает! У нас нет Теории Всего, это эмпирический факт.
- Ага=( У нас к каждой научной теории вдогонку идёт не очень формализованная теория по её интерпретации. Есть механика Ньютона? Отлично, а теперь давайте опишем, что такое "масса" в терминах того, какие предметы надо взять в руки, на какие весы положить, и что делать, если весов рядом нет. И окажется, что понятия "массы" в квантмехе и астрофизике инструментально различаются. Нет у нас единого набора инструментов, который бы и для микромира хорошо работал, и для астрономических величин. Приходится эти концепции состыковывать в воображении учёного. Я не считаю, что проблема именно в массе. Я считаю, что проблема в том, что мы не можем просто провести кучу измерений, загнать данные в нейросеть и на выходе получить Теорию Всего - потому что мы не можем провести кучу измерений одним и тем же оборудованием, то есть у нас нет единого массива сенсоров
* Очень прагматичный подход. Ориентирован на эксплуатацию мира, а не изучение.
- В этом подходе познание примерно равно эксперимент примерно равно эксплуатация. Я не вижу смысла в других критериях истинности, кроме как "это полезная модель, чтобы достигать цели" и "это точная модель, чтобы делать прогнозы".
* Этот подход не работает для гуманитарных наук.
- Ну, во-первых, это повод спросить, а правда ли они науки. Во-вторых, некоторые гуманитарные науки реально что-то предсказывают. Например, есть теория прайминга в психологии. Если на товаре будет написано "не менее 10 в одни руки", у человека будет склонность купить именно 10 единиц товара. Теория немного шире, но сосредоточимся на одной конкретной закономерности. Она проверяема экспериментально? Да, можно поделить магазины на две группы, и в одной из них делать соответствующую вывеску про 10 единиц, а в другой - нет.
* Этот подход не работает для исторических наук
- Прошлого в каком-то смысле не существует. Оно есть лишь в виде следов. Мы додумываем прошлое. Иногда исторические теории можно проверить, например, некоторые теории предсказывают, что в некоем месте удастся найти древний город. Если мы колеблемся между несколькими историческими теориями, то гипотетически могут быть факты, которые склонят нас к какой-то из них.
* Основной вопрос философии?
- Если его свести в вопросу "что я увижу в случае таком-то", то на него будет конкретный ответ (или конкретное "не знаю"), иначе выглядит как что-то, не имеющее отношения к реальности. Если свести его к вопросу "мыслят ли люди мозгом" и далее к вопросу "если повредить мозг, то сохранятся ли наблюдаемые признаки мышления, то есть поведение", то ответ тоже очевиден, и его даёт чистая эмпирика
* Есть ли яркий пример того, как эта теория познания полезна?
- Всё машинное обучение на ней работает. Да, в машинном обучении редко применяется концепция сложности модели, и не происходит перебора во всём множестве алгоритмов. Поэтому теория AIXI несколько шире, чем практически применимый машинлёрнинг. Кроме того, существуют разные интерпретации квантмеха. Одни и те же формулы, но разные интерпретации. Так вот, крупная группа учёных вообще отказываются от интерпретации (говорят "заткнись и считай"), то есть действуют в духе описанной поведенческой теории познания.
* Как "поведенческая" теория относится к логическим категориям?
- На входе и выходе модели мы используем либо сырые данные (циферки с датчиков), либо данные, категоризованные какой-либо иной системой. Внутри модели может быть что угодно. Обычно там математика, но может быть любая другая система вывода, если такая найдётся. Нейросети вполне способны создавать свои "категории" из элементарных блоков, так что это вполне посильная задача
* Это теория не строит "объективную" модель мира. В ней всегда есть точка зрения.
- Да. Если повезёт, то данные будут собраны со многих "точек зрения", и теория будет применима независимо от того, откуда мы смотрим на мир. Но модели мира вообще без "точки зрения" у нас нет. Впрочем, в практической деятельности всегда есть конкретные действующие лица и выгодоприобретатели, так что не вижу проблемы.
* В чём отличие от научного метода и научной практики?
- Наука стремится создать единую непротиворечивую картину мира. То есть в научных журналах не публикуют статьи вида "вот это лекарство лечит от болезни, с вероятностью 80%, а с вероятностью 20% - нет. Через полгода и десять мегабаксов мы обновим цифры". P-value хуже, чем 0.05 в науке большая редкость.
Кроме того, наука ориентируется в основном на эксперимент. А "поведенческий анализ" больше опирается на наблюдения. Не потому, что они лучше, а потому, что они дешевле и доступнее. Если есть возможность, лучше ставить эксперименты.
Меньше внимания к объяснению, больше к прогнозу. Неважно, что человек не понял теорию - главное, он может вести по ней расчёты. Появится интерпретируемость? Хорошо, но это не главное.
У наук есть конкретный предмет познания, а у "поведенческого анализа" предмет - это всё, что приходит через сенсоры, то есть "поведенческий анализ" всегда пытается строить "Теорию Всего".
Интерпретация теории вероятности - субъективная (монетка упадёт орлом к вероятностью 50% - это факт не о монетке, а о моём незнании), а в "настоящей" науке - обычно частотная.
При достаточном времени и статистике данный метод примерно сводится к науке в современном понимании.
* Ваш метод буржуазный/либеральный/идеалистический/материалистический/ещё какой-то.
- Этот метод не относится напрямую к обществу. Он может работать и в коллективе, и у одного человека, и у нечеловеческого ИИ. Данному методу неважно, какие способы обобщения использовать - хорошо бы иметь большую "библиотеку" абстракций, но при нужде можно всё разработать с нуля.
* Ваш метод догматичен, вы узко смотрите, вы не видите того-то и того-то.
- Возможно, то, чего мы не видим - не более, чем чей-то глюк. Если мы не видим какую-то реально важную штуку, то будет некая группа задач, где наш метод работает систематически плохо, а какой-то другой - хорошо. Для пользователей данного метода это будет выглядеть так: часть людей использует стратегию, которая необъяснимым образом постоянно приводит их к успеху. На этом весь догматизм кончится и начнутся попытки скопировать удачную стратегию
* Этот подход предполагает, что всё можно оцифровать и измерить, а это не так.
- Оцифровка - довольно искусственная операция. Например, мне нужно сделать систему, которая предсказывает, будет ли у человека болеть какая-либо часть тела. Нам нужно оцифровать боль. Самый простой способ - если есть боль, то записываем 1, иначе 0. Способ посложнее - если есть какие-то градации сильнее/слабее, то можно присвоить им числа. 0 - нет боли, 1 - чуть-чуть болит, 2 - средне болит, 3 - сильно, 4 - ужас-кошмар. Оцифровка - это наш способ разложить сходные наблюдения по кучкам, не более того.
* Ваш подход не учитывает, что мы можем взломать код чёрного ящика или спросить о нём разработчика.
- При взломе мы всё равно будет использовать какие-то средства воздействия и средства наблюдения. Их мы и назовём сенсорами и актуаторами. При общении с разработчиком мы всё равно используем какой-то канал связи - он и будет нашим сенсорным входом. То есть если мы сделаем что-то из вышеперечисленного, то мы изменим границы чёрного ящика: теперь туда входит и наше средство взлома, и предполагаемый разработчик.
* Ваш подход основан на аксиомах, точно так же, как подход такой-то. Вы просто верите в какие-то другие штуки.
- Вышеописанный подход опирается на априорные вероятности, а не аксиомы. Разница в том, что априорные вероятности - это первичные допущения, и по ходу работы они точно изменятся. Мы используем матаппарат, а значит, и аксиомы теории вероятностей, чтобы измерять точность. Это не значит, что мы находимся во власти исходных допущений - это значит, что мы используем язык матстата, чтобы выражать свои мысли. Его можно использовать для описания практически любого правила, по которому оценивается качество модели.
qw1
Такое впечатление, что из текста пропущен существенный кусок объяснения.
Вот мы постулируем, что модели — это алгоритмы. Дальше описывается способ сравнить модели и выяснить, какая лучше. И всё, пошёл блок вопросов-ответов.
Откуда берутся новые модели? На каком языке они записываются?
Полез в код на гитхабе — там какой-то интерпретатор виртуальной машины и функции-генераторы. Вот этого в статье не хватает: какие базовые операции выбраны для машины, как происходит генерация новой модели.
Kilorad Автор
Спасибо за конструктив. И правда, надо дописать.
Новые модели получаются путём выбора из пространства алгоритмов. В идеально-математизированном варианте мы перебираем все алгоритмы (их бесконечно много) и каждому проставляем свою вероятность быть «той самоё истинной моделью» и работаем со всей композицией сразу.
На практике нужна какая-нибудь эвристика, которая позволит перебрать конечное множество алгоритмов, и среди них найти субоптимальные. Тут никаких абсолютных правил нет — каждый извращается как умеет, и эвристика применима лишь локально. Примеры эвристик: перебор алгоритмов, начиная с самого короткого. Или генерация рандомных алгоритмов и применение к них генетического алгоритма (отбор наилучших, удаление наихудших, смешивание наилучших в надежде получить что-то ещё лучше). То есть мы не всегда можем найти более точную модель, но если мы её каким-то образом получили, то всегда можем проверить, что она более точная.
— на любом Тьюринг-полном языке. Он выбора языка зависят доступные нам способы поиска — например, если мы запишем модель на каком-нибудь языке, где каждая элементарная операция кодируется одним символом и не имеет явных аргументов, но сможем применять генетический алгоритм для поиска модели. Если же мы сумеем записать модель в терминах чего-то вроде нейросети — некоего дифференцируемого компьютера — то можно будет проводить поиск градиентным спуском. Это один критерий выбора языка — удобство направленного перебора пространства алгоритмов.
Второй критерий — язык задаёт априорные вероятности. Язык — это то, что определяет, что есть просто, а что есть сложно. В идеале язык должен быть таким, чтобы он мог описывать наблюдаемые явления лаконично и точно. Если мы подбираем функцию y=e^x, то в идеале язык должен содержать экспоненту в качестве элементарной операции. То есть можно конструировать язык, зная особенности задачи, либо найти какой-то способ сделать автоматическую систему, которая создаст язык (набор базовых операций), максимально пригодный для описания некоей предметной области. А можно сделать язык как попало — в этом случае AIXI потребует кучу данных для обучения, а потом массовым перебором сам найдёт и оптимальный язык, и лаконичную модель, и всё это выразит через тот язык, что мы задали от балды.
qw1
Так себе идейка для ИИ. Тут отсутствует рефлексия, то есть возможность учиться учиться.
Поначалу допустимо, что программы синтезтезируются рандомом или генетическим алгоритмом, но агент должен замечать, какие комбинации быстро приводят к результату и дальше синтезировать программы с учётом этих знаний, без перебора и без запуска программ для проверки их эффективности.
Ведь когда мы пишем код, мы не пытаемся запустить его после написания каждой новой строчки. Мы целенаправленно знаем, как его писать и куда двигаться, и только иногда запускаем его мысленно или на реальной машине, чтобы проверить какие-то гипотезы.
Kilorad Автор
Да, то, что я описал, плохо сочетается с концепцией seed ai (ну и это не конкретный проект ИИ, иначе я б уже закодил сам). На самом деле, я такую цель и не ставил — я явно оставил место под «некую эвристику для перебора». В случае seed ai эта эвристика должна быть чем-то, что можно переписать по ходу дела.
Впрочем, кое-что у меня всё же есть. Если мы перебираем строки кода от коротких к длинным, либо эволюционно, то можно запоминать те подстроки, которые чаще обычного оказывались в хороших моделях. Складывать эти подстроки в отдельную библиотеку. И тогда при каждом новом запуске этот ML будет чуть лучше решать задачи, если они похожи на прошлые. В репозитории эта функциональность реализована, хотя и не задокументирована как следует. И да, этот подход работает, хотя и не даёт каких-то серьёзных прорывов.