Прунинг (pruning) — это процесс уменьшения размера нейронной сети за счёт удаления менее значимых нейронов или целых слоёв, сохраняя при этом приемлемую точность модели. В контексте Keras.js, который обеспечивает выполнение моделей Keras непосредственно в браузере на JavaScript, прайнинг становится важным инструментом для оптимизации производительности и сокращения потребления ресурсов.
Удаление нейронов Основная идея заключается в выявлении нейронов с минимальной значимостью. Значимость нейрона определяется через весовые коэффициенты его входов или через активность нейрона на обучающей выборке. Низкие веса и редко активируемые нейроны являются кандидатами на удаление.
Удаление слоёв Слоёв может быть удалено целиком, если они оказывают минимальное влияние на итоговую функцию потерь. Обычно это промежуточные слои, значения которых можно аппроксимировать с помощью смежных слоёв без заметной потери точности.
Сохранение точности Прунинг требует аккуратного контроля точности модели. Обычно процесс проводится итеративно: удаляются отдельные нейроны или слои, затем сеть дообучается для компенсации потери информации.
Magnitude-based pruning Удаление нейронов или
связей с наименьшими абсолютными значениями весов. В Keras.js можно
предварительно экспортировать модель из Python Keras, провести прайнинг
с использованием tensorflow_model_optimization, а затем
загрузить оптимизированную модель в браузер.
Random pruning Случайное удаление нейронов с последующим дообучением. Обычно используется как вспомогательный метод при исследовании устойчивости модели.
Structured pruning Удаление целых фильтров или слоёв в сверточных сетях. В браузере это особенно важно для сокращения времени инференса и уменьшения объёма памяти, выделяемой под модель.
Подготовка модели Модель создаётся и обучается в
Keras (Python), после чего проводится прайнинг с сохранением архитектуры
в формате .json и весов в формате
.bin.
Импорт в Keras.js
const model = new KerasJS.Model({
filepaths: {
model: 'model.json',
weights: 'model_weights.buf'
},
gpu: true
});
await model.ready();Инференс после прайнинга Входные данные
передаются через массивы Float32Array. Прунинг обеспечивает
уменьшение объёма весов, что сокращает задержку вычислений и
использование оперативной памяти.
const inputData = new Float32Array([/* данные */]);
const outputData = await model.predict({input: inputData});Снижение объёма модели Удаление 20–40% нейронов обычно сокращает размер весов примерно на такой же процент, что критично для браузерных приложений с ограниченной памятью.
Ускорение инференса Меньшее количество операций умножения и суммирования сокращает время отклика модели в реальном времени.
Энергопотребление Особенно важно для мобильных устройств: уменьшение вычислительных операций снижает нагрузку на CPU/GPU и продлевает время работы от батареи.
Прунинг в Keras.js позволяет эффективно управлять ресурсами браузера и ускорять инференс без значительной потери качества модели, особенно при работе с мобильными устройствами или приложениями с ограниченными вычислительными возможностями.