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