Книга написана доступным языком и проиллюстрирована целым рядом худо­жественных примеров из жизни людей, стран и цивилизаций

Вид материалаКнига

Содержание


Н.Ф. Федоров
Таким образом, если требуется эффективно решать определенный класс задач, необходимо создание среды с соответствующей этому клас
Иль чума меня подцепит.
Таким образом, если первоначально исходная структура использовалась для того. чтобы сгенерировать
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   34

Н.Ф. Федоров


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

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

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

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

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

Зададимся вопросом: «Что могут значить для разработчика программного комплекса такие понятия, как "избыточность кода микропроцессора", "избыточность памяти", "избыточность функциональных возможностей СУБД" и даже— "избыточность языка программирования?» Если этот вопрос задать программисту, то он скорее всего ответит так: «Избыточность функциональных возможностей позволяет решать поставленные задачи гораздо быстрее! Быстрее по той причине, что не надо придумывать приемлемый алгоритм, так как годится любой из определенного множества равносильных алгоритмов — была бы соответствующая память и производительность у ЭВМ. Быстрее еще и потому, что всегда существует несколько альтернативных вариантов, а найти хотя бы один способ из нескольких всегда проще, чем искать нечто уникальное, оптимальное или неповторимое и незнакомое».

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

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

Точно также обстоят дела при решении производственных и социальных задач.

Когда целые города населены физиками — любые физические задачи решаются мгновенно.

Когда города заселены бандитами и ворами — любые задачи по разграблению решаются мгновенно, намного быстрее, чем если бы там жили физики.

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

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

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

Ответом на поставленный вопрос, наверное, может стать конкретный алгоритм по "вырезанию". Именно о нем и пойдет речь в дальнейшем.

1.1. Исчисление высказываний и гибель формул

Иль чума меня подцепит.

Иль мороз окостенит,

Иль мне в лоб шлагбаум влепит

Непроворный инвалид.
А.С.Пушкии

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

Как проще придти к законам Ньютона — то ли так, как это сделал сам Ньютон, то ли упростив выражения Эйнштейна?

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

Гибель формулы — это такое же новое знание, как и ее рождение. Это частичный отказ от одной модели мира и переход к другой.

Но знание может быть знанием только по отношению к тому, кто его понимает. Любое знание становится знанием только в рамках определенной модели. Например, формулы Эйнштейна для людоедок-Эллочек в большей части невидимы. Да и не только формулы Эйнштейна обладают свойством невидимости. Мир полон подобными объектами. И проблема построения "невидимых" объектов не такая уж и сложная, как кажется на первый взгляд: самолеты-невидимки, человеки-невидимки, понятия-невидимки, идеи-невидимки! И порой горе тому, кто набредет на них и узреет.

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

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

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

Очень образно на эту тему писал Рам Дасс:

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

Но при этом все модели, все "эти индивидуальные отличия не так уж и важны. Они просто вроде рубашек, курток и свитеров. "Приятную вы личность надели. Где вы ее достали?". "Я приобрел ее в Гештальт-терапии. Крик моды".

Но чем совершеннее становятся расходящиеся от общего узла модели мира, тем сложнее между ними построить мост их носителям. "Как-то я навестил брата в психиатричке. Я сидел в комнате с ним и с его психиатром. Он считал себя Христом, а психиатр считал себя психиатром, и оба были убеждены, что другой— ненормальный" (Р.Дасс).

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

Покажем как это бывает.

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



х

y

z

0

1

1

0

0

1

1

1

0

1

0

0


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

z = -x&у V (-x&-у) V -(x&у) V -(х&-у).

В соответствии с законами де Моргана данная формула может быть переписана так:

z = -x&у V (-x&-у) V -x V -у V -x V у.

И далее, учитывая свойства дополнительности и инволюции:

(xy-x)=И,

(x &. -x) = Л,

-х=х,

получаем

z = -x&у V (-x&-у) V -X. (1.1.)

Что соответствует схеме рис. 1.1.



рис. 1.1

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


Таблица 1.2.

Х

У

z

0

1

1

0

0

0

1

1

0

1

0

0


Вариантов решения явно больше одного.

Например:

Вариант 1. Заново спроектировать схему в соответствии с новыми задачами, т.е. записать дизъюнктивную нормальную формулу, ее и реализовать в металле:


а) z = -x&у V -(-x&-у) V -(x&у) V -(x&-у);

б) z = -x&у V x V у V -X V -у V -X V у;

в) z = -x&у;

г)



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

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

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

Так какой вариант выбрать? На какой технологии остановиться?

