Искусственный интеллект

индекс
244,28

Alan Platform

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

В предыдущих сериях.


.… Дело было в далеком 1956 году (к этому времени уже существовала серия книг Азимова о роботах). В США, в Стэнфордском университете состоялся семинар, на котором и предложили термин Искусственный Интеллект… Сейчас речь идет скорее о «некоторых характеристиках Искусственного Интеллекта», нежели о самом ИИ... [1]

… На основании данных о строении нейронов, клеток нашего мозга, они пытались воссоздать их структуру. Это было за несколько лет, до того самого семинара, где впервые заговорили об ИИ… Скажем прямо, что хотим, чтобы Искусственный Интеллект был максимально приближен к человеческому... [2]

… Создать что-то функционирующее в точности как наш интеллект куда проще, чем изображать из себя бога и с нуля изобретать систему, которая смогла бы с момента запуска автономно (без вмешательства в архитектуру) развиваться… Признаюсь, сначала у меня была идея использовать виртуальный мир, созданный на компьютере в виде трехмерной интерактивной модели... [3]

… Процесс мышления сводится к работе с информацией… Искусственный интеллект – это вопрос умения увидеть нужное и отбросить все лишнее... [4]

… Это я только раньше думал, что возьму толстый справочник по физиологии человека и найду там ответы на все вопросы… На самом деле, на низком уровне между мотивациями и эмоциями существует прямая связь... [5]

… Если мы хотим, чтобы он развивался как человек и думал как человек, то нужно создать для него мир, максимально соответствующий реальному. Иначе мы получим интеллект уровня пришельца с Альфы Центавра… Для этого во время обучения, когда она будет заползать на освещенные области, ее будет «бить током» – это ей очень не понравится... [6]

Немного философии


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

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

Вот я тут заговорил об информации и памяти. Так как все это хозяйство нужно из нашего материального мира перенести в мир цифровой, то неизбежно возникнет вопрос о форме и содержании. В реальном мире в мозг поступает аналоговая информация и к тому же в разнообразных формах. Компьютерная модель так или иначе будет работать с байтами. Соответственно вся внутренняя логика будет ориентирована на работу с байтами. Вопрос в том, что не повлияет ли эта «ориентированность», например, на возможность взаимодействовать с реальным миром, подключив эту модель к телу робота? Или же искусственный мозг навсегда застрянет в своем искусственном мире, который также ориентирован на работу с байтами? Тогда для взаимодействия с ним нам самим придется подключиться к виртуальному миру примерно так, как мы подключаемся к мультиплеерным играм. Это интересный вопрос и я предлагаю вам самим подумать над ним на досуге.

Пока что сосредоточимся на цифровой форме информации и подумаем над интерфейсами мозга. Однозначно у него должны быть вход и выход. Можно, конечно, придумать какие-нибудь хитрые форматы, в которых информация будет поступать в мозг и выходить из него, но это только лишь усилит связанность системы и затруднит добавление новых каналов информации. Универсальным решением в данной ситуации будет простой массив значений с двойной точностью, допустим, от 0 до 1. В таком виде можно представить все, что угодно. Если это запах, то значения будут говорить об интенсивности различных оттенков этого запаха. Если это зрение, то о величине освещенности, дальности, цвете — зависит от сложности зрения. Осязание — интенсивность для различных зон чувствительности и т. д. Исходящая информация также легко интерпретируется — в значениях закодированы, допустим, импульсы вращения костей в суставах. Вообще то, что информацию можно легко интерпретировать очень важно. Это очень поможет, когда мы захотим сделать дамп мозга и понять, о чем он думал в тот момент.

Немного практики


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

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

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

