Программа которая сама думает

dima78 [entries|archive|friends|userinfo]
dima78
[ Tags | penrose, science ]

Как думают компьютеры. Языки программирования.
(о чём молчит Пенроуз, часть 4)

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

КАК ПОНЯТЬ, ЧТО О ТЕБЕ ДУМАЮТ ТВОИ ДРУЗЬЯ #Shorts

Процедурная модель

Самое простое для выполнения на компьютере и прочих автоматических девайсах – это процедурные языки программирования. В них есть чёткая последовательность шагов, каждый со своим номером, и выполнение происходит строго по порядку. Есть логические и арифметические действия, по результатам которых можно сделать переход не на следующий шаг, а на какой-то другой с заданным номером. Так получаются ветвление алгоритма на разных условиях и циклы.

Пример такого алгоритма – переход дороги:

  • 1. пока не дошли до дороги: вперёд 1 шаг
    (а точнее:
  • 1а. дошли до дороги? да – переход на шаг 2, нет – переход на шаг 1б
  • 1б. пройти вперёд по тропинке на 1 шаг
  • 1в. переход на шаг 1а)

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

Программа, которая сама вас тренирует.

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

Предикатная модель

Предикатная модель более близка к человеческой форме записи и обработки знаний. С её помощью изначально записывали математические формулы и логические построения. Суть её в том, что имеется набор правил, которые никак не связаны между собой порядком исполнения. Но!

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

Например, для перехода дороги, набор правил был бы таким (формат – входное условие : действие):

  • — (у дороги, машины есть) : ждать 1 секунду
  • — (не у дороги) : вперёд 1 шаг
  • — (у дороги, машин нет) : перейти дорогу

Исполнитель при этом сам развернёт набор правил в нужную последовательность действий, в зависимости от ситуации, например:

  • — (у дороги : нет, машин нет : неизвестно) : вперёд 1 шаг
  • — (у дороги : нет, машин нет : неизвестно) : вперёд 1 шаг
  • — (у дороги : нет, машин нет : неизвестно) : вперёд 1 шаг
  • — (у дороги : да, машин нет : нет) : ждать 1 секунду
  • — (у дороги : да, машин нет : нет) : ждать 1 секунду
  • — (у дороги : да, машин нет : нет) : ждать 1 секунду
  • — (у дороги : да, машин нет : да) : перейти дорогу

Чем плоха такая запись уже понятно – нужен более сложный/мощный исполнитель (вычислительный девайс, понятливый человек), который бы по изменившейся ситуации сам отыскивал нужное действие. Да и у каждого правила набор условий может оказаться очень и очень развесистым, что потребует ещё большей памяти и скорости.

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

Читайте также:
Как узнать каким протектором защищена программа

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

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

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

Но ничего радикально нового такая система не вывела. Почему? См. ниже и в следующих частях.

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

В природе тоже есть такая форма кодирования (но она естественно отступает от жёсткого формализма), и она обеспечивает мощное и устойчивое кодирование и обработку информации, но исполнитель здесь — уже природные законы. Так, например, кодируются и реплицируются молекулы ДНК, они «катаются» по молекулярным цепочкам, сами встраиваются в нужное для себя место (в ненужное они не смогут прицепиться — параметры молекулярных связей не те), исправляют ошибки, пропущенные или наоборот продублированные куски. Похожее есть и в работе всего организма, взаимодействии особей, построении интеллекта.

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

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

Для случая с переходом дороги, это, например, была бы встреча с развилкой на тропинке. Программа должна найти правильный путь среди всех развилок. Для обычных дорог есть простой и однозначный алгоритм, здесь программа не будет блуждать вечно и съедать огромные ресурсы.

Для вывода математических теорем и похожих случаев «карта дорог» будет меняться в зависимости от того, куда мы пойдём, с каждым нашим шагом вперёд мы будем видеть новый кусочек карты вокруг, близко от себя, но не сможем посмотреть вдаль или в сторону параллельной дорожки. И только пройдя по какому-то из путей вперёд, мы сможем увидеть, что там такое. А чтобы увидеть, что будет на параллельной дорожке, мы должны вернуться обратно к развилке и пойти по этой самой дорожке. Всю же карту сразу иметь нельзя — её размер больше чем бесконечен, и это касается многих кусков карты помельче! (см. Вопросы вычислимости)

Возможное решение – несколько цепочек надо выстраивать параллельно, ведь какая-то из них может привести к успеху раньше других. И вместо того, чтобы вести до конца (а может даже и вечно!) единственную безуспешную цепочку, а после неё взяться за другую, лучше вести несколько цепочек параллельно.

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

Читайте также:
Как установить служебные программы

И самая интересная проблема, это то, что такая система вывода должна уметь обрабатывать неопределённости, нечёткости и похожие ситуации. Ведь мало выписать чёткое правило, надо чтобы оно как-то умело обрабатывать ситуацию, когда часть данных неясна, часть похожа, но не совсем такая, а более подходящего правила нет. И это при том, что (не забываем!) каждое правило может иметь весьма развесистое условие активации.

Есть, конечно, такая штука, называемая нечёткие правила и вывод на них. Что она делает – вместо обычных булевых значений 0/1 использует весь диапазон от 0 до 1, и вычисление проходит не булевыми, а вещественными операциями, и результат соответственно – вещественное число, близость которого к нулю или к единице определяет близость к ложности или истине вычисляемого выражения.

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

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

