sab123: (Default)
https://www.breitbart.com/border/2025/04/20/new-mexico-democrat-judge-resigns-after-ice-arrests-alleged-tren-de-aragua-gang-member-in-his-home/

Арестовали нелегала за нелегальное владение оружием и принадлежность к банде. А проживал он у судьи в доме. Интересно, судья там тоже подельник? На фоточках они корешатся.
sab123: (Default)
https://www.breitbart.com/environment/2025/04/11/greenpeace-turns-u-s-embassy-pond-blood/

Гринписьдюки покрасили пруд у американского посольства в Лондоне в красный цвет. С мотивацией, что это типа протест за Палестину и против продажи оружия Израилю. Хотя, казалось бы, где экология, а где Палестина. Даже нимало не заморочившись тем, какой ущерб они нанесут городской живности в пруде. Еще раз наглядно продемонстрировали, что экология для них - повод, а главная цель - коммунячество.
sab123: (Default)
https://www.dailymail.co.uk/news/article-14591193/Ukrainian-deserter-dodges-fighting-Kyiv-joining-Russias-cosmonaut-program-flying-International-Space-Station.html через https://vit-r.dreamwidth.org/1265560.html :

Дядечка перешел из украинской армии в русскую вместе со всем Черноморским флотом, подался в космонавты, и теперь летает на МКС. А на Украине его объявили в розыск и заочно приговорили к 15 годам за измену (интересно, вместе со всем флотом, или его лично выделили?).

Напоминает анекдот про "шо, уси?"

B и BCPL

Mar. 29th, 2025 08:05 am
sab123: (Default)
Интересно ли вам, что из себя представляли языки B и BCPL? Мне всегда было интересно, но как-то не подоворачивалось информации. А тут благодаря https://vak.dreamwidth.org/1367620.html посмотрел на историческую веб-страничку ДМР (http://cm.bell-labs.co/who/dmr/) и прочитал описания B (http://cm.bell-labs.co/who/dmr/kbman.pdf) и BCPL (http://cm.bell-labs.co/who/dmr/bcpl.pdf). Там же есть исходники двух ранних версий компилятора C (http://cm.bell-labs.co/who/dmr/primevalC.html). Заодно поностальгировал про ранний интернет, где 1 МБ - был БОЛЬШОЙ файл и об этом предупреждали.

В-общем, B был практически как ранний С (т.е. без структур) без типов. Точнее с одним целым типом "слово", который был и целым и указателем (сдвиги всегда были логическими, то есть для них целые всегда были беззнаковыми). Доступ к байтам был через функции упаковки-запаковки.

Оператора for еще не было. Операторов break и continue не было, хотя break был в BCPL.

Операций && и || еще не было, вместо них использовались битовые & и |. Операции с присваиванием были как в раннем C, с = слева, то есть например не +=, а =+.

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

Инциализация переменных была тоже как в раннем C, без знака =. Интересно, что в инициализации для взятия адреса переменной не нужно было использовать & как в других местах.

Умолчальным классом переменных был не автоматический, а статический (и для него даже не было слова static, а просто каждая не явно определенная переменная предполагалась по первому использованию статической), а для автоматической надо было писать auto. Extern назывался extrn.

В строках эскейпинг делался не через \, а через *, как в BCPL. Была определена последовательность *e, которая использовалась для конца файла, и также для конца строки (*0 была определена, но очевидно не использовалась для конца строки). Я подозреваю, что фактическое значение *e было такое же, как и *0, поскольку в BCPL на конце строки тоже был 0.

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

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

jmp *(r3)+

Привет spamsink'у, который недавно обнаружил аналогичный код в другом месте. Это, видимо, было для тех времен типовым и модным решением.

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

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

Argc и argv еще не были разделены, в языке с единственным типом это не требовалось, число аргументов просто передавалось в первом слове argv.

Теперь про BCPL:

Семантически он почти эквивалентен B, но с чуть другим синтаксисом. Как сам Томпсон пишет в описании B, он "по сути BCPL с более богатым набором операций, но более бедным набором операторов". Подобно Алголу, BCPL был определен в виде логических лексем, для которых существовали варианты представлений (возможно это было связано с тем, что у разных машин тогда были разные сильно ограниченные наборы символов, и все выкручивались как могли, а для публикации в журналах использовали типографические красивости). Например, "(" была лексемой RBRA, а ")" - RKET. Поэтому неудивительно, что Ритчи с Томпсоном стали использовать более богатый набор символов из ASCII и получили B.

Богатый набор операторов сводился к тому, что для каждого логического оператора была альтернатива с обратным значением: if-unless, while-until (и варианты пост-условия для обоих), if был без else, а его вариант с else назывался test (видимо таким образом устранялась знаменитая сишная неоднозначность, которая тут была бы еще хуже, поскольку перевод строки был альтернативным вариантом точки с запятой). Был break (но не continue), и finish, который останавливал всю программу. Switchon переехал в B и C почти без изменений, но потерял "on" на конце.

Очень запутанно рассказано про lvalues и rvalues, и если не знать заранее, что они из себя представляют, то будет вообще непонятно. Возможно это потому, что более длинное описание было в языке CPL, а описание BCPL - это про что осталось от CPL после обрезания. Похоже на то, что понятия указателя и даже адреса тогда то ли не существовали, то ли в этой школе мысли считались неприличными, а более точными, приличными и умственными - lvalue (указатель/адрес) и rvalue (значение). Язык делался под машину с пословной адресацией, и потому естественным образом увеличение адреса на единицу давало следующее слово. Явным образом сказано, что аргументы функции идут на последовательных адресах, поэтому взяв адрес одной, можно его увеличивать и получать адрес следующих аргументов. Но в декларации функции надо было перечислить максимально возможное (а не минимально возможное как в C) количество аргументов.

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

Var1, Var2, Var3 := Val1, Val2, Val3

но функция не могла возвращать сразу несколько значений.

Аргументы функции писались в квадратных скобках, а массив (вектор) индексировался как звездочка и квадратная скобка, например array*[index]. Впрочем, Ритчи пишет, что в их версии BCPL они быстро поменяли квадратные скобки для функций на круглые. То есть, пардон, агрументы не только функций, но и подпрограмм, они различались, и функция определялась как выражение (но поскольку блок мог быть выражением и вернуть значение, то могли быть произвольной сложности), а подпрограмма как блок.

Комментарии были через //! То есть, оказывается, что в вопросе комментариев C++ прошел полный круг.

Имена переменных или начинались с большой буквы или были одной маленькой буквой, а все многобуквенные слова из маленьких букв были зарезервированы под служебные. Переменные классифицировались как static и dynamic, и по умолчанию переменные были динамическими (это исчезло в B), а статические требовалось объявлять или как global, или как метку(!) на операторе присваивания внутри функции. Имена функций и подпрограмм тоже считались переменными (это, видимо, алголоподобность), всегда статическими (но можно было их присваивать как lvalue, то есть указатель, в другие переменные).

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

Строковые константы имели одновременно длину в первом символе перед строкой и завершающий код 0 в символе после строки.

Были символичесие константы И (ограниченный) препроцессор, которые пропали в B.

P.S. У меня создается впечатление, что ключевым моментом перехода от B к C стал переход от шитого кода к непосредственной кодогенерации. А в остальном язык просто плавно эволюционировал по мере того как они добавляли фичи к компилятору.

P.P.S. Современное применение threaded code к асинхронному программированию: https://babkin-cep.blogspot.com/2025/02/asynchronous-programming-9-composition.html (текст делается более понятным, если его читать с первой части)
sab123: (Default)
Вынесу из недавних комментов (пардон, ссылку искать лень): Япония 1930-х не только была абсолютистской феодальной монархией, но и теократией тоже: император в ней был даже не верховным жрецом, а прямо богом. То есть, выходит, социализмом японского разлива. То есть, 2-я Мировая война выходит Великой Социалистической и с этой стороны тоже (другие социализмы: СССР, Германия, США, про Англию и Францию не очень понятно, но похоже что тоже - после войны они точно стали социализмами, а вот как было до войны - мне не очень понятно).

И дополнительно: https://lxe.dreamwidth.org/3116177.html . Похоже, что эти люди (социалисты) подразумевают под "фашизмом" любую не-теократию. Настоящий фашизм, естественно, был теократией, но с точки зрения коммунистов недостаточно теократичной. То есть, демократия, где людишки делают что хотят - это для них "фашизм".
sab123: (Default)
https://spectrum.ieee.org/transformer-shortage

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

В-общем, не только наше электричество делается дороже, но и хер нам, а не трансформаторы из-за этих мудаков.
sab123: (Default)
https://www.breitbart.com/politics/2025/03/10/report-majority-of-biden-documents-signed-by-autopen-signature-raises-eyebrows/

Почти все бидонские подписи на документах сделаны машинкой. Однако отречение подписал сам, видимо для этого пришел в сознание.
sab123: (Default)
https://www.breitbart.com/entertainment/2025/03/07/meghan-markle-tells-friend-her-surname-is-sussex-sparking-mockery/

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

Но тут есть более интересный момент. Герцогиня Сассекс - дворянский титул, а американская конституция запрещает американским гражданам дворянские титулы, и требует отказываться от них при натурализации. Ну, муж ее, как я понимаю, только грин-карту получил, и в американские граждане не метит. А она-то американская гражданка, и хоть и жена герцога Сассекса, герцогиней быть не может. Как же так, дорогая редакция? Нелегальнй титул?
sab123: (Default)
https://en.m.wikipedia.org/wiki/Kamala_(wrestler)

James Arthur Harris (May 28, 1950 – August 9, 2020),[4] better known by his ring name Kamala, was an American professional wrestler. Nicknamed "The Ugandan Giant", Kamala portrayed a fearsome and simpleminded Ugandan. He wrestled barefoot, clad only in a loincloth, his face painted with war paint and two stars painted on his chest and a moon painted on his stomach.
sab123: (Default)
Это наверное последняя тема с NeurIPS'а, я ее вроде у кого-то (vak?) раньше видел, но тут тоже была презентация. И чем дольше я про эту идею думаю, тем больше я нахожу в ней неувязок. Так что я сейчас вкратце расскажу идею, а потом про неувязки.

Идея такая, чтобы представлять плавающие числа их логарифмом по базе 2, и выгода предполагается в том, что 4-битный логарифм заменит 16-битное плавающее число. Операции меняются, умножение превращается в сложение, деление в вычитание, а для сложения-вычитания вообще-то нужно переводить в нормальное представление, но для простого случая представления чисел в диапазне (0, 1] с округлением сложение заменяется на логику "если оба числа равны, то результат будет равен одному числу, умноженному на 2, а иначе большему из чисел", вычитание же "если оба числа равны, то (почти) 0, иначе если логарифм отличается ровно на единицу, то меньшему числу, иначе большему числу". И для этого же случая представления нахождение логарифма вычисляется как "найти первый ненулевой бит", а в обратную сторону - сдвинуть 1 на значение логарифма.

Теперь как это будет выглядеть в деталях, и проблемы. Во-первых, конечно, log4 будет иметь точность представления не float16, а fixed16, поскольку во float есть своя логарифмическая часть.

Чтобы представить диапазон (0, 1], мы представляем его как [2^-15, 2^0], то есть число в представлении будет отрицательной степенью двойки. Обратите внимание на то, что точно 0 в этом случае представить невозможно, это будет 2 в минус-бесконечной степени. И шаг между числами будет расти вместе с самими числами: разница между 2^-15 и 2^-14 будет 2^-15, но разница между 2^-1 и 2^0 будет 1/2. То есть, все значения между 1/2 и 1 округляются в одну из этих двух сторон. Это можно несколько поправить, если сделать логарифм не целым, а числом с фиксированной точкой. Если мы поместим одну цифру логарифма после точки, то у нас будут числа от 2^-7 до 2^0 с шагом в степени 1/2. Соответственно, 2^(-1/2) уже около 0.7, не так плохо. Но точность (в лучшем случае) стала соответствовать не fixed16, а fixed8. Если поместить две цифры логарифма после точки, то станет соответствовать fixed4 - такая же точность 4 бит, но с другим распределением значений!

Все эти особенности представления может быть и ничего для байесианских вычислений, где во-первых активно используется деление 1/x, во-вторых диапазон от 0 до 1. Но у нейросети другие особенности. Она на самом деле уже и без того работает на логарифмах (см. https://babkin-cep.blogspot.com/2017/06/neuron-in-bayesian-terms-part-2.html и https://babkin-cep.blogspot.com/2017/06/neuron-in-bayesian-terms-part-3.html), так что проблем с делением нет, и неравномерность распределения значений вредит, и во-вторых ей нужен симметричный диапазон как минимум [-1, 1]. То есть, нам надо отвести один бит под знак (вне логарифма, поскольку отрицательные числа не представимы логарифмом), и в итоге log4 со знаком получает ту же точность, что fixed4 со знаком! Обратите внимание, что в отличие от обычных представлений, использовать диапазон [0, 2], сдвинутый на единицу, не получится, поскольку его края представляются асимметрично, только внешний знак и специальная логика на его обработку. Ну и в функции нелинейности из-за ограниченности возможных значений выйдет жопа, даже если функция ReLU.

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

рыба

Feb. 15th, 2025 03:34 pm
sab123: (Default)
Читал у https://jlm-taurus.livejournal.com всякие воспоминания про рыбную промышленность. Узнал, что крупную рыбу типа осетров из рек европейской России выловили почти всю при большевиках, в 1920-х годах. А вот интересно, как бы оно пошо без большевиков и их мании перевыполнения дебильных планов любой ценой?
sab123: (Default)
https://www.msn.com/en-us/news/us/former-cia-analyst-pleads-guilty-to-leaking-info-on-planned-israeli-attack-on-iran/ar-AA1xoFsW?ocid=TobArticle

Персонаж мусульманского происхождения, работавший в ЦРУ, слил израильские секратные планы в Иран. С другой стороны, были точно так же и случаи персонажей еврейского происхождения, сливавших американские секретные планы в Израиль. Ну и прочие виндманы. И закоммуняцкие деятели, сливавшие много лет в СССР, особенно в рузвельтовские времена. В-общем, заставляет задуматься о доступе к секретам людей с двойной лояльностью.
sab123: (Default)
https://www.firstpost.com/explainers/sai-varshith-kandula-indian-american-8-years-prison-attempted-white-house-attack-13853645.html

https://www.msn.com/en-us/news/us/attempted-white-house-attacker-receives-sentencing/ar-AA1xl90z?ocid=TobArticle

Некий индус в мае 2023 года взял напрокат грузовик в Ю-Холе (большой, 24-футовый) и поехал им ломать забор в Белом Доме. Забор оказался крепкий, с двух попыток не сломался, сломался грузовик. После чего индус достал из рюкзака флаг со свастикой и стал им махать, пока его не арестовали. Причем старательно объяснил, что свастика не индусская, а нацистская, и что ему очень нравится товарищ Гитлер, и потому он хотел заменить в Америке демократию на диктатуру. У него диагостировали шизофрению, которая по мнению врачей привела к такому инциденту. И дали 8 лет тюрьмы, плюс штраф. Но почему тюрьмы, а не дурдома? По всем показаниям должен бы быть дурдом. Подозреваю, что махай он коммунячьим флагом - даже дурдома бы не дали, не то что тюрьмы.

P.S. И сказал, что организовал бы убийство Байдена, ели бы это помогло ему в достижении его целей. Как говорится в Швейке, если бы у него был фотоаппарат, то он бы им фотографировал военный объект.

Llama

Jan. 14th, 2025 10:20 pm
sab123: (Default)
Вот еще нашел интересную ссылку с NeurIPSa, документация про как использовать Ламу:

https://llama-stack.readthedocs.io/en/latest/building_applications/index.html

И внутри нее ссылка на колаб: https://colab.research.google.com/drive/1F2ksmkoGQPa4pzRjMOE6BXWeOxWFIW6n

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

Атари

Jan. 9th, 2025 12:37 am
sab123: (Default)
Из ИЕЕЕ приехало:

https://spectrum.ieee.org/chuck-e-cheese-animatronics

Про аниматронику, про то что Чак И. Чиз оказывается не мыш, а крыс, и что изначально он вообще предполагался быть койотом, и ссылка на интервью с основателем Атари (и Чак И. Чиза) Ноланом Бушнеллом про историю Атари:

https://www.si.edu/media/NMAH/NMAH-AC1498_Transcript_NolanBushnell.pdf
sab123: (Default)
https://www.breitbart.com/entertainment/2025/01/06/actor-jon-cryer-says-kamala-harris-lost-election-because-americans-hate-black-women/

Это актер, который играл Алана Харпера в "Two and a half men". С бородой я его как-то не узнал, он сделался совсем похож на обезьяну. Он оказывается и в реальности такой же, как его персонаж!
sab123: (Default)
"Dense Associative Memory Through the Lens of Random Features"
https://neurips.cc/virtual/2024/poster/96886

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

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

"The Road Less Scheduled "
https://neurips.cc/virtual/2024/poster/96925

"Adam with model exponential moving average is effective for nonconvex optimization"
https://neurips.cc/virtual/2024/poster/93230

"Remove that Square Root: A New Efficient Scale-Invariant Version of AdaGrad"
https://neurips.cc/virtual/2024/poster/96023

"Unraveling the Gradient Descent Dynamics of Transformers"
https://neurips.cc/virtual/2024/poster/94737

"Deep Learning Through A Telescoping Lens: A Simple Model Provides Empirical Insights On Grokking, Gradient Boosting & Beyond"
https://neurips.cc/virtual/2024/poster/95420

"On Convergence of Adam for Stochastic Optimization under Relaxed Assumptions"
https://neurips.cc/virtual/2024/poster/93100

"SGD vs GD: Rank Deficiency in Linear Networks"
https://neurips.cc/virtual/2024/poster/95034

"A Continuous-time Stochastic Gradient Descent Method for Continuous Data"
https://neurips.cc/virtual/2024/poster/98309

"How Diffusion Models Learn to Factorize and Compose"
https://neurips.cc/virtual/2024/poster/95399

"Where Do Large Learning Rates Lead Us?"
https://neurips.cc/virtual/2024/poster/95929

"Don't Compress Gradients in Random Reshuffling: Compress Gradient Differences "
https://neurips.cc/virtual/2024/poster/96110

"The Implicit Bias of Adam on Separable Data"
https://neurips.cc/virtual/2024/poster/93086

Ну и про наше, где тоже есть такой аспект (в приложении, поскольку он не основной), краткий пересказ простыми словами, и там же ссылка на собственно статью:
https://babkin-cep.blogspot.com/2024/12/triceps-and-realseudo-at-neurips.html
https://babkin-cep.blogspot.com/2024/12/lasso-ista-fista.html
https://babkin-cep.blogspot.com/2024/12/realseudo-and-evaluation-of-activation.html
с дополнительными подробностями в
https://babkin-cep.blogspot.com/2023/02/arrested-bouncing-in-floatneuralnet.html
https://babkin-cep.blogspot.com/2023/10/comparing-floatneuralnet-options.html

Вкратце что меня заинтересовало:

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

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

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

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

У меня была проблема в том, что момент сочетался только с нестохастическим спуском. И по сравнению с нестохастическим спуском мой алгоритм для момента и шедулинга работает очень хорошо, однако при стохастическом спуске можно брать шаг в сотню раз больше и он оказывается еще лучше (хотя на первой паре сотен шагов мой вариант и его побеждает). Однако, посмотрев на что люди делают, наверное можно тупо брать для производства момента средний градиент от стохастического шага. Надо будет попробовать. И/или другой вариант - если скорость моментного нестохастического спуска падает, пробовать сделать пару сотен шагов стохастически и потом опять моментом.
sab123: (Default)
В "Exploring the trade-off between deep-learning and explainable models for brain-machine interfaces" https://neurips.cc/virtual/2024/poster/94983 люди декодируют сигналы с электродов в мозге чтобы управлять симулированными конечностями.

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

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

Но тут мне вот что непонятно:

1. Это мне пришло в голову только сейчас, поэтому не было возможности спросить лично, но почему собственно такое опосредованное воздействие является более объяснимым? Если изменение коэффициентов в Кальмановом фильтре в широком диапазоне способно сильно менять его эффекты, то это просто сдвигает проблему на один шаг косвенности, и теперь точно так же неизвестно, почему нейросеть меняет эти коэффициенты.

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

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

April 2025

S M T W T F S
  1234 5
678 910 1112
13 141516171819
2021 2223242526
27282930   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 23rd, 2025 02:27 pm
Powered by Dreamwidth Studios