Реализация алгоритма обратного распространения

Я строю нейронную сеть с архитектурой:

input layer --> fully connected layer --> ReLU --> fully connected layer --> softmax

Я использую приведенные здесь уравнения DeepLearningBook для реализации обратного распространения. Я думаю, что моя ошибка в уравнении. 1. При дифференциации я рассматриваю каждый пример независимо, дающий матрицу N x C (количество примеров x количество классов), или вместе, чтобы получить матрицу N x 1?

# derivative of softmax
da2 = -a2    # a2 comprises activation values of output layer
da2[np.arange(N),y] += 1
da2 *= (a2[np.arange(N),y])[:,None]

# derivative of ReLU
da1 = a1    # a1 comprises activation values of hidden layer
da1[a1>0] = 1

# eq. 1
mask = np.zeros(a2.shape)
mask = [np.arange(N),y] = 1
delta_2 = ((1/a2) * mask) * da2 / N 
# delta_L = - (1 / a2[np.arange(N),y])[:,None] * da2 / N

# eq.2
delta_1 = np.dot(delta_2,W2.T) * da1

# eq. 3
grad_b1 = np.sum(delta_1,axis=0)
grad_b2 = np.sum(delta_2,axis=0)

# eq. 4
grad_w1 = np.dot(X.T,delta_1)
grad_w2 = np.dot(a1.T,delta_2)

Как ни странно, закомментированная строка в ур. 1 возвращает правильное значение смещения, но я не могу оправдать использование этого уравнения, поскольку оно возвращает матрицу N x 1, которая умножается на соответствующие строки da2.

Редактировать: я работаю над проблемами назначения курса CS231n, которые можно найти здесь: CS231n


person inSearchofAnswers    schedule 27.12.2016    source источник
comment
Добро пожаловать в StackOverflow. Пожалуйста, прочтите и следуйте инструкциям по публикации в справочной документации. Здесь применяется минимальный, полный, поддающийся проверке пример. Мы не сможем эффективно помочь вам, пока вы не опубликуете свой код MCVE и точно не опишите проблему. В частности, включите необходимый код, чтобы проиллюстрировать проблему: ваш опубликованный код должен работать сам по себе.   -  person Prune    schedule 27.12.2016
comment
Кроме того, с какой целью вы это делаете? Есть несколько хороших фреймворков, которые предоставляют вам нужные слои и соединения, включая backprop.   -  person Prune    schedule 27.12.2016
comment
Это в первую очередь для обучения.   -  person inSearchofAnswers    schedule 27.12.2016


Ответы (1)


Я также не мог найти никаких объяснений по этому поводу в другом месте. Итак, я пишу пост :) Пожалуйста, прочитайте его здесь.

person Nimit Pattanasri    schedule 10.01.2017