Наверное, выбор будет определяться в первую очередь тем, каковы более общие правила игры, а именно:

1) легко ли доступны логические элементы?

2) исходным материалом являются сами логические элементы "и", "или", "не", так сказать, россыпью или только в виде уже готовых схем?

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

Быть может, который проще и который способен самореализоваться?

А это значит — вариант третий!

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

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

Дефицитом или избытком! А уже потом все остальное. А не так ли создавался наш мир? В нем есть примеры, как нечто, наваленное сверху с большим избытком, например, навоз, постепенно, как бы само по себе превращалось в нечто более компактное, например, в торф, теряя возможности пахнуть и течь.

А единственное, что умеет демонстрировать нам радиационная химия, — это как изменение структур приводит к новым функциональным возможностям.

Почему же с проектированием логических схем дела не могут обстоять таким же образом?

Итак, пусть исходный мир— это множество схем типа рис. 1.1. Проектировщику требуется создать схему, работающую в соответствии со значениями табл. 1.2.

Чтобы с чего-то начать попробуем "перевернуть" поставленную задачу.

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

Говоря формально, первоначально решалась задача поиска z, где

z=S(х,у),

х,у — входные переменные;

S — выполняемое преобразование, соответствующее формуле (1.1) или схеме рис. 1.1.

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

На языке программирования, например Си, данная функция может быть записана более наглядно:

while (z!=Sхеmа1(х,у)) Sхеmа1 = SR(z,х,у,Sхеmа1).

Здесь

Sхеmа1 — программа (алгоритм), выполняющая преобразования в соответствии с табл. 1.1.

SR — программа (алгоритм), модифицирующая другую программу, например уничтожающая в схеме Sхеmа1 элементы, максимально мешающие преобразованиям согласно значениям из табл. 1.2.

Понятно, что оператор while() в данном случае будет выполняться до тех пор, пока Sхеmа1 не будет модифицирована на соответствие табл. 1.2, либо до тех пор, пока программа Sхеmа1 не исчезнет и выполнять будет просто нечего. Во втором случае придется загрузить новую схему, модифицировать программу (алгоритм) SR и начать все заново.

Для того чтобы схема варианта 3 работала, необходимо предложить правило, согласно которого будут гибнуть элементы схемы рис. 1.1, т.е. алгоритм SR, модифицирующий другую программу. При этом будем исходить из того, что нашему студенту-проектировщику не дано изменить божественный порядок вещей, т.е. навязать элементам системы правила, согласно которым они должны погибать. Эти правила выявляются студентом на основании исследования самих элементов.

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

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

Обратите внимание:

* первый путь — непосредственное уничтожение;

* второй путь — использование межэлементного взаимодействия.

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

Теперь осталось ответить на последний вопрос: А что же понимается под термином «соответствующее напряжение»? Для человеческого общества это, наверное, соответствующий уровень неприязни, ненависти, обиды и т.п., для химического раствора— температура, а для нашей логической схемы из рис. 1.1 — это законы, по которым работают и разрушаются логические элементы, заложенные в них еще их создателем.

Предположим, упрямый студент-проектировщик выяснил, что логический элемент "И" (&),-у которого два входа (х,у) и один выход z, кроме своей основной функции логического умножения, согласно нижеприведенной таблице

x

y

z

0

0

0

0

1

0

1

0

0

1

1

1

способен менять входы с выходами, т.е. если, к примеру, z=1 и у=1, а на вход х никакого напряжения не подано (х не определено), то х становится выходом схемы. И точно так же обстоят дела для остальных логических элементов ("И","ИЛИ","НЕ") — вход/выход, на который ничего не подано. становится выходом.

Кроме того, тот же студент выяснил, что если сигналы, поступающие по входам/выходам элемента, противоречат (причем достаточно часто. например подряд n раз) функциональному назначению элемента, то элемент гибнет. В нашем случае n=1.

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

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

На первой порции обучающей выборки никаких изменений не произойдет: х=0, у=1, z=1 вполне устраивают схему рис.1.1. А вот на второй порции данных уже начнет возникать "сжигающее напряжение".



Рис. 1.3.1.

Первоначально два логических элемента, помеченных знаком вопроса на рис.1.3.1, не выдерживают напряжения, затем еще два (на схеме рис. 1.3.2 они также помечены знаком вопроса).



рис. 1.3.2

В результате получается схема рис. 1.2, что вполне соответствует значениям табл. 1.2.

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

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

1.2. Обучение через уничтожение (саморазрушающиеся нейросети)

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