Хард и софт

Sep 05, 2010 23:34

slavin_e спросил меня (не прошло с тех пор и года):Каким образом, по вашему мнению, возник человеческий интеллект? [...]

Я немного программирую, и знаю из опыта, что бывает такая ситуация, что для небольшого изменения функциональности программы требуется переписать ее с нуля, т. к. это изменение требует полной смены плана программы. В частности, иногда приходится перепридумать то, каким образом структурированы данные, которые использует алгоритм в ходе своей работы, и из-за этого код меняется до неузнаваемости. Как же человеческий интеллект, развиваясь в ходе эволюции, мог перескочить такие «барьеры», которые не преодолеваются за множество мелких шагов, а только сразу, за один большой шажище, который вряд ли может совершиться случайно? Или вы считаете, что путем мелких случайных изменений программа мозга достигла с нуля того уровня, когда она может изменять себя уже не случайно, а алгоритмически?
Ответ на простой вопрос может быть очень непростым. У меня не получится ответить на него коротко. Если попытаться выразить сказанное ниже в нескольких словах, например, «fregimus сказал, что мозг - это компьютер», то получится глупость. Между тем, ниже, как это ни странно, я действительно это едва ли не скажу.

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

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

Ну, это просто! «Хард» - вот он, его можно увидеть, пощупать, померять токи и напряжения. А программа - нефизическая сущность, ее нельзя увидеть или измерить.

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

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

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

«Софт» отделяется от «харда» тем, как мы о них думаем?!

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

Чтобы почувствовать, каким может быть ответ на этот вопрос, задумаемся о реальности границ. Если граница между «хардом» и «софтом» реальна, но марсианин ее обнаружит. Если эта граница существует в человеческом сознании, отягощенном западной культурой и наукой, то вполне вероятно, что марсианин прочертит ее иначе. Пример с компьютером, чтобы рассуждать о границах было легче, можно значительно упростить. Представьте себе три камешка на столе. Где проходит граница, отделяющая «три» от камешков? Реальна ли она? А если мы возьмем три кубика, или три гайки, или три стола, или три горы или планеты, и проведем границу, она отделит то же самое «три» - существует ли «три» само по себе?

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

О, месье идеалист?

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

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

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

Значит, разделение вычисляющей системы на «хард» и «софт» - модель?

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

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

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

Программы можно исполнять на разных компьютерах. А «софт» мозга может работать на разном «харде»? Если нет - грош цена такой модели!

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

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

Остановимся подробнее на том, где проводится линия, разделяющая «хард» и «софт» в этой модели. «Софт», очевидно, это информационный процесс, реализуемый одинаково в живом мозге крысы и в вычислительной модели. Но что же является «хардом»? В случае мозга - это сеть из соединенных нейронов. Но нейрон - это живая клетка с очень сложным своим, внутренним поведением. Мы не рассматриваем в модели все аспекты поведения нейрона - лишь малую их часть, которая, по выбору строящего модель, принципиально важна для понимания работы механизма. В компьютерной модели сначала строится модельный нейрон, обладающий теми же самыми принципиальными свойствами, и он тоже является частью «харда». Это как бы симулятор, виртуальный «хард», подобный сумулятору системы команд, например, древнего TRS-80, позволяющего запускать CP/M и ее BASIC на обычном персональном компьютере. Получается, что часть симуляционной программы образует в модели «хард» вместе с аппаратурой настоящего компьютера, на котором уже работает тот самый «софт».

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

Так откуда все-таки берется «софт», которого никто не пишет?

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

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

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

Очень многие думают, что компьютерные программы всегда, всенепременно детерминированы в своем скучном поведении. Это верно - как эмпирический, наблюдаемый неспециалистом факт, но отнюдь не как данность, непременно присутствующая в «софте». Скорее, верно как раз обратное: программисты прилагают множество усилий к тому, чтобы поведение программы было детерминированным и скучным!

Так почему же мы не пишем «критических» программ, которые так легко было бы перенастроить на новый вид вычислений?

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

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

Литература

Книги о самоорганизации в естественных системах:

1. Kauffman, S., (1993). The Origins of Order. Oxford Oxfordshire : Oxford University Press.
2. Camazine, S., et al., (2001). Self-Organization in Biological Systems. Princeton: Princeton University Press.

А также статьи о вычислениях в самоорганизующихся системах:

3. Bertschinger H., Natschläger T. Real-Time Computation at the Edge of Chaos in Recurrent Neural Networks. Neural Computation 16 (2004): 1413-1436.
4. Lazar A, Pipa G, Triesch J. SORN: a self-organizing recurrent neural network. Front Comput Neurosci. 2009;3:23. Epub 2009 Oct 30.

scipop, ai, brain, chaos

Previous post Next post
Up