Softmax слой в нейронной сети

43

Я пытаюсь добавить слой softmax в нейронную сеть, обученную обратному распространению, поэтому я пытаюсь вычислить его градиент.

Выходные данные softmax: где - номер выходного нейрона.hj=ezjezij

Если я получу это, то я получу

hjzj=hj(1hj)

Похоже на логистическую регрессию. Однако это неправильно, так как моя проверка градиента не удалась.

Что я делаю не так? У меня была мысль, что мне нужно также вычислить перекрестные производные (то есть ), но я не уверен, как это сделать и сохранить размерность градиента то же самое, поэтому он подходит для процесса обратного распространения.hjzk

Ран
источник
3
Вы должны улучшить заголовок своего вопроса, так как в нем не говорится о добавлении общего слоя softmax к NN, поскольку у вас есть конкретный вопрос о том, как не проходит проверка градиента. Я настоятельно рекомендую изменить заголовок на «Почему обратное распространение перестает работать правильно, когда я добавляю слой softmax в свою нейронную сеть».
Чарли Паркер

Ответы:

43

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

Вы правильно вывели градиент диагонали якобианской матрицы, то есть

hizj=hi(1hj):i=j

и как говорила амеба, вы также должны вывести недиагональные записи якобиана, которые дают

hizj=hihj:ij

Эти два определения понятий могут быть удобно объединены с использованием конструкции, называемой дельтой Кронекера , поэтому определение градиента становится

hizj=hi(δijhj)

Таким образом, якобиан является квадратной матрицей[J]ij=hi(δijhj)

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

[x]k=i=1hi,k

Учитывая матрицу Якоби, определенную выше, это реализуется тривиально как произведение матрицы на вектор ошибок вывода:

σl=Jσl+1

Если слой softmax является вашим выходным слоем, то объединение его с моделью кросс-энтропийной стоимости упрощает вычисление до

σl=ht

где - вектор меток, а - выходные данные функции softmax. Упрощенная форма не только удобна, но и чрезвычайно полезна с точки зрения численной устойчивости.th

Mranz
источник
с , is ? (просто пытаюсь понять, что такое «градиент» в данном случае)σl=(σl,1,σl,2,...,σl,k)σl,j=Czj
Александр Холден Дейли
Да, это правильно.
Мранц
Может ли кто-нибудь объяснить, что представляют собой строчные дельта-термины в дельте Кронекера и как их вычислять?
Данияр
Я застрял в этой проблеме на некоторое время. Чтобы уточнить. У вас есть вектор (pre softmax), а затем вы вычисляете softmax. Поскольку значения softmax зависят от всех входных значений, необходима фактическая матрица Якоби. Затем вы берете матрицу Якоби и суммируете сокращения строк, чтобы получить вектор из одной строки, который вы обычно используете для градиентного спуска. Все ли это на 100% правильно?
Harveyslash
14

Производная неверна. Должен быть,

hjzk=hjδkjhjhk

проверьте ваши расчеты еще раз. Кроме того, выражение, данное амебой для перекрестной энтропии, не совсем правильно. Для набора образцов данных, взятых из различных классов, он читает,C

nk=1Ctknlnyk(xn)

где супериндекс работает над набором выборок, - это значение k-го компонента цели для n-го образца. Здесь предполагается, что вы используете схему кодирования 1-из-C, то есть . В этом случае все t равны нулю, за исключением компонента, представляющего соответствующий ему класс, который равен единице.tkntkn

Обратите внимание, что т постоянны. Следовательно, минимизация этого функционала эквивалентна минимизации,

nk=1Ctknlnyk(xn)+nk=1Ctknlntkn=nk=1Ctknlnyk(xn)tkn

которое имеет то преимущество, что якобиан принимает очень удобную форму, а именно

Ezj=hjtj

Я бы порекомендовал вам получить копию нейронных сетей епископа для распознавания образов . ИМХО пока лучшая книга по нейронным сетям.

jpmuc
источник
14

Каждый выход softmax зависит от всех входов, поэтому градиент действительно является целой матрицей Якоби. Вы правильно вычислили , но вам также нужно если . Я предполагаю, что если вы можете получить первое выражение, вы легко сможете получить и второе.jhj=hjzj=hj(1hj)khj=hjhkjk

Я не уверен, какую проблему вы видите с обратным распространением: в слое softmax у вас есть выходов и входов, поэтому ошибка с каждого выхода должна распространяться на каждый вход, и именно поэтому вам нужен весь якобиан. С другой стороны, обычно у вас есть функция стоимости, связанная с выходом softmax, например где - ваши желаемые выходные данные (когда вы выполняете классификацию, то часто один из них равен 1 и другие до 0). Тогда на самом деле вас интересует , который может быть вычислен с помощью правила цепочки, приводящего к аккуратному выражению, и действительно является вектором (а не матрицей).jj

C=jtjloghj,
tjCzj
амеба говорит восстановить монику
источник
1
Я попытаюсь описать мою проблему лучше, например, в соответствии с этим учебником ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm , мне нужно поэлементно умножить вес и дельту на производную (шаг № 3). Так что, если у меня есть полная матрица Якоби, размеры не подходят. Спасибо.
Пробежал
Вы знаете, как действовать, если это не softmax, а обычный скрытый слой? Представьте, что каждый юнит на этом слое получает входные данные от всех юнитов предыдущего слоя (т. Е. Этот слой «полностью подключен»), что обычно имеет место. Затем вам также необходимо распространять ошибки обратно через этот слой, и производные также образуют матрицу Якоби. Если вы не понимаете, как это сделать, то ваше замешательство не связано с softmax.
говорит амеба, восстанови Монику
1
Я успешно реализовал это для линейных и сигмовидных слоев, потому что производная является вектором, поэтому у меня не было проблем с размерами.
Ран
Извините, Ран, может быть, я просто глуп, но если у вас есть сигмовидный слой, полностью подключенный к предыдущему слою, то выход (или вход) для каждого блока будет иметь производную по входящему соединению от каждого блока на предыдущий слой, т.е. все производные образуют двумерную матрицу, n'est-ce pas? ji
говорит амеба, восстанови Монику