var apple = new Component(new PropertySetInfo {
  Name = "Circle",
  OperatorName = "Some2DLayout",
  Properties = new PropertyInfo[] {
    new PropertyInfo { Name = "Radius", Value = 0.5 },
    new PropertyInfo { Name = "CenterX", Value = 0.0 },
    new PropertyInfo { Name = "CenterY", Value = 0.0 }
  }}, new PropertySetInfo {
  Name = "RGB",
  OperatorName = "ColorOperator",
  Properties = new PropertyInfo[] {
    new PropertyInfo { Name = "Red", Value = 1.0 },
    new PropertyInfo { Name = "Green", Value = 0.0 },
    new PropertyInfo { Name = "Blue", Value = 0.0 }
}});


* This source code was highlighted with Source Code Highlighter.

Этим кодом мы создали яблоко… Ладно, плоскую модель яблока — круг красного цвета. Что можно сказать интересного, глядя на этот код? Во-первый, не видно никакой реализации работы указанных свойств. Компонент является лишь контейнером, который содержит названия своих свойств и их значений. Он нужен лишь как абстракция для различных объектов. Во-вторых пока не понятно, что означает свойство OperatorName. Операторы занимаются тем, что управляют свойствами. В одной модели их может быть несколько, по одному на тип информации. Например, в приведенном коде Some2DLayout отвечает за расположение в пространстве и размеры, а ColorOperator — за информацию о цвете. Вот, как может выглядеть код ColorOperator:

[PropertySet("RGB", "Red", "Green", "Blue")]
[PropertySet("GrayScale", "Value")]
public class ColorOperator : Operator { }


* This source code was highlighted with Source Code Highlighter.

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

Итак, что делает оператор? Сперва он ищет, какие объекты объявили, что содержат его свойства. Затем он для каждого такого свойства создает у себя внутри объект PropertyData, который и будет хранить реальную информацию о свойстве. Это также сделано для удобства, чтобы все свойства всех объектов с одним типом информации были в одном месте — так ими проще управлять.

Следующий фрагмент кода:

var root = new Component();
root.Add(apple, plate, table);
root.Add(new ColorOperator, new Some3DOperator());


* This source code was highlighted with Source Code Highlighter.

Как видим, компонент является не только контейнером для свойств, но также и для других компонентов и операторов. У самого компонента root нет каких-то особых функций — он просто объединяет все элементы модели мира в одно дерево.

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

Сенсоры — это аналоги органов чувств, а действия — своеобразные функции организма, которые он может выполнять над объектами. Первые будут преобразовывать свойства объектов в массив значений double, который пойдет в мозг, а вторые — использовать информацию, поступившую от мозга (double[]) для изменения значений свойств объектов. Так как каждый сенсор и действие работают с информацией определенного типа, то они должны быть связаны с одним из операторов. Следующий фрагмент кода демонстрирует, как может выглядеть реализация сенсора.

[AssociatedOperator("ColorOperator")]
[ChannelsCount(3)]
public class ColorSensor : Sensor
{
  public override void Update(IEnumerable<PropertyData> data)
  {
    // Определяем, какие из свойств находятся в поле зрения сенсора
    // Допустим, что он видит только то, что находится у него под ногами.
    var layout = this.Parant.Parant.Layout; // будет ссылаться на Some2DLayout
    
    // Выбираем только те свойства, которые принадлежат объектам,
    // пересекающимся с самим организмом.
    VisibleProperties = data
      .Where(x => layout.GetBounds(x.ComponentId)
        .Intersect(layout.GetBounds(this.Parent.Id)))
      .ToArray();
  }
  
  public override void Transmit()
  {
    // Так как под ногами может быть несколько объектов, а разрешение у сенсора
    // не ахти какое, то придется найти среднее значение для каждого канала.
    double red = 0;
    double green = 0;
    double blue = 0;
    
    var redValues = VisibleProperties
      .Where(p => p.PropertyName == "Red" || p.PropertyName == "Value")
      .ToArray();
    if (redValues != null)
      red = redValues.Aggregate((sum, val) => sum + val) / redValues.Length;
    
    // ... (аналогично для green и blue)
    
    double[] data = { red, green, blue };
    ConnectedBrain.Update(this.Name, data);
  }
}


* This source code was highlighted with Source Code Highlighter.

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

Первый метод Update нужен для того, чтобы из множества свойств оператора выбрать только те, которые должны находиться в «поле зрения» сенсора. Этот метод переодически вызывается оператором, когда один из объектов перемещается в пространстве. Второй метод Transmit преобразует информацию из свойств в некую универсальную форму и передает результат в мозг. Он вызывается оператором каждый раз, когда изменяется значение одного из свойств, видимых сенсору. Действия реализуются схожим образом, только вместо метода Transmit у них есть DoAction, который производит обратную операцию — поступившие данные double[] datа используются для изменения VisibleProperties. Именно на этом этапе и реализуются законы мира, которые разрешают или запрещают изменения свойств в определенных ситуациях.

В представленном выше коде есть одна интересная строчка: «var layout = this.Parant.Parant.Layout;». Насчет двойного обращения к родителю — это должно быть понятно, если вспомнить, что все элементы объеденены в дерево. Первый раз мы получим ссылку на организм, к которому принадлежит сенсор, а во второй — на объект root, к которому был добавлен организм. А вот про Layouts я еще ничего не сказал. Исправляюсь.

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

[PropertySet("Circle", "Radius", "CenterX", "CenterY")]
[PropertySet("Rectangle", "Left", "Top", "Right", "Bottom")]
public class Some2DLayout : Layout
{
  const int radius = 0;
  const int centerX = 1;
  const int centerY = 2;
  const int left = 0;
  const int top = 1;
  const int right = 2;
  const int bottom = 3;
  
  public TestLayout()
  {
    /* Для каждого набора свойств добавляем метод, вычисляющий
     * координаты центра объекта по этим свойствам.
     * Здесь р - это массив со значениями свойств из одного набора,
     * а индексы - это порядковые номера свойств.
     */
    this.AddCenterMethod("Circle", p => new Center(p[centerX], p[centerY]));
    this.AddCenterMethod("Rectangle", p => new Center(
      (p[left] + p[right]) / 2,
      (p[top] + p[bottom]) / 2
    );
    
    // Аналогично добавляем методы для вычисления границ объекта.
    // В данном случае границами будет описанный прямоугольник.
    this.AddBoundsMethod("Circle", p => new Bounds(
      p[centerX] - p[padius],
      p[centerY] - p[radius],
      p[centerX] + p[radius],
      p[centerY] + p[radius]
    );
    this.AddBoundsMethod("Rectangle", p => new Bounds(p[left], p[top], p[right], p[bottom]));
  }
}


* This source code was highlighted with Source Code Highlighter.

Атрибуты — в точности как у оператора, константы — чтобы было проще читать следующий далее код. В конструкторе Layout обязательно нужно указать методы, по которым будут вычисляться координаты центра и границ для каждого набора свойств. Если выбрать достаточно хитрые наборы, для которых эти методы будут одинаковы, то можно добавить только один с именем «Default» в качестве имени набора свойств.

Итак, методы AddCenterMethod принимают два аргумента — имя набора свойств и делегат. Делегат имеет вид: Func<double[], Center> method. На вход он ожидает массив, состоящий из значений всех свойств набора, а на выходе должны быть координаты центра (Center) или границ (Bounds). После этого можно в любой момент времени получить данные координаты, вызвав соответствующие методы Layout: GetCenter и GetBounds, и передать им id компонента, расположение которого вас интересует.

Что это было?


Это были некоторые из возможностей Alan Platform. Большинство из них уже работает, некоторые ожидают, пока их кто-нибудь реализует. За кадром оказалось моделирование внутреннего времени системы, так как обоснование необходимости его реализации заняло бы довольно много места и времени. Чтобы как-то собрать воедино всю эту информацию, я опишу, что из себя будет представлять работа с этой библиотекой. Сначала это разработка библиотек расширений. Создание различных операторов, Layouts, сенсоров и действий — всего, что отвечает за работу с информацией. Затем — конструирование с помощь этого различных объектов и организмов и объединение их в одну замкнутую систему — искусственное окружение. Последнее можно осуществлять с помощь XML (частично реализовано), а в будущем можно добавить какой-нибудь GUI для этого.

Данная платформа принципиально не содержит никакого GUI. Она лишь позволяет формировать различные деревья из компонентов, операторов и т. п… Предполагается, что взаимодействие с системой должно осуществляться в рамках ее законов. Для этого можно сконструировать отдельный организм, которым будет управлять не модель мозга, а пользователь. Это будет что-то вроде модели бога. Его сенсоры могут охватить весь мир целиком и преобразовать информацию о свойствах объектов для вывода ее на экран. Аналогично с действиями — они могут «дотянуться» до любого объекта и изменить его свойства. Действия также могут быть подключены к интерфейсу. При этом данный организм будет иметь нулевые размеры и существовать везде и одновременно нигде. Организмы, заселяющие искусственный мир смогут лишь догадываться о его существовании по косвенным признакам: спонтанному исчезновению стен, появлению еды, ударам молний…

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

Вот здесь можно посмотреть исходники, все пока что разбросано по различным бранчам. Внутренностей мозга еще нет. Наверное это не дотягивает даже на Technical Preview, но проследить некоторые идеи уже можно. Если кому-то данный проект покажется интересным и возникнет желание принять в нем участие — прожалуйста, напишите мне в личку. Если все будет хорошо, то в самом ближайшем будущем будет материал по реализации одной из особенностей мозга — формирование и распознавание образов.
+16
9 апреля 2010, 20:53
27

комментарии (60)

–1
Horus20 #
Очень интересно, отдельное спасибо за простой и понятный язык…

Нужно реализовать две сущности собаку и кота, и попробовать поставить вопрос ребром…
who is who?
^)

Удачи, буду следить за обновлениями…
0
OpenMinded #
Спасибо. Собаки и кошки будут не сразу — для них нужно моделировать довольно сложный мир, одно их зрение чего стоит! А начать я планировал с планарии. Моделировать ванночку с беспозвоночным куда проще. Хотя подразумевается, что модель мозга будет одна, так что это уже не совсем планария, а что-то вроде человека с ооочень ограниченными возможностями и, соответственно, потенциалом.
0
Horus20 #
хм, я правильно вас понял?.. модель мозга будет одна на все организмы, но чем сложнее организм тем сложнее будет мозг?
Таким образом планируете двигаться, как и в реальном мире от простого к сложному да?
0
OpenMinded #
Модель одна и она определяет лишь законы, по которым накапливается и используется опыт. Эти законы едины для всех. Чем больше входящих и исходящих каналов информации будет у модели мозга и чем сложнее будет сама модель мира, тем сложнее будет накопленный опыт. Следовательно тем умнее будет организм.

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

А усложняться будет сам мир, а также сенсоры и действия. Мозг просто будет настраиваться и калиброваться, чтобы его поведение соответствовало прототипу.
0
biokimelito #
Довольно интересно. Часто думаю о чем то подобном. В принципе из таких компонентов возможно воссоздать мозг организма, но нужно придумать класс мотивации для них, иначе они не захотят развиваться.

В игре sims кстати было что то подобное- там тоже все объекты содержали определенный набор свойств, и симы взаимодействовали с ними считывая эти свойства.
0
biokimelito #
Всмысле у них тоже мозг состоял из нескольких отделов нейронных сетей, которые обучались взаимодействуя с окружением.
0
OpenMinded #
Мозг не будет создаваться их этих компонентов. Он сам является одним из компонентов:
var organism = new Client();
organism.Add(colorSensor, moveAction, new Brain());
root.Add(organism);
Мотивация будет основана на эмоциональной оценке поступающей информации (почитайте статью, указанную под номером [5] в самом начале). При планировании действия организм будет вспоминать, какая информация поступала сразу после совершения подобного действия в прошлом, а также какие эмоции вызвала та информация. Таким образом будет выбрано то действие, которое вызвало положительные эмоции. Сама эмоциональна оценка частично предопределена (инстинкты), а все остальное оценивается по-умолчанию — отрицательно. Все новые и неизвестные раздражители всегда отрицательны. Но через некоторое время некоторые из них могут стать нейтральными а некоторые — положительными.
0
biokimelito #
Почитал, кажеться понял немного, спасибо за статьи.
Только под мотивацией я имел ввиду немного другое: при такой эмоциональной оценке система будет пытаться обрабатывать только то, на что у нее положительная оценка (в принципе в реальном мире так оно и есть, те же люди будут идти и точки А в точку Б одним и тем же маршрутом каждый день), и возможно только принудительное обучение (навязыванием чего то нового). Но у живых организмов есть еще интерес к изучению внешнего мира, стремление к самосовершенствованию. Вот как раз то что его вызывает и есть такая мотивация.
0
OpenMinded #
Если вы имеете в виду взрослых людей, то самосовершенствование — это в принципе такое же действие, как и все остальные, только оно обобщенное. Например вы столкнулись с проблемной ситуацией и не можете вспомнить конкретного решения этой проблемы. Тогда вы станете искать более общие решения. Например посмотреть, как с ней справляются другие люди, почитать о ней, спросить и тому подобное. Это такие же осознанные действия, только более сложные и обобщенные, которые являются удачной комбинацией из некоторых более простых действий. Со временем человек учится запоминать и использовать такие удачные комбинации действий.

Если вы имели в виду маленького ребенка, то там несколько иная ситуация. У него пока что слишком мало знаний об окружающем мире, так что в проблемной ситуации он не знает, какое действие ему использовать, поэтому он начинает использовать все известные ему действия — стучит предметом по столу, засовывает его в нос, бросает на пол. В результате этого он получает опыт и развивается.
0
biokimelito #
Нет, я имел ввиду получение знаний не вызваных внешним раздражителем. Или стремление получить ответы на вопросы у которых нет ответов. В чем собственно и состоит история человеческого развития. У маленьких детей это особо присутствует.
0
OpenMinded #
Раздражитель всегда есть. Попробуйте представить конкретную ситуацию, одну из тех, о которых вы говорите — в ней обязательно будет что-то, что запустит процесс поиска решения. Пускай мелочь и абсолютно не связанная с результатом поиска, но она есть.
0
biokimelito #
Вот это именно то что я имел ввиду под словом «мотивация».
Это тот раздражитель который заставляет меня думать над устройством своего мозга или закачивать новый альбом Ryoji Ikeda. Только этот раздражитель не внешний, а внутренний — «интерес». Это никак не связано с вопросом моего выживания или еще чего либо внешнего.
0
OpenMinded #
В таком случае вам доставляет удовольствие сам процесс, поэтому вы к нему и стремитесь.
0
biokimelito #
Никто и не говорил что это не доставляет мне удовольствия :)
Но если бы дело было только в нем, я скорее всего сидел бы где то на лавке с пивом, обсуждая с другими предствителями такой же модели нейронной сети что и у меня, запрограмированными по принципу — «Сама эмоциональна оценка частично предопределена (инстинкты), а все остальное оценивается по-умолчанию — отрицательно» как бы поскорее сделать действия «которые вызвали положительные эмоции в прошлом». (извините что немного переделал вашу цитату). Ну это грубый пример который пришел первым в голову.

Представте себе выставку роботов, на ней 2 почти одинаковых робота, разница только в небольшой «функции» в голове одного из них.
Им дают задания, в случае правильного действия в мозг поступает сигнал удовольствия, не правильного — током бьют.
Они соответственно выполняют задания, им дают новые, всё идет хорошо, роботы умные и очень, очень довольные.
Но у того, у которого есть та дополнительная «функция» возникает в голове нечто, что заставляет его покинуть стенд, и пойти изучать обстановку, подходить к людям, пытаться взаимодействовать с ними, с другими роботами, искать своего конструктора и спрашивать у него зачем тот его создал.
Вполне возможно я совсем не понимаю суть вашей теории, но как вы думаете, на какого робота похоже то что вы создаете, и на какого человек.
0
OpenMinded #
Через какое-то время однотипный положительный раздражитель может вызывать все меньше и меньше эмоций — это раздражитель начинает надоедать, наступает пресыщение. Далее это может перейти даже в усталость, так что желание сменить деятельность вполне естественное.
–1
m00t #
В одной из ранних заметок вы упоминали С. Может быть действительно лучше разрабатывать такую платформу на более платформонезависимом (сорри за тавтологию) языке?
0
OpenMinded #
Может быть и лучше. Но лично для меня это бы создавало дополнительные трудности.
–2
hardex #
Чем вам C# не платформонезависимый?
0
OpenMinded #
Если в Mono уже есть Linq to Objects и Linq to XML, то должно все работать. Правда визуализация планируется на WPF (Visual layer), которого, насколько мне известно там нет и не будет.
0
hardex #
И чем только этот WPF всем сподобился…
0
OpenMinded #
Он универсален. На нем можно делать как простые интерфейсы со стандартными контролами, так и более сложные визуализации вместе с анимацией. И все это делается на одной платформе, одними средствами. Если не нужна вся мощь DirectX, но хочется сделать интерфейс со сложным представлением информации, то WPF, по-моему, подходит идеально.
0
Fduch #
В Mono есть Silverlight и WPF.
0
Grox #
Мне очень нравится. Сам думал об этих же принципах. Удачи в развитии, буду следить за ходом проекта.
0
hardex #
Очень интересно. Буду ждать обновлений (:
+1
vktechno #
Если честно — статья вообще ни о чем. Наиболее ценное — раздел «Немного философии». Рекомендую вам почитать про нечеткую логику/fuzzy logic, много нового и интересного для себя откроете.

Про Alan Platform. В общем и целом, это попытка статически типизированный C# превратить в динамически типизированный. Не спорю, моделировать окружающий мир гораздо удобнее на языках с динамической типизацией, но зачем изобретать свой велосипед, когда уже есть python, c# 4.0 и прочее?
0
OpenMinded #
Интересный взгляд. Я даже не думал смотреть на это, как на попытку сделать что-то с языком. Просто возникла задача и сформировалось решение на том языке, на котором я думаю. Если бы я был питонистом, то, вероятно, решение было бы другим. Сам язык C# мне не доставляет каких-то особых трудностей в процессе реализации данного проекта. И я не думаю, что основная логика и идеи проекта скрыты за «попытками статически типизированный С# превратить в динамически типизированный».
+1
vktechno #
Это-то понятно, что основной движущей силой разработки было не желание сделать с языком что-нибудь эдакое =)

Дело в том, что основная проблема ИИ есть оперирование доступными знаниями, которые могут быть выражены в виде следствий если-то (характерно для экспертных систем), энциклопедическими знаниями, или же просто наборами смыслов слов. Последнее широко используется в экспериментальных системах, построенных на основе лингвистических моделей типа смысл-текст, например, Preference Semantic System или же MARGE. Первая появилась в результате работ Уилкса, вторая — Шенка.

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

Пытаться описывать мир при помощи формальных методов путём разбиения объектов на классы, присвоение им определенных свойств можно. Однако в процессе работы неизбежно будут выделяться такие наборы свойств, которые будут иметь смысл в одном случае и бесполезны в другом. А для того, чтобы создаваемая модель мира была бы полезна для искусственного интелекта, она должна включать в себя просто неимоверное количество различных свойств объктов и связей между ними.
Поэтому стоит ли выполнять эту титаническую работу, когда лучше сосредоточиться на методах обучения и самообучения, работе со знаниями и способе представления знаний, который будет удобен как раз для этих методов?
0
OpenMinded #
Я вроде бы написал, что внутри мозга никаких сложных объектов для представления информации не будет. Все будет представляться в виде некоторого «уровня сигнала» — значения, которое просто привязано к какому-то каналу (входящему, исходящему или какому-то внутреннему). В памяти также будут храниться только эти значения, связанные с каналами.

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

На базе этих значений и будут формироваться образы (часто встречающиеся паттерны значение) и временные последовательности (действие-реакция, реакция-следующая реакция).
0
vktechno #
Тогда ответьте хотя бы для себя, чем описанный процесс будет отличаться от обработки сигналов в каком-либо DSP?
0
OpenMinded #
В каком-то смысле это и есть DSP. Вся соль в том, как связывать поступающую информацию с той, что уже находится в памяти, чтобы потом можно было ее использовать, как накопленный опыт.
0
DIDJER #
«Процесс мышления сводится к работе с информацией»

Процесс мышления сопровождается работой с информацией.
0
OpenMinded #
Не могли бы вы пояснить, привести примеры?
0
DIDJER #
Что такое мышление? что такое вообще мыслительный процесс? В какой момент мы «включаем» этот процесс?

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

Исходя из размышлений я сделал вывод, что обработка информации ( опыта ) это процесс мышления. Самое важное на мой взгляд это рассмотреть процесс переживания нового.
0
OpenMinded #
Вы уходите в философию. Не то, чтобы я с вами не согласен, просто философия это один из взглядов на проблему мышления. В реализации такой взгляд мало чем полезен. Нужно анализировать это проблему, разделить процесс мышления на более элементарные составляющие и посмотреть, какие из них являются проявлением органической природы нашего мозга, а какие являются сутью и описывают все на более высоком уровне. После выделения основных особенностей мышления можно приступать к их интерпретации и реализации. Так вот, все, что я выделил так или иначе сводится к работе с информацией. Суть в накоплении и использовании опыта.
0
DIDJER #
Хм, если не уходить в философию, то на данном этапе мы никуда пока не продвинулись, та как мы ещё точно не знаем, как мы приобретаем новый опыт.

Что программировать?
0
OpenMinded #
Я вряд ли бы стал тратить столько времени на идею и реализацию, если бы не представлял, как работает мышление.
0
DIDJER #
Подумайте…

Я представляю как работает мышление. Вы представляете себе время?
0
OpenMinded #
Простите, но для меня ваше высказывание лишено смысловой цельности. Я представляю, как моделировать мышление и я представляю, как моделировать время, также я представляю, как объединить эти модели в одну систему.
0
DIDJER #
Вы мышлением пытаетесь определить работу мышления. Спросите у самого себя, кто я. Что вы себе ответите?
0
OpenMinded #
Что вы пытаетесь мне доказать? Что невозможно создать мыслящую машину или то, что для этого нужно ответить на вопрос «кто я». Я не согласен ни с тем, ни с другим. Для меня философский этап давно завершен, я нашел ответы на все философские вопросы, которые мешали создать данную модель. Советую и вам того же.
0
DIDJER #
Нет нет нет, я просто беседую. Доказать можно лишь факт в правдивости которого есть сомнения, я лишь пытаюсь разобраться вместе с вами в сути того, что есть мышление.

В какой момент вы приобретаете новый опыт?
0
OpenMinded #
Вся поступающая информация — потенциальный опыт. Если она дублирует уже существующую — это закрепляет опыт, если она противоречит существующей — это корректирует опыт, если она абсолютно новая — она формирует новый опыт.
0
DIDJER #
Как от этого оттолкнутся? чем отличается от действующих экспертных систем? Повторяю я заинтересован в вопросе ИИ.
0
DIDJER #
Повторяю, компьютеры уже умеют накапливать и обрабатывать информацию, но ИИ ещё нет. Важно понять, что такое переживание и можно ли его вызвать искусственно и как это сделать.
0
DIDJER #
Хочу вынести своё мнение:

