Почему изменение весов повторяющейся нейронной сети в MATLAB не приводит к изменению выходных данных при прогнозировании тех же данных? - PullRequest
0 голосов
/ 06 апреля 2020

Я рассматриваю следующую рекуррентную нейронную сеть (RNN):

RNN на рассмотрении

, где x - это вход (вектор реал), h вектор скрытого состояния и y - выходной вектор. Я обучил сеть на Matlab, используя некоторые данные x и получил W, V и U.

Однако в MATLAB после замены матрицы W на W 'и сохранения U, V одинаковыми выход ( y ) RNN, который использует W, совпадает с выходом ( y ') RNN, который использует W, когда оба предсказывают одни и те же данные х . Эти два выхода должны отличаться, просто взглянув на вышеприведенное уравнение, но я не могу сделать это в MATLAB (когда я изменяю V или U, выходы меняются). Как я могу исправить код так, чтобы выходы ( y ) и ( y ') отличались, как и должно быть?

Соответствующий код показан ниже:

[x,t] = simplefit_dataset;  % x: input data ; t: targets
net = newelm(x,t,5);  % Recurrent neural net with 1 hidden layer (5 nodes) and 1 output layer (1 node)
net.layers{1}.transferFcn = 'tansig'; % 'tansig': equivalent to tanh and also is the activation function used for hidden layer 
net.biasConnect = [0;0]; % biases set to zero for easier experimenting 
net.derivFcn ='defaultderiv'; % defaultderiv: tells Matlab to pick whatever derivative scheme works best for this net
view(net) % displays the network topology
net = train(net,x,t); % trains the network
W = net.LW{1,1}; U = net.IW{1,1}; V = net.LW{2,1}; % network matrices

Y = net(x); % Y: output when predicting on data x using W

net.LW{1,1} = rand(5,5); % This is the modified matrix W, W'
Y_prime = net(x) % Y_prime: output when predicting on data x using W'

max(abs(Y-Y_prime )); % The difference between the two outputs is 0 when it probably shouldn't be. 

Редактировать: незначительные исправления.

1 Ответ

2 голосов
/ 06 апреля 2020

network view

Это рекурсия в вашем первом слое: (из документов)

Матрица веса для веса, идущего к i-й слой из j-го слоя (или нулевой матрицы []) расположен в net .LW {i, j}, если net .layerConnect (i, j) равен 1 (или 0).

То есть net.LW{1,1} - это веса для первого слоя из первого слоя (т. Е. Рекурсия), тогда как net.LW{2,1} сохраняет веса для второго слоя из первого слоя. Теперь, что это значит, когда можно произвольно изменить веса рекурсии без какого-либо эффекта (на самом деле, вы можете установить их равными нулю net.LW{1,1} = zeros(size(W)); без эффекта). Обратите внимание, что по сути это то же самое, что если отбросить рекурсию и создать простую сеть с прямой связью: feedforward network

Гипотеза: Рекурсия не действует.

Вы заметите, что если вы измените веса на второй слой (1 нейрон) с первого слоя (5 нейронов) net.LW{2,1} = zeros(size(V));, это повлияет на ваш прогноз (то же самое, конечно, верно, если вы изменить веса ввода net.IW).

Почему рекурсия не имеет никакого эффекта? Ну, это меня побеждает. Я понятия не имею, где этот особенный сбой или какова теория newelm сети.

...