Нейронные сети были для меня самой популярной c в последнее время, хотя у меня не было формального образования по ним, поэтому все, что я знаю, я узнал из rnet.
Это Насколько я понимаю, нейронная сеть после достаточного обучения может выводить приближение любой заданной функции. Выход нейронной сети со случайно сгенерированными весами и смещениями должен тогда выглядеть очень случайным.
Чтобы опровергнуть это мое предположение, я запрограммировал очень рудиментарную сеть в Matlab с двумя входами, один выход и три полностью случайных восьми скрытых слоя нейронов. Количество входов и выходов было выбрано так, чтобы я мог построить трехмерный график результата в виде поверхности, где (x, y) - это вход, а z - выход.
% Hidden layers
L1 = 8;
L2 = 8;
L3 = 8;
% Weight matrices
A = randi([ -500, 500], [L1, 2]) / 10000;
B = randi([ -500, 500], [L2,L1]) / 10000;
C = randi([ -500, 500], [L3,L2]) / 10000;
D = randi([ -500, 500], [01,L3]) / 10000;
% Biases
a = randi([-2000, 2000], [L1, 1]) / 10000;
b = randi([-2000, 2000], [L2, 1]) / 10000;
c = randi([-2000, 2000], [L3, 1]) / 10000;
d = randi([-2000, 2000], [ 1, 1]) / 10000;
x = -ran:ran/plotn:ran;
y = -ran:ran/plotn:ran;
z = zeros(length(x),length(y));
for i = 1:length(x)
for j = 1:length(y)
z(i,j) = NN([x(i); y(j)],A,B,C,D,a,b,c,d);
end
end
function y = NN(x,A,B,C,D,a,b,c,d)
sig = @(x) 2*exp(x) ./ (exp(x) + 1) -1;
x = A*x+a;
x = sig(x/1);
x = B*x+b;
x = sig(x/1);
x = C*x+c;
x = sig(x/1);
x = D*x+d;
x = sig(x/1);
y = x;
end
Построив z vs x и y, к своему удивлению, я обнаружил, что результат оказался более регулярным и предсказуемым, чем я мог подумать, как видно на следующих изображениях.
Даже при увеличении количества нейронов в скрытых слоях до абсурдных величин наблюдается то же поведение: поверхность состоит из горизонтальных плоскостей с разными значениями z, причем все эти странные складки пересекаются в ( 0,0).
Это заставляет меня задаться вопросом, как, даже при достаточном обучении, результат может следовать любой заданной функции (скажем, 1 / (1 + x ^ 2 + y ^ 2)), не говоря уже о любой другой шаблон, для которого аналитическое выражение неясно (где вы бы применили нейронную сеть).
Я был бы благодарен, если бы кто-нибудь мог объяснить мне, где я не понимаю нейронные сети