Архитектурный аскетизм 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 (подробнее »)
Об авторе
Интересуюсь технологиями и рассказываю о них вам.

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

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

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

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

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

Новости

Публикации

✦ ИИ  Как понять, что клубника сладкая, еще до покупки? 5 признаков спелости по запаху, цвету и хвостику

  • Тематическая подборка
  • Оффтопик
Каждый сезон мы попадаем в одну и ту же ловушку: покупаем огромную ярко-красную клубнику, которая на вкус оказывается «пластиковой» и водянистой. Красивый внешний вид часто...

Низкоуровневая безопасность 80-х: как инженеры защищали картриджи на уровне кремния и логики мапперов

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

Закрытые наушники с ANC, 140 часов музыки, два динамика 40мм и 10мм: обзор Kiwi Ears Ardor

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

Мертвая дорога Сталина: зачем в советском Заполярье строили железнодорожную магистраль, которая ушла в никуда

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

Обзор кабеля USB-C Robiton P24B – выдержит ли он заявленные 60 Вт

Кабель USB-C давно перестал быть просто проводом для зарядки. Внешне два кабеля могут выглядеть почти одинаково, но один спокойно передает 60 Вт по Power Delivery, а другой ограничивает зарядку,...