GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.2 (27)<< < Пред. | След. > >>   Поиск:  
 Автор Тема: На: Программирование поведения робота без доступа к коду
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 26 авг 16 10:17
Изменено: 26 авг 16 11:26
Цитата:
Автор: VPolevoj
Кого-то еще (кроме r) интересует вопрос "программирования" робота без программирования - на естественном (близком к обычному) человеческом языке?
Цитата:
Автор: TimKruz
Меня интересует.
Я считаю это ключом к универсальному ИИ.

Слава Богу, нашего полку прибыло.
И теперь (вместе с r) нас уже трое, тех, кому интересна эта проблема.

Но почему ты, TimKruz, считаешь именно этот вопрос ключом к ИИ?
Что ты видишь в нём такого важного?

Цитата:
Автор: VPolevoj
Если да, то напишите, какие Вы видите для себя трудности при решении этой задачи? И есть ли они - эти трудности?
Цитата:
Автор: TimKruz
Трудность в том, чтобы смоделировать работу зеркальных нейронов, работа которых до конца не изучена и вообще хрен знает, как они работают...

Не понимаю, причем тут "зеркальные нейроны"?
Какое они имеют отношение к проблеме обучения робота на естественном языке?

Кстати, работу "зеркальных нейронов", на мой взгляд, смоделировать не так уж и трудно. Тем более, что это уже делали.

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

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

Цитата:
Автор: TimKruz
Больше похоже на то, что ты ничего не сделал и хочешь воспользоваться чужими наработками... Извини за подозрительность, если я ошибаюсь.

Это простительно (так сказать, имеешь полное право на сомнения).

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

Кстати, в проекте "Таракан" я поднимал и разбирал вопрос о выборе Доминанты, и реализовал свой вариант решения этой проблемы в своей программе. А в проекте "Робот" я фактически решил проблему со сменой Задач и подЗадач в рамках основной установленной Цели (поиграйтесь немного с этой программкой - многое поймете).

Цитата:
Автор: VPolevoj
Так как Робот не может непосредственно залезать в код своей программы и произвольно менять его.
Цитата:
Автор: TimKruz
Если робот написан на интерпретационном языке, то нет ничего проще прочитать и на лету изменить код. Но даже если он написан на компилируемом (в байт-код или машинный код) языке, всё равно имеется возможность менять код прямо в оперативной памяти, но для этого нужно знать язык Ассемблера или соответствующий язык байт-кода.

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

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

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

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

Цитата:
Автор: VPolevoj
Скажем, человек сказал: "Если идёт дождь - возьми зонтик". В "заглушках" поменялся один блок с условием...
Цитата:
Автор: TimKruz
Каким образом программа разделяет предложения на условия и действия? Это очень нетривиальная задача для естественного языка. Если кто-то её полностью решит, то можно сказать - СИИ изобретён, останется только натянуть этот алгоритм на скелет...

Ну, во-первых, в моей программе ничего этого нет (пример с "дождиком и зонтиком" я привел в качестве доступной и понятной аллегории). А что есть? А есть КОМАНДЫ, то есть, зарезервированные слова, которые программа выискивает в тексте, и, когда находит, то анализирует всё, что следует после этих слов-команд на предмет соответствия допустимого контента и уже потом интерпретирует - переводит в нужные действия.

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

А во-вторых, я считаю, что программно разделять слова на "условия и действия", а так же, на "объекты и их свойства", учитывать "время и состояние", и пр., пр., пр. - можно. Я как раз чем-то подобным сейчас и занимаюсь - пытаюсь сделать Диалоговую систему (это, насколько я понимаю, очень совпадает с твоей задачей, так что - можно будет попробовать согласовать наши действия, если пожелаешь).

Цитата:
Автор: TimKruz
***

А теперь я расскажу о своём варианте решения этой задачи.

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

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

Эта идея вовсе не нова - уже давно существуют программы, записывающие "макросы" с действий пользователя, но что-то они малопопулярны.

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

Это тоже не новая идея, в программах для анимации, например, в Blender, так создаётся анимация - пользователь выставляет "кости" модели в ключевых позициях, и программа составляет анимацию, экстраполируя ключевые позиции.

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

