В продолжение записки про ИИ Google и “серебряную медаль” Международной математической олимпиады. Там исходная задача, которую потом “решает” ИИ, прежде переводится людьми на входной язык системы машинных доказательств – то есть, на некоторый формальный язык, описывающий в определённых логических формулах целевое состояние, соответствующее задаче. Это не программа, как иногда пишут, а запись, грубо говоря, теоремы, соответствующей задаче, в формулах, которые возможно (при некоторых ограничениях) доказать в данной системе. Да, доказательство выполняется при помощи компьютерных вычислений, тем не менее, формальная запись задачи-теоремы не является программой, реализующей некий алгоритм – иначе не было бы смысла в поиске записей доказательств. И вот в “популярном изложении” необходимость такого перевода обосновывают тем, что нужно “переписать на языке, понятном системе”. Это, конечно, искажение. Но с ним связаны два важных момента.

Момент первый, – достаточно очевидный, – в том, что этот “суперпродвинутый” искусственный интеллект даже не способен прочитать условие задачи и, предположим, перевести его на формальный язык самостоятельно, хоть это и могло бы быть типичным вариантом запроса к ChatGPT. Так как для корректного перевода нужно хорошо понимать не только задачу, но и принципы построения формальных языков, выдача подобного ИИ-перевода для входа “системы ИИ” просто не подходит. Это понятно.

Есть и второй момент, который “замыливают” посильнее: перевод на формальный язык необходим для того, чтобы предлагаемые системой решения могли быть проверены на соответствие этому описанию машинным способом. То есть, так как предполагается, что будут подбираться тексты “доказательств” на формальном языке, необходим автоматический, машинный “проверятор” для этих доказательств – иначе, если решения потребуется согласовывать с человеком, то и работать это всё будет слишком медленно, поскольку образуется непреодолимый затык с проверкой решений. Так что необходима запись на формальном языке и проверяющая компьютерная система, а такая система в принципе не может проверять записи на естественном языке. Так что, понятно, это не решение олимпиадной задачи в том смысле, который тут принято присваивать слову “решение”.

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



Комментировать »

Нередко можно прочитать, что “сверхразумный ИИ” сгенерирует такие “решения и идеи”, которые человек понять не сможет, а ИИ – не сможет объяснить человеку (ну, настолько вот сложные и непонятные результаты). Это очень популярная характеристика, которую часто обозначают как одно из ключевых свойств “сверхразумного” ИИ (хотя таким свойством должна бы быть как раз способность объяснить сложное, но сейчас не об этом).

С другой стороны, в популярной литературе по теме ничуть не реже утверждается, что вот на пути к уровню “сверхразумности” – ИИ должен быстро переходить из статуса просто “сильного ИИ”, в статус “сверхразумного”, используя для этого поэтапные самоулучшения: то есть, вот такой ИИ доработал собственную модель, обновился, перешёл на более мощную версию, и тут же опять улучшил показатели, снова обновился, и так далее. Так утверждается.

Между тем, подобный “рекурсивный ИИ” мог бы работать в обратную сторону, с целью объяснения тех самых “сложных идей” из первого абзаца: вот “сверхразумный” ИИ объяснил свои идеи своей предыдущей итерации – интеллекту не менее искусственному, но который попроще, пусть и близок по “уровню понимания”, тот – предыдущей итерации, и, – опять же, – так далее, вплоть до уровня, близкого уже тем самым человекам.



Комментарии (1) »

Посмотрим на совсем небольшой фрагмент кода.

while(1){
	GP0 = 0;
	GP0 = 1;
}

Этот код предназначен для микроконтроллера PIC12F675 (один из очень популярных и очень простых микроконтроллеров) и, можно считать, написан на C (но здесь это не важно). Некоторые пояснения для тех, кто с микроконтроллерами дела не имел: микроконтроллеры предназначены для управления прочей электроникой и электротехникой, а GP0 здесь – это такой “синтаксический сахар”, а именно – способ задать логическое значение на выводе микроконтроллера при помощи специальной, зарезервированной переменной. PIC12F675 имеет несколько подходящих выводов, все они пронумерованы: GP0..GP5 (GP – это от General Purpose). Строчкам кода, приведённым выше, ещё предшествует несколько строк, настраивающих начальное состояние микроконтроллера и задающих режим работы, это здесь тоже не важно, поскольку речь пойдёт о другом.

