Дерево нейронов: визуализация связи природы и технологий в форме дерева с цифровыми элементами.

Самовосстанавливающиеся нейронные сети в PyTorch: исправление дрейфа модели в реальном времени без переобучения.

Содержание

Реализация самокорректирующейся нейронной сети на PyTorch, которая обнаруживает дрейф, вносит обновления весов и автономно восстанавливает производительность без переобучения или простоев.

Делиться

5f2a57999d1b6ec4b7d629658c3f92f8

Ваша модель обнаружения мошенничества работает уже два месяца. Точность составляет 92,9%.

Затем структура транзакций незаметно меняется.

К тому моменту, когда ваша панель управления загорится красным, точность рухнет до 44,6%.

Переобучение занимает шесть часов и требует размеченных данных, которых у вас не будет до следующей недели.

Чем вы занимаетесь в течение этих шести часов?

Вкратце:

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

Поведение системы:

  • Позвоночник остается замороженным
  • Обновления адаптера в режиме реального времени
  • Обновления выполняются асинхронно (без простоев).
  • Символические правила обеспечивают слабый контроль.
  • Откат обеспечивает безопасность

Результат: повышение точности восстановления на +27,8% — с подробным объяснением компромисса в отношении полноты внутри.

Эта статья посвящена ReflexiveLayer: небольшому архитектурному компоненту, который находится внутри сети и адаптируется к смещенным распределениям, в то время как основная сеть остается неизменной. Адаптер обновляется в фоновом потоке, поэтому вывод никогда не останавливается. В сочетании с механизмом символических правил для слабого контроля и реестром моделей для отката, в этом эксперименте удалось восстановить точность на 27,8 процентных пункта, ни разу не изменив веса основной сети.

Результаты честные: возмещение ущерба реально, но сопряжено с компромиссом в виде отзыва информации, что имеет значение при выявлении мошенничества. Оба аспекта подробно описаны.

Полный код, все 7 версий, производственный стек, экспорт мониторинга, все графики: https://github.com/Emmimal/self-healing-neural-networks/

Почему стандартные подходы здесь оказываются неэффективными

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

Все стандартные подходы предполагают наличие у вас чего-то, чего у вас может и не быть:

  • Размеченные данные
  • Пора переобучиться
  • Контрольная точка, работающая в новой дистрибуции.

Слово «rollback» особенно вводит в заблуждение.

Откат к исходным весам при смещенном распределении не решает проблему — он её повторяет.

Мне нужно было что-то, что могло бы функционировать в этом промежутке: без новых размеченных данных, без простоев, без отката к дистрибутиву, которого больше не существует. Это ограничение определило архитектуру.

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

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

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

Вот как выглядит архитектура с первого взгляда:

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

class ReflexiveLayer(nn.Module): def __init__(self, dim): super().__init__() self.adapter = nn.Sequential( nn.Linear(dim, dim), nn.Tanh(), nn.Linear(dim, dim) ) self.scale = nn.Parameter(torch.tensor(0.1)) def forward(self, x): return x + self.scale * self.adapter(x)

Остаточное соединение (x + self.scale * self.adapter(x)) здесь выполняет важную работу. Параметр scale начинается с 0,1, поэтому адаптер изначально представляет собой почти нулевое возмущение. Сигнал основной сети проходит практически без изменений. По мере накопления коррекции масштаб может увеличиваться, но исходный выходной сигнал основной сети всегда присутствует в сигнале. Адаптер может только добавлять коррекцию; он не может перезаписать то, чему научилась основная сеть.

Адаптер не может перезаписать модель — он может только её исправить.

В полной модели слой ReflexiveLayer вставляется между магистралью и выходным блоком:

class SelfHealingMLP(nn.Module): def __init__(self, input_dim=10, hidden_dim=64): super().__init__() self.backbone = nn.Sequential( nn.Linear(input_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, hidden_dim), nn.ReLU() ) self.reflexive = ReflexiveLayer(hidden_dim) self.output_head = nn.Sequential( nn.Linear(hidden_dim, 1), nn.Sigmoid() ) def freeze_for_healing(self): for p in self.backbone.parameters(): p.requires_grad = False for p in self.output_head.parameters(): p.requires_grad = False def unfreeze_all(self): for p in self.parameters(): p.requires_grad = True

Во время процесса восстановления сначала вызывается функция freeze_for_healing(). Обновления градиента получает только ReflexiveLayer. После восстановления функция unfreeze_all() восстанавливает весь граф параметров на случай, если в конечном итоге будет выполнено полное переобучение.

Стоит отметить количество параметров: модель имеет в общей сложности 13 250 параметров, и слой ReflexiveLayer содержит 8 321 из них (два линейных слоя 64×64 плюс скалярный масштаб). Это составляет 62,8% от общего числа. Основная структура, которая отображает 10 входных признаков через 64 скрытых нейрона в двух слоях, содержит всего 4 864 параметра. Таким образом, адаптер не является «маленьким» по количеству параметров. Он имеет архитектурную направленность: его задача ограничена преобразованием скрытых представлений основной структуры, а остаточная связь и замороженная основная структура гарантируют, что он не сможет разрушить знания, полученные во время обучения.

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

Два сигнала, определяющие момент заживления.

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

Сигнал один: FIDI (Feature-based Input Distribution Inspection)

FIDI отслеживает скользящее среднее значения признака V14, признака, который сеть независимо определила как самый сильный сигнал мошенничества в эксперименте с нейросимволическим ИИ. Он вычисляет z-оценку на основе калибровочных статистических данных, полученных в ходе обучения:

FIDI | μ=-0.363 σ=1.323 порог=1.0 V14 чистый | среднее значение=-0.377 % <-1.5 = 18.8% V14 дрейф | среднее значение=-2.261 % <-1.5 = 77.4%

Когда z-оценка превышает 1,0, входящие данные перестают соответствовать обучающему распределению. В этом эксперименте z-оценка пересекает пороговое значение на 3-м пакете и остается повышенной. Смещенное распределение V14 имеет среднее значение на 1,9 стандартных отклонения ниже калибровочного, и это смещение применяется в виде постоянного сдвига для всех 25 пакетов. Система корректно обнаруживает это и никогда не возвращается к состоянию «Здоровое».

Сигнал второй: символические конфликты

SymbolicRuleEngine кодирует одно правило предметной области: если V14 < -1,5, транзакция, вероятно, является мошеннической. Конфликт возникает, когда нейронная сеть присваивает транзакции, отмеченной правилом, низкую вероятность мошенничества (ниже 0,30). При появлении пяти или более конфликтов в пакете запускается процесс восстановления, даже при отсутствии значимого z-балла.

Эти два сигнала дополняют друг друга. FIDI чувствителен к общему сдвигу распределения среднего значения V14. Подсчет конфликтов чувствителен к несоответствию правил модели на конкретных выборках и может выявлять локальные ухудшения, которые могут быть пропущены z-оценкой на уровне распределения. В наборе данных 15,0% случаев мошенничества (150 мошеннических транзакций в тестовом наборе из 1000 выборок).

Линейный график, показывающий Z-показатель FIDI по 25 партиям. Синяя линия находится около нуля для партий 1 и 2, затем резко поднимается до 1,45 в партии 3 и остается выше желтого пунктирного порогового значения 1,0 для всех остальных партий. Область выше порогового значения заштрихована красным.

Асинхронное восстановление: обновления весов, не прерывающие вывод данных.

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

class AsyncHealingEngine: def __init__(self, model): self.model = model self._lock = threading.RLock() self._queue = queue.Queue() self._worker = threading.Thread( target=self._heal_worker, daemon=True ) self._worker.start() def predict(self, X): with self._lock: # кратковременная блокировка, просто прямой проход self.model.eval() with torch.no_grad(): return self.model(X) def request_heal(self, X, y, symbolic, batch_idx, fraud_frac=0.0): self._queue.put({ # неблокирующий, возвращает немедленно «X»: X.clone(), «y»: y.clone(), «symbolic»: symbolic, «batch_idx»: batch_idx, «fraud_frac»: fraud_frac, })

Функция request_heal() возвращает управление немедленно. Поток вывода никогда не ждет. Рабочий процесс восстановления принимает задание, получает блокировку, выполняет шаги градиента и освобождает блокировку. Флаг daemon=True гарантирует, что фоновый поток завершится при завершении основного процесса, не оставляя «осиротевших» потоков.

Что происходит во время заживления?

Восстановление объединяет три компонента потерь в одну цель:

total_loss = 0.70 * real_loss + 0.24 * consistency_loss + 0.03 * entropy

(Коэффициенты получены из значений alpha=0.70 и lambda_lag=0.80, поэтому член согласованности равен (1 — 0.70) * 0.80 = 0.24.)

Реальная потеря данных (эталонные данные)

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

fraud_frac = 0% -> pos_weight = 1.0 (без корректировки) fraud_frac = 10% -> pos_weight = 2.0 fraud_frac = 20% -> pos_weight = 3.0 fraud_frac >= 30% -> pos_weight = 4.0 (cap)

Условие fraud_frac >= 0,10 действует как ограничитель: при значении ниже этого порога модель адаптируется симметрично. В пакетах, где конфликтные транзакции в основном оказываются легитимными, агрессивное взвешивание мошенничества могло бы направить адаптер в неправильном направлении. Этот ограничитель предотвращает это.

Потеря согласованности (символическое обозначение)

Потери согласованности представляют собой бинарную кросс-энтропию по отношению к предсказаниям механизма символических правил. Даже без эталонных меток символическое правило обеспечивает стабильный слабый сигнал контроля, который поддерживает соответствие адаптера знаниям предметной области, предотвращая переобучение на основе шаблона, доминирующего в текущей партии данных. Это нейросимволический якорь, описанный в статье «Гибридное нейросимволическое обнаружение мошенничества и эксперимент с нейросимволическим ИИ».

Минимизация энтропии (восстановление доверия)

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

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

Теневая модель: честный контрфактический анализ

Любая система онлайн-адаптации должна ответить на основной вопрос: действительно ли адаптация помогает? Для измерения этого используется замороженная копия базовой модели («теневая модель»), которая запускается параллельно в каждом пакете данных и никогда не адаптируется. Показатель эффективности прост:

acc_lift = healed_accuracy — shadow_accuracy

В этом эксперименте показатель подъема положительный для каждой из 25 партий, варьируясь от +0,050 до +0,360. Теневая модель обеспечивает честную базовую оценку: то, что вы получили бы, если бы ничего не делали.

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

Честное понимание всех результатов

Итоговая оценка проводится на полном тестовом наборе из 1000 образцов с дрейфом после обработки всех 25 потоковых пакетов:

Этап Точность Точность Восстановление F1 —————————————————————— Чистая базовая линия 92,9% 0,784 0,727 0,754 Под дрейфом, без лечения 44,6% 0,194 0,853 0,316 Тень, заморожена 44,6% 0,194 0,853 0,316 Самовосстановление производства 72,4% 0,224 0,340 0,270

Восстановление точности действительно произошло. Восстановленная модель достигает 72,4% на данных, на которых базовая модель дает сбой, что на 27,8 процентных пункта лучше, чем у любой замороженной альтернативы.

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

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

Что на самом деле означает «показатель полноты 0,853 при точности 44,6%»?

Матрица ошибок для модели без восстановления при дрейфе:

Нет заживления: TP=128 TN=318 FP=532 FN=22 Заживление: TP=51 TN=673 FP=177 FN=99

Модель без функции восстановления выявляет 128 из 150 случаев мошенничества (напомним, 0,853). Но она также генерирует 532 ложных срабатывания, помечая 532 законные транзакции как мошеннические. Точность составляет 44,6%, потому что почти половина прогнозов неверна. В системе обнаружения мошенничества с платежами 532 ложных срабатывания в пакете из 1000 транзакций означают, что модель фактически вышла из-под контроля. Она помечает все подозрительное. То, что операционные группы тонут в ложных тревогах, часто является первым признаком того, что производственная модель сильно отклонилась от нормы.

Усовершенствованная модель выявляет 51 случай мошенничества из 150 (показатель полноты 0,340), при этом выдавая всего 177 ложных срабатываний. Она пропускает больше случаев мошенничества, но её прогнозы гораздо надёжнее.

В Формуле-1 этот компромисс не реализован.

F1 симметрично обрабатывает ложноположительные и ложноотрицательные результаты. Значение F1 для модели без исправления составляет 0,316, а для модели с исправлением — 0,270. Только по показателю F1 модель без исправления выглядит лучше. Но F1 не учитывает структуру затрат на решение проблемы. В большинстве систем обнаружения мошенничества с платежами стоимость ложноположительного результата (заблокированной легитимной транзакции) не равна нулю, и соотношение затрат между ложноположительными и ложноотрицательными результатами определяет, какое поведение модели предпочтительнее.

Если пропуск мошеннической транзакции обходится в среднем в 5000 долларов, а ложноположительный результат — в 15 долларов в виде расходов на поддержку клиентов и риска оттока, то поведение модели без исправления ошибок может оправдать 532 ложноположительных результата, необходимых для выявления большего количества мошеннических действий. Если ваша очередь проверки имеет жесткую пропускную способность, а ложноположительный результат обходится примерно в 200 долларов операционных издержек, то 177 ложноположительных результатов и более высокая точность модели с исправлением ошибок явно лучше.

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

Группированная столбчатая диаграмма, сравнивающая точность, прецизионность, полноту и F1 в четырех состояниях: чистое (зеленый), дрейф (красный), тень (желтый), исправленное (синий). Столбцы чистого состояния самые высокие. Столбцы дрейфа и тени идентичны. Столбцы исправленного состояния находятся между чистым и дрейфом по показателям точности и прецизионности, но ниже дрейфа по показателю полноты.
Линейный график, показывающий точность на уровне партии для 25 партий с дрейфом. Три линии: красная пунктирная базовая линия около 44%, оранжевая штриховая линия с застывшей тенью также около 44%, и зеленая самовосстанавливающаяся линия, проходящая в диапазоне от 58% до 82%.

Регистрация и откат моделей: страховочная сеть

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

Если значение F1 после восстановления опускается более чем на 8 процентных пунктов ниже базового уровня, механизм отката восстанавливает снимок с наивысшим значением F1 после восстановления. Он нацелен именно на снимки после восстановления, а не на исходные чистые значения весов.

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

v21 | batch=10 | acc=0.710 | f1=0.408 | postheal [BEST]

В этом эксперименте откат не был инициирован ни в одной из 25 партий. Порог rollback_f1_drop установлен консервативно на уровне 0,08, и качество восстановления постоянно превышало его. Это хороший результат, но не тест пути отката. Чтобы проверить его на практике: установите rollback_f1_drop = 0,03 и drift_strength = 3,5. Адаптер начнет получать конфликтующие сигналы обновления от шумных партий, поступающих с задержкой, F1 опустится ниже ужесточенного порога, и движок восстановит версию 21. Целесообразно запустить это перед развертыванием в производственной среде.

Диаграмма рассеяния, показывающая 51 снимок реестра моделей. Зеленые точки — снимки после исправления, желтые — до исправления, рассеянные по версиям с 1 по 51 по оси X, а значения F1 от 0,06 до 0,52 — по оси Y. Синяя звездочка на версии 21 отмечает наилучшую цель отката.
Линейный график, показывающий показатель F1 по 25 пакетам данных для восстановленной модели (зеленая сплошная линия) и замороженной тени (оранжевая пунктирная линия). Обе линии колеблются в диапазоне от 0,06 до 0,54. Аннотации об откате отсутствуют.

Состояние системы во времени

В ходе производственного цикла модель проходит через четыре состояния:

ЗДОРОВОЕ СОСТОЯНИЕ: отсутствие сигнала дрейфа, отсутствие символических конфликтов выше порогового значения. Восстановление не происходит.

ДРЕЙФИНГ: Показатель FIDI z-score повышен или количество конфликтов превышает минимальное значение. Восстановление запускается для каждой партии.

ИСПРАВЛЕНИЕ: временное состояние во время активного события восстановления. Вычисление текущих весов продолжается до завершения работы фонового потока и снятия блокировки.

ОТКАТ: восстановление привело к снижению производительности сверх установленного порога, и реестр восстановил предыдущий снимок.

В этом эксперименте система находится в состоянии «здорова» в течение 1-й и 2-й партий, затем переходит в состояние «дрейфа» в 3-й партии и остается в этом состоянии до конца выполнения. Учитывая, что синтетический дрейф применяется как постоянное постоянное смещение (среднее значение V14 изменяется на 1,9 стандартных отклонений и остается на этом уровне), z-оценка никогда не возвращается ниже порогового значения. В реальных условиях эксплуатации с постепенным или прерывистым дрейфом следовало бы ожидать большей осцилляции между состояниями.

Горизонтальная гистограмма, показывающая состояние системы для каждой партии из 25 партий. Партии 1 и 2 обозначены зеленым цветом (ЗДОРОВЫЕ). Партии с 3 по 25 обозначены желтым цветом (ДРЕЙФУЮТ). Оранжевые и красные полосы отсутствуют.

экспорт мониторинга производства

После каждого запуска система экспортирует три файла в папку monitoring_export/:

metrics.csv: одна строка на каждый пакет, содержащая показатели точности, F1-меры, прецизии, полноты, z-оценки, количества конфликтов, коэффициента повышения точности по сравнению с теневым алгоритмом и состояния системы. Этот формат позволяет импортировать данные непосредственно в Grafana в качестве источника CSV или загружать их в pandas для анализа по запросу.

events.json: одна запись для каждого нетривиального действия (триггеры восстановления, откаты). Структурировано для ELK или любой другой системы агрегации логов.

threshold_config.json: текущие пороговые значения для отката в отдельном файле:

{ «rollback_f1_drop»: 0.08, «rollback_acc_drop»: 0.10, «health_window»: 5, «note»: «Измените значения и перезапустите, чтобы настроить допустимый уровень риска» }

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

Панель мониторинга из четырех панелей. Вверху слева: точность качения с восстановленным (зеленым) участком над тенью (желтая пунктирная линия). Вверху справа: показатель F1 качения, обе линии движутся вместе с шумом. Внизу слева: индикаторы подъема точности, все положительные и зеленые. Внизу справа: Z-показатель FIDI с красной зоной дрейфа, начиная с 3-й партии.

Что этот подход не решает

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

Восстановление ограничено замороженной базовой сетью. Базовая сеть обучалась представлениям на основе чистых данных. Если дрейф достаточно силен, чтобы эти представления не содержали полезного сигнала, адаптер не сможет компенсировать его. В этом эксперименте представления базовой сети остаются частично полезными, поскольку V14 по-прежнему является наиболее информативным признаком, просто со смещением среднего значения. Дрейф, который вводит совершенно новый механизм мошенничества, с которым базовая сеть никогда не сталкивалась, исчерпает возможности адаптера по исправлению ситуации. Эта система выигрывает время за счет постепенного смещения распределения. Она не заменяет переобучение.

Компромисс, связанный с отзывом, реален и зависит от конкретного развертывания. Модель с исправленными ошибками существенно снижает количество ложных срабатываний, но пропускает больше случаев мошенничества. Это следствие того, что адаптер распознает, что новый диапазон V14 больше не является надежным сигналом мошенничества. Приемлемость такого компромисса зависит от вашей структуры затрат.

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

Как это вписывается в сериал

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

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

В статье «Нейросимволическое обнаружение мошенничества: выявление дрейфа концепций до падения F1» активации изученных правил использовались в качестве индикатора дрейфа, отслеживая показатели согласованности правил для обнаружения сдвига распределения до того, как метрики модели заметно снизятся. В той статье ответ на этот вопрос остался открытым.

Эта статья — ответ. FIDI и обнаружение символических конфликтов запускают процесс восстановления (разработанный в статье «Нейросимволическое обнаружение мошенничества: выявление дрейфа концепции до падения F1»). Символическое правило обеспечивает сигнал согласованности во время восстановления (архитектура потерь из статьи «Гибридное нейросимволическое обнаружение мошенничества и нейронная сеть, изучившая собственные правила обнаружения мошенничества»). Рефлексивный адаптер обеспечивает обучаемую способность к поглощению изменений.

V14 связывает все четыре статьи. Он появился в гибридной функции потерь в статье «Гибридное нейросимволическое обнаружение мошенничества». Градиент обнаружил его без руководства в статье «Нейронная сеть изучила свои собственные правила обнаружения мошенничества». Изменение его распределения стало индикатором дрейфа в статье «Нейросимволическое обнаружение мошенничества: выявление дрейфа концепции до падения F1». Здесь же его сдвиг — это дрейф, от которого происходит восстановление. В реальных наборах данных о мошенничестве небольшое количество признаков несет в себе большую часть дискриминационного сигнала, и именно эти признаки наиболее значимо изменяются по мере развития моделей мошенничества.

Запустите это самостоятельно.

Полная реализация представляет собой один файл Python, использующий только полностью синтетический, универсальный набор данных, генерируемый на лету внутри скрипта. Внешние или реальные наборы данных не загружаются. Генератор создает табличную задачу с 10 признаками и коэффициентом мошенничества 15% и применяет контролируемый сдвиг среднего значения к одному чувствительному признаку (называемому «V14» для обеспечения непрерывности по всей серии) для имитации дрейфа концепции.

Весь код доступен по адресу: https://github.com/Emmimal/self-healing-neural-networks/

# 1. Убедитесь, что вы находитесь в правильной директории: cd production # 2. Установите необходимые пакеты (требуются только эти три): pip install torch numpy matplotlib # 3. Запустите скрипт: python self_healing_production_final.py

Ожидаемое время выполнения составляет менее двух минут на процессоре. В результате выполнения генерируется 8 графиков и три файла экспорта мониторинга в папку monitoring_export/.

Ключевые параметры

Параметр По умолчанию Элементы управления
сила дрейфа 2.2 Сила имитируемого дрейфа
heal_steps 5 Постепенный градиент в течение цикла заживления
heal_lr 0,003 Скорость обучения только для ReflexiveLayer.
fidi_threshold 1.0 Пороговое значение Z-оценки для обнаружения дрейфа
rollback_f1_drop 0,08 Падение клавиши F1, вызывающее откат
conflict_min 5 Сведение символических конфликтов к минимуму для запуска процесса исцеления

Чтобы увидеть срабатывание системы отката: установите rollback_f1_drop = 0.03 и drift_strength = 3.5. Адаптер будет получать конфликтующие сигналы обновления от шумных поздних партий, F1 опустится ниже ужесточенного порога, и механизм отката восстановит наилучший снимок после восстановления (партия 10, F1=0.408). Преднамеренный запуск этого процесса — правильный способ проверить систему безопасности, прежде чем доверять ей.

Главный вывод: чтобы модель выдержала дрейф, не нужно переобучать её целиком — для адаптации необходимо контролируемое пространство.

Краткое содержание

Архитектура с замороженной базовой сетью и обучаемым адаптером ReflexiveLayer восстановила точность на 27,8 процентных пунктов при сдвиге распределения, без переобучения, без размеченных данных и без блокировки вывода. Восстановление происходит благодаря трем объединенным механизмам: адаптер поглощает сдвиг распределения, функция потерь согласованности символических правил удерживает адаптер в рабочем состоянии во время восстановления, а условное взвешивание мошенничества масштабирует функцию потерь в соответствии с уровнем мошенничества, наблюдаемым во входящих пакетах.

Компромиссы реальны. Показатель полноты снижается с 0,853 до 0,340, потому что адаптер правильно определяет, что сдвинутый диапазон V14 больше не является чистым сигналом мошенничества. Приемлемость такого компромисса зависит от структуры затрат на развертывание. Для системы, где стоимость ложноположительных результатов высока, а возможности проверки ограничены, поведение исправленной модели явно предпочтительнее. Для системы, где пропуск мошенничества является катастрофическим, перед внедрением этого подхода необходимо тщательно оценить показатели.

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

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

Вопрос уже не в том, могут ли модели адаптироваться в реальном времени. Вопрос в том, направляем ли мы эту адаптацию в правильном направлении.

Раскрытие информации

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

Генератор синтетических данных создает простую табличную задачу с 10 признаками и уровнем мошенничества 15%, а также применяет контролируемое смещение среднего значения к одному из признаков для имитации дрейфа концепции. Хотя дизайн основан на общих статистических закономерностях, часто наблюдаемых в общедоступных тестах по обнаружению мошенничества, никакие реальные данные из набора данных ULB Credit Card Fraud (Dal Pozzolo et al., 2015) — или любого другого реального набора данных — не загружались, не копировались и не использовались.

Все результаты полностью воспроизводимы с помощью единственного файла Python, предоставленного в репозитории. Изложенные здесь взгляды и выводы являются моими собственными и не отражают позицию какого-либо работодателя или организации.

GitHub: https://github.com/Emmimal/self-healing-neural-networks/

Ссылки

[1] Киркпатрик Дж., Паскану Р., Рабиновиц Н., Венесс Дж., Дежарден Г., Русу А.А., Милан К., Куан Дж., Рамальо Т., Грабска-Барвинска А., Хассабис Д., Клопат К., Кумаран Д. и Хадселл Р. (2017). Преодоление катастрофического забывания в нейронных сетях. Труды Национальной академии наук, 114 (13), 3521-3526. https://doi.org/10.1073/pnas.1611835114

[2] Фонд программного обеспечения Python. (2024). Многопоточность: Параллелизм на основе потоков. Документация Python 3. https://docs.python.org/3/library/threading.html

[3] Пауэрс, DMW (2011). Оценка: от точности, полноты и F-меры до ROC, информированности, маркированности и корреляции. Журнал технологий машинного обучения, 2(1), 37-63. https://arxiv.org/abs/2010.16061

[4] Гама, Дж., Злиобайте, И., Бифет, А., Печенизкий, М., и Бушачия, А. (2014). Обзор адаптации дрейфа концепции. ACM Computing Surveys, 46(4), Статья 44. https://doi.org/10.1145/2523813

[5] Лу, Дж., Лю, А., Дун, Ф., Гу, Ф., Гама, Дж., и Чжан, Г. (2018). Обучение в условиях дрейфа концепции: обзор. IEEE Transactions on Knowledge and Data Engineering, 31(12), 2346-2363. https://doi.org/10.1109/TKDE.2018.2876857

[6] Houlsby, N., Giurgiu, A., Jastrzebski, S., Morrone, B., de Laroussilhe, Q., Gesmundo, A., Attariyan, M., and Gelly, S. (2019). Parameter-efficient transfer learning for NLP. Proceedings of the 36th International Conference on Machine Learning (ICML). https://arxiv.org/abs/1902.00751

[7] Пашке, А., Гросс, С., Масса, Ф., Лерер, А., Брэдбери, Дж., Чанан, Г., Киллин, Т., Лин, З., Гимельшейн, Н., Антига, Л., Десмайсон, А., Копф, А., Янг, Э., ДеВито, З., Рэйсон, М., Теджани, А., Чиламкурти, С., Штайнер Б., Фанг Л., Бай Дж. и Чинтала С. (2019). PyTorch: высокопроизводительная библиотека глубокого обучения в императивном стиле. Достижения в области нейронных систем обработки информации (NeurIPS). https://arxiv.org/abs/1912.01703

Источник: towardsdatascience.com

✅ Найденные теги: PyTorch, Дрейф Модели, новости, Переобучение, Реальное Время, Самовосстанавливающиеся, Самовосстанавливающиеся Нейронные Сети

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Вид на Землю из космоса через иллюминатор с силуэтом наблюдающего человека.
Робот-гуманоид Tesla с черной головой и белым туловищем на фоне.
Два персонажа сражаются световыми мечами на темном фоне сцены из фильма.
Археологическая находка: каменная гробница и скелет в древнем сооружении.
Автоматизация программирования на Python: конвейеры, графики и код.
Два человека пожимают руки на фоне синего логотипа компании.
Схематичное изображение человеческого мозга на фоне компьютерных технологий.
Блинчики с сахарной пудрой и черникой на серой тарелке, десерт на завтрак.
Изображение ДНК и мозга на цветном фоне, символизирующее генетические исследования.
Image Not Found
Вид на Землю из космоса через иллюминатор с силуэтом наблюдающего человека.

Сегодня астронавты миссии «Артемида-2» установят новый рекорд расстояния от Земли.

Во время полета космического корабля «Орион» вокруг Луны экипаж «Артемиды II» побьет рекорд, установленный «Аполлоном-13» в 1970 году. Эндрю Лишевски, старший репортер отдела новостей. Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и…

Апр 9, 2026
Археологическая находка: каменная гробница и скелет в древнем сооружении.

Исследование древнего индивида из Переславля-Залесского указало на его генетически смешанное происхождение

саркофаг V и погребение: А – вид с востока; Б – саркофаг V после снятия погребения и поздней плиты, вид сверху. © ИОГен РАН Археогенетическое исследование погребения из саркофага XIV-XV века в Спасо-Преображенском соборе в Переславле-Залесском показало,…

Апр 9, 2026
Автоматизация программирования на Python: конвейеры, графики и код.

Создание рабочего процесса на Python, который выявляет ошибки до запуска в производство.

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

Апр 9, 2026
Два человека пожимают руки на фоне синего логотипа компании.

Intel присоединяется к проекту Илона Маска по производству чипов Terafab.

Вкратце Источник изображения: Intel (откроется в новом окне) Компания Intel присоединится к SpaceX и Tesla в стремлении построить новый завод по производству полупроводников в США, в штате Техас, хотя масштабы ее вклада пока неясны. «Наша способность проектировать,…

Апр 8, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых