Изучение концепций посредством вероятностного программирования.

Назад в будущее: концепции времен великого А.И. шумиха

«Затем [термин« ИИ »] сполз по склону, который закончился бессмысленными модными словечками и пустой шумихой. (…) К счастью, как раз тогда вошел в употребление новый термин - «когнитивная наука» - и я начал отдавать предпочтение этому способу описания моих исследовательских интересов, поскольку он явно подчеркивает идею верности тому, что на самом деле происходит в человеческом сознании. /головной мозг." - Дуглас Хофштадтер (до 2000 года, для ясности)

Представьте, что кто-то пришел к вам со следующей головоломкой: учитывая последовательность целых чисел 0, 1, 2, …, отгадайте следующий элемент. Кажется, это не так уж сложно, правда? 3 будет нашим очевидным ответом, поскольку мы предполагаем, что «функция генератора» может быть чем-то столь же простым, как f(x) = x:

f(0) = 0
f(1) = 1
f(2) = 2
f(3) = ??? -> 3
...

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

f(0) = 0
f(1) = 1
f(2) = 2
f(3) = 720!
f(4) = ???
...

Итак, что такое f(4)?

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

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

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

f(1) = 1
f(2) = 4
f(3) = ???

Игра-последовательность является частью удивительной Плавной концепции и творческих аналогий (забавный факт: это была первая книга, проданная на Amazon!), Книги 1995 года А.И. пионер, автор бестселлеров и ученый-когнитивист Дуглас Хофштадтер (DH). С его беспрецедентными способностями к письму проблема возникает следующим образом:

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

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: этот пост не является учебным пособием по PP или академической работой (во всяком случае, потому что он беспристрастно предвзято) или коллекцией готовых к производству моделей - пока включены образцы исполняемого кода, наш интерес сегодня почти полностью связан с типом моделирования, которое сложно использовать со стандартными инструментами машинного обучения и которое вместо этого является естественным для PP. В качестве бонуса мы сможем обсудить когнитивно правдоподобные идеи о концептуальном обучении, выходящие за рамки подбора кривой.

Забегая вперед, оглядываясь назад: вероятностное моделирование 101

«Шансы на миллион к одному случаются восемь раз в день в Нью-Йорке». - Пенн Джиллетт

В нашей жизни как А. Практики и основатели стартапов, мы неоднократно обнаруживали, что многие идеи в области вероятностного программирования все еще далеки от того, чтобы стать мейнстримом в сообществе специалистов по науке о данных. Убежденные этим анекдотическим свидетельством, мы решили включить обзор PP и того, что делает его особенным для интересных задач вывода, таких как те, с которыми вы сталкиваетесь при обучении машинному языку (читатель, знакомый с PP / WebPPL, может быстро пропустить следующие два разделы).

Мы будем активно использовать примеры WebPPL и в полной мере использовать возможность запуска кода в браузере: все примеры полностью запускаются с этой простой HTML-страницы.

Начнем с простого примера (конечно, с кубиками). Если у нас есть два честных кубика, какова вероятность выпадения 8, когда вы их бросите? Эта программа WebPPL (помните: вы можете запустить ее здесь) отображает распределение результатов в красивой гистограмме (если что-то непонятно, не паникуйте: скоро это станет очевидно):

Самое замечательное в PP - то, насколько легко сделать обратный вывод: учитывая, что мы наблюдаем, что сумма равна 8, какова вероятность того, что на одном кубике будет 2 ?

Как читатель, возможно, подозревал, существует 20% -ная вероятность того, что кубик №1 окажется 2, если сумма равна 8 (тест для ленивого читателя: почему на гистограмме выше нет 1?).

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

Для многих людей рассуждения, основанные на моделях, являются ключом к интеллекту, с применимостью далеко за пределами Tangram (например, интуитивная физика и визуальное обучение):

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

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

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

