Как происходит обратное распространение chainer.functions.get_item?

Этот вопрос следует за Имеет ли срез или индекс цепочки. Переменная для получения элемента в цепочке имеет обратную способность? Рассмотрим типичный пример вопроса: предположим, у меня есть сверточный слой + слой FC, мой последний слой FC выводит вектор.

Потому что в некоторых случаях я должен разрезать вектор для вычисления функции потерь. Например, в классификации с несколькими метками вектор метки истинности для большинства элементов равен 0, только некоторые из них равны 1. В этой ситуации прямое использование F.sigmoid_cross_entropy может вызвать проблема дисбаланса меток, поэтому я решил использовать [0, 1] ( a - chainer.Variable output последнего слоя FC), чтобы нарезать определенные элементы для вычисления функции потерь.

В этой ситуации, как последний слой FC для градиентного потока (BP), как он обновляет свою весовую матрицу ??


person machen    schedule 06.09.2017    source источник


Ответы (1)


Когда вы пишете b = a[index] для переменной a и срезов index (может быть причудливая индексация), обратное распространение через эту операцию устанавливает значения b.grad в a.grad[index], оставляя другие элементы a.grad нулевыми (поскольку соответствующие элементы a не влияют на значение потерь). Затем обратное распространение последнего слоя FC вычисляет градиенты относительно. матрица весов и вектор смещения, как обычно, с этим a.grad.

person Seiya Tokui    schedule 07.09.2017
comment
Я провожу эксперимент, я конвертирую проблему с одной меткой набора данных mnist в проблему с несколькими метками, затем использую метод среза chainer.Variable для управления положительным/отрицательным = 1/3, как я сказал в вопросе, затем используйте F.sigmoid_cross_entropy. Я обнаружил, что этот подход повышает точность поезда намного медленнее, чем я напрямую использую F.softmax_cross_entropy без переменного среза. Это связано с тем, что в этом подходе большая часть grad = 0 на каждой итерации, поэтому обучение медленное. - person machen; 08.09.2017
comment
если формы w и x различны, следовательно, формы dw и dx различны, как мы можем поэлементно умножить dx верхнего слоя на dw предыдущего слоя, которые влияют на изменение w этого предыдущего слоя. - person machen; 27.10.2017