Другими словами, "если что-то выглядит как утка, плавает как утка, и крякает как утка, то - это утка" (известная английская пословица). У нас же (у русских) существует другой мем: "выглядит как [это], и пахнет как [это], но - не [это]", скажем, для примера, "не всё то золото, что блестит" (хотя таких примеров много).

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

Хотя, соглашусь, процессы обучения за счет повторения (подражания) имеют место и очень важны для любого Интеллекта. Так что, заниматься этим вопросом, бесспорно, нужно.
[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Программирование поведения робота без доступа к коду
Добавлено: 26 авг 16 12:03
Цитата:
Но почему ты, TimKruz, считаешь именно этот вопрос ключом к ИИ?
Что ты видишь в нём такого важного?

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

Пример:
"Иди прогуляйся с собакой и купи мороженное."
Что нужно знать, чтобы распознать в этой фразе команды и успешно их выполнить? Вот что:
1. Как нужно ходить/ездить (в зависимости от типа шасси робота),
2. Куда именно ходить/ездить на обычной "прогулке",
3. Что такое "собака",
4. Как обращаться с собакой,
5. О какой собаке идёт речь,
6. Где находится эта собака,
7. Как выгуливать собак,
8. Где выгуливать можно, а где - нет,
9. Где можно найти мороженное,
10. Как пользоваться платёжными терминалами разного типа,
11. Сколько времени можно идти с мороженным, пока оно не растаяло,
12. В каком порядке подразумевается выполнение этих задач.

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

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

Цитата:
Не понимаю, причем тут "зеркальные нейроны"?
Какое они имеют отношение к проблеме обучения робота на естественном языке?

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

Цитата:
идти туда, куда идет твой сосед (чем не "зеркальный нейрон"?)

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

Цитата:
можно сэмулировать каким-нибудь простым способом

Дело за малым - узнать этот способ.

Цитата:
Это простительно (так сказать, имеешь полное право на сомнения).

Понятно. Тогда уважуха, хоть что-то делаешь, а не как эти диванные философы от ИИ с over9000 сообщений флуда и текстового мордобоя.

Цитата:
Вот представьте себе, что вам непосредственно доступны все ваши синапсы и активность каждого из нейронов, и вы можете целенаправленно всеми этими процессами управлять... много вы науправляете? Так и тут.

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

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

Цитата:
А есть КОМАНДЫ, то есть, зарезервированные слова, которые программа выискивает в тексте

Тогда получается, что общение происходит на формальном языке, по сути - на языке программирования, а не на естественном...

Цитата:
А во-вторых, я считаю, что программно разделять слова на "условия и действия", а так же, на "объекты и их свойства", учитывать "время и состояние", и пр., пр., пр. - можно.

Может и можно, но весь вопрос - как именно?

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

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

Тогда никакие самостоятельные проекты не будут нужны в принципе, всё (в теории) можно реализовать на шасси моей МСУИИ. Ну и открытый исходный код, чтоб люди могли делать форки... При этом можно продавать модули в Steam как DLC - золотая жила, если наклепать сотню модулей и продавать их по $1.

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

Почему же?

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

Так вот, просто ААП - это "чистый" интеллект. А человеческий интеллект состоит из множества заплаток, которые появились в процессе эволюции и оказались полезными.

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

Исходя из него, можно прийти к выводу, что следующая программа является интеллектом:
Цитата:
var s: string;
begin
repeat
read(s);
write(s);
until false;
end.

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

А вот то, чем обладает только человек - это разум. Определения разума у меня нет, т.к. хрен знает, как он устроен... Известно только то, что это - самая высшая нервная деятельность, заключённая в лобных долях неокортекса мозга человека. У животных только зачатки разума, им чего-то не хватает. А вот чего - кто их знает?..

Возможно, я несу бред. Но таково положение тараканов в моей голове.
[Ответ][Цитата]
Вольфрамовый клaпaн
Сообщений: 13070
На: Программирование поведения робота без доступа к коду
Добавлено: 26 авг 16 12:11
Цитата:
Автор: TimKruz
Исходя из него, можно прийти к выводу, что следующая программа является интеллектом:
И я убеждён, что это именно интеллект. Но - самый примитивный из всех интеллектов, и, к тому же, чистый (без заплаток).

Для того, чтобы эта программа стала "минимальным" интеллектом нужно, чтобы в ней была обратная связь. Без этого никак.
[Ответ][Цитата]
NO.
Сообщений: 10700
На: Программирование поведения робота без доступа к коду
Добавлено: 26 авг 16 13:05
Цитата:
Автор: TimKruz
Исходя из него, можно прийти к выводу, что следующая программа является интеллектом:

[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 26 авг 16 13:52
Цитата:
Автор: VPolevoj
почему ты, TimKruz, считаешь именно этот вопрос ключом к ИИ?
Цитата:
Автор: TimKruz
Потому что я думаю, что для того, чтобы робот мог извлечь из речи на естественном языке программу (набор требуемых от него действий), он должен понимать этот язык.

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

Немного не так.

Чтобы робот смог извлечь из речи человека программу (Алгоритм), ему достаточно понимать отдельные слова из этой речи (так называемые КОМАНДЫ), и знать как их ему следует интерпретировать. Все остальные слова ему знать вовсе не обязательно (если они, конечно, не имеют отношения к этим командам).

Соответственно, и никакую картину мира ему тоже иметь в памяти вовсе не обязательно.

Цитата:
Автор: VPolevoj
Какое отношение "зеркальные нейроны" имеют к проблеме обучения робота на естественном языке?
Цитата:
Автор: TimKruz
Зеркальные нейроны отвечают за подражание и частично за понимание других существ своего вида. Подражание нужно для обучения - ребёнок учится, повторяя движения за родителями.

Но это не единственный способ обучения (и он далеко не самый главный).

И мне по-прежнему не понятно, какое отношение эти "зеркальные нейроны" имеют к проблеме обучения робота на естественном языке?

Цитата:
Автор: VPolevoj
идти туда, куда идет твой сосед (чем не "зеркальный нейрон"?)
Цитата:
Автор: TimKruz
В рамках симуляции у нас есть доступ к координатам этих соседей, поэтому легко определить, куда нужно двигаться. А вот чтобы визуально определить, кто куда движется - это нужна какая-то система, сравнимая по сложности со зрительной зоной неокортекса...

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

Цитата:
Автор: VPolevoj
можно сэмулировать каким-нибудь простым способом
Цитата:
Автор: TimKruz
Дело за малым - узнать этот способ.

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

Цитата:
Автор: VPolevoj
А есть КОМАНДЫ, то есть, зарезервированные слова, которые программа выискивает в тексте
Цитата:
Автор: TimKruz
Тогда получается, что общение происходит на формальном языке, по сути - на языке программирования, а не на естественном...

Так ведь для этого мы постоянно и оговариваемся, что на языке "близком к естественному", понимаешь? Сделать программу, которая бы действительно могла бы обучаться на естественном языке, для этого она, как ты правильно пишешь, должна уметь полноценно его понимать, ВЕСЬ, а это невозможно (по многим причинам).

Цитата:
Автор: VPolevoj
А во-вторых, я считаю, что программно разделять слова на "условия и действия", а так же, на "объекты и их свойства", учитывать "время и состояние", и пр., пр., пр. - можно.
Цитата:
Автор: TimKruz
Может и можно, но весь вопрос - как именно?

Я этим занимаюсь.
Но вопрос очень сложный.
Если интересно - присоединяйся к обсуждению.
[Ответ][Цитата]
NO.
Сообщений: 10700
На: Программирование поведения робота без доступа к коду
Добавлено: 26 авг 16 14:11
Изменено: 26 авг 16 14:12
Цитата:
Автор: Khujarvik Khujarvik
неплохая материализация символа

https://ru.wikipedia.org/wiki/Янус
[Ответ][Цитата]
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 27 авг 16 3:15
Изменено: 27 авг 16 3:19
Цитата:
Автор: Vpolevoj
А сам этот Алгоритм изначально состоит из "заглушек", поэтому он работает всегда, с самого момента своего создания. А потом Человек просто конкретизирует - заменяет те или иные "заглушки" какими-то значениями, и алгоритм обретает плоть (но по-прежнему работает). Программа лишь отслеживает правильность ввода команд и соответствие условий и значений (чтобы не было косяков), но никакого "программирования", по сути дела, нет.
Тут возникает вопрос гибкости такого подхода, насколько легко собрать более-менее сложный алгоритм из таких неделимых (элементарных) алгоритмов, а также насколько легко добавить новый элементарный алгоритм (ЭА) конечным пользователем и прицепить его к уже существующим, в нужное место?

Цитата:
Автор: Vpolevoj
Просто создается новый объект - "Универсальный алгоритм", состоящий из "заглушек". А Человек потом заменяет некоторые из его блоков своими значениями, и всё работает. Причем, сам Человек даже не обязан знать, что и где поменялось, а что - осталось невостребованным.
Как я понимаю человек перед тем, как что-то менять, запрашивает у машины конкретный ЭА, а потому уже редактирует его и отправляет обратно измененную версию? Как в таком случае человек указывает роботу какой конкретно ЭА ему требуется?
[Ответ][Цитата]
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 27 авг 16 4:21
Изменено: 29 авг 16 12:05
Цитата:
Автор: TimKruz
Тогда получается, что общение происходит на формальном языке, по сути - на языке программирования, а не на естественном...
Естественный язык в общем-то тоже обладает свойством формальности в некоторой степени. А языки разных народов можно сравнивать по степень формальности. Например английский более формален, чем русский.

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

Вот примеры моих инструкций:

1. установить ?что значение (?чего %переменная1, ?какое 1).


2. создать ?что (=константа ?что имеет ?что имя ?какое %Имя1).


3. зарегистрировать ?что триггер (?какой "!=", ?на-что значение ?какое 3, ?для-чего %переменная1).


4. присоединить (?что триггер, ?к-чему условие).
[Ответ][Цитата]
Вольфрамовый клaпaн
Сообщений: 13070
На: Программирование поведения робота без доступа к коду
Добавлено: 27 авг 16 6:44
Цитата:
Автор: r
Вот примеры моих инструкций:

Для таких инструкция можно взять QBasic (или как он назывался) из MS DOS и писать на нем.
[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Программирование поведения робота без доступа к коду
Добавлено: 27 авг 16 12:06
Изменено: 27 авг 16 12:43
Цитата:
ему достаточно понимать отдельные слова из этой речи (так называемые КОМАНДЫ)

Да блин, если в тексте есть КОМАНДЫ, то этот текст не на естественном языке, а на ФОРМАЛЬНОМ, т.е. на языке программирования. Речь идёт о естественных языках - в них никаких прямых команд нет (чаще всего) - команда может быть вычленена из всего текста целиком, а не из каких-то зарезервированных под команды слов.

Цитата:
Но это не единственный способ обучения

А какие другие? Все известные мне способы сводятся к подражанию.

Цитата:
на НАПРАВЛЕНИЕ его движения

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

Цитата:
на языке "близком к естественному"

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

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

Изобретать новый "почти человеческий" ЯП нет смысла. Имеет смысл построение алгоритма, понимающего настоящую естественную речь.

Цитата:
должна уметь полноценно его понимать, ВЕСЬ, а это невозможно (по многим причинам)

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

Цитата:
Вот примеры моих инструкций:

Картинок не видно.

***

Пожалуй, опишу, откуда появляются команды в моей МСУИИ.

Начнём с того, что сам интеллект (моё интеллект-ядро) не знает, какие записи в БД являются командой, какие - воспоминанием, а какие - речевым мусором. Различают эти виды записей модули-эффекторы.

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

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

Пример:
Цитата:
Юзер: Какая сегодня погода?
(цепочка "погода -> код #500")
Программа: #500
(код #500 заставляет погодный модуль узнать и сообщить погоду)
Программа: #000 Сегодня солнечно.
(код #000 заставляет интеллект-ядро проигнорировать сообщение)

Или так:
Цитата:
Юзер: А ты милая!
(цепочка "милая -> код #309 и фраза "Ой, ну что ты!"")
Программа: #309 Ой, ну что ты!
(код #309 заставляет модуль-аватару показать эмоцию смущения)


Как в базу данных попадают команды? Очень просто:
Цитата:
Юзер: Стреляй!
(цепочки, начинающейся на "Стреляй!" в БД нет)
Программа: ???
(юзер включает игровой модуль и стреляет)
(игровой модуль генерирует код #402)
Программа: #402
(интеллект-ядро запоминает цепочку "Стреляй! -> #402")


Вот такие вот дела.
[Ответ][Цитата]
Fakir
Сообщений: 228
На: Программирование поведения робота без доступа к коду
Добавлено: 27 авг 16 13:11
Изменено: 27 авг 16 13:13
ЭГТР местами прав. Например, для собаки команды "Ша", "фу", "нельзя", "Отпусти прохожего, сволочь" - одинаковы. Главное интонация (эмоциональный настрой) хозяина. Не программируемого робота можно обучать через его "хорошо/плохо" - через "эмуляцию эмоций". Язык в данном случае второстепенный.
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 27 авг 16 16:49
Изменено: 28 авг 16 0:14
Цитата:
Автор: r
Как в таком случае человек указывает роботу какой конкретно ЭА ему требуется?

По имени.
Так как каждый созданный ЭА (а точнее, любой законченный осмысленный алгоритм) имеет своё имя.
Так удобнее.
В частности, запускать их на исполнение.
Например, дается команда: запустить Алгоритм такой-то (а точнее, команда даётся такая: ВЫПОЛНИТЬ "Имя").

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

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

Цитата:
Автор: r
Тут возникает вопрос гибкости такого подхода, насколько легко собрать более-менее сложный алгоритм из таких неделимых (элементарных) алгоритмов, а также насколько легко добавить новый элементарный алгоритм (ЭА) конечным пользователем и прицепить его к уже существующим, в нужное место?

По имени.

Я имею ввиду, что любой Элементарный Алгоритм (как вы его назвали, а у меня он называется Универсальный Алгоритм - УА) легко вставляется в любой уже существующий Алгоритм через вызов его по его имени, вместо любой из "заглушек".

Собственно, "заглушки" именно для этого и предназначены: в них либо помещаются конкретные (и непосредственные) значения (в основном это операции присвоения), либо там помещается вызов другого УА. И таким образом Алгоритм надстраивается (наращивается) до любой степени сложности. Но при этом он не теряет своей целостности и законченности (и я бы даже сказал, понятности для человека, который его конструирует).

Я могу продемонстрировать этот подход на уже однажды приведенной мною схеме:


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

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

Пишем (говорим, если есть голосовой ввод команд): Создать процедуру "Дождик". Робот создает новую процедуру (УА) в своей памяти и дает ей имя "Дождик" (имя любой процедуры можно потом всегда поменять). Далее пишем (говорим): Условие 1 (Блок 2) - "Дождь" (подразумевается, что у робота уже установлен датчик дождя, и определен доступ к нему, а если нет - то требуется это определить заранее). Робот заменяет одну из "заглушек" (первое условие в УА) на проверку датчика дождя (и если этот датчик выдает "истину", то это означает, что условие выполнено). Потом пишем (говорим): Блок 3 (или блок 5 - на ваш выбор) "Взять зонтик" (тут тоже подразумевается, что у робота уже установлен захват для зонтика, и заранее запрограммировано поведение для выполнения этого действия, а если нет - то требуется это сделать). Всё - нужный нам Алгоритм создан (так как все остальные блоки в этом УА заменены "заглушками", и они выполняться не будут, а это значит, что у нас в итоге будет работать только простейшее условие "Если - То").

Но как его встроить в уже существующие Алгоритмы (или Алгоритм)?

Очень просто. Либо (если хотите), вызовите на редактирование уже существующий в памяти робота Алгоритм и просмотрите его на предмет наличия в нём незадействованных "заглушек", и оцените, нельзя ли вставить вызов только что созданной нами процедуры "Дождик" в них. Либо (что мне лично кажется более разумным), можно поступить наоборот: вызываем на редактирование алгоритм "Дождик", и вставляем в него (вместо заглушки в блоке 7 - в самом низу) вызов уже существующей у робота процедуры "Выезд на сбор ягод". И тогда робот будет смотреть, идёт ли дождь, потом - брать или не брать зонт, в зависимости от того, что показывает его датчик дождя, а затем в любом случае выедет на сбор ягод.

А если нам не понравится этот вариант, то мы легко можем всё переиграть, и изменить его, переместив вызов той или иной процедуры в другой неиспользованный блок (вместо стоящей там "заглушки").
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 27 авг 16 17:33
Изменено: 27 авг 16 17:40
Цитата:
Автор: TimKruz
Да блин, если в тексте есть КОМАНДЫ, то этот текст не на естественном языке, а на ФОРМАЛЬНОМ, т.е. на языке программирования. Речь идёт о естественных языках - в них никаких прямых команд нет (чаще всего) - команда может быть вычленена из всего текста целиком, а не из каких-то зарезервированных под команды слов.

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

Цитата:
Автор: TimKruz
А какие другие? Все известные мне способы [обучения] сводятся к подражанию.

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

Цитата:
Автор: TimKruz
Направление описывается двумя точками, т.е. вектором. Других способов определить направление не существует: нужно каким-либо способом определить эти две точки.

Для "отзеркаливания" вовсе нет необходимости определять направление (по двум точкам или как-то иначе), важно принять ТАКОЕ ЖЕ направление, что, согласись, сделать гораздо проще.

Цитата:
Автор: TimKruz
Изобретать новый "почти человеческий" ЯП нет смысла. Имеет смысл построение алгоритма, понимающего настоящую естественную речь.

Такой алгоритм написать невозможно (нет такого алгоритма).
Но научить робота (или программу) разговаривать на ЕЯ, я считаю, возможно. Причем, можно сделать так, что этот робот (или программа) будет в какой-то степени "понимать" человека. Но это будет не алгоритм.

Цитата:
Автор: VPolevoj
должна уметь полноценно его понимать, ВЕСЬ, а это невозможно (по многим причинам)
Цитата:
Автор: TimKruz
И по каким же? На мой взгляд, понимание - это ассоциирование образов слов с другими чувственными образами из памяти. Это не так уж сложно реализовать.

Вот как раз это-то и сложно реализовать.

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

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

Но кроме несовпадения чувственных образов есть и другие проблемы, например, разные ценности, Цели, жизненные установки и пр. Не говоря уже о состоянии возможной умственной неполноценности человека по сравнению с этим роботом.
[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Программирование поведения робота без доступа к коду
Добавлено: 28 авг 16 2:07
Изменено: 28 авг 16 2:15
Цитата:
(подразумевается, что у робота уже установлен датчик дождя, и определен доступ к нему, а если нет - то требуется это определить заранее)
(тут тоже подразумевается, что у робота уже установлен захват для зонтика, и заранее запрограммировано поведение для выполнения этого действия, а если нет - то требуется это сделать)

Это не очень-то удобно. Мой способ намного удобнее и универсален: ИИ изначально не знает, как пользоваться модулями, но достаточно подключить модуль к основной программе - и его уже можно использовать, без программирования.

Приведённый пример с точки зрения моей МСУИИ выглядит так: раздражитель "дождь" через модуль-влагорегистратор, слуховой и визуальный модули возбуждает цепочку "образ дождя -> образ действий по использованию зонтика" и модуль-манипулятор берёт и открывает зонтик. При этом если робот уже умеет пользоваться зонтиком, то учить его этому действию не нужно, а если не умеет - можно научить (подвигать конечностями).

Цитата:
на предмет наличия в нём незадействованных "заглушек"

А что, если заглушки кончились? Нагромождать кучу вложенных вызовов - не круто.

Цитата:
а дальше уже можно это список расширить

Вручную. Т.е. изменяя код интеллектуального ядра робота. Это не круто. Я предлагаю способ, при котором изменять код не нужно - достаточно подключить модуль (т.е. скачать и разместить в папке modules, а затем перезапустить процесс ИИ).

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

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

2. Новичка невозможно научить решать задачи, если объяснять только на словах: нужно написать решение на бумаге, и чем подробнее - тем лучше. Сперва новичок будет тупо повторять решение на бумаге, а потом научится делать это в уме. Так что начинается такое обучение всё равно с подражания.

3. Все действия, которые совершаются "в уме", обеспечиваются на самом деле замкнутыми друг на друга ассоциативными цепочками - сигнал из них не выходит на эффекторы, а продолжает крутиться внутри памяти. Но, как и в случае с первым пунктом, без АЦ ничего не получится, а они получаются подражанием. И, я думаю, мыслительный эксперимент - это та же заплатка "стремление к эксперименту", просто действия не выдаются на эффекторы.

Цитата:
Для "отзеркаливания" вовсе нет необходимости определять направление (по двум точкам или как-то иначе), важно принять ТАКОЕ ЖЕ направление, что, согласись, сделать гораздо проще.

Ээээ??? Как можно принять ТАКОЕ ЖЕ направление, если МЫ НЕ ЗНАЕМ, КАКОЕ направление нам нужно принять?!

Цитата:
Но это будет не алгоритм.

Тут можно поспорить, что считать алгоритмом, а что - нет...

Цитата:
обеспечить совпадение чувственных образов у человека и у робота

Я думаю, невозможно найти двух людей, у которых совпадают все чувственные образы. Кто-то любит кошек, а кто-то собак, и для них фраза "милое животное" вызывает совершенно разные образы. Кто-то программист, а кто-то пользователь, и для них фраза "интересная программа" вызывает совершенно разные образы. И так далее.

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

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

А вот инопланетян мы понять скорее всего не сможем, потому что они воспитывались в своём обществе, поэтому у них, действительно, другие образы и другие ценности... Хотя, я думаю, даже с инопланетянами возможно наладить контакт, если составить правильный словарь используемых ими терминов...
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 28 авг 16 4:53
Изменено: 28 авг 16 5:02
Цитата:
Автор: TimKruz
Это не очень-то удобно. Мой способ намного удобнее и универсален.

Приведённый пример с точки зрения моей МСУИИ выглядит так: раздражитель "дождь" через модуль-влагорегистратор, слуховой и визуальный модули возбуждает цепочку "образ дождя -> образ действий по использованию зонтика" и модуль-манипулятор берёт и открывает зонтик. При этом если робот уже умеет пользоваться зонтиком, то учить его этому действию не нужно, а если не умеет - можно научить (подвигать конечностями).

TimKruz, я уже понял преимущества твоего метода, мало того, он давно уже стоит на вооружении современной робототехники. Именно так, к примеру, обучают роботов на конвейерах.

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

Цитата:
Автор: TimKruz
А что, если заглушки кончились? Нагромождать кучу вложенных вызовов - не круто.

Да, есть такое.

Согласен, в конечном счете вся совокупность сформированных подобным образом алгоритмов превращается в нагромождение вложенных вызовов (тут ты прав).

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

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

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

То есть, выигрыш в одном приводит к проигрышу в другом, и - наоборот. Но нужно выбирать, и всегда чем-то приходится жертвовать.

Цитата:
а дальше уже можно это список расширить
Цитата:
Автор: TimKruz
Вручную. Т.е. изменяя код интеллектуального ядра робота. Это не круто. Я предлагаю способ, при котором изменять код не нужно - достаточно подключить модуль (т.е. скачать и разместить в папке modules, а затем перезапустить процесс ИИ).

Не совсем "вручную"...
просто за счет переопределения тех или иных слов-команд. Скажем, есть команда "выполнить". А мы говорим "выполняй". Робот не понимает. Тогда мы переопределяем это слово: говорим, что "выполняй" это тоже самое, что и "выполнить". И вот уже можно говорить (командовать) двумя способами. И т.д. С любым словом-командой. Вплоть до "Валяй", "Go", "Пошёл", "Действуй" и т.д. И таким образом наше общение с роботом еще больше приблизится к естественному разговорному.

Цитата:
Автор: TimKruz
1. Метод проб и ошибок реализуется в моём ядре "заплаткой" по имени "стремление к эксперименту", но она не может работать, если в памяти нет готовых ассоциативных цепочек, которые могут быть созданы только лишь подражанием.

2. Новичка невозможно научить решать задачи, если объяснять только на словах: нужно написать решение на бумаге, и чем подробнее - тем лучше. Сперва новичок будет тупо повторять решение на бумаге, а потом научится делать это в уме. Так что начинается такое обучение всё равно с подражания.

3. Все действия, которые совершаются "в уме", обеспечиваются на самом деле замкнутыми друг на друга ассоциативными цепочками - сигнал из них не выходит на эффекторы, а продолжает крутиться внутри памяти. Но, как и в случае с первым пунктом, без АЦ ничего не получится, а они получаются подражанием. И, я думаю, мыслительный эксперимент - это та же заплатка "стремление к эксперименту", просто действия не выдаются на эффекторы.

Да, я вижу спорность всех этих (своих) положений, но думаю, что для обсуждения этих вопросов требуется выделить отдельную тему.

Истина же, как и всегда, родится вовсе не в спорах, а только за счет практики. Нужно сделать - и посмотреть.

Цитата:
Для "отзеркаливания" важно принять ТАКОЕ ЖЕ направление
Цитата:
Автор: TimKruz
Ээээ??? Как можно принять ТАКОЕ ЖЕ направление, если МЫ НЕ ЗНАЕМ, КАКОЕ направление нам нужно принять?!

Жаль, что ты не понимаешь, как такое можно сделать...

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

Это когда создается ситуация без придания ей необходимой конкретики (скажем, координат, направления, и т.д.), но с заданной Целью, которая разрешается только через ОТНОСИТЕЛЬНОСТЬ. Кстати, твоя идея с "подражанием" - имеет к этому непосредственное отношение.

Подумай.

Цитата:
Но это будет не алгоритм
Цитата:
Автор: TimKruz
Тут можно поспорить, что считать алгоритмом, а что - нет...

Спорить можно.
Но лучше - сделать.
И потом уже обсуждать.

Я говорю "не алгоритм", потому что распознавание речи - это не процесс анализа (и синтеза), а - динамический процесс уравновешивания внутренней постоянно меняющейся Модели Мира и используемых для обозначения внутренних объектов в этой Модели СЛОВ. А поскольку и Слова и Модель постоянно меняются (а иногда меняются еще и сами правила их использования), то поэтому приходится все время менять и Алгоритмы работы с языком, что называется, "на лету". Что делает невозможным использование ОДНОГО Алгоритма для распознавания Языка, а нужно формировать и запускать Динамический процесс по созданию и подбору различных алгоритмов.

Будет ли он сам являться Алгоритмом?
Я не думаю.

Цитата:
... СВОИ чувственные образы, а когда робот будет их слышать, то он будет сопоставлять им СВОИ чувственные образы, и мы друг друга не поймем...
Цитата:
Автор: TimKruz
Эти проблемы решаются просто: робот должен воспитываться и обучаться в нашем, человеческом обществе, как обычный ребёнок. Тогда у него будут правильные образы и общепринятые ценности. Ведь все они формируются не на генетическом уровне, а за счёт обучения - то есть подражания окружающим существам.

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

Это тоже, я так думаю, очень большая тема для отдельного разговора.

Можно ли у существа, у которого совсем другие органы чувств (и строение тела), научить нашему образу жизни, сформировать у него наши ценности, и заложить в его мозг те же ОЩУЩЕНИЯ (чувственные образы), что и у нас? Будем ли мы друг друга понимать? При том, что мы будем пытаться для общения использовать одни и те же слова.
[Ответ][Цитата]
 Стр.2 (27)1  [2]  3  4  5  6  ...  27<< < Пред. | След. > >>