Предполагая, что в последнем скрытом слое имеется N узлов, weight_hidden является матрицей измерения N на 10, значение delta_output сверху равно 10x1, а результат der_hidden_activation (output_hidden) равен N x 1.
При переходе от слоя из N нейронов (скрытый слой) к слою из M нейронов (выходной слой) при умножении матрицы размеры матрицы веса должны быть M x N. Таким образом, для стадии обратного распространения, переходящей от слоя M нейронов (выход) к слою N нейронов (скрытый слой), используйте transpose матрицы весов, которая даст вам матрицу измерения ( N x M).
Теперь, мой первый вопрос: должны ли умножения delta_output и der_hidden_activation (output_hidden) возвращать матрицу 10 x N, используя внешний продукт? Я думаю, что мне нужно сделать продукт Адамара из этой результирующей матрицы с нетронутыми весами, чтобы сделать delta_hidden равным N x 10.
Да, вам нужно использовать hadamard product однако вы не можете умножать delta_output и der_hidden_activation (output_hidden), поскольку это матрицы разных размеров (10 x 1 и N x 1 соответственно). Вместо этого вы умножаете транспонирование матрицы hidden_weight (N x 10) на delta_output (10 x 1), чтобы получить матрицу N x 1, а затем выполняете произведение hadamard с der_hidden_activation (output_hidden).
Если I я перевожу это правильно ...
hidden_weight matrix = ![w^{l+1} image](https://latex.codecogs.com/gif.latex?%5Cbg_white&space;w%5E%7Bl+1%7D)
delta_output =
![\delta ^{l+1} image](https://latex.codecogs.com/gif.latex?%5Cbg_white&space;%5Cdelta&space;%5E%7Bl+1%7D)
delta_hidden =
![\delta ^{l} image](https://latex.codecogs.com/gif.latex?%5Cbg_white&space;%5Cdelta&space;%5E%7Bl%7D)
der_hidden_activation(output_hidden) =
![\sigma {}' (z^{l}) image](https://latex.codecogs.com/gif.latex?%5Cbg_white&space;%5Csigma&space;%7B%7D%27&space;(z%5E%7Bl%7D))
Plugging this into the BP formula...
![\delta ^{l} = (w^{l+1})^{T} \delta ^{l+1} \odot \sigma {}' (z ^{l}) image](https://latex.codecogs.com/gif.latex?%5Cbg_white&space;%5Cdelta&space;%5E%7Bl%7D&space;=&space;(w%5E%7Bl+1%7D)%5E%7BT%7D&space;%5Cdelta&space;%5E%7Bl+1%7D&space;%5Codot&space;%5Csigma&space;%7B%7D%27&space;(z&space;%5E%7Bl%7D))
As you can see, you need to multiply the transpose of the weight_hidden (N x 10) with delta_output (10 x 1) first to produce a matrix (N x 1), and then you use hadamard product with der_hidden_activation(output_hidden).
Finally I multiply this delta_hidden by my learning rate and subtract it from the original weight of the last hidden layer to get my new weights.
You don't multiply delta_hidden by the learning rate. You need to use the learning rate on a bias and delta weight matrix...
The delta weight matrix is a matrix of the same dimensions as your (hidden) weight matrix and is calculated using the formula...
![\frac{\partial E}{\partial w}=a^{l-1}\delta ^{l} image](https://latex.codecogs.com/gif.latex?%5Cbg_white&space;%5Cfrac%7B%5Cpartial&space;E%7D%7B%5Cpartial&space;w%7D=a%5E%7Bl-1%7D%5Cdelta&space;%5E%7Bl%7D)
And then you can easily apply the learning rate...
![w = w - \alpha \frac{\partial E}{\partial w} image](https://latex.codecogs.com/gif.latex?%5Cbg_white&space;w&space;=&space;w&space;-&space;%5Calpha&space;%5Cfrac%7B%5Cpartial&space;E%7D%7B%5Cpartial&space;w%7D)
Кстати, я только что ответил на аналогичный вопрос о AISE, который может помочь пролить некоторый свет и более подробно рассказать о матрицах, которые следует использовать во время обратного распространения.