Недавно я натолкнулся на идею, выдвинутую Джароном Ланье, под названием «фенотропное программирование».
Идея состоит в том, чтобы использовать «поверхностные» интерфейсы вместо одноточечных интерфейсов в компьютерных программах, использующих статистику, чтобы отсеять незначительные ошибки, которые обычно приводят к катастрофическому сбою «классической» программы.
Двухстрочное описание здесь:
По словам Джарона, «реальная разница между нынешней идеей программного обеспечения, которая заключается в соблюдении протокола, и идеей, которую он обсуждает, в распознавании образов, связана с теми видами ошибок, которые мы создаем», и если Если мы не найдем иной способ мышления и создания программного обеспечения, мы не будем писать программы размером более 10 миллионов строк кода, независимо от того, насколько быстрыми становятся наши процессоры ».
Немного более длинное объяснение здесь . И еще более длинное объяснение здесь .
Итак, вопрос, глядя сквозь очевидные коннотации роботов-повелителей, которые люди обычно выбирают, как можно на самом деле разработать и написать «фенотропную программу»?
phenotropic program
?Ответы:
Ланье изобрел слово за 50 центов, пытаясь создать сеть вокруг определенного набора идей, которые описывают вычислительную модель для создания компьютерных программ, имеющих определенные идентифицируемые характеристики.
Слово означает:
Идея в значительной степени исходит из биологии. Ваш глаз взаимодействует с миром не через такую функцию, как
See(byte[] coneData)
через поверхность, называемую сетчаткой. Это не тривиальное различие; компьютер должен сканировать все байтыconeData
один за другим, тогда как ваш мозг обрабатывает все эти входы одновременно.Ланье утверждает, что последний интерфейс является более отказоустойчивым, что и есть (один вставленный бит
coneData
может сломать всю систему). Он утверждает, что он обеспечивает сопоставление с образцом и множество других возможностей, которые обычно трудны для компьютеров, что и делает.Наиболее существенным «фенотропным» механизмом в компьютерной системе будет искусственная нейронная сеть (ANN). Он принимает «поверхность» в качестве ввода, а не определенный интерфейс. Существуют и другие методы для достижения определенной степени распознавания образов, но нейронная сеть наиболее тесно связана с биологией. Сделать ИНН легко; заставить его выполнить задачу, которую вы хотите, чтобы он выполнял надежно, сложно по ряду причин:
Если вы готовы расстаться с биологией, вы можете отказаться от биологической модели (которая пытается симулировать работу реальных биологических нейронов) и построить сеть, которая более тесно связана с фактическими «нейронами» цифровой компьютерной системы (логика). ворота). Эти сети называются адаптивными логическими сетями (ALN). Они работают, создавая ряд линейных функций, которые аппроксимируют кривую. Процесс выглядит примерно так:
... где ось X представляет некоторый вход в ALN, а ось Y представляет некоторый выход. Теперь представьте, что число линейных функций расширяется по мере необходимости для повышения точности, и представьте, что процесс, происходящий по n произвольным измерениям, полностью реализован с помощью логических элементов И и ИЛИ, и у вас есть некоторое представление о том, как выглядит ALN.
У ALN есть определенные, очень интересные характеристики:
Таким образом, фенотропная программа будет выглядеть примерно так; у него будет «поверхность» для ввода, предсказуемая архитектура и поведение, и он будет терпим к шумным данным.
Дальнейшее чтение
Введение в адаптивные логические сети с приложением для аудита оценки рисков
«Объектно-ориентированный» по сравнению с «Ориентированно на сообщения», Алан Кей
источник
See(List<Cone> cones)
(где каждыйCone
не зависит друг от друга), да?Я думаю, что мы находимся в самом начале одного из шагов, которые нужно предпринять, чтобы получить там, и это сбор большого количества данных в форматах, которые можно проанализировать. Интернет, поиски в Google, Fitbit (каждый ваш шаг, каждый ваш шаг, я буду следить за вами.), FourSquare, географическое местоположение смартфона, сообщения в Facebook и ТАК данные вопросов - все это собирается. Мы не настолько близки к количеству сенсорных данных, которые средний человек собирает за всю жизнь, но мы приближаемся.
Начните классифицировать миллионы изображений птиц и получать отзывы от людей, говорящих вам, что это не птица, и вы можете начать создавать алгоритм. Оттуда может быть создано нечеткое впечатление (я бы назвал это моделью, но это слишком точно для того, что мы пытаемся закодировать).
Откуда домашняя собака так много знает о владельце? Потому что это очень на нее смотрит. Собака слушала, как машины въезжают на подъездную дорожку и соотносят это с тем, что владелец, открывающий входную дверь, кажется, что собака может распознать автомобиль по звуку. Мы тоже могли бы это сделать, но мы не видим причин для этого. И это то, что не так с текущим программным обеспечением, оно не обращает внимания на то, что делает пользователь. Он просто ждет, пока пользователь сделает то, что от него ожидают.
Что-то такое простое, как установка будильника, может быть сделано путем небольшого наблюдения / анализа моих текущих привычек. Мы отказались от установки таймеров видеомагнитофона до того, как технология была заменена на цифровую. И произошло бы это так быстро, если бы мы могли связать телегид с видеомагнитофоном? Я смотрел одно и то же ТВ-шоу 4 недели подряд, но 5-го я даже не включил телевизор. Очевидно, я хочу, чтобы это было записано. Разве вы не можете сказать, что я опаздываю на работе, пишу этот пост, и с моей обычной поездкой не успею домой? У тебя есть данные, посчитай.
Собирайте все больше и больше данных, и тогда вы сможете найти более эффективные способы их анализа, распознавания и скрытия. Мы выходим за пределы того, что может быть введено только с клавиатуры, с нашими камерами телефона и, в скором времени, на стеклянные камеры. Это только начало.
источник
Вот набор слайдов для определения вероятностного языка программирования в Scala .
Это первый достойный пример реализации некоторых основных компонентов системы, которые предлагает Jaron Lanier.
источник
Мысль у меня была недавно:
Если вы использовали высокоуровневые идеи, такие как «Возможно, монада» на Haskell, для переноса вызовов удаленных процедур в другие системы. Вы отправляете запрос на сервер. Но ничего не возвращается (сервер не работает). Или Promise возвращается (сервер занят), и ваши программы продолжают работать с этими значениями None или Promised. Это как отказоустойчивость, которую ищет Ланье.
Может быть, есть способы инкапсулировать другие возможности. Например, удаленные вызовы, которые возвращаются с аппроксимацией, которая со временем все больше уточняется при помощи какого-либо фонового согласования. то есть. Возвращается что-то вроде Обещания, а не просто «продолжайте удерживать и работать с этим, и вскоре появится правильное значение», но «продолжайте удерживать и работать с этим, и вскоре появится лучшее приближение». (И снова, и снова). Это могло бы скрыть множество ошибок от программиста, так же как сетевые протоколы скрывают много низкоуровневых сетевых ошибок от программиста.
источник