Как выполнить пакетное вычисление кросс-энтропии для сетей с указателями?

В сетях указателей логиты вывода превышают длину входов. Работа с такими пакетами означает заполнение входных данных до максимальной длины пакетных входов. Теперь все в порядке, пока мы не посчитаем потери. В настоящее время я делаю следующее:

logits = stabilize(logits(inputs))     #[batch, max_length]. subtract max(logits) to stabilize
masks = masks(inputs)     #[batch, max_length]. 1 for actual inputs, 0 for padded locations
exp_logits = exp(logits)
exp_logits_masked = exp_logits*masks
probs = exp_logits_masked/sum(exp_logits_masked)

Теперь я использую эти вероятности для вычисления кросс-энтропии.

cross_entropy = sum_over_batches(probs[correct_class])

Могу я сделать лучше, чем это? Любые идеи о том, как это обычно делается парнями, имеющими дело с указательными сетями?

Если бы у меня не было входов переменного размера, всего этого можно было бы достичь с помощью вызываемого tf.nn.softmax_cross_entropy_with_logits на логитах и ​​метках (что сильно оптимизировано), но это при переменной длине привело бы к ошибочным результатам, поскольку вычисление softmax имеет знаменатель больше на 1 для каждого заполнения во входных данных.


person MiloMinderbinder    schedule 26.03.2018    source источник


Ответы (1)


Вы должны быть точными в своем подходе, и, насколько мне известно, это также реализовано в ячейках RNN. Обратите внимание, что производная от 1x = dx и производная от 0x = 0. Это дает желаемый результат, потому что вы суммируете / усредняете градиенты в конце сети.

Единственное, что вы можете подумать, - это масштабирование потерь в зависимости от количества замаскированных значений. Вы можете заметить, что при 0 маскированных значениях ваш градиент будет иметь немного другую величину, чем у вас со многими маскированными значениями. Мне не ясно, окажет ли это существенное влияние, но, возможно, оно окажет очень небольшое влияние.

В остальном я сам с большим успехом использовал ту же технику, поэтому я здесь, чтобы сказать, что вы на правильном пути.

person David Parks    schedule 26.03.2018