Стороны и качества приобретённые понятия в процессе познания окружающего мира.
0
OpenMinded #
Наверное каждый понимает что-то свое под «сторонами и качествами», но так или иначе это сводится к приобретенному опыту, который влияет на решения которые мы принимаем. А опыт — это и есть упорядоченная и связанная информация.
0
DIDJER #
Опыт это результат, компьютеры уже умеют накапливать опыт, а вот приобретать его в процессе переживания нового ещё нет.
0
OpenMinded #
Так полный спектр операций с опытом и есть мышление. Вся проблема в том, как хранить поступающую информацию, чтобы ее потом можно было эффективно использовать. При этом важно, что абсолютно весь опыт является приобретенным, а не «зашитым».
0
DIDJER #
Хм, вот скажем у вас на столе лежит флешка с данными. Эти данные вы ещё не видели, но вы знаете, что они там есть. Можно ли считать, что на данные на носителе информации, записанные руками человека являются опытом, но только другого человека?

Это я там пытался объяснить, что «зашитый» то же возможен.
0
OpenMinded #
Если флешка была подключена к мозгу, то есть вероятность того, что она будет содержать накопленный опыт, иначе это просто информация.

Интеллект — это совокупность опыта и средств для работы с этим опытом. Одно без другого не является интеллектом. При этом программировать нужно только средства, а опыт программа сможет накопить сама.
0
dmitriko #
еще чуть чуть у Вас будет новая Java platform. ;)

или Zope

позвольте пояснить свою мысль подробней.

добавте в Вашу ясную и заслуживающую внимание модель

конкурентрость и факт постоянно меняющегося мира

и вся выразительность пропадет.

яблоко БЫЛО на тарелке в определенный момент времени.

может быть.
0
OpenMinded #
Мир статичен только тогда, когда с ним никто не взаимодействует. Любое успешное действие изменяет состояние мира. При этом изменение может быть не мгновенным, а растянутым во времени. Внутреннее время системы реализовано в виде тактов. Действие может запланировать изменение свойства на 0.3 на следующем такте, на 0.2 на втором такте и на 0.1 на третьем такте. Эта схема дает полезную возможность корректно замедлять и вовсе останавливать время системы.
0
dmitriko #
то есть можно будет узнать свойство объекта на опрделенный момент времени?
0
OpenMinded #
Не совсем. Можно будет узнать все запланированные изменения свойства (через один такт, через два, три ...).
0
dmitriko #
Нелья будет узнать-догодаться кто откусил яблоко.

Как давно.

Важно ли это для ИИ?

0
OpenMinded #
Вы наверное меня не поняли. Узнать запланированные изменения свойств мозг не сможет. Это сможет лишь пользователь. Мозг может узнать лишь то, что ему присылают органы чувств — актуальные значения свойств в пределах области видимости и чувствительности.
0
dmitriko #
да, это определенно слишком сложно для меня.

пойду наслаждаться настоящими яблоками :)
0
Siddthartha #
к практике вы перешли странно. я вообще в аланплатформ не вижу смысла.
0
OpenMinded #
Так я и написал, что можно реализовать один класс, который будет взаимодействовать с мозгом — отсылать и принимать данные (что-то подобное, кстати и так есть — LightOperator в ветке Brain). Но это поможет только для тестирования отдельных функций мозга. А вот для того, чтобы мозг смог получить реально полезный опыт, нужно смоделировать более сложный мир. Для упрощения этого процесса и создана платформа. Она позволяет конструировать мир в контексте его объектов и их свойств, и в то же время разрабатывать законы мира в контексте преобразований информации.
0
dmitriko #
Мне, видившему несколько крупных живых ООП проектов,

с точки зрения разработчика и системного администратора,

очень печально видеть Ваш светлый ум

в кандалах ООП, о, да еще С# ;)

Пожалуйста, посмотрите здесь blip.tv/file/812787

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