Обновить
7

Пользователь

3
Подписчики
Отправить сообщение

🧠 Нейросеть на пальцах

  • Весовые коэффициенты нейрона — это линейный элемент, подчиняющийся принципу суперпозиции (аналогично резистору, конденсатору или индуктивности).

  • Функция активации — нелинейный элемент (как диод или транзистор), который нарушает суперпозицию и позволяет осуществлять модуляцию/демодуляцию сигнала.

  • Входные данные можно рассматривать как сигнал.

🔄 Идея с периодическим сигналом

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

Отсюда возникает идея: обучать сеть на упорядоченных данных, а эксплуатировать как придётся.

✨ Пример: XOR

x y XOR
1 1   0
1 0   1
0 0   0
0 1   1

Здесь x и y можно рассматривать как траекторную матрицу периодического ряда: 1 1 0 0 1 1 0 0 1 1 …

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

огранчение сервиса по временным интервалам - это просто, но создает множество проблем, собственно, и описанных в данной статье. К тому же создается впечатление что вам жалко свободных ресурсов для случая единственного забредшего на огонек пользователя. Поэтому данная статья о том как не стоит делать. Наиболее эффективная система ограничений строится на мгновенных метриках, число in-flight запросов, например. Вот о такой я бы почитал.

Спасбо за спасибо за комментарий! На мой взгляд, факт наступления для человечества эры ИИ, должен убедить в том что ДПФ, БПФ - это туфта, которая на практике не работает. Что же реально работает на практике? Посмотрите на искусственные нейронные сети: в их устройстве также присутствуют линейные КИХ фильтры с фиг-знает-какими параметрами + нелинейный фильтр + структура сети. На данном этапе развития человечества - это приоритет для всех вменяемых исследователей. Можно написать и об этом статью, но проблема даже еще глубже. Волны как носитель информации являются энергетическими монстрами: чтобы детектировать волну требуется несколько периодов + преобразование цифровых сигналов в волновые + перегенрация их на каждом этапе обработки + сквозные токи в транзисторах и пр. и пр. Короче угля будут добывать все больше и больше благодаря таким вот популяризаторам цифровых фильтров. Естественные нейронные сети тратят на обработку сигналов куда меньше энергии потому что не используют волны. Шире надо смотреть на вещи, чуть-чуть в сторону и обязательно в будущее!

Я бы все-таки обобщил. То что излагает автор в статье - это однобокий взгляд на вещи. Для погружения в тематику пойдет. Но, если внимательно приглядеться к формуле (которая в текущей редакции текста обозначена как 1.3) скалярного произведения, которая взята здесь за основу анализа, то можно обратить внимание на то что это банальный линейный КИХ фильтр со всеми вытекающими. В качестве "эталонных" коэффициентов можно брать синус/косинус, меандры, единицу и пр. У КИХ фильтра есть отклик, который мы можем настраивать под свои нужды подбором коэффициентов. Тогда весь этот ДПФ представляется лишь частным случаем задачи фильтрации. Возьмите свой набор коэффициентов и назовите анализ своим именем - в определеных обстоятельствах он даже будет работать и приносить пользу. КИХ фильтры со входа на выход передают спектральное население сигнала в неизменном виде - меняются только амплитуды и фазы гармонических составляющих, а новые частоты не появляются. Коэффициенты от синусоиды и от меандра хорошо усиливают свою основную гармонику и все что около нее, а остальные ослабляют, только и всего. Как ни странно, в линейных КИХ фильтрах присутствуют нелинейные эффекты: амплитуду некоторых гармоник можно снизить до нуля и, соответствующие спектральные составляющие исчезнут навсегда.
Чтобы все это понять нужно представить себе ДПФ как процесс развернутый во времени, а не то что у нас происходит одномоментно и раз и навсегда. Понятно, что с этим есть определенные трудности ведь доступная длина сигнала для анализа ограничена, но всегда можно сделать ДПФ оконным и "проскользить" им по всей длинне чтобы увидеть эффекты выбранного фильтра в динамике. И посреди всего этого нарисованного хаоса может быть даже придти к выводу, что лучше уж взять БИХ фильтр вроде алгоритма Гёрцеля.

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

Скажите, можно ли для поиска неизвестного сигнала использовать два меандра соответствующей частоты? А то коррелировать с трансцендентными косинусом и синусом несколько трудозатратно.