Итак, GP0 = 0 – “записывает” в нулевой выход логический ноль, GP0 = 1 – “записывает” логическую единицу. Так что это не совсем “запись переменной”. Вариант while(1) – не менее типовой для мира микроконтроллеров способ задать бесконечный цикл. У микроконтроллера нет развесистой операционной системы. В алгоритмическом смысле, микроконтроллеры, обычно, либо спят, либо работают в бесконечном цикле while(1), иногда – то есть, очень редко, – отвлекаясь на обработку прерываний (в данном случае, считаем, что никаких прерываний и прочих неожиданностей не происходит).

Получается, что приведённый фрагмент последовательно выполняет запись ноля и единицы в логический вывод. Какой сигнал образуется на этом выводе? Пусть логические уровни задаются напряжением 0 вольт – для ноля и +5 вольт – для единицы (на практике, понятно, используется отсечение по порогу, но, опять же, это детали из области микроэлектроники). Нетрудно предположить, что некоторые предложения языка высокого уровня C аппаратурой выполняются пошагово, а значит, на выводе с номером ноль должен появиться ноль, а потом единица, а потом опять ноль, опять единица и так далее. Продолжительность импульса – ключевой момент, о нём как раз и пойдёт речь.

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

Однако, если скомпилировать код, прошить программу в микроконтроллер, запустить его и подключить осциллограф к нужному выводу, то картина получится несколько иная, меандр не очень-то сбалансирован. Вот результат на фото ниже.
Signal graph

(Здесь я использовал компилятор Microchip MPLAB XC8 версии 2.46, в бесплатном варианте.) Единицы получились в четыре раза длиннее нолей (здесь положительное направление, как обычно, вверх). Как так вышло? Вообще, “чисто структурное” понимание исходного кода подразумевает, что while(1) лишь задаёт бесконечный цикл – это доступно компилятору, а как там работают остальные детали, какой алгоритм задуман – компилятор учитывать не может. То есть, текст на ЯВУ задаёт лишь схему итераций. Это логично, но иногда нужно знать ассемблер и то, как работает аппаратура. В данном случае, происходит следующее.

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

loop:
 STATUS 5      // выбор режима адресации, один такт;
 SET_BIT_GP0 0 // установка бита вывода GP0 в ноль, один такт;
 SET_BIT_GP0 1 // установка бита вывода GP0 в единицу, один такт;
 GOTO loop     // переход к началу цикла, два такта;

В данном микроконтроллере GOTO (безусловный переход) занимает два программных такта, а остальные упомянутые команды – по одному. Это означает, что в цикле, между переключениями статуса вывода, будет четыре такта. Здесь перед последней командой (GOTO) вывод установлен в единицу (SET_BIT_GP0 1). Посчитаем, начиная с команды, устанавливающей единицу, такты: 1 (SET_BIT_GP0) + 2 (GOTO) + 1 (STATUS) == 4 такта. После чего вывод устанавливается в ноль на один такт. Интерпретация полностью соответствует картинке с осциллографа. Ниже, для сравнения, соответствующий фрагмент кода уже на ассемблере PIC. Точно в такой код преобразует исходную конструкцию с while(1) компилятор. Для задания состояния логического вывода микроконтроллер использует один бит в специальном регистре, поэтому тут выведены команды, устанавливающие (bsf) и сбрасывающие (bcf) биты.

mainloop: // while(...)
	bcf status, 5 // выбор режима адресации;
	bcf (5), 0    // GP0 = 0 (clear bit);
	bsf (5), 0    // GP0 = 1 (set bit);
	goto mainloop // while(1);

Получается, вывод компилятора тут не соответствовал ожиданиям при элементарном подходе. Но, конечно, догадаться о том, что реализация цикла тоже требует некоторых команд – не так трудно. Вообще же, текст программы ничего не говорит об организации цикла: while(1){…} только описывает его границы, это чисто структурный элемент, если воспринимать реализацию на высоком уровне – на языке высокого уровня.

Небольшое “лирическое отступление”. Автоматическая оптимизация циклов компиляторами является хрестоматийным примером неверной интерпретации того, как “программы работают”: многие разработчики на языках высокого уровня, – даже опытные, – пытаясь измерять производительность реализации той или иной функции, начинают с того, что вызывают функцию повторно в цикле, фиксируя время начала и время окончания, – лишь для того, чтобы по результатам измерений обнаружить, что функция “исполняется” практически мгновенно, поскольку оптимизирующий компилятор просто выкинул её вызов из результирующего кода, так как выяснилось, что вывод функции в программе ни на что не влияет (а что касается переменной счётчика цикла, то тут всё заменяется на единственное присваивание – в переменную записывается окончательное значение, которое можно определить на этапе компиляции). Интересно, кстати, что конкретно в C есть и достаточно много неопределённостей на уровне языка, связанных с обработкой присваиваний значений переменным, но наш пример – это не тот случай, поскольку здесь диалект C использует не-совсем-переменные для вывода электрических значений на контакты.

Вернёмся к рисованию меандра программой для микроконтроллера. Хотелось бы получить “ровный” меандр. На языке C для PIC в нашем конкретном случае это можно сделать так.

while(1){
	GPIO = GPIO^0x01;
}

Здесь присваивание значений конкретным выводам заменено на XOR для всего регистра. GPIO – это псевдоним, обозначающий тот самый специальный регистр (массив битов), биты которого соответствуют конкретным логическим выводам. В нашем случае – переключается нулевой вывод (GP0), поэтому изменяется младший бит (бит с индексом нуль, этому соответствует значение маски – 0x01, единица). Логика, стоящая за данным решением, следующая: нужно исключить из тела цикла двойственность состояний. А именно – XOR переключает бит: если там был ноль, то будет единица, если была единица, то станет ноль; тут больше нет записи двух разных значений. Такой вариант кода гораздо лучше соответствует задаче, если бы задачей было получение “ровного, сбалансированного” меандра (заметьте, впрочем, что изначальная задача этой записки – другая: определить, что выводится микроконтроллером и, главное, почему).

Меандр “сбалансировался”, а результат, демонстрируемый осциллографом, поменялся, что и видно на фото экрана ниже.
Signal graph

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

Если PIC-ассемблер взять, что называется, в руки, то данный цикл можно оптимизировать. Во-первых, команду выбора схемы адресации можно вынести за пределы цикла, так как выбор зафиксирован. Это сэкономит один такт. Во-вторых, компилятор здесь записывает предложение “GPIO = GPIO^0x01” в три команды: загружает значение специального регистра GPIO в рабочий регистр (в PIC-микроконтроллерах он называется W), выполняет XOR и записывает значение в GPIO. Но нужный XOR можно сделать в одну команду, загрузив заранее, до начала цикла, маску (единицу) в рабочий регистр W и выполняя XOR непосредственно с GPIO. Это позволит сэкономить ещё два такта. А вот два такта, нужных на goto – так сэкономить уже не выйдет (можно, наверное, придумать особенно экзотические методы, но это на общий смысл не повлияет). Естественно, всё это возможно только потому, что задача сводится к преобразованию цикла записи состояний в значение одного логического вывода микроконтроллера, но в итоге – можно добиться трёх тактов на цикл. Соответствующий фрагмент ассемблерного кода приведён ниже.

        bcf     status, 5
        movlw   0x01
mainloop:
        xorwf   (5), 1
        goto    mainloop

Теперь импульсы стали короче в два раза, что и подтверждается очередной фотографией экрана осциллографа.
Signal graph

Конечно, реальная ситуация может быть сложнее, а компилятор может “догадаться” о какой-то лучшей оптимизации. Если рассматривать современные мощные микропроцессоры, то там, например, вообще сложно судить о реальном количестве тактов, затрачиваемых той или иной машинной командой, даже на уровне ассемблера. Ассемблер сейчас не всегда нужен, даже если нужно программировать микроконтроллеры, но знакомство с ассемблерами и принципами работы той аппаратуры, на которой программа будет исполняться, часто помогает осознать причины несоответствия ожиданий тексту программы на языке высокого уровня.



Комментировать »

Очередное “ИИ решает математические задачи”, в этот раз – от Google и про олимпиадные задачи, но, хотя бы, есть уточнения про ограничения. В исходном сообщении сказано, что “AI achieves silver-medal standard solving International Mathematical Olympiad problems” (“ИИ достиг уровня серебряной медали, решая задачи Международной математической олимпиады”).

Если прочитать сообщение внимательно, то оказывается, что, на первом шаге, задачи были вручную переформулированы в виде предложений на формальном языке, который “подходит для системы”. Буквально: “First, the problems were manually translated into formal mathematical language for our systems to understand” – “Прежде всего, задачи были вручную переведены на формальный математический язык, чтобы наши системы их поняли”. То есть, данный ИИ, – который, как теперь напишут в СМИ (не Google), “демонстрирует уровень серебряного медалиста Международной математической олимпиады”, – даже не может прочитать задачи в том виде, как они представлены для людей (я, собственно, давно привожу этот момент в качестве примера).

Под “формальным математическим языком”, судя по всему, имеется в виду язык системы компьютерных доказательств Lean. То есть, речь, конечно, не про то, что задачу просто “записали строго”: исходные формулировки и так достаточно строгие. Заметьте, что корректный перевод исходного текста задачи на тот или иной формальный язык требует достаточно высокой квалификации и, обычно, примерного понимания сути самой задачи. Рассматриваемой системе ИИ этот шаг, очевидно, недоступен.

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

Да, метод перебора является одним из корректных методов математического доказательства, но здесь имеется в виду перебор некоторых вариантов и наборов данных, а не подбор текстов с записью решения. Нельзя сказать, что успешная оптимизация перебора для поиска формальных записей “доказательств” каких-то простых по формулировке задач не является полезным достижением. Не понятно, почему это преподносится как математическая деятельность ИИ и как шаг на пути к “универсальному искусственному интеллекту” (AGI). При этом, как написано, на подбор текста для некоторых из решённых задач система ИИ тратила до трёх дней (!). Другими словами: сверхмощный специализированный компьютер три дня подбирал даже не решение, а текст программы, который представляет собой запись “доказательства” на некотором формальном языке.



Комментарии (1) »

Вот что я писал на dxdt.ru про ограничения для “алгоритмов ИИ” в информационных системах (это 2015 год):

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

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

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

Однако если на минуточку поверить в “сверхразумный машинный ИИ” вообще, – оставив в стороне современный хайп с чат-ботами LLM, которые не только совсем не про “сверхразумный” интеллект, но даже и не про обычный, – то возникает проблема с пониманием возможностей сверхразумной машины: такая машина, по определению, способна найти способы преодоления ограничений, установленных при помощи других, примитивных машин. То есть, какие-нибудь неустранимые атаки на предиктивные схемы процессоров могут послужить каналом для “выхода за ограничения”. Но это только догадка – понять “сверхразумную машину” очень сложно.

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



Комментировать »

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

Если такая схема работает, то она могла бы помогать при обнаружении приближающегося хищника. Специальные шерстинки имеют внутреннюю структуру, которая служит фильтром, выделяющим подходящую часть ИК-спектра. Впрочем, всё равно не очень понятно, как компенсируется тот факт, что само животное-носитель теплокровное, а поэтому нагрето и образует неплохую помеху. Зато пишут, что, например, кошки оснащены технологией “Стелс” для снижения ИК-заметности с наиболее актуальных при охоте на мышей ракурсов, это подтверждается замечательной ИК-иллюстрацией из исходной работы (там ещё и сипуха).

IR-imaging



Комментировать »

Наземная сеть радиоприёмников, – например, базовых станций мобильной связи, – может быть использована для определения координат (геолокации) передатчиков. Типовой пример передатчика – мобильный терминал. Для такой геолокации не требуется связь со спутниками GNSS (GPS, в частности), как не требуется и прямое участие самого терминала: главное, чтобы этот терминал излучал сигнал с известной модуляцией. То есть, терминал может работать с какой-то “внешней” системой, – даже со спутниковой, – но определять его местоположение может совсем другая сеть.

Задача, в общем случае, формулируется следующим образом: пусть есть набор узлов (обычно, пассивных приёмников), координаты которых в заданной системе известны с достаточной точностью; эти узлы далее называются “опорными”; кроме опорных – есть узлы, называемые “определяемыми”, для которых и требуется вычислять координаты и определять местоположение (то есть, это те самые терминалы). По условию задачи, опорные узлы принимают сигналы, излучаемые определяемыми узлами.

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

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

Узкая практическая интерпретация задачи: определение координат пользовательских терминалов, работающих с той или иной мобильной сетью. Естественно, в качестве источника сигнала может выступать не только типовой радиомодуль смартфона 4G/5G – годится и какой-нибудь WiFi-сигнал или Bluetooth. Данный технологический “сеттинг” легко переносится и на сценарии с прочими передатчиками. При этом, например, в самых современных стандартах мобильной связи, обычно называемых 5G, для непрерывной, точной геолокации терминалов, что называется, и методы определены, и специальные сигналы выделены: определение местоположения терминала имеет решающее значение для сети. Конечно, геолокация, без привязки к GNSS, доступна и в более ранних системах сотовой связи (LTE).

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

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

Теперь можно кратко рассмотреть основные методы геолокации, среди которых есть и редко упоминаемые.

Измерение времени распространения сигнала

Самый очевидный и самый мощный метод. Если точно известно время, затрачиваемое сигналом на преодоление расстояния между передатчиком и приёмником, то, зная скорость распространения сигнала, нетрудно вычислить расстояние. Взяв расстояния до нескольких приёмников – определяем координаты передатчика. Геометрическая основа – точки пересечения окружностей (сфер, в общем случае). Для идеального двумерного случая на плоскости – достаточно трёх приёмников. Необходимое количество может быть меньше, если применяются гибридные способы геолокации (см. ниже).

Это рабочий метод. Он лежит в основе GPS. Основная проблема тут в том, что нужно иметь общую с передатчиком схему отсчёта времени, поскольку необходимо знать, когда принятый сигнал был отправлен. То есть, необходима такая схема, метки времени из которой можно однозначно перевести в общее время сети опорных узлов-приёмников. Если передатчик не “кооперативный”, то ситуация сложнее: общие часы уже так просто не получить. Однако подходящие метки времени иногда можно вычислить из свойств самого принимаемого сигнала: например, устройство работает с какой-то своей сетью, синхронизирует с ней время, а время в этой сети – это время GPS.

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

Разработка алгоритмов коррекции ошибок по времени, которые возникают на этих направлениях, приводит к следующему методу геолокации передатчиков.

Измерение разности времени поступления сигнала

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

Запрос с подтверждением

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

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

Угол (направления) на приёмнике

Ещё более геометрический метод, который обычно и называют пеленгацией: определение каждым опорным узлом направления на передатчик. Это направление, в двумерном случае, принято задавать в виде угла, взятого относительно условного “севера”, который является общим для всей измеряющей сети. Построив лучи из нескольких точек, соответствующих опорным узлам, можно вычислить координаты определяемого узла по пересечению лучей.

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

Затухание сигнала

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

Этот метод можно улучшить, если измерять не просто затухание, а “разность” затухания на нескольких опорных узлах – логика совпадает с измерением разности времени получения сигнала (см. выше).

Гибридные методы

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

***

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

Естественно, если снова отказаться от полностью пассивной роли сети, то в качестве источников сигналов, по которым измеряется деформация, могут служить сами опорные узлы, координаты которых известны по определению. Собственно, в LTE, в 5G, для таких измерений даже предусмотрены отдельные сигналы. А само поле деформации, если его заранее измерить, может служить основой для навигации и определения координат.



Комментировать »

В статье Situational Awareness, которую я недавно упоминал, уровень “интеллекта” LLM GPT-4 (ChatGPT) неоднократно обозначен как соответствующий продвинутому старшему школьнику (smart high schooler). Появился свежий препринт (Vision Language Models are blind) на эту же тему, в котором, впрочем, выясняют, что самые продвинутые современные системы LLM – точнее, VLM, в том числе, GPT-4o, – не могут справиться с элементарными задачками, которые под силу и не особо продвинутому дошкольнику.

Впрочем, все эти задачи связаны с “картинками”, но именно поэтому в качестве предмета исследования выбраны те ИИ-системы, которые заявлены для работы с “визуальными” материалами. То есть, тут нельзя сказать, что данные системы “не имеют возможности видеть”, использовав распространённый манипулятивный способ перевода реальных проблем “интеллекта” LLM (например), возникающих с самыми элементарными задачами, в разряд “ограничений” самой технологии.

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

LLM Visual Test

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

Понятно, что речь тут может идти только о стопроцентном результате, когда верно указаны все ответы. Для “продвинутого старшего школьника” подсчёт точек пересечения линий на подобной картинке – более чем элементарная задача. Угадывание же при помощи оптимизированного перебора, которое выдают за “думание” для данных систем, тут не производит никакого впечатления. Лучший результат, который приводят в работе, это угадывание в ~77% случаев, продемонстрированное VLM Sonnet-3.5; GPT-4o – лишь около 49%, при этом, по формулировке задачи, случайный выбор ответа, без учёта картинки, дал бы одну треть верно угаданных результатов.

Так что, когда следующий раз в СМИ встретится очередная восторженная публикация о том, что “новая LLM на нейросети успешно сдала экзамены в вуз”, можно смело задуматься о том, смогла ли эта LLM хотя бы заполнить регистрационную анкету и вписать ответы в нужные “окошки”.



Комментировать »

Книга Эдмунда Беркли (Edmund Berkeley) Giant Brains, or Machines That Think (дословно: “Огромные мозги, или Машины, которые думают”, англ.; полный текст доступен по ссылке) вышла в 1949 году, 75 лет назад. В ней рассказано о базовых технических принципах, позволяющих строить компьютеры, а также о нескольких конкретных “думающих” “машинах” того времени, в том числе, про аналоговые вычислители.

Несмотря на название, “хайпа” в книге совсем нет. Напротив, автор ещё в предисловии отмечает, что некоторые его обобщения, – особенно, относящиеся к трактовке понятия “думания”, – могут быть спорными. Основную часть высказанных в этой книге утверждений про машины переписывают и сегодня, но уже безапелляционно и в канве современного “ИИ-хайпа”, а точнее – всех этих LLM/GPT/AI, успешно сдающих студенческие тесты по психологии.

Так, в книге дана та же трактовка способности складывать числа, как признака интеллекта, которую и сейчас постоянно используют. Беркли в данной книге относит к признакам “думания” (think) способность сложить в уме два числа, 12 и 8, получив число 20. При этом описывается, как мог бы складывать числа в уме человек – дописывание позиций к начальному значению (см. ниже). В качестве иллюстрации утверждается, что если бы нашлась, например, лошадь, которая смогла бы складывать числа и выдавать ответы, то такую лошадь люди непременно бы посчитали способной думать (к сожалению, не объясняется, почему говорящая лошадь, не умеющая выдавать ответы на арифметические вопросы, должна быть объявлена не-думающей; это, между тем, очень близко к типичной современной трактовке работы LLM, которые выдают текст на естественном языке).

Тут особенно интересно следующее. Автор сначала описывает “процесс думания”, осуществляемый человеком, складывающим числа: вот, мол, этот человек использует свой разум для того, чтобы отсчитать восемь позиций, начиная от двенадцатой, и прийти к числу двадцать. То есть, казалось бы, тут почти уже охвачен действительно важный, определяющий момент – возможность описать процесс счёта для внешнего наблюдателя, снабдив описание представлением о числах и отделив сам процесс от конкретных, “механических” значений. К сожалению, этот момент в книге тут же теряется, а вместо него, в сопровождении дополнительных аспектов условного ветвления и поиска по индексу (тьюринг-полнота, видимо), развивается небогатое обратное утверждение: мол, если нечто, – даже не говорящая лошадь, а механический калькулятор, – может вывести сумму 12 и 8, то это нечто тоже думает. Естественно, дальше в книге подчёркивается, что речь,- пока что, по состоянию на 1949 год, – не идёт об “интуитивном мышлении”, но в дальнейшем возможна и его реализация. То есть, ещё одна яркая параллель с современными популярными статьями про AGI (универсальный ИИ). Но, напомню, всё опубликовано в 1949 году.

(Вообще, то, насколько по-разному люди считают в уме, как раз является весьма богатым направлением. Важен сам используемый процесс осознаваемого представления, о котором человек может рассказать: оказывается, кто-то представляет себе ленту с ячейками (машина Тьюринга?), кто-то – счётные палочки, а кто-то – таблицу, нарисованную на воображаемом бумажном листе.)

В книге, кстати, определены и детально описаны многие современные разумные способы применения машин: каталогизация данных, поиск в библиотеках, распознавание образов, распознавание рукописного текста, голосовой ввод текста и т.д. Это то, чего часто не хватает современным “хайп-публикациям” про ИИ.



Комментировать »

Если (вдруг) появился универсальный “квантовый компьютер” нужной мощности, то как именно будут выглядеть технические шаги по раскрытию ранее записанного TLS-трафика? Под “квантовым компьютером” здесь подразумевается аппарат, выполняющий алгоритм Шора. А в роли взламываемой криптосистемы выступает алгоритм Диффи-Хеллмана на эллиптической кривой (ECDH – типовой алгоритм для современного состояния TLS). Шаги потребуются следующие.

1.

В записи трафика присутствуют начальные TLS-сообщения, обеспечивающие распределение общего секрета. Если таких сообщений нет, то раскрыть трафик рассматриваемым способом – не выйдет. Выделить начальные сообщения нетрудно: они начинаются с байтового префикса с зафиксированным значением и имеют строгую структуру. В трафике всегда остаются ключи, согласованные сторонами по протоколу Диффи-Хеллмана (равно как и с использованием RSA или другого метода инкапсуляции). Я писал об этом ранее. Заметьте, что записываются и ключи, согласованные с использованием современных криптосистем, обладающих постквантовой стойкостью. Просто, считается, что их сложнее восстановить даже с использованием гипотетического квантового компьютера.

Из начального сообщения клиента выделяется блок с открытой частью клиентского обмена ECDH. Например, если используется ECDH на кривой P-256, то в специальном и легко обнаруживаемом блоке данных будет содержаться пара координат точки P на кривой P-256, представляющей собой открытую часть обмена ECDH. Это 64 байта (плюс дополнительные байты с указанием на используемый формат), то есть, два блока по 32 байта: координаты X и Y.

2.

Клиентская часть ECDH представляет собой результат умножения базовой точки на секретный скаляр – значение скаляра и есть секретная часть ECDH клиента: это натуральное число n. Открытая часть ECDH, точка P, это результат [n]G, где G – точка-генератор, заданная в параметрах криптосистемы.

Полученные координаты точки P “загружаются” в квантовый компьютер, который уже должен быть настроен на параметры соответствующей криптосистемы, то есть, содержать схему, реализующую алгоритм Шора (нахождения периода функции) для подгруппы кривой P-256, образованной точкой G. Как именно загружаются значения в квантовый компьютер – пока что не известно, поскольку никаких практических квантовых компьютеров создано пока что не было (ну или, если хотите, не было опубликовано их содержательных описаний). Вероятно, у этого компьютера должен быть некоторый классический интерфейс, воспринимающий значения байтов координат точек, и переходные схемы, которые преобразуют эти значения в коммутацию и состояния квантовых “гейтов/триггеров” и кубитов. Неизвестно даже, сколько этих “кубитов и гейтов” будет нужно: несколько миллионов или несколько триллионов. Что уж там говорить про схемы коммутации.

(Заметьте, впрочем, что так как задействованный математический аппарат квантовой механики манипулирует комплексными числами – или, что эквивалентно, синусами и косинусами, – то все открытые тексты и решения можно уместить в пространстве состояний одного “непрерывного” кубита. Континуум, свернувшийся окружностью за привычным синусом, позволяет это легко проделать. Ещё и места останется, как минимум, в два раза больше, чем займут все решения всех проблем со всеми возможными шифрами в степени всех ключей. Это, впрочем, другая история.)

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

Аналогичная схема сработает и для открытого параметра ECDH, который отправил сервер. Для раскрытия ключей защиты трафика – достаточно знать один из секретов: клиентский или серверный.

3.

Общий секрет в ECDH образуется путём умножения точки-генератора на произведение секретов сторон. В рассмотренном только что случае, достаточно умножить открытый параметр DH сервера Q на секрет клиента, вот так: [n]Q (именно эту операцию проделывает клиент в ходе штатного процесса установления TLS-соединения). Секрет клиента, как мы только что выяснили, был раскрыт при помощи квантового компьютера. Результат умножения даёт точку на кривой, координата X которой используется в качестве задающего значения для генерирования секретных симметричных сеансовых ключей защиты трафика TLS. Функция, генерирующая сеансовые ключи, известна. Так как защищённые записи содержат коды аутентификации, сторона, взломавшая секрет ECDH, может тут же легко проверить, что найденный секрет соответствует записанному трафику. Симметричные ключи позволяют расшифровать трафик сеанса, используя шифр, номер которого тоже записан в начальных сообщениях: эти сообщения как раз и нужны для того, чтобы, кроме прочего, стороны согласовали используемый шифр.

*

Несомненно, прогресс в разработке систем “квантовых вычислений” есть. Однако вот уже несколько лет существенная часть прогресса сосредоточена на генерировании хайпа, поэтому даже до минимально практических схем не только далеко, но даже и не ясно, возможны ли такие схемы в принципе. В описанной выше схеме квантовый компьютер используется в роли “оракула”. Так же будет происходить и на практике: в рассматриваемой схеме для работы квантового компьютера не нужны какие-то дополнительные байты TLS-трафика, какие-то шифры или, условно, “части ключей”. С тем же успехом секретный параметр Диффи-Хеллмана можно просто угадать: запись трафика позволяет однозначно определить правильность угаданного значения.



Комментировать »

В чём причина смены дня и ночи на Земле? Правильный ответ: причина в том, что Солнце вращается вокруг Земли. А если вы вдруг подумали, что “причина во вращении Земли вокруг своей оси”, то представьте, что смена дня и ночи прекратилась, а Земля теперь всё время повёрнута к Солнцу одной стороной, то есть, Солнце более не вращается вокруг Земли. Но, предположим, Земля всё ещё вращается вокруг Солнца, а раз смены дня и ночи нет, то это как раз потребует вращения Земли вокруг свой оси, поскольку к Солнцу должна всё время быть повернута одна и та же сторона. Более того, если бы Земля, в той же схеме, вокруг свой оси не вращалась, то смена дня и ночи как раз происходила бы, вот только обычные день и ночь продолжались бы, примерно, по полгода (вспомните про полярную ночь и полярный день).

Вращение сложно интерпретировать, по тем же причинам, по которым сложно строго определить понятие угловой меры. Отличным примером является следующее наблюдение: пусть Земля вращается вокруг Солнца, а вокруг Земли вращается Луна – какова тогда траектория движения Луны вокруг Солнца? Оказывается, если на систему смотреть обычным образом, то траектория движения Луны практически совпадает с орбитой Земли: Луна не выписывает никаких “завитушек”, а вращение Луны вокруг Земли выглядит так, что Луна то немного опережает Землю, то – немного отстаёт.

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

Представление о том, что “планеты вращаются вокруг Солнца, Солнце – центр” – это модель Солнечной системы, в противопоставление варианту “планеты и Солнце вращаются вокруг Земли, Земля – центр”. Сильно упрощённый вариант гелиоцентрической системы позволяет легко разрешить логические противоречия “странного” наблюдаемого перемещения планет. В разрешении противоречий состоит определяющий признак нового знания, но с ролью гелиоцентрической системы всё несколько сложнее.

Схема, где в центре Солнце, а по концентрическим окружностям движутся планеты и, в том числе, Земля, позволяет довольно просто объяснить причину наблюдаемых “странностей”. То есть, схема с Солнцем в центре – лучше в иллюстративном плане. Но из этого не нужно делать вывод, что, мол, использование такой схемы (именно на уровне круговых орбит) было огромным “научным прорывом”. Да, само это рассуждение, – о “прорывном значении гелиоцентрической системы” в противопоставлении геоцентрической, – нередко используется в разном научпопе как “очевидная” иллюстрация “внезапной” замены “неверных и устаревших” представлений на “правильные”. Но, во-первых, эти системы в науке и использовались как модели, лежащие в основе методов расчётов, причем, использовались параллельно, и так же используются сейчас; во-вторых, на практике, игрушечная гелиоцентрическая система с круговыми орбитами – и не удобная, и точность не повышает.

По причине того, что пошаговое “преобразование Фурье” с введением дополнительных окружностей (эпициклов) позволяет с любой заданной точностью приближать любые наблюдаемые траектории движения светил, якобы “неверная” система, в которой Земля – центр, позволяет точнее описывать движение, пусть и ценой добавления новых таблиц (это до сих пор так во многих задачах навигации на Земле). Понятно, что это никак не отменяет преимуществ современных гелиоцентрических систем с более точными орбитами (как минимум, эллиптическими) для расчётов межпланетных перелётов. Очевидно, ни та, ни другая системы – не определяют универсальным образом, что вокруг чего вращается, потому что иногда Солнце вращается вокруг Марса.

Древние астрономы выполнили “преобразование Фурье” для наблюдаемых траекторий движения светил, получив простые эпициклы и деференты – способ записи, в виде конечной и понятной формулы (или чертежа), отлично аппроксимирующий наблюдаемое движение. Это способ упрощения описания движения, а процесс построения такого способа – то, что упускают из виду, приписывая интеллект генераторам текста. Простые “модели на эпициклах”, конечно, не подразумевали учёта внешних возмущений, поэтому найти Нептун только таким способом – не получится. И в этом одно из подлинных, определяющих отличий выхода моделирования, так сказать, на межпланетный уровень, а вовсе не в том, что на концентрических окружностях, нарисованных вокруг точки, которая обозначена как Солнце, гораздо проще объяснить причину ретроградного Меркурия.



Комментировать »