Проверка градиентов является важной техникой для разработки и отладки нейронных сетей. Она позволяет убедиться, что вычисление градиентов реализовано корректно, что особенно критично при реализации кастомных слоёв или функций потерь в Keras.js.
Идея проверки градиентов базируется на численной аппроксимации производной функции. Если есть функция потерь ( L() ) по параметрам (), её градиент можно аппроксимировать конечными разностями:
[ ]
где () — небольшое число, например (10^{-5}). Этот численный градиент сравнивается с градиентом, который вычисляется автоматически через механизм обратного распространения ошибки (backpropagation). Разница между ними должна быть минимальной.
Keras.js предоставляет возможность использовать модели, обученные в Python Keras, в браузере с помощью WebGL. Для проверки градиентов потребуется выполнить следующие шаги:
import KerasJS from 'keras-js';
const model = new KerasJS.Model({
filepaths: {
model: 'model.json',
weights: 'model_weights.buf',
},
gpu: true
});
await model.ready();
const inputData = new Float32Array([/* значения */]);
const inputs = { input: inputData };
function numericalGradient(model, inputs, epsilon=1e-5) {
const grad = new Float32Array(inputs.input.length);
for (let i = 0; i < inputs.input.length; i++) {
const originalValue = inputs.input[i];
inputs.input[i] = originalValue + epsilon;
const lossPlus = model.predict(inputs).loss;
inputs.input[i] = originalValue - epsilon;
const lossMinus = model.predict(inputs).loss;
grad[i] = (lossPlus - lossMinus) / (2 * epsilon);
inputs.input[i] = originalValue; // восстановление исходного значения
}
return grad;
}
backward. Для проверки на небольших слоях
можно использовать эту функцию для вычисления градиента вручную:const analyticGrad = model.backward(inputs, target);
[ = ]
function relativeError(numericGrad, analyticGrad, epsilon=1e-8) {
let maxError = 0;
for (let i = 0; i < numericGrad.length; i++) {
const error = Math.abs(numericGrad[i] - analyticGrad[i]) /
Math.max(epsilon, Math.abs(numericGrad[i]) + Math.abs(analyticGrad[i]));
if (error > maxError) maxError = error;
}
return maxError;
}
Относительная ошибка меньше (10^{-5}) обычно считается нормой для корректной реализации градиентов.
Проверка градиентов является ключевым инструментом для выявления ошибок в реализации модели и обеспечивает доверие к обучению нейронных сетей в Keras.js. Ее регулярное применение помогает предотвращать накопление ошибок в сложных архитектурах и повышает надежность разработки.