Хотя люди уже давно пишут генеративные модели вручную, золотой век вероятностного моделирования только начался. Появление PP решило две основные проблемы для практиков: во-первых, PP привносит в таблицу выразительность языков программирования: с помощью знакомых инструментов специалисты по данным теперь могут выражать произвольные сложные модели вместо нескольких распределений; во-вторых, PP перекладывает бремя вывода на компилятор (и связанные с ним инструменты): исследователи сосредотачиваются на моделировании, поскольку компьютер решит требуемую задачу вывода.

Экспресс генеративные модели в Javascript: WebPPL 101

«Ограничения моего языка программирования означают пределы моего мира». - (почти) Людвиг Витгенштейн

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

model() {
    var die1 = randomInteger(6) + 1;
    var die2 = randomInteger(6) + 1;
    return die1 + die2;
}

Что происходит, когда бежит? Поскольку enumerate - это указанный метод вывода, программа запустит функцию один раз для всех возможных значений случайных величин в модели (т.е. случайных целых чисел от 1 до 6 для каждого кубика) и соберет результаты в виде распределения (которое визуализируется с помощью удобной утилиты viz). Поскольку модель является генеративной, должна быть возможность брать из нее образцы и создавать новые значения (т.е. имитировать бросание игральных костей): функция sample делает именно это, как вы можете видеть, добавив следующий оператор к блок ячеек (он напечатает массив из 5 целых чисел, взятых из модели):

print(repeat(5, function() { sample(roll); }));

Второй пример представляет ключевую идею PP: кондиционирование. Модель такая же, как и раньше, но с новой командой:

condition(die1 + die2 == 8)

Что происходит при запуске? condition указывает программе игнорировать прогоны, которые не соответствуют требуемому условию: вот почему в распределении не отображается 1 - если один кубик равен 1, нет сценария, где сумма равна 8 (поскольку 1 + 6 = 7).

Обусловленность важна по крайней мере по трем причинам: она позволяет вам рассуждать на основе наблюдений к причинам; он помогает изложить принципиальным образом информацию, которая может ограничить пространство для выполнения программы, которую необходимо учитывать; наконец, его можно использовать для моделирования очень важной концепции современного ИИ, обучения, на основе идеи 18 века, известной как теорема Байеса: ваша уверенность в гипотезе H учитывая некоторые данные, D должно быть связано с а) насколько вы в первую очередь верите в H и б) насколько H может объяснить D .

Мы завершаем наше возмутительно краткое введение в WebPPL более интересным примером по этой теме. Рассмотрим молодого полевого лингвиста - назовем его Уиллард - в экзотической стране с очень минимальным миром (онтология онтологии):

Этот экзотический мир состоит из семи объектов (названных целыми числами 1–7), организованных в древовидную структуру с концепциями на трех уровнях общности (например, все является млекопитающим, такса - это разновидность собаки, №3 - такса). Когда присутствует номер 2, Уиллард слышит, как носители языка говорят бассотто (1000 бонусных баллов для читателей, ожидающих, что туземцы скажут гавагай). Что означает bassotto: такса, собака или млекопитающее? В более общем смысле:

учитывая неизвестное слово W и набор объектов, обозначенных W, как Уиллард может узнать соответствующий уровень общности для W?

Неудивительно, что вероятностное программирование идеально подходит для моделирования этой проблемы, о чем свидетельствует следующий набросок:

learningModel - вот где происходит волшебство. Можно выделить три основных части:

  • во-первых, выборка из пространства гипотез: У Уилларда есть некоторые предварительные идеи о том, что может быть названо W (кратко изложено в распределении ontologicalTree); в частности, Уиллард считает, что «естественные виды», такие как собака и кошка, более заметны, чем очень общие млекопитающие;
  • во-вторых, функция правдоподобия: Уиллард знает, как приоритизировать гипотезы на основе наблюдений (набора объектов); в формуле имеет значение осознание того, что 1) концепции нижнего уровня (извещатель) будут определять большую вероятность данных, чем концепции более высокого уровня (млекопитающее); 2) по мере увеличения количества согласованных событий (observedData.length) концепции нижнего уровня становятся экспоненциально более вероятными;
  • в-третьих, собственно наблюдение за данными, поскольку mapData заботится о передаче того, что наблюдает Уиллард, функции подсчета очков.

[НЕБОЛЬШОЕ ТЕХНИЧЕСКОЕ ПРИМЕЧАНИЕ: первоначальная идея этого примера взята из работы Сюй и Тененбаум - см. их статью, чтобы получить более подробную информацию о психологических фактах, лежащих в основе модели, и подробное обсуждение. по априорной вероятности и вероятности.]

Итак, вернемся к нашему примеру с номером 2, наблюдаемым для слова bassotto, о чем думает Уиллард? Выполнение кода дает нам следующее распределение:

Кажется разумным предположением, не так ли? Уиллард предпочитает таксу, но он все еще не закрывает глаза; конечно, гипотезы, несовместимые с данными (например, retriever, расширение которого не включает # 2), вообще не рассматриваются. Сценарий становится действительно интересным, когда Уиллард наблюдает №2 + №3 и слышит бассотто:

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

Если вы хотите еще немного поиграть, прежде чем продолжить, некоторые эффективные примеры взаимодействия между прямым и обратным выводом можно найти в probmods. Хотя эта область все еще остается относительно нишевой в сообществе специалистов по обработке данных, дела идут быстро: мы обнаружили эту отличную WIP на прошлой неделе, и основные игроки переходят в PP. Для удобства неленивых читателей мы включили в конец несколько дополнительных книг / ссылок.

А теперь вернемся к нашей игре-последовательностям!

«Искать, откуда идет последовательность»

«Не заставляйте человека долго гадать - он обязательно найдет ответ в другом месте». - Мэй Уэст

Теперь, когда мы лучше понимаем философию, лежащую в основе PP, мы можем попробовать смоделировать нашу игру с последовательностями как задачу обучения в пространстве гипотез, которое является бесконечным. Учитывая последовательность:

f(1) = 1
f(2) = 4
f(3) = ???

мы попробуем изучить функцию генератора кондиционирования (да!) на имеющихся у нас данных (f(1) и f(2)), а затем применим функция к следующему элементу в последовательности (например, 3). Даже ограничиваясь элементарными арифметическими функциями, существует множество функций, совместимых с нашими наблюдениями, например:

x * x
x ^ x
x ^ 2
x ^ (0 + x)
x * (x / 1)
0 + (x ^ x)
...

Другими словами, это совершенно другой сценарий, чем наши предыдущие примеры: нет конечного набора гипотез, которые мы могли бы перечислить и как-то оценить от наиболее до наименее правдоподобных. Вот что имел в виду DH, когда писал:

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

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

1. A, B, C ... Z are valid expressions
2. If X is a valid expression, -X is also a valid expression
3. If X and Y are valid expressions, X&Y is also a valid expression
4. If X and Y are valid expressions, X^Y is also a valid expression

Сколько правильных выражений можно сгенерировать согласно грамматике? Ключ к ответу - осознать, что инструкции 2–4 принимают выражения в качестве входных и создают новые выражения, так что выходные данные любой инструкции могут стать входными данными другой инструкции (или той же самой!):

A -> -A -> -A&B -> -A&B&A -> --A&B&A -> ...

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

Вооружившись этой интуицией, можем ли мы определить пространство функций генератора с помощью грамматики? Конечно можем! Нам просто нужно создать небольшую грамматику арифметических выражений, которая потенциально могла бы генерировать x * x, x ^ x, x ^ 2 и т. Д. и априорные значения над ними (помните, что пространство бесконечно, поэтому нам нужен порождающий ”Способ назначить приоритет по всем возможным функциям). Вот первая попытка (эта суть содержит грамматику, а полный исполняемый код можно найти «здесь):

Код должен быть довольно простым для понимания (исходный код взят из превосходной Goodman & Tenenbaum): с вероятностью 50% составьте выражение, выбрав целое число (1–9) или переменную (x), в противном случае объедините два выражения в новый (который будет рекурсивно выбирать случайным образом целое число и т. д.). Мы просто подчеркнем неявный приоритет модели, который предшествует простоте: при прочих равных условиях более простая функция (определяемая теперь как грамматически короче) должна быть предпочтительнее. Поскольку для получения x * x требуется меньшее количество вероятностных выборов, чем x * (x / 1), при экстенсиональном эквиваленте (как x = x/1), первое считается гораздо более правдоподобной гипотезой. Очевидно, это формальный эквивалент применения в модели того, что называет DH:

[] укоренившиеся предрассудки в пользу простоты и элегантности

Если мы запустим модель в последовательности:

f(1) = 1 
f(2) = 4

предпочтительное предложение для f(3) - 9:

Как отмечает Goodman & Tenenbaum, многие люди считают высокую вероятность, присвоенную (…) 27, не интуитивной. Это говорит о том, что в качестве когнитивной модели открытия человеческих последовательностей наши априоры могли бы использовать небольшую переработку: x times x кажется более естественной идеей, чем x raised to the power of x (упражнение для неленивого читателя: измените код, чтобы отразить эту предвзятость, и снова запустите прогноз. ).

Какие последовательности может решить эта модель? Ниже приведены несколько примеров, которые можно протестировать, изменив выражение condition:

1, 4, 9 -> ??? x * x
0, 3, 8 -> ??? (x * x) - 1
1, 3, 5 -> ??? x + (x - 1)

[Упражнение для неленивого читателя: иногда самый простой способ изучить функции генератора - это брать последовательности более высокого порядка, то есть осознавать, что 1, 4, 9, 16, 25, ... производит дочернюю последовательность 3, 5, 7, ... как различия между парами чисел; затем вы можете использовать вторую последовательность (нечетные числа) для прогнозирования исходной последовательности. Читателю предлагается расширить существующую модель до последовательностей второго порядка: как в этом случае выглядит предыдущая?]

Последнее, что мы можем захотеть сделать, - это пройти полный круг: насколько близок подход PP к исходным идеям в Fluid Concepts and Creative Analogies? Один из основных моментов DH на протяжении всей книги заключается в том, что представление концептов - это проблема ИИ. Если вы начнете с концепций, определенных человеком (например, символический ИИ), вы зададитесь вопросом, как эти концепции изучаются в первую очередь; с другой стороны, полные восходящие представления (в то время очень ранняя версия того, что современные системы глубокого обучения могут делать в таких задачах, как компьютерное зрение) работают для низкоуровневых задач восприятия. , но не хватает большей части общности, связанной с человеческими концепциями. Таким образом, архитектуры, представленные в Fluid Concepts, представляют собой смесь нисходящих и восходящих процессов, в которых концепции более низкого уровня стохастически комбинируются для построения концепций более высокого уровня, которые, в свою очередь, делают некоторые другие низкие -уровневые концепции с большей вероятностью будут использоваться для решения данной задачи.

По сравнению с нашими моделями PP, наиболее поразительными сходствами являются 1) вероятностное исследование пространства гипотез (которое структурировано с помощью базовых концепций) и 2) применение композиционных принципов для повторного использования концепций низкого уровня для построения высокоуровневых концепций. единицы.

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

Изучение пространственных понятий с помощью «визуальной» грамматики

«Есть тысячи способов нарисовать букву« А », но мы узнаем любой из них с первого взгляда. Для любой ментальной категории (…) мы сразу распознаем тысячи примеров, несмотря на огромные различия ». - Дуглас Хофштадтер

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

В характерной для DH методологии использования игрушечных задач для просвещения важных когнитивных явлений Letter Spirit представляет собой эксперимент по машинному творчеству, подобному человеческому, который привел к созданию довольно интересных дизайнов шрифтов:

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

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

Как мы неоднократно видели в этом сообщении, вероятностный подход подчеркивает, как понимание концепции C и создание новых экземпляров C действительно тесно связаны между собой. Не пытаясь воспроизвести всю сложность Letter Spirit, можем ли мы обсудить некоторые интересные случаи визуального обучения в рамках парадигмы PP? Мы начнем с варианта демонстрации компьютерного зрения WebPPL: если мы нарисуем с помощью n линий (цифровой) многоугольник (треугольник, квадрат, пятиугольник), может ли вероятностная программа выяснить, как он был построен на первом месте?

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

  • линии - это наши примитивные элементы; линии строятся на основе четырех целых чисел [x1, y1, x2, y2];
  • начните с выборки из распределения [3, 4, 5], чтобы выбрать количество линий, которые нужно нарисовать; возможно, смещение выборки в сторону более простых моделей, т. е. рисование с минимальным количеством линий;
  • если N - количество линий, которые нужно нарисовать, выберите N кортежей целых чисел, чтобы получить N линий, и нарисуйте их на холсте .

Чтобы познакомиться с нашей визуальной генеративной моделью, вы можете попробовать создать несколько строк в отдельном блоке кода (см. Небольшую суть, чтобы начать работу). Затем во время выполнения мы используем возможности PP, чтобы сделать обратный вывод: учитывая чертеж с такими-то функциями, какие инструкции могли его создать?

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

map(drawSamples, repeat(6, function() {sample(m);}));

и отображение результатов:

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

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

Случайное распределение заключительных замечаний

«Мы (…) надеемся, что работа, которую мы описали в этой книге, может помочь привести в отдаленном будущем к архитектуре, которая продвинется гораздо дальше, чем мы, к улавливанию подлинного гибкого мышления, которое так ясно представлял Алан Тьюринг, когда он впервые предложил свою заслуженно отмеченный Test. " - Дуглас Хофштадтер

Мы (наконец-то!) Подошли к концу нашего tour de force вероятностного программирования через призму «подвижных человеческих концепций». Однако мы почти не коснулись поверхности, поскольку это неизбежно, когда мы пытаемся дать обзор интересных идей и перспективных технических инструментов на чрезвычайно амбициозной и все же очень неизведанной территории, то есть концепции машинного обучения и человеческих выводов (даже если в небольших областях). ).

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

  • было бы хорошо обсудить более подробно, где PP стоит на горячих темах по сравнению с текущим A.I. большой тренд в глубоких нейронных сетях. По нашему мнению, вероятностное программирование обещает быть принципиальным подходом, который предполагает обучение с меньшим объемом данных и действия более человечным, то есть как ближе к тому, что мы знаем о человеческом познании, так и, что еще более важно, легче для понимания: хотя в последнее время многое было сделано для решения проблемы объяснимости в моделях глубокого обучения, можно с уверенностью сказать, что модели PP имеют здесь преимущество. Глубокое обучение приобрело невероятную популярность благодаря обещанию устранить утомительную разработку функций в таких задачах, как классификация изображений, то есть путем автоматического изучения полезных представлений; хотя в целом это так, но в многих реальных случаях эксперты-люди действительно знают много важной информации о текущих выводах, а ПП имеет простой способ включить эти данные в формальную модель: в мире, который все еще не готов (и не готов) предоставить вам полностью автоматизированную научно-фантастическую жизнь , возможность совместной работы на общем языке с вашими корпоративными программными приложениями - это качественный скачок вперед; как мы видели, вероятностное моделирование - очень естественный способ преодолеть разрыв между понятными человеку идеями и знаниями, полученными с помощью машин.
  • Есть несколько очень интересных попыток применить PP к темам вычислительной семантики и прагматики. В Tooso мы работаем над моделями PP для графов знаний, то есть используем неявную онтологическую структуру для быстрого и надежного вывода для запросов на естественном языке. Однако нет предела, поскольку PP обещает объединить два принципа понимания языка, которые до сих пор было трудно согласовать: во-первых, язык композиционен, поскольку сложные выражения (своего рода) предсказуемо создаются из более простых; во-вторых, общение шумно, поэтому жесткие выводы (например, чисто дедуктивные) не работают почти во всех реальных случаях использования. Пища для размышлений для действительно - не -ленивого читателя, у которого есть немного свободного времени (друзья из академических кругов, кто-нибудь?): Контрфактические утверждения заставляют нас обосновывать свое мнение, опираясь на факты этого не произошло (если бы первый кубик был 6, сумма не была бы 5) - существует ли какая-то PP (игрушечная) модель коммуникации, которая может оправдать это (связь между байесовским моделированием и контрфактами часто встречается в соответствующей литературе, но мы не знаем о приложении, специфичном для контрфактической семантики, и не гуглили много)?
  • Мы довольно часто упоминали Гудмана и Тененбаум в этом посте, что, безусловно, было бы невозможно без их веб-книги Вероятностные модели познания. Если вам нравится немного поэкспериментировать с изучением концепций, вам обязательно стоит взглянуть на пример рациональных правил; Если вы нашли визуальный вызов Letter Spirit особенно интересным, вас не удивит, что недавняя работа Тененбаума и др. решает очень похожую проблему с точки зрения PP: вероятностная индукция программы - одна из самых захватывающих парадигм, которые мы видели в последние годы, и лучшая, безусловно (ну, очень вероятно) еще впереди.
  • Мы довольно часто упоминали Дугласа Хофштадтера в этом посте, что, безусловно, было бы невозможно без его книги Плавные концепции и творческие аналогии. В качестве последней ностальгической ноты, позвольте нам сказать, как сильно мы скучаем по DH! Он в основном отсутствует в основных СМИ, не слишком активно участвует в драках в Твиттере (O tempora! O mores!) и мало цитируется в современном ИИ. К сожалению, идеи Хофштадтера по-прежнему заставляют задуматься и могут дать столь необходимый оригинальный взгляд на эту область в целом в ее титаническом стремлении лучше понять интеллект.
  • Пример с таксой (bassotto - итальянское слово для таксы) находится в моей любовной памяти, Omero.

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

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