Числа используются для счета. Счет требует времени. Бесконечный счет требует бесконечного времени. Что если счет ограничить конечными временными рамками, например 1с. В качестве числа возьмем количество циклов некоторого периодического процесса. Т.е. один цикл в секунду - это аналог единицы, а два цикла - это два. Можно представить себе гармонический процесс определенной частоты в Герцах, который будет заменять собой аналогичное число. Нулем будет служить константа - колебание нулевой частоты. Физическая реализация потребует определенных затрат энергии - чем больше число, тем больше энерги требуется. Лимит наличной энергии определит самое большое исчислимое число в таком калькуляторе. Операция сложения здесь будет обратимой - из суммы всегда можно выделить слагаемые.

Модель числа несет на себе все достоинства и недостатки родителя. Когда мы берем одно яблоко и делим его на двоих, мы получаем две идентичные половинки, которые являются двумя новыми самостоятельными единицами. Но, по правилам арифметики, мы все еще называем их половинками или 1/2. Со времен римлян и греков, философы и прочие там физики-ядерщики делят предметы на части, стараясь достичь той самой неделимой единицы, которую условно зовут атомом. Когда у нас появится четкая концепция атома, неделимого на части, тогда и поговорим о том что такое ноль, и можно ли на него делить.

Для моделирования джиттера имеет смысл использовать экспоненциальное распределение

𝑋 = − \frac{1}{𝜆} ln ⁡ ( 𝑈 )

Временная ось не предполагает равномерного распределения — оно теряет смысл в контексте текущего момента. Экспоненциальные случайные величины хорошо суммируются, сохраняя тип распределения, и дают естественную модель задержек. По сути, экспоненциальное распределение выступает аналогом равномерного, если базовой величиной является текущее независимо от нас время.

Работая над каталогом фотографий, я столкнулся с интересным наблюдением. В таблице у меня два числовых столбца: id, который создаётся AUTOINCREMENT и идёт строго по порядку (0,1,2,3…), и randomId, который генерируется случайным образом. randomId я использую для того, чтобы прокручивать фотографии на рабочем столе в произвольном порядке. Получается любопытная картина: последовательный генератор делал Пеано и как следствие он даёт упорядоченное множество, а случайный — тот же набор чисел, но без структуры, то есть он получается ближе к понятию «множества» как простого набора. И вот вопрос: можно ли вообще построить модель чисел, которая не опирается на порядок или иерархию, а рассматривает их как чистые метки? Ведь тогда арифметика выглядела бы не как движение по последовательности, а как операции над множеством.

Вот прочитал я статью и понял что существует две концепции конструирования числел. Первая, кардиналы, различает числа так сказать количественно или частно: вот у нас три человека, значит в автобусе должно быть три свободных места чтобы они могли на нем уехать. Вторая, ординалы, различает числа качественно или в общем: мест в автобусе не хватит на трех человек. Вопрос: можно ли выделить эти два подхода из чисел в отдельные субстанции? Например, есть множество из трех объектов {1, 2, 3} - его мощность три, но порядок элементов не определен - просто коробка с тремя объектами. А есть множество в котором мощность не определена, но порядок элементов задан некоторым образом - через номер перестановки, например. Не знаю как правильно это сформулировать ибо не специалист. Если это возможно, то не получится ли так что концепции сформулированные изолированно будут устроены сложнее, чем когда они сформулированы совместно в применении к счетным множествам?

Вы ничего не понимаете: дата-центр теперь не только считает, но и немного варит. А дуга заодно решает вопрос с аварийным освещением и сигнализацией.

Интересный разбор, спасибо! Но всё же стоит отметить, что полноценный exhaustive matching в .NET пока недостижим. Даже при использовании всех доступных паттернов мы не можем гарантированно покрыть все варианты без явного default/_. Это делает конструкции менее строгими по сравнению с языками, где компилятор действительно проверяет исчерпываемость (например, F# или Rust).

Простой пример: у нас есть разные цветовые модели, заданные как record:

public record Rgb(int R, int G, int B);
public record Cmyk(int C, int M, int Y, int K);

string ToPrintString(object color) => color switch
{
    Rgb rgb   => $"RGB({rgb.R},{rgb.G},{rgb.B})",
    Cmyk cmyk => $"CMYK({cmyk.C},{cmyk.M},{cmyk.Y},{cmyk.K})",
    _         => throw new ArgumentException("Unknown color model")
};

Здесь мы вынуждены добавить _, потому что компилятор не проверяет исчерпываемость.

Моё решение — использовать паттерн Посетитель:

public abstract class Color
{
    public abstract T Switch<T>(
        Func<Rgb, T> rgbCase,
        Func<Cmyk, T> cmykCase);
}

public record Rgb(int R, int G, int B) : Color
{
    public override T Switch<T>(
        Func<Rgb, T> rgbCase,
        Func<Cmyk, T> cmykCase) => rgbCase(this);
}

public record Cmyk(int C, int M, int Y, int K) : Color
{
    public override T Switch<T>(
        Func<Rgb, T> rgbCase,
        Func<Cmyk, T> cmykCase) => cmykCase(this);
}

// Использование:
string ToPrintString(Color color) =>
    color.Switch(
        rgb  => $"RGB({rgb.R},{rgb.G},{rgb.B})",
        cmyk => $"CMYK({cmyk.C},{cmyk.M},{cmyk.Y},{cmyk.K})");

Здесь каждый потомок обязан реализовать метод Switch, и мы получаем строгую исчерпываемость без default. Если добавить новый тип цвета, компилятор сразу потребует обновить сигнатуру метода.

Пробежался поверхностно по тематике - есть два типа импульсов: EMI и EMP. Нас интересует EMP или единичный импульс. Больше всего им озабочены военные - у них чем короче импульс тем лучше поражается вся электроника в округе. Они везде пишут что короткие импульсы обладают широким спектром, но как это соотносится с распространением импульса в пространстве нигде не объясняется типа это и так очевидно. Тогда я стал трепать искуственный интеллект по этой теме. Вот что удалось вытянуть: есть уравнения Максвела и ему могут удовлетворять любые краказябры и их комбинации, лишь бы они удовлетворяли уравнению в каждой точке. Импульс распространяется в вакууме таким образом, что если б мы сделали мгновенный снимок в пространстве то он бы повторил динамику колебания в одной точке развернутую во времени, т.е. сигнал распространяется в полном соответствии с его способом генерации и никаких дополнительных компонент там нет. Но, есть большое но: когда EMP не в вакууме он взаимодействует со средой (антенна, воздух и пр. окружающие нас предметы), которая обладает собственными модами, которые взаимодействуя с EMP набирают из него энергию и их можно зарегистрировать как колебания, которые могут в том числе и переизлучаться в пространство если среда позволяет. То есть, широкий спектр импульса играет индикативную функцию, говоря нам что если собственные моды среды распространения попадают в этот диапазон, то мы получим реальные побочные колебания на этих модах.

Хорошо. Излучение состоит из двух компонент. Допустим мы здесь тянем к нулю электрическую составляющую поля, и, считаем, что магнитная в данной точке пространства описывается производной. Вопрос в том: будет ли и дальше этот "хвост" оставаться пологим по ходу движения? Могут ли две компоненты сохранить такую же конфигурацию дальше? У нас каждая точка пространства переизлучает (не знаю как правильно это называется) в соответствии с уравнением. Будет ли фронт устойчивым или распадется на гармоники на некотором расстоянии от передатчика? Было бы интересно построить соответствующий детектор и проверить. Наверняка кто-то уже пытался выяснить вызван ли "звон" линейностью приемника, который резонирует от воздействия импульса или вызван объективными широкополосными помехами.

Позволю себе поделиться своими наработками в данном направлении - может кто покритикует меня здесь конструктивно. Получется, что числа несут два разных вида информации: количественную (сколько), и порядковую (после чего), что не соответствует информационному наполнению слов. Вопрос который на первый взгляд не имееет отношения к рассматриваемой автором теме: можно ли каким-то образом выделить из чисел эти две ипостаси и использовать их по-отдельности? Например, мы хотим обрабатывать только информацию о количестве игнорируя порядок. Или порядок без знания о количестве. Я спрашиваю потому что здесь задача кодирования сводится с задаче сжатия данных. А сжатие опирается на особенности последовательностей (т.е. на свойства порядка).
Представим себе некоторый канал связи или хранилище информации, скажем файл на диске. Байты, составляющие этот файл хранятся в определенном порядке, и когда мы запрашиваем данный файл, эти байты приходят к нам с сохранением порядка. Даже если отдельные части файла приходят к нам асинхронно по сети, мы все равно после приема упорядочиваем их в исходную последовательность.
Теперь мы уберем требование того, чтобы передаваемые данные (неважно синхронно или асинхронно) требовали порядка, но при этом после получения сохраняли свой смысл. Это можно сделать, передавая некоторые базисные количества, например степени двойки. Тогда после получения набора базисных чисел мы можем восстановить передаваемое исходное число (или файл) независимо от порядка получения компонентов. Например, я что-то там закодировал числом 14 и хочу оперировать этим кодом без знания того что это число больше 13 и меньше 15. Тогда я разложу его в сумму 14 = 8 + 4 + 2. Восемь, четыре и два - это базисные количества и я могу их передавать в любом порядке (параллельно, последовательно или еще как-то), но после получения данных компонент их сумма всегда даст исходное число 14. Кодировка one-hot близка к данному принципу, но в ней все еще заложен порядок нулевых байт. Кстати, биологические нейроны игнорируют порядок поступающих данных, суммируя входящие заряды со всех дендридов без разбора как бы намекая, что мы на правильном пути.
Теперь мы уберем информацию о количестве и попробуем описать только порядок. Перестановки возникают тут сами собой: из N объектов можно составить N! перестановок и присвоить каждой из них свой уникальный номер. Например, числа 9, 10 и 11 можно переставить 6 различными способами. Если у получателя сообщения уже есть эти числа, то передав 1 мы сообщим ему что правильный порядок для них 9, 10, 11. А для 6 правильный порядок обратный 11, 10, 9.
Удивительно здесь то, что выделив две составляющие из числовой информаци объем передаваемых данных увеличился. Т.е. числа в том виде, к которому мы привыкли, уже сильно сжимают информацию и попытки №1 было бы достаточно на данном этапе пока мы не уйдем от чисел к чему-то более адекватному.

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

В статье приведены графики (те что во временной области), которые можно трактовать двойственно: либо это запись сигнала в фиксированной точке пространства с разверткой по времени, либо это мгновенный снимок процесса развернутый в пространстве. И та и другая интерпретация являются умозрительными и не существуют в виде некоторой реальной целостной сущности. Попробую разъяснить свою позицию: рассматриваемый процесс в определенном месте и в определенное время описывается некоторым уравнением (допустим дифференциальным). В одном месте в одно время решение может отличаться от того, что удовлетворяет уравнению в другом месте и времени. Иными словами, разные дифференцируемые функции могут служить решением одного и того же уравнения в разных местах. То есть уравнение рассматривает физическое явление локально (при разных значениях координат независимо). Тогда как интегральные преобразования оперируют решениями глобально - для всех значений аргумента, т.е. в виде функции, отталкиваясь от некоторых дополнительных предположений, например непрерывности, периодичности, начальных условий и пр. чего мы не требуем от уравнений.
Зайдем с другой стороны. Сначала у нас передатчик включен и генерирует некоторую несущую, потом он внезапно выключен. Оба состояния описываются одним и тем же уравнением для любых значений аргументов, хотя на графике описываются разными функциями в разных местах. Теперь задействуем свойство казуальности времени - мы не можем двигаться назад по нему (хотя фактически в дифференциальных уравнениях мы это делаем, но не далее чем на величину дельта). В состоянии "выключено" мы никаким образом не можем узнать что было до этого, так как уравнение никак явно не включает в себя отсылки на какое-либо "прошлое" кроме как локальной дельты по времени. Равно как, находясь в режиме "включено" нельзя сказать что где-то у нас в будущем будет "выключено". Применяя же преобразование Фурье, мы получаем неограниченный доступ к прошлому (к будущему тоже), нарушая принцип казуальности. Из-за чего вылазят артефакты на спектре. Единственного спектра нет из-за отсутствия доступа ко всему прошлому и будущему. Производя запись, мы волюнтаристски привязываем результат интегрального преобразования к одному из множества гипотетических сценариев развития событий.
Конечно, уравнения, особенно дифференциальные, могут обладать единственными решениями, которые являются глобальными в нашей терминологии. Но, это касается уравнений с постоянными параметрами. Поскольку у нас проиводится "выключение", то следует говорить об управляемом процессе, который уже описывается уравнением с переменными параметрами и для него нет понятия единственности решения, поскольку управление становится известным уже после его осуществления т.е. казуально. Решение определяется можно сказать поточечно, и оно может стать глобальным только по факту своего протекания и регистрации.
О переходном процессе во время управления. Проще всего представить процесс выключения как протекание естественного продолжения текущей фазы процесса но в ускоренном темпе. То есть раньше было время t, а стало время kt, где k стремится в бесконечность. Решением был cos(t), стал cos(kt), где для каждого старого времени t, текущего вперед, мы локально получаем "ускоренный" косинус. Но при таком подходе мы вносим в модель разрыв времени и, было бы более уместным, наверное, смоделировать управление как непрерывную зависимость частоты от времени cos(w(t)*t), где w(t_{sw}) = w_0 - частота несущей и w(t) убегает в бесконечность к моменту достижения сигналом нуля. Тогда у нас, действительно, появляется множество точек неотличимых (для решений в локальном смысле) от широкополосных помех.

Если мне не изменяет память, любая резкая попытка «сказать полю, что теперь тут ноль» не проходит бесследно.

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

Приёмники вокруг это прекрасно замечают, а те, кто потом посмотрит запись в Matlab, легко увидят знакомую картину: наложение прямоугольного окна во времени превращает чистую синусоиду в sinc-спектр.

1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность