Проблема обучения нейросети
Написал свою нейронную сеть на python, и при обучении без нейронов смещения получил 10% ошибок на датасете mnist, но при добавлении нейронов смещения количество ошибок вырастает до 30%. При этом, такой же алгоритм на элементарной задаче по нахождению закономерности: [1, 0, 0, 1], дает увеличение точности примерно в 5 раз. В чем проблема? Сама нейросеть:
def AI(input_value, weights_arr, bias_arr):
neurons_values = [[0 for j in range(neurons[i])] for i in range(len(neurons))]
neurons_values[0] = input_value
def neuron_calc(layer):
layer_neurons = np.array(neurons_values[layer])
weights = np.array(weights_arr[layer])
bias = np.array(bias_arr[layer]) * bias_out
arr = (weights.dot(layer_neurons) + bias).tolist()
for i in range(neurons[layer+1]):
neurons_values[layer+1][i] = sigmoid(arr[i])
for layer_n in range(0, len(neurons)-1):
neuron_calc(layer_n)
return neurons_values
Обратное распространение ошибки:
def back_propag_err(err_arr: list, weights_arr, bias_arr, neurons_arr: list):
neurons_err = [[0 for j in range(neurons[i])] for i in range(len(neurons))]
neurons_err[-1] = err_arr
for layer in range(len(neurons)-2, 0, -1):
for n in range(neurons[layer]):
neuron_err = 0
for w in range (neurons[layer+1]):
neuron_err += neurons_err[layer+1][w] * weights_arr[layer][w][n]
neurons_err[layer][n] = neuron_err
for layer in range(len(neurons)-1):
for r in range(neurons[layer+1]):
for c in range(neurons[layer]):
weights_arr[layer][r][c] += learning_speed * neurons_err[layer+1][r] * sigmoid(neurons_arr[layer+1][r], derivative=True) * neurons_arr[layer][c]
for layer in range(len(neurons)-1):
for r in range(neurons[layer+1]):
bias_arr[layer][r] += learning_speed * neurons_err[layer+1][r] * sigmoid(neurons_arr[layer+1][r], derivative=True) * bias_out
return weights_arr, bias_arr
(Переменная bias_out имеет значение 1)
Ответы (1 шт):
Потому что это гиперпараметры,данные могут быть разными-линейно разделимыми(система уравнений имеет решение) и неразделимыми(математически, без сеточного мышления не иметь решения),вот и эти разные гиперпараметры так влияют на обучение сети.