Дистилляция знаний и adversarial attacks
Adversarial Attacks
Почему нейронная сеть меняет предсказание при добавлении шума?
Если усилить один пиксель — модель изменит предсказание, но это неэффективно: один пиксель можно менять конечное число раз. Более мощный подход — менять все пиксели, но чуть-чуть. Направление изменений вычисляется через градиент функции потерь по входу.
Типы атак:
- Направленные — максимизируем вероятность предсказания конкретного целевого класса.
- Ненаправленные — минимизируем вероятность правильного класса, то есть максимизируем вероятности всех остальных классов.
Дистилляция знаний (Knowledge Distillation)
При правильном обучении модель учится обобщать задачу, а не запоминать примеры. Именно это используется в дистилляции.
Ключевая идея: обучить большую модель-учителя, которая из слабоинформативных данных создаёт более богатое представление. Затем обучить модель-студента на этих представлениях — студент получается меньше, но тоже умеет обобщать.
Температура softmax
\[\text{softmax}_T(\vec{x}) = \left(\dots,\ \frac{\exp\left(\frac{x_i}{T}\right)}{\sum_j \exp\left(\frac{x_j}{T}\right)},\ \dots\right)\]
- При \(T = 1\) — стандартный softmax.
- При большом \(T\) — распределение приближается к равномерному, «мягкие» метки раскрывают структуру неуверенности модели.
- При \(T \to \infty\) — градиент второго слагаемого \(L_{KD}\) стремится к градиенту квадрата нормы разности логитов учителя и студента.
Функция потерь
\[L_{KD} = -\frac{1}{N}\sum_{i=1}^N \left( \sum_{j=1}^K y_{ij} \log p_{ij} + \lambda T^2 \sum_{j=1}^K q_{ij}^T \log p_{ij}^T \right)\]
Первое слагаемое — стандартный cross-entropy по истинным меткам. Второе — KL-дивергенция между «мягкими» предсказаниями учителя и студента при температуре \(T\). Коэффициент \(T^2\) компенсирует масштаб градиентов при высокой температуре.
Инициализация весов при дистилляции
Случайная инициализация весов студента приводит к падению качества примерно на 5%. Задача оптимизации становится очень сложной — много локальных минимумов. На практике используют инициализацию через разбиение на группы.
Зачем это нужно
- Можно сжать большую модель в маленькую без существенных потерь в качестве.
- Можно обучить несколько учителей на разных доменах и дистиллировать их в одну модель — итоговое качество будет выше, чем у каждого учителя по отдельности.
- Дистилляция применяется при квантизации весов для сохранения качества.