Есть ли смысл смешивать регуляризаторы? - PullRequest
1 голос
/ 17 февраля 2020

Имеет ли смысл смешивать регуляризаторы? Например, используя L1 для выбора объектов в первом слое и L2 для остальных?

Я создал эту модель:

model = Sequential()
# the input layer uses L1 to partially serve as a feature selection layer
model.add(Dense(10, input_dim = train_x.shape[1], activation = 'swish', kernel_regularizer=regularizers.l1(0.001)))
model.add(Dense(20, activation = 'swish', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(20, activation = 'swish', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(10, activation = 'softmax'))

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

(модель, похоже, дает довольно хорошие результаты,> 95% правильных предсказаний в задаче классификации мультикласса)

1 Ответ

1 голос
/ 22 февраля 2020

Добавление разных регуляризаций в разных слоях не является проблемой. Есть документы, касающиеся этой топи c Разреженные входные нейронные сети . Однако здесь нужно обратить внимание на несколько вещей.

  • Добавление самой регуляризации l1 в первом слое не делает выбор объектов. Если объект не выбран, он не может подключиться ни к одному из узлов на следующем уровне. Регуляризация l1 не сможет полностью разорвать соединения функции. Вам понадобится групповая лассо регуляризация (также называемая нормой l_ {1, p}) .
  • Реализация этих регуляризаций, особенно для разреженности, не очень хорошо поддерживается в самой keras. Вам нужно будет добавлять функции порогового значения вручную в каждой итерации. Алгоритм можно найти в Разреженная входная нейронная сеть .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...