Как должна вести себя нормализация партии во время состязательного обучения? - PullRequest
0 голосов
/ 18 ноября 2018

Я реализую состязательное обучение с помощью метода FGSM из Объяснение и использование состязательных примеров с использованием пользовательской функции потерь:

Реализовано в tf.keras с использованием пользовательской функции потерь, концептуально это выглядит так:

model = Sequential([
    ...
])

def loss(labels, logits):
    # Compute the cross-entropy on the legitimate examples
    cross_ent = tf.losses.softmax_cross_entropy(labels, logits)

    # Compute the adversarial examples
    gradients, = tf.gradients(cross_ent, model.input)
    inputs_adv = tf.stop_gradient(model.input + 0.3 * tf.sign(gradients))

    # Compute the cross-entropy on the adversarial examples
    logits_adv = model(inputs_adv)
    cross_ent_adv = tf.losses.softmax_cross_entropy(labels, logits_adv)

    return 0.5 * cross_ent + 0.5 * cross_ent_adv

model.compile(optimizer='adam', loss=loss)
model.fit(x_train, y_train, ...)

Это хорошо работает для простой сверточной нейронной сети. Однако я не уверен, как слои нормализации партии должны вести себя в пакете состязательных примеров, то есть во время вызова logits_adv = model(inputs_adv). Это включает два подвопроса:

1. Какую статистику следует использовать для нормализации?

Здесь я вижу три варианта:

  1. Используйте среднее значение и дисперсию партии состязательных примеров. Таким образом, активации нормализуются к стандартному нормальному распределению, как и во время обучения.
  2. Используйте среднее значение и дисперсию серии законных примеров. Во время вывода у нас не будет доступа к статистике серии состязательных примеров. Поэтому мы должны сделать модель устойчивой к состязательным примерам, даже если она должна использовать статистику допустимых примеров.
  3. Использовать статистику населения, так как она будет использоваться при выводе.

2. Нужно ли обновлять статистику населения?

Два варианта, которые, я думаю, могут быть оправданы:

  1. Да - если мы ожидаем атак противника во время вывода. Тогда состязательные примеры следует рассматривать как часть нашего набора данных, так же как и законные примеры. Поэтому они должны быть включены в статистику населения для надлежащей нормализации состязательного примера во время вывода.
  2. Нет - если мы используем только состязательное обучение для регуляризации. Тогда мы не увидим состязательный пример при выводе и поэтому не должны включать их в статистику населения.
...