Безусловно, те же самые задачи можно решать и другими способами?

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

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

Так в чем же реальные преимущества нейронных сетей? Чтобы ответить на этот вопрос, во-первых, обратимся к десятилетнему опыту применения данной технологии красноярской группой НейроКомп, а во-вторых, попытаемся разгадать логику мирового нейросетевого «бума».

 

Что такое нейронные сети?

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

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

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

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

С коннекционизмом тесно связан следующий блок идей:

  • однородность системы (элементы одинаковы и чрезвычайно просты, все определяется структурой связей);
  • надежные системы из ненадежных элементов и «аналоговый ренессанс» использование простых аналоговых элементов;
  • «голографические» системы при разрушении случайно выбранной части система сохраняет свои свойства.

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

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

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

Нелинейный преобразователь сигнала получает скалярный входной сигнал x и переводит его в заданную нелинейную функцию f(x).

Точка ветвления служит для рассылки одного сигнала по нескольким адресам. Она получает скалярный входной сигнал x и передает его на все свои выходы.

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

Линейная связь синапс отдельно от сумматоров не встречается, однако для некоторых рассуждений бывает удобно выделить этот элемент. Он умножает входной сигнал x на «вес синапса» a.

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

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

Слоистые сети. Здесь нейроны расположены в несколько слоев. Нейроны первого слоя получают входные сигналы, преобразуют их и через точки ветвления передают нейронам второго слоя. Далее срабатывает второй слой и т.д. до слоя k, который выдает выходные сигналы для интерпретатора и пользователя. Если противное не оговорено, то каждый выходной сигнал слоя i подается на вход всех нейронов слоя i+1. Число нейронов в каждом слое может быть любым и никак заранее не связано с количеством нейронов в других слоях. Стандартный способ подачи входных сигналов: все нейроны первого слоя получают каждый входной сигнал. Особенно широко распространены трехслойные сети, в которых каждый слой имеет свое наименование: первый входной, второй скрытый, третий выходной.

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

Элементы слоистых и полносвязных сетей могут выбираться по-разному. Существует, впрочем, стандартный выбор: нейрон с адаптивным неоднородным линейным сумматором на входе.

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

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

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

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

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

 

Задачи для нейронных сетей

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

  • построение функции по конечному набору значений;
  • оптимизация;
  • построение отношений на множестве объектов;
  • распределенный поиск информации и ассоциативная память;
  • фильтрация;
  • сжатие информации;
  • идентификация динамических систем и управление ими;
  • нейросетевая реализация классических задач и алгоритмов вычислительной математики: решение систем линейных уравнений, решение задач математической физики сеточными методами и др.

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

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

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

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

Задача классификации также может рассматриваться как задача заполнения пропусков в таблицах: для каждого класса в таблице есть поле, в котором указывается, принадлежит объект данному классу или нет. В эти поля могут помещаться численные значения, например, 1, если объект принадлежит классу, и 0 (или -1) в противном случае.

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

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

  1. найти класс, к которому он принадлежит;
  2. использовать новую информацию, полученную об этом объекте, для исправления (коррекции) правил классификации.

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

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

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

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

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

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

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

  1. Была ли серьезная конкуренция при выдвижении от правящей партии?
  2. Отмечались ли во время правления существенные социальные волнения?
  3. Был ли год выборов временем спада или депрессии?
  4. Произвел ли правящий президент значительные изменения в политике?
  5. Была ли в год выборов активна третья партия?

От использования остальных признаков нейросеть отказалась. Более того, эти пять «симптомов» политической ситуации в стране входят в распознающее правило двумя «синдромами». Пусть ответы на вопросы кодируются числами: +1 «да» и -1 «нет». Первый синдром есть сумма ответов на вопросы 1, 2, 5. Его естественно назвать синдромом политической нестабильности (конкуренция в своей партии плюс социальные волнения плюс дополнительная оппозиция). Чем он больше, тем хуже для правящей партии. Второй синдром разность ответов на вопросы 4 и 3 (политическое новаторство минус экономическая депрессия). Его наличие означает, что политическое новаторство может, в принципе, уравновесить в глазах избирателей экономический спад. Результаты выборов определяются соотношением двух чисел значений синдромов. Простая, но достаточно убедительная политологическая теория, чем-то напоминающая концепцию то ли Маккиавелли, то ли Ленина («единство партии прежде всего, оно является важнейшим слагаемым политической стабильности»).

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

 

Примеры приложений

Насколько мы можем судить по открытой печати, приложения нейронных сетей распределены примерно следующим образом: более 60% рынка занимают финансовые и военно-технические приложения; медицинские приложения тоже находятся на весьма почетном месте около 10%.

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

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

Вот несколько характерных примеров построенных систем.

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

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

Среди обследуемых был проведен дозиметрический контроль, и по величине накопленной дозы они были разделены на 3 класса. 4-й класс составили люди, величина дозы у которых была в пределах естественных фоновых значений.

При статистическом анализе обучающей выборки по большинству параметров не выявлялось достоверных различий между классами, а имеющиеся различия не прослеживались по всем классам. Однако нейросеть, используя весь комплекс параметров, полностью обучилась распознавать класс каждого примера. При тестировании на выборке с заранее известными ответами класс определялся правильно в 100% случаев. Обученной сетью были протестированы 140 человек, проживающих в зоне влияния предприятия атомной промышленности, но не занятых на производстве.

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

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

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

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

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

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

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

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

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

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

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

 

Истинные преимущества нейронных сетей?

Нейронные сети нынче в моде, но стоит ли следовать за ней? Ресурсы ограничены особенно у нас и особенно теперь. Так что же такое Нейрокомпьютер интеллектуальная игрушка или новая техническая революция? Что нового и полезного может сделать нейрокомпьютер? Очевидно, что на новые игрушки, даже высокоинтеллектуальные, средств нет; нейрокомпьютер должен еще доказать свои необыкновенные возможности совершить то, что не под силу обычной ЭВМ, иначе на него не стоит тратиться.

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

  • нейрокомпьютеры это новая техническая революция, которая приходит к нам в виде интеллектуальной игрушки (вспомните, и ПК были придуманы для игры);
  • для любой задачи, которую способен решить нейрокомпьютер, можно построить специализированную ЭВМ, которая решит ее не хуже, а подчас даже лучше.

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

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

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

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

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

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

Все это вместе служит рациональным основанием для нейрокомпьютерной моды.

Литература

А.Горбань, Д. Россиев. Нейронные сети на персональном компьютере. //Новосибирск: Наука, 1996.

Александр Горбань (gorban@cc.krascience.rssi.ru)  — Вычислительный центр СО РАН, Красноярск-36.