Введение в нейронные сети. 7 рассказов о математике

Александр Титов (С.-Петербург)

Рассказ 4-й. Порождение зверя

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

Покажите друг другу своих зверей.

Классные получились звери?

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

Вот по этим:

  1. Изменение количественной характеристики (очень большая мышь, семь хвостов)
  2. Удаление свойства (совсем без хвоста)
  3. Перенесение свойства от другого зверя (ковер-самолет)

Теперь, однако, придумывайте опровержения. Число правил можно и уменьшить, считая (2) частным случаем правила (1) (ноль хвостов:). Что же, наша фантазия имеет такие маленькие возможности?

Потом разберемся. Сейчас поиграем с тем, что нам показано, и именно с ФРЕЙМОВОЙ МОДЕЛЬЮ знаний. Ее придумал психолог и лингвист Марвин Минский в 40-х годах 20 века. Это очень старая, забавная модель.

Фрагмент моей статьи 80-х годов (для компьютерщиков):

В чем суть фреймовой модели? Во-первых, предполагается, что все знание субьекта состоит из относительно целостных фрагментов — фреймов. Frame по-английски и обозначает «фрагмент», или «рамка» Относительная целостность означает, что существуют такие отношения между фреймами, для рассмотрения которых не нужно знать внутреннюю структуру фрейма. Образно говоря, применительно к некоторым ситуациям внутреннее содержимое фрейма как бы заключено в рамку, или ИНКАПСУЛИРОВАНО. Аналогами фрейма в современных языках программирования являются: пакет в языке Ada, класс в языке C++, обьект в Borand Pascal, кластер в CLU и другие.

Фреймы могут быть вложенными. Внутреннее содержимое фрейма – это снова фреймы и отношения между ними. Возможна ситуация, при которой какие-то компоненты не определены, однако на их месте оставлены пустые места, на которые выведены все нужные связи от других компонентов. Эти пустые места Минский назвал СЛОТАМИ, т.е. тем же термином, которым сейчас обозначаются разъемы для вставки плат в компьютере.

CAT

Например, кот может быть рассмотрен как целостный обьект, т.е. при наблюдении за общим поведением дворовых котов может быть несущественно, как ведут себя усы в каждом отдельном коте. Кроме усов, в коте определены компоненты «имя» и «цвет», но эти компоненты не заполнены. Кот вообще (прототип кота) — это кот без имени и без цвета. Мой кот (экземпляр кота) — это кот с именем=Мурчик и цветом=черный. Эта процедура называется НАСЛЕДОВАНИЕМ. Могут быть определены имя и цвет по умолчанию, тогда все неуточненные коты будут черными Бегемотами. В языке C++ прототип кота — это экземпляр базового класса, а мой кот — экземпляр производного класса. Различие между прототипами и экземплярами является относительным — практически каждый фрейм может быть и экземпляром, и прототипом безотносительно к наличию или отсутствию слотов. Просто некоторые фреймы в основном используются только как прототипы. Например, приятная эмоция — это экземпляр фрейма «Эмоция», а чувство приятной сытости — экземпляр фрейма «приятная эмоция». Возможно замещение одних компонентов фрейма другими, в том числе путем сцепления фреймов за счет общих компонент. Замещаться может не только пустой слот, но также и заполненный, но при этом заменяющий объект должен быть допустимым для замещения, т.е «подходить» к этому слоту. Можно вообразить себе такой экземпляр моего Мурчика, у которого хвост=петух.хвост (хвост петуха вроде бы можно в первом приближении приставить к коту), но кот, в котором хвост=чувство приятной сытости, запрещен. Хотя это частный случай наследования, этот процесс имеет специальное имя «ПОЛИМОРФИЗМ».

Обратите внимание на то, как сильна фреймовая модель: Вам вряд ли удастся придумать фантастическое животное так, чтобы способ его порождения не соответствовал фреймовой модели.

Фреймовую модель очень просто реализовать, если все определено заранее, и очень сложно — если фреймы динамически меняются в процессе выполнения программы. Процедура модификации фреймов путем заполнения слотов или замены одних компонент другими называется также СВЯЗЫВАНИЕМ. Если фреймовая модель применяется только на этапе проектирования программы для упорядочивания знаний программиста, требуемых для этого проектирования, а в готовой, оттранслированной программе уже никаких фреймов нет или они не меняются, то это РАННЕЕ связывание. Если же само исполнение программы представляет собой функционирование фреймовой модели предметной области, то может понадобиться ПОЗДНЕЕ связывание. Вся история развития обьектно-ориентированных языков программирования последних лет, и особенно языка C++, представляет собой судорожное метание между ранним и поздним связыванием в погоне за возможностью эффективной реализации – совсем так, как убегающий от собаки кот ищет дырку в заборе.

Современное примечание:

Профессионалы прекрасно обходятся без всей той хрени, и вышеприведенное описание можно рассматривать как светлое воспоминание о советской лженауке. И буржуазной тоже :) Может быть, кто-то даже помнит книги Гради Буча….

Посмеемся над нашим прошлым, но немного подумаем: а может быть, в нашей психике все же есть место, занятое фреймовой моделью?

Задачка про зверей, это будет такая математическая разминка перед следующей темой о психике.

Из переписки в блогах http://blogs.mail.ru/community/prosa_pishemsami

Серж Мате:

Вот так прямо!?

Зверь был красив! Сине-красная и волосато-корнями покрытая кожа хит зверя. Одна особенность: ноги зверя всегда под соусом и с остатками хвоста.

Я отвечаю:

Спасибо. Вот оператор описания Вашего зверя в нотации Э.Х.Тыугу (эстонский ученый):

MateAnimal: GeneralAnimal with

beauty, skin.color=0.5*Colors.Red+0.5*Colors.Blue, skin.hairs=GeneralTree.roots, takepartin=hits, foot.position=dish7.foot.position, tail.load=GeneralPrograms.PartlyDestroyer;

Здесь load — та программа, которая выполняется первым делом при загрузке объекта в работу (инициализатор). Он частично разрушает хвост. Dish7 — это то блюдо (пусть под номером 7), которое вы держали перед глазами (холодец чтоль какой-то вкусный….)

Я сознаю, что skin.hairs=GeneralTree.roots не совсем «волосато-корнями покрытая».

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

Впрочем, можно и «волосато-покрытую» запихать в объектную модель, если в каком-то прототипе определить покрытие.стиль и т. п.

jfdghjhthit45