И, как вы уже догадались, эта идея потерпела крах. Причины те же: взрыв вариантов, потребность обрабатывать неопределённости, нечёткости и похожие ситуации. Да ещё и всё это помноженное на то, что сам человек оперирует гигантским объёмом таких правил, в которых (помните?) весьма развесистые условия активации, да и вытащить их из головы, формализовать, задача весьма непростая. Ведь то, что человек выписывает в качестве формального правила – далеко не то, что у него творится в голове, да и необязательно правильно он это выписывает. Тут нужна отдельная система, которая бы занималась добычей знаний в правильном виде, во всём их гигантском объёме и развесистости условий активации.

Современные программные модели

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

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

Событием может быть что угодно – ввод пользователя, события операционной системы, сигналы от других программ, набор условий. События обычно сопровождаются данными, их описывающими. Продвинутый вариант – программа не сама взаимодействует с компьютером, а получает события от операционной системы, и одновременно могут работать много программ, а операционка сама знает кому какие события раздавать. Тоже самое возможно на уровне сети компьютеров. Причём как сама программа, так и процедуры-обработчики событий остаются написанными с помощью процедурной модели.

Похожее изобретение – это сервисы и компонентные модели. В отличие от объекта в ООП, компоненты и сервисы живут не внутри программы, а внутри операционки. У них есть свой интерфейс, через который (и только через который) с ними могут взаимодействовать другие программы, может быть у них и свой цикл обработки событий.

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

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

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

Читайте также:
Установить программу на Макбук

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

Источник: dima78.livejournal.com

Программа, которая сама может себя программировать

Бог как программист создал много программ. Такие программы как, например, ангелы или животные, реализуют Его замысел разработчика. Но в программу, которой является человек, Бог добавил часть себя как Творца-программиста. Человек является программой, которая сама себя может программировать по своей свободной воле.

Один из ангелов не захотел смириться с этим и попробовал, подобно человеку, изменить свою программу без согласования с Разработчиком. Внесенные ангелом в себя изменения оказались фатальными. Он потерял свою близость к Богу и изуродованный рухнул в тварный мир. Его примеру последовали и некоторые другие ангелы, которые стали демонами.

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

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

Чтобы люди не потеряли веру в то, что они могут себя пофиксить, Разработчик явил им Себя в тварном мире в виде программы. Идеальная программа не может находиться среди искаженных программ. Либо она разрушает искаженные программы, либо они разрушают её. Чтобы сохранить людей и дать им очередной шанс, идеальная программа (Христос) дала себя разрушить, но явила свой идеал как эталон для исправления.

В следующий раз Бог явит себя идеальной программой и тварном мире и все программы, которые не были исправлены к тому моменту, будут стёрты. Исправленные программы сохранятся и продолжат работать… вечно…

Источник: historiosophy.ru

В Нижнем Новгороде сделали первого робота, который сам думает и принимает решения

ВКонтакте Яндекс Дзен Rutube Одноклассники Телеграм

Мозг у него, правда, не свой — крысиный, и находится на расстоянии. Но зато какие успехи. Груда пластика и металла самостоятельно обходит препятствия, может уйти от погони. А в перспективе, обещают учёные, — компьютер, который будет не просто исполнять команды пользователя, а обучаться и действовать независимо. Звучит как-то даже пугающе.

Читайте нас в: Дзен Новости

Репортаж корреспондента Пятого канала Анастасии Дьяковой.

Нижегородский аватар — смотрит прямо в глаза. А за ними — живой мозг. Изучает и анализирует. Правда, на расстоянии. На полу — только колёса и датчики. Мыслительный центр — в стерильном боксе-инкубаторе. Он хоть и плавает в питательном растворе, но осознаёт себя — на движущейся платформе.

Поэтому маневрирует, избегая препятствий.

Алексей Пимашкин, научный координатор проекта «Нейроаниматы»: «Сигналы от сенсоров подаются на живую нейронную сеть, и нейронная сеть генерирует ответ, ставим в соответствии с этим повороты колёс на роботе».

Глаза — ультразвуковые датчики. Команды отдаёт по беспроводной сети. Сигналы клеток конвертируются в изображения, которые появляются на мониторе. А управляет роботом посвятившая себя науке белая крыса. Понять, как работает мозг, — давняя мечта фантастов.

Соединить совершенный человеческий интеллект с мощью машины пытаются не только режиссёры блокбастеров. Исследования уже несколько лет проводят в Японии, Италии, США.

Кевин Варвик, профессор: «Вы понимаете, что будет, если мы раскроем секрет мозга. Это даже больше, чем прорыв. Вы понимаете, ЧТО даст человечеству только понимание того, как работает память. Мы тогда сможем хранить всю информацию!»

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

Алексей Пимашкин, научный координатор проекта «Нейроаниматы»: «Тут можно её применить либо к роботу, либо к компьютерной модели робота, либо даже к ракете какой-то летающей, которая самоуправляется, здесь не важно к чему».

А главное, какие возможности открываются медицине и науке будущего. Вот, например, в Британии уже прозревают слепые. Человеку, потерявшему зрение 20 лет назад, вживили бионический глаз. Это первая в истории операция: в сетчатку глаза внедрили микрочип, подобный тому, что используют при сборке камер мобильных телефонов.

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

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

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

Источник: www.5-tv.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru