惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
A
Arctic Wolf
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Martin Fowler
Martin Fowler
A
About on SuperTechFans
P
Palo Alto Networks Blog
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog
P
Proofpoint News Feed
D
DataBreaches.Net
Cyberwarzone
Cyberwarzone
T
Tor Project blog
IT之家
IT之家
P
Proofpoint News Feed
Help Net Security
Help Net Security
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
Microsoft Azure Blog
Microsoft Azure Blog
V2EX - 技术
V2EX - 技术
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
B
Blog
N
News and Events Feed by Topic
The Cloudflare Blog
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
T
The Blog of Author Tim Ferriss
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
LangChain Blog
I
InfoQ
F
Full Disclosure
The Register - Security
The Register - Security
阮一峰的网络日志
阮一峰的网络日志
H
Hacker News: Front Page
V
V2EX

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как технология LayerScale спасает сверхглубокие трансформеры (и почему о ней молчат туториалы)
Максим · 2026-05-18 · via Все публикации подряд на Хабре

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

На бумаге residual связи (те самые плюсики в коде: x=x+f(x) ) должны позволять нам строить сети бесконечной глубины, спасая градиенты от затухания. Но любой, кто пытался с нуля обучить трансформер слоев на 80, знает жестокую правду: сеть просто отказывается сходиться. Loss взрывается в первые же эпохи, или модель навсегда застревает на субоптимальном плато.

Долгие годы эту проблему лечили «костылями»: сложными схемами разогрева learning rate, танцами с инициализацией весов и стохастической глубиной. Пока исследователи из Meta AI не предложили изящный хак под названием LayerScale.

Давайте залезем под капот и посмотрим, почему глубокие Трансформеры умирают, и как LayerScale их воскрешает.

Проблема: Токсичность residual stream

Посмотрим на классический блок трансформера:

xout​=xin​+Block(LayerNorm(xin​))

Магистраль X, которая проходит через всю сеть от первого до последнего слоя, часто называют residual stream (Остаточный поток). Это главная информационная шина модели.

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

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

  • Слой 1 добавил шум. Дисперсия сигнала выросла.

  • Слой 2 получил зашумленный сигнал, умножил его на свои случайные матрицы и добавил еще больше шума.

  • К 50-му слою изначальный сигнал (эмбеддинги токенов) полностью тонет в хаосе дисперсии.

LayerNorm пытается спасти ситуацию на входе в каждый следующий блок, но он не спасает саму магистраль. Когда loss функция на самом верху сети пытается прокинуть градиенты вниз, она видит перед собой бушующую реку дисперсии. Оптимизатор сходит с ума.

Решение: LayerScale и концепция мьюта

Идея LayerScale поражает своей простотой. А что, если на старте обучения мы выключим звук у всех слоев, кроме самых первых?

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

xout​=xin​+λBlock(LayerNorm(xin​))

А теперь главная магия: мы инициализируем λ микроскопическими значениями, например 10−4 или 10−5  (10−6 для очень глубоких сетей).

Как мы обманываем оптимизатор

Посмотрите, что происходит на первой итерации обучения.
Поскольку λ≈0 , выход любого блока умножается на ноль. Уравнение схлопывается до:

xout​≈xin​+0

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

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

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

Реализация на Pytorch

Внедрить это в свою архитектуру проще простого. Вот как выглядит этот слой:

import torch
import torch.nn as nn

class LayerScale(nn.Module):
    def __init__(self, dim, init_values=1e-5, inplace=False):
        super().__init__()
        self.inplace = inplace
        # Создаем обучаемый параметр: вектор размерности dim
        self.gamma = nn.Parameter(init_values * torch.ones(dim))

    def forward(self, x):
        # Умножаем каждый канал на свой вес
        return x.mul_(self.gamma) if self.inplace else x * self.gamma

# Пример использования внутри блока:
class TransformerBlock(nn.Module):
    def __init__(self, dim):
        super().__init__()
        self.norm1 = nn.LayerNorm(dim)
        self.attn = Attention(dim)
        self.ls1 = LayerScale(dim, init_values=1e-5) # <-- layer scale

        self.norm2 = nn.LayerNorm(dim)
        self.mlp = MLP(dim)
        self.ls2 = LayerScale(dim, init_values=1e-5) # <-- layer scale

    def forward(self, x):
        # Сигнал проходит через блок, глушится LayerScale, и только потом плюсуется
        x = x + self.ls1(self.attn(self.norm1(x)))
        x = x + self.ls2(self.mlp(self.norm2(x)))
        return x

Разница с LayerNorm

Часто возникает вопрос: "Зачем нам LayerScale, если у нас уже есть LayerNorm?".
Это разные инструменты для разных задач:

  • LayerNorm работает внутри пайплайна блока. Он нормирует сигнал, чтобы матрицам (Wq​, Wk​, Wv ) было комфортно с ним работать. Он не защищает внешнюю магистраль.

  • LayerScale работает на выходе из пайплайна. Это гейт (вентиль), который контролирует, насколько сильно этот блок имеет право изменить глобальный residual stream.

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

Заключение

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

Если вы пишете архитектуру с нуля, или пытаетесь обучить что-то глубокое (особенно в компьютерном зрении, где эта проблема стоит острее всего), добавьте LayerScale. Вы удивитесь, насколько стабильнее станет ваш loss.