Разработка фенотропной программы


15

Недавно я натолкнулся на идею, выдвинутую Джароном Ланье, под названием «фенотропное программирование».

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

Двухстрочное описание здесь:

По словам Джарона, «реальная разница между нынешней идеей программного обеспечения, которая заключается в соблюдении протокола, и идеей, которую он обсуждает, в распознавании образов, связана с теми видами ошибок, которые мы создаем», и если Если мы не найдем иной способ мышления и создания программного обеспечения, мы не будем писать программы размером более 10 миллионов строк кода, независимо от того, насколько быстрыми становятся наши процессоры ».

Немного более длинное объяснение здесь . И еще более длинное объяснение здесь .

Итак, вопрос, глядя сквозь очевидные коннотации роботов-повелителей, которые люди обычно выбирают, как можно на самом деле разработать и написать «фенотропную программу»?


1
Без обид, но статьи, на которые вы ссылаетесь, очень расплывчаты и наивны. Не могли бы вы быть более точным в том, что вы понимаете под phenotropic program?
Саймон Бергот,

Прочитайте еще больше. Это описывает это в мрачных деталях.
Adv

4
Я думаю, что единственный способ ответить на этот вопрос - определить, что такое «фенотропная программа». В этом случае ответ становится основанным на мнении. Поэтому, прежде чем спрашивать, как написать «фенотропную программу», спросите, что такое «фенотропная программа».
Euphoric

1
@Simon: Вопрос в основном задает то же самое, поэтому я не знаю, что ваш запрос возможен без того, чтобы ФП фактически ответил на вопрос сам.
Роберт Харви

1
Связанная тема (рассмотрите автора текста): mail-archive.com/fonc@vpri.org/msg03808.html
Тиаго Сильва

Ответы:


23

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

Слово означает:

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

Идея в значительной степени исходит из биологии. Ваш глаз взаимодействует с миром не через такую ​​функцию, как See(byte[] coneData)через поверхность, называемую сетчаткой. Это не тривиальное различие; компьютер должен сканировать все байты coneDataодин за другим, тогда как ваш мозг обрабатывает все эти входы одновременно.

введите описание изображения здесь

Ланье утверждает, что последний интерфейс является более отказоустойчивым, что и есть (один вставленный бит coneDataможет сломать всю систему). Он утверждает, что он обеспечивает сопоставление с образцом и множество других возможностей, которые обычно трудны для компьютеров, что и делает.

Наиболее существенным «фенотропным» механизмом в компьютерной системе будет искусственная нейронная сеть (ANN). Он принимает «поверхность» в качестве ввода, а не определенный интерфейс. Существуют и другие методы для достижения определенной степени распознавания образов, но нейронная сеть наиболее тесно связана с биологией. Сделать ИНН легко; заставить его выполнить задачу, которую вы хотите, чтобы он выполнял надежно, сложно по ряду причин:

  1. Как выглядят входные и выходные «поверхности»? Они стабильны или различаются по размеру с течением времени?
  2. Как вы правильно понимаете структуру сети?
  3. Как вы тренируете сеть?
  4. Как вы получаете адекватные характеристики производительности?

Если вы готовы расстаться с биологией, вы можете отказаться от биологической модели (которая пытается симулировать работу реальных биологических нейронов) и построить сеть, которая более тесно связана с фактическими «нейронами» цифровой компьютерной системы (логика). ворота). Эти сети называются адаптивными логическими сетями (ALN). Они работают, создавая ряд линейных функций, которые аппроксимируют кривую. Процесс выглядит примерно так:

введите описание изображения здесь

... где ось X представляет некоторый вход в ALN, а ось Y представляет некоторый выход. Теперь представьте, что число линейных функций расширяется по мере необходимости для повышения точности, и представьте, что процесс, происходящий по n произвольным измерениям, полностью реализован с помощью логических элементов И и ИЛИ, и у вас есть некоторое представление о том, как выглядит ALN.

У ALN есть определенные, очень интересные характеристики:

  1. Они довольно легко обучаемы,
  2. Они очень предсказуемы, то есть незначительные изменения на входе не приводят к резким колебаниям на выходе,
  3. Они молниеносны, потому что они построены в форме логического дерева и работают так же, как бинарный поиск.
  4. Их внутренняя архитектура развивается естественным образом в результате обучения

Таким образом, фенотропная программа будет выглядеть примерно так; у него будет «поверхность» для ввода, предсказуемая архитектура и поведение, и он будет терпим к шумным данным.

Дальнейшее чтение
Введение в адаптивные логические сети с приложением для аудита оценки рисков
«Объектно-ориентированный» по сравнению с «Ориентированно на сообщения», Алан Кей


1
Поправьте меня, если я ошибаюсь, но «поверхностный» ввод звучит как набор - независимых (или в основном независимых) компонентов. В примере с глазом это могло бы выглядеть так See(List<Cone> cones)(где каждый Coneне зависит друг от друга), да?
FrustratedWithFormsDesigner

1
@Frustrated Вы, очевидно, можете смоделировать поверхность с помощью байтового массива, но вернитесь к определению Ланье, которое заменяет передачу сообщений и вызов функции на распознавание и распознавание образов. Это связано с проблемой масштабируемости, описанной здесь . Отказоустойчивость также является частью уравнения. Подумайте «умнее интерфейсы».
Роберт Харви

3
Re: «более отказоустойчивый». Ланье когда-нибудь видел оптические иллюзии? Он когда-либо изучал психологию мозга. Мозг ВСЕГДА будет пытаться разобраться в том, что говорят его входные данные, НИКАКОГО МАТЕРИАЛА, КАК НЕ ОШИБЫВАЮТ ЭТИ ВЫВОДЫ. Принцип работы мозга крайне неисправен. Таким образом, до тех пор, пока не имеет значения, работают ли программы довольно часто, так же, как и у обычного человека, я полагаю, что упомянутая модель - это хорошо. Однако в большинстве случаев люди ожидают, что компьютеры будут исправными. Будет трудно продать автомобиль, управляемый компьютером, который в большинстве случаев избегает аварий.
Данк

2
@ Dunk: ... но все еще законно строить и продавать автомобили для людей-водителей, которые в большинстве случаев избегают аварий.
Док Браун

2
@ Суть не в том, что есть ошибки - иначе мы бы пошли по классической математической схеме, чтобы доказать все. Дело в том, что 1: масштаб воздействия неудачи (вселенная не терпит крах, если я ошибочно принимаю кролика за гориллу - на самом деле, я все еще функционирую как человек, как и мой мозг, и сын), 2 : физические / биологические объекты комнаты должны восстанавливаться, обеспечивать обратную связь и исследовать альтернативы, которые «поддерживают развитие событий - даже неоптимальным образом»; и 3: идея, что эти характеристики заставляют нас хотеть их в наших искусственных системах
Тиаго Сильва,

1

Я думаю, что мы находимся в самом начале одного из шагов, которые нужно предпринять, чтобы получить там, и это сбор большого количества данных в форматах, которые можно проанализировать. Интернет, поиски в Google, Fitbit (каждый ваш шаг, каждый ваш шаг, я буду следить за вами.), FourSquare, географическое местоположение смартфона, сообщения в Facebook и ТАК данные вопросов - все это собирается. Мы не настолько близки к количеству сенсорных данных, которые средний человек собирает за всю жизнь, но мы приближаемся.

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

class Birdish

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

Что-то такое простое, как установка будильника, может быть сделано путем небольшого наблюдения / анализа моих текущих привычек. Мы отказались от установки таймеров видеомагнитофона до того, как технология была заменена на цифровую. И произошло бы это так быстро, если бы мы могли связать телегид с видеомагнитофоном? Я смотрел одно и то же ТВ-шоу 4 недели подряд, но 5-го я даже не включил телевизор. Очевидно, я хочу, чтобы это было записано. Разве вы не можете сказать, что я опаздываю на работе, пишу этот пост, и с моей обычной поездкой не успею домой? У тебя есть данные, посчитай.

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


1

Вот набор слайдов для определения вероятностного языка программирования в Scala .

Это первый достойный пример реализации некоторых основных компонентов системы, которые предлагает Jaron Lanier.


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

@adv, как бы мы нашли это, если ты это сделаешь?
Новая Александрия

1
Я опубликую ссылку на репозиторий GitHub, когда я найду время для его создания.
Adv

-1

Мысль у меня была недавно:

Если вы использовали высокоуровневые идеи, такие как «Возможно, монада» на Haskell, для переноса вызовов удаленных процедур в другие системы. Вы отправляете запрос на сервер. Но ничего не возвращается (сервер не работает). Или Promise возвращается (сервер занят), и ваши программы продолжают работать с этими значениями None или Promised. Это как отказоустойчивость, которую ищет Ланье.

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


как это отвечает на заданный вопрос?
комнат

Если я правильно понимаю, фенотропное программирование - это способ программирования больших (часто мультикомпьютерных) надежных систем. Проблема в том, что все биологические метафоры делают его расплывчатым и трудным для перевода в практические термины программирования. Здесь я полагаю, что некоторые программные конструкции, которые не являются расплывчатыми (например, Монады, Обещания и т. Д.), Могли бы сделать некоторые из этих идей конкретными и практически программируемыми. Ланье)
interstar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.