Увидимся, космические ковбои

Если у вас есть запросы, вопросы, отзывы или сумасшедшие идеи, поделитесь своим ИИ. история с [email protected].

Не забывайте получать новости от Tooso в Linkedin, Twitter и Instagram.

Благодарности

Особая благодарность Андреа Полониоли за храбрый и потрясающий рассказ и всей команде Tooso за полезные комментарии к предыдущим черновикам этой статьи; мы также благодарны организаторам встречи Будущее искусственного интеллекта за то, что позволили нам поделиться некоторыми из этих идей.

Все остальные ошибки - мои и только мои.

Дополнительная литература по PP

Наше введение в вероятностное программирование отстойно, особенно в части «программирования», поскольку мы могли бы просто ввести самый минимум WebPPL, необходимый для достижения наших целей. Куда пойти отсюда? К сожалению, полноценных, «с нуля», «компьютерных» вводных в PP на языках сценариев мало что известно (да, я действительно имею в виду Python):

  • Эта книга Мэннинга использует Фигаро (Скала);
  • Pyro недавно получил открытый исходный код, но сообщество все еще очень мало (что означает: отсутствие копирования и вставки из StackOverflow): портирование моделей WebPPL на Pyro - хороший (хотя иногда и разочаровывающий) способ начать работу;
  • Эта небольшая книга« Для хакеров » забавна и очень практична, но не касается более абстрактных приложений для искусственного интеллекта. (например, концептуальное обучение);
  • на противоположной стороне спектра Вероятностные модели познания абсолютно фантастические как научно обоснованное введение в PP, но оно основано на Javascript (ОТКАЗ: мы любим в основном все, что делают Гудман и Тененбаум, так что мы тоже можем быть немного предвзятыми).

В конце концов, мы предлагаем просто потеряться в красивых примерах и большом количестве исследовательских работ здесь, здесь и здесь (это репо потрясающе, но большинство моделей не в WebPPL: если вам нравится семантика естественного языка, начните с this). Однако эта область быстро развивается: если вы думаете, что мы что-то забыли, сообщите нам об этом.

Решение для 720! головоломка

Учитывая последовательность:

f(0) = 0
f(1) = 1
f(2) = 2
f(3) = 720!
...

что такое функция генератора? Это решение:

0 -> 0 (0!)
1 -> 1!
2 -> 2!!
3 -> 3!!! (as 3! = 6 and 6! = 720)
4 -> 4!!!!
...

то есть для каждого x, x-кратного факториала x (см. Гибкие концепции и творческие аналогии, стр. 46).