Проблема обучения нейросети

Написал свою нейронную сеть на 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 шт):

Автор решения: Константин

Потому что это гиперпараметры,данные могут быть разными-линейно разделимыми(система уравнений имеет решение) и неразделимыми(математически, без сеточного мышления не иметь решения),вот и эти разные гиперпараметры так влияют на обучение сети.

→ Ссылка