Почему при обучении нейросети нельзя просто вычислить ошибку и подставить такие веса, при которых ошибка будет равна 0?

Приведу пример:

weight = 0.5
goal_pred = 0.8
input = 0.5

for iteration in range(20):
    pred = input * weight
    error = (pred - goal_pred) ** 2
    **direction_and_amount = (pred - goal_pred) * input**
    weight -= direction_and_amount

    print(f"{iteration + 1}) Prediction: {pred}    Error^2: {error}")

Почему в данном примере(в месте, выделенным жирным) нельзя вместо умножения на input сделать операцию деления? Тогда бы нужный вес нашёлся уже на второй итерации.

Я новичок, поэтому, возможно, вопрос покажется глупым. Прошу строго не судить.


Ответы (1 шт):

Автор решения: Alex Kart

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

→ Ссылка