Архитектурный аскетизм 90-х: как работали первые нейросети под MS-DOS

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com
| Статья | ИИ, сервисы и приложения

Нынешний бум генеративного искусственного интеллекта, оперирующий огромными кластерами GPU и датасетами на сотни терабайт, часто создаёт иллюзию, будто нейросетевые технологии начались только сейчас. Однако математический базис глубокого обучения был реализован задолго до появления современных вычислительных мощностей. В первой половине 1990-х годов, в эпоху доминирования операционной системы MS-DOS (и её альтернатив PC-DOS и DR-DOS), исследователи и энтузиасты создавали и успешно обучали многослойные архитектуры на персональных компьютерах того времени. Код писался на Turbo Pascal, Borland C++ или ассемблере (MASM/TASM), а в качестве целевого железа выступали машины уровня IBM PC AT 286 и 386.

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

Автор: Suspiciouscelery / Общественное достояние Источник: commons.wikimedia.org

Архитектурные ограничения: барьер 640 Кб и оптимизация вычислений

Главной проблемой разработки под DOS была сегментированная модель памяти процессоров Intel x86 и классический барьер обычной памяти (Conventional Memory) в 640 килобайт. В то время как современные фреймворки вроде PyTorch по умолчанию выделяют гигабайты под тензоры, разработчикам 90-х приходилось вручную проектировать структуры данных, чтобы уместить матрицы весов и код самой программы в базовую оперативную память.

Использование стандартных типов данных с плавающей запятой (например, 64-битного Real/Double или 80-битного Extended в Pascal) быстро истощало доступные ресурсы даже при небольшом количестве синаптических связей. Для преодоления этого барьера применялось несколько инженерных решений:

  • Целочисленная арифметика (Fixed-Point): Вместо стандартных операций с плавающей точкой значения весов и функций активации масштабировались (например, умножались на 256 или 65536) и обрабатывались как целые числа (Integer или Longint). Это экономило память и критически ускоряло вычисления на процессорах Intel 80286 и 80386SX, у которых отсутствовал аппаратный математический сопроцессор (FPU i80287/i80387).
  • Оверлейная структура программ (Overlays): Исполняемый код разбивался на динамически подгружаемые модули. В памяти одновременно находилось только то, что нужно в данный момент. Например, после инициализации интерфейса и загрузки обучающей выборки этот код выгружался, а на его место с жесткого диска или дискеты считывался исполняемый блок прямого прохода (Forward Pass) или обратного распространения ошибки (Backpropagation).
  • Менеджеры EMS/XMS и DOS-экстендеры: Чтобы выйти за пределы первого мегабайта для хранения больших обучающих выборок, программисты использовали спецификации EMS (переключение банков памяти через прерывание INT 67h и драйвер EMM386) или XMS (через функции HIMEM. SYS). Ближе к середине 90-х ситуация упростилась с появлением DOS-экстендеров (таких как DOS/4GW), которые позволяли переводить процессоры 386/486 в 32-битный защищенный режим с линейной адресацией памяти, но это требовало полного переписывания старых 16-битных программных ядер.

Практическое применение: задачи и софт

Несмотря на дефицит ресурсов, DOS-нейросети использовались для решения вполне конкретных прикладных задач узкого ИИ (Narrow AI).

Одним из главных направлений было оптическое распознавание символов (OCR). Именно в первой половине 90-х закладывались алгоритмы для DOS-версий систем CuneiForm (Cognitive Technologies) и ранних прототипов FineReader (BIT Software / ABBYY). Архитектура часто представляла собой перцептрон с одним скрытым слоем. На вход подавалась бинарная матрица знака размером 16 на 16 пикселей (256 входов). Чтобы обойти медленное вычисление сигмоидальной функции активации, которая требует вычисления экспоненты (f(x) = 1 / (1 + e^-x)), инженеры применяли Look-Up Tables (LUT). Все значения функции заранее просчитывались и зашивались в сегмент данных в виде статического массива, а во время работы сеть просто брала готовый результат по индексу.

Второе популярное направление — анализ временных рядов и прогнозирование рынков. Профессиональным стандартом того времени был американский нейропакет BrainMaker от California Scientific Software. В СНГ также создавались собственные программные комплексы, например, пакет «NeuralNet» А. Ежова и Л. Чечеткина. Эти программы применялись для попыток краткосрочного прогнозирования курсов валют на ММВБ или результатов приватизационных аукционов. На вход подавалось скользящее окно из котировок за предыдущие периоды. Однако из-за малого объема качественных исторических данных и высокой зашумленности рядов модели часто сталкивались с проблемой переобучения (overfitting).

Распространение и смена технологического стека

Автор: Blake Patterson / Лицензия: CC BY 2.0 Источник: commons.wikimedia.org

Нейросетевой софт под DOS распространялся в основном по модели Shareware через сеть Фидонет (FidoNet), электронные доски объявлений (BBS) и ранний сегмент Интернета. Демо-версии обычно имели ограничение на количество нейронов в скрытом слое или не позволяли сохранять весовые коэффициенты обученной сети в файл конфигурации. Коммерческие версии заказывались напрямую у авторов и доставлялись на дискетах.

Развитие этой ветки низкоуровневой оптимизации прекратилось с выходом Windows 95 и переходом на Win32 API. Доступ к мегабайтам линейной оперативной памяти «из коробки» избавил программистов от необходимости использовать оверлеи и страничную адресацию. Одновременно с этим процессоры семейства Intel Pentium получили производительные блоки работы с плавающей точкой (FPU), что сделало оптимизированные целочисленные ассемблерные движки нерентабельными в разработке.

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

Изображение в превью:
Автор: Blake Patterson / Лицензия: CC BY 2.0
Источник: commons.wikimedia.org
Автор не входит в состав редакции iXBT.com (подробнее »)
Об авторе
Интересуюсь технологиями и рассказываю о них вам.

11 комментариев

Добавить комментарий

M
Lisp появился в 1958м году.
c
Лисп-то здесь каким боком? Статья совсем про другое.
Да и вообще Лисп — это чисто академический язык, то есть красивый язык с околонулевой практической ценностью. Много их в 60-70-е напридумывали — Алгол 68 очень яркий пример.
Да, я знаю, что есть приложения, написанные на Лиспе, но их по пальцам пересчитать можно. И это за 70 лет! Сравните с количеством приложений, написанных за это время на С (который с академической точки зрения есть уродливое убожество).
M
Ну как бы язык создан специально для ИИ моделей. «Лисп, созданный Джоном Маккарти для исследований в области искусственного интеллекта, долгое время играл ключевую роль в этой сфере.» Так что говорить, что ИИ начал развиваться в 90е — это как бы неверно.
S
ИИ не обязательно связан с нейросетями, он может быть на обычных алгоритмах. Собственно, до относительно недавнего времени почти весь ИИ так и работал, нейросети использовались только в отдельных областях.
c
Вопрос только в том, что называли искусственным интеллектом в 1958 году. :)
Лисп — это язык для работы со списками всего лишь. В те времена программы, подобные «Элизе», действительно строилось на списках, но развитие ИИ пошло совсем другим путём.
M
С картинки прям молодостью повеяло: MS-DOS, AutoCAD на дискетах, Turbo Pascal, оверлеи, Фидо, BBS…
Алгоритмы старые, да. С обучающими матрицами нас познакомили курсе на втором. Сейчас всё это заработало, потому что стала доступна достаточно мощная аппаратная часть.
Неправда, что код утерян. Я свой диплом сначала с дискет переписал на NAS, а потом в облако.
NoName_Man
Где-то году в 1998 на BBS-ках была мода на разговорных роботов. Которые, конечно, представляли собой тупо сборник ключевых слов и вариантов ответов. Я их раскусывал мгновенно по скорости ответа и тупости. Но это не мешало отдельным гениям трепаться с ними всю ночь и в этот момент я начал терять веру в человечество. Ладно, не про это сейчас
Так вот, один погромист из новосибирского академгородка сделал реального «чатбота» (до изобретения термина оставалось 20+ лет) на нейросети, который реально вдумывался в ответ собеседника и сочинял уникальный ответ. Он заметно тормозил и такая задержка делала его ответ более похожим на человеческий.
Я его тоже довольно быстро раскусил и он даже ответил мне что-то вроде «надо же, догадался!». Потом автор показывал мне его код на Lisp-е (и я там нихрена не понял, конечно).
Сейчас я понимаю, что он написал его не с нуля сам, конечно, а просто спёр с работы (НИИ ВЦ или как он там назывался) уже готовый, натренированный на русском языке, проект
P
Голь на выдумку хитра. Почитайте еще, как создавался Prince Of Persia (или на ютубе есть хороший ролик на эту тему).
I
хорошая история, жалко что ложь
I
А какже биоритмы?
NoName_Man
Там же тупо синусоида

Добавить комментарий

Сейчас на главной

Новости

Публикации

«Made in USSR»: какие советские радиоприёмники были популярны на Западе

Уже в 1960-е годы транзисторные приемники из СССР начали активно экспортироваться в Великобританию, Германию, Францию и другие страны. Приемники с надписью «Made in USSR» на экспортных версиях...

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

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

Автоматический поиск по паузам в «Олимп-005»: как это работало и почему сбоило

Советский катушечный магнитофон «Олимп-005» выделялся на фоне аналогов наличием системы автоматического поиска треков. Для аналоговой магнитной ленты это была нетривиальная задача. Разберем, как...

Плохая управляемость и повышенный расход: почему двойные колёса не прижились на легковушках

Сегодня двускатные колёса прочно ассоциируются с тяжёлыми грузовиками — они нужны для распределения нагрузки и повышения грузоподъёмности. Но мало кто помнит, что когда‑то такую схему...

Почему знакомство с Linux стоит начать с дистрибутива Void

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

5 настроек роутера, которые делают домашнюю сеть стабильнее и безопаснее, от WPA3 до SQM

Роутер часто работает с теми параметрами, которые были выбраны во время первичной настройки. На мощных устройствах с продуманной системой или устройствах на кастомных прошивках как OpenWRT это...