sab123: (Default)
[personal profile] sab123
В "Exploring the trade-off between deep-learning and explainable models for brain-machine interfaces" https://neurips.cc/virtual/2024/poster/94983 люди декодируют сигналы с электродов в мозге чтобы управлять симулированными конечностями.

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

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

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

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

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

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

Date: 2025-01-03 02:49 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

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

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

Date: 2025-01-04 01:13 pm (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

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

Date: 2025-01-03 04:47 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Был у меня Fitbit Charge 4, в котором был датчик атмосферного давления для учета перепада высот на хайках и пройденных этажей по лестнице. Он иногда принимал прогулки на ветру или плавание в бассейне за подъём на этажи, но в целом работал приемлемо. Недавно он сдох, и я его заменил на Charge 6, в котором от датчика давления для удобства пользователей избавились (опять же, дырка для датчика не способствует стопроцентной водозащищённости), но добавили ГПС для лучшего учета пройденного расстояния. Вот казалось бы, что с помощью ГПС и инерциального счисления можно вычислять высоту подъёма с достаточной точностью, ан поди ж ты. Не считает эта девайсина этажи, хоть тресни. Возможно, это на каких-то масштабах не так-то просто.

Date: 2025-01-04 02:34 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Они там три дюжины разных экзерциций якобы умеют распознавать; в частности, отличают walking от elliptical, так неужели проблема перепад высот рассчитывать? У ГПС точность по вертикали хуже, но в данном случае ГПС нужен только для контроля, если вдруг инерциальное счисление будет с ума сходить.

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

Date: 2025-01-04 05:45 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Там этих разнообразных активностей несколько дюжин. Я к тому, что было бы желание, а интегрировать ускорения по вертикали в окне длительностью секунд 20-30 и засчитывать этаж каждый раз, когда за это время был подъем на 3 метра и физическая активность типа ходьбы или бега, не очень сложно. Впрочем, возможно, что опасения насмешек "я делал бег на месте во время подъема на лифте на Empire State building, и мне 100 этажей насчитало" заставляют их отказаться от этой идеи.

Date: 2025-01-04 10:21 am (UTC)
selik: (Default)
From: [personal profile] selik
Рискну предположить, что когда вы говорите, что фильтр Кальмана вычищает шумы, то под шумами подразумеваете погрешности измерений. Пусть у нас есть один сигнал. Ставим интегратор – это будет сглаживающий фильтр, который уберёт всплески шумов.

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

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

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

Если мы пойдём классическим путём, то должны построить функцию сигнала для каждой мышцы (напомню – около 100 мышц). А потом попытаться соединить эти функции в функцию управления рукой – адская комбинаторика, любой комп повесится. Если для каждой мышцы сигнал – это всего лишь включен (1) и выключен (0), то мы получим 2^100 комбинаций. А реально у нас разная амплитуда сигналов. До морковкина заговенья будем считать. На нынешнем этапе развития вычислительной техники это невозможно.

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

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

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

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

June 2025

S M T W T F S
1 2 3 4 567
8 9101112 1314
15 16 171819 2021
22 2324252627 28
29 30     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 1st, 2025 08:27 pm
Powered by Dreamwidth Studios