Сообщение от cogen
|
Интересно, расскажите про логику
|
Квадрологика и ускоритель ИИ
В большинстве случаев, разработчик программ, выполняя ту или иную задачу, ограничен теми инструментами, что есть в его распоряжении. Операционной системой и различными средами программирования, с одной стороны, а с другой, стандартным набором процессоров, шин, оперативной памятью и устройствами долговременного хранения информации. Для выполнения часто востребованных действий создаются новые инструменты как программные – библиотеки, фреймворки и "движки", так и аппаратные, разнообразные сопроцессоры и целые платы ускорителей.
Современные компьютеры основаны на двоичных вычислениях, при чем, в большинстве своём эти вычисления производятся последовательно. И сама архитектура микропроцессоров и приёмы программирования основаны на последовательном выполнении команд. В человеческом мозге принятие решений производится на основе параллельных процессов и попытки описать работу нейронов средствами двоичной арифметики «притянуты за уши», так сказать. Помимо простой передачи импульсов возбуждения от нейрона к нейрону, на принятие решений влияют химические активаторы, вырабатываемые самой нервной системой. Само по себе вырабатывание тех или иных гормонов и их влияние на принятие решений, мы называем эмоциями.
Так вот здесь речь ведётся о принципиально новом устройстве – ускорителе ИИ. Если математический сопроцессор позволяет работать с различными числами, в привычном для нас виде, в нашем случае предлагается разработать логический сопроцессор позволяющий выполнять алгоритмы квадрологики. В противоположность обычным "истине и лжи", которые и так поддерживаются на аппаратном уровне всеми известными нам микропроцессорами. Эта логика основывается на четырёх состояниях (квадро - четыре), чего вполне достаточно, для быстрого решения большинства задач и менее затратно в отличие от нечёткой логики, когда используется некий уровень приближения. По сути квадрологика немного расширяет бинарную, позволяет использовать её там, где предполагалось использовать нечёткую логику, а совместно с дополнительными коэффициентами приближения того или иного значения, полностью ей аналогична. Ускоритель ИИ должен содержать множеств квадро АЛУ и обычные двоичные блоки рассчитанные на оперирование числами коэффициентов. При чём блоки квадро АЛУ смогут работать по разному в зависимости от некоего состояния системы, аналогично эмоциям человека.
Единственно разумный путь, использовать обычные двоичные КМОП инверторы и ключи, но организуя их для реализации правил квадрологики. Естественно, что от обычных процессоров, ОЗУ и устройств долговременной памяти, а также от работы с числами отказываться, ни кто не собирается. Данный "ускоритель" будет только дополнением, к существующей архитектуре, используемой в универсальных компьютерах.
Основная часть идеи состоит в том, что для построения алгоритмов ИИ построить матаппарат представляющий нечто среднее между нечёткой и булевой логикой. Эта логика будет основываться на четырёх состояниях, причём дело не в числе состояний их число минимально, главное возможность работать с неизвестными и средними значениями:
• неизвестно – UN,
• среднее – AV,
• положительно – PO,
• отрицательно – NE.
В добавок, к этим четырём значениям, возможно использование коэффициентов используемых в расширенных алгоритмах, по аналогии с нечётко логикой и реализуемых "обычными" числами:
• коэффициент достоверности знания – CRK,
• степень приближенности значения – DAV,
• коэффициент осторожности
Соответственно первый – определяет насколько значение, не являющееся UN, может быть достоверным, к примеру, объект сам наблюдал или даже мог измерить какое-то значение и ему ни свойственно не верить себе, или наоборот информация поступила из ненадёжного источника.
Второй коэффициент делает условия более мягкими, может быть как положительным, так и отрицательным. К примеру, значение AV, но тяготеет к NE, или значение более чем PO.
В двоичном виде это представляется так:
• неизвестно – UN – 00
• среднее – AV – 11
• положительно – PO – 10
• отрицательно – NE – 01
Логическое умножение (конъюнкция):
• PO&NE=AV
• AV&NE=AV
• AV&PO=AV
• AV&AV=AV
• PO&PO=PO
• NE&NE=NE
• UN&UN=UN
Очень важным элементом квадрологики является возможность гибкой работы с данными, имеющими неопределённое (неизвестное) значение, с использованием коэффициента осторожности.
При наличии неизвестного состояния, на одном из входов, решения принимаются исходя из коэффициента осторожности, при его низком уровне.
• PO&UN=PO
• AV&UN=AV
• NE&UN=NE
Высокое значение осторожности (плюс бесконечность), при наличии значения UN хоть в одном операнде (их может быть больше 2) всегда даёт ответ UN. При большем чем 2 числе операндов, ответ будет зависеть от соотношения количества операндов с неизвестными значениями, к известным и значения коэффициента осторожности. Если этот коэффициент не задан, то его значение по умолчанию среднее.
Логическая равнозначность (эквивалентность):
Соотношения для логического сложения (дизъюнкции):
• PO+NE=AV
• AV+NE=NE
• AV+PO=PO
• AV+AV=AV
• PO+PO=PO
• NE+NE=NE
• UN+UN=UN
• AV+UN=AV
• PO+UN=PO
• NE+UN=NE
Эквивалентность:
• PO→NE=NE
• AV→NE=NE
• AV→PO=NE
• AV→AV=PO
• PO→PO=PO
• NE→NE=PO
При очень осторожном поведении:
• UN→UN=AV
• AV→UN=NE
• PO→UN=NE
• NE→UN=NE
При средней осторожности:
• UN→UN=AV
• AV→UN=AV
• PO→UN=NE
• NE→UN=NE
При низкой осторожности:
• UN→UN=PO
• AV→UN=PO
• PO→UN=AV
• NE→UN=AV
Эквивалентность можно также использовать для более чем двух операндов, но тогда она будет иметь несколько другое значение (учитывая плоскую структуру FPGA, максимальное число операндов будет 8 ) и один операнд будет ведущим, а остальные сравниваться с ним. Результат будет также зависеть от уровня осторожности. Для программной реализации проще задать эти соотношения таблицей.
Отрицание изменяет PO на NE и наоборот, значение AV и UN при отрицании не меняются, практически же первый и второй биты просто меняются местами.
Также вычислительная система на аппаратном уровне должна включать такие значения как плюс и минус бесконечность. Не должно быть исключений и критических ошибок, для каждого возможного условия должно быть решение, пусть оно будет даже UN (неизвестно), что в свою очередь для простых алгоритмов приведёт к генерации случайного числа, при необходимости принять решение, а в исключительном случае задействует расширенные алгоритмы для уточнения значений. Таким образом, при алгебраическом делении любого числа на ноль, будет плюс или минус бесконечность, в зависимости от знака чисел. Как раз для этого на аппаратном уровне должна быть возможна генерация случайного числа.
Предлагается сделать массив логических процессоров, по аналогии с потоковыми мультипроцессорами современных видеочипов, но ориентированных на параллельную обработку логических алгоритмов, основанных на 4-ёх логических состояниях. Их простота позволяет нам говорить не о десятках и сотнях, а о тысячах таких процессорных ядер в одном чипе.
Если брать в качестве аналогии живой мозг, где нейроны как бы выстраиваются в решающее облако, работающее на основе алгоритма образованного связями между ними, то это облако можно представить как некий специализированный модуль, который на основе массива входящих параметров выдаёт некоторое решение.
Аппаратно идея состоит в том, что функциональные элементы, работающие на основе 4 состояний, организуются в подобные облака решений, в соответствии с алгоритмом, закодированном в словах программы, в виде соединений этих функциональных элементов между собой и регистрами ввода/вывода. В чипах также будет встроен аппаратный генератор случайных чисел.
Плата ускорителя вместе с ПК образует комбинированную архитектуру: потока данных и команд, последовательной и параллельной обработки данных.
На первых парах в качестве ассоциативной памяти планируется использовать СУБД ключ-значения с хранением в ОЗУ ПК. На самой плате будут только регистры встроенной в FPGA распределённой памяти, для хранения нескольких команд и небольшого количества данных, но в отличии от обычного кэша эта память будет распределятся программно.