Я использую L1-регуляризацию по моим параметрам нейронной сети в Keras с помощью keras.regularizers.l1(0.01)
, чтобы получить разреженную модель. Я нахожу, что, хотя многие из моих коэффициентов близки к нулю, некоторые из них фактически равны нулю.
Посмотрев на исходный код для регуляризации, он предполагает, что Keras просто добавляет норму L1 параметров к функции потерь.
Это было бы неправильно, потому что параметры почти наверняка никогда не перейдут к нулю (в пределах ошибки с плавающей запятой), как предполагалось, с регуляцией L1. Норма L1 не дифференцируема, если параметр равен нулю, поэтому необходимо использовать субградиентные методы, когда параметры установлены на ноль, если они близки к нулю в подпрограмме оптимизации. См. Оператор мягкого порога max(0, ..)
здесь.
Делает ли Tensorflow/Keras это, или это нецелесообразно делать со стохастическим спусками градиента?
EDIT: также здесь - превосходное сообщение в блоге, объясняющее оператора мягкого порога для регуляции L1.