Ради интереса я пытаюсь разработать нейронную сеть.
Теперь для обратного распространения я увидел две техники.
Первый используется здесь и во многих других местах.
Что это делает:
- Он вычисляет ошибку для каждого выходного нейрона.
- Он распространяет его обратно в сеть (вычисляя ошибку для каждого внутреннего нейрона).
- Он обновляет веса по формуле: (где изменение веса, скорость обучения, ошибка нейрона, получающего входные данные из синапса и являющиеся выходными данными, передаваемыми в синапсе).
- Он повторяется для каждой записи набора данных столько раз, сколько требуется.
Тем не менее, нейронная сеть, предложенная в этом руководстве (также доступна на GitHub), использует другую технику:
- Он использует функцию ошибки (другой метод имеет функцию ошибки, но он не использует ее для обучения).
- У него есть другая функция, которая может вычислить окончательную ошибку, начиная с весов.
- Это минимизирует эту функцию (посредством градиентного спуска).
Теперь какой метод следует использовать?
Я думаю, что первый является наиболее используемым (потому что я видел различные примеры, использующие его), но работает ли он также?
В частности, я не знаю:
- Разве это больше не подчиняется локальным минимумам (поскольку не использует квадратичные функции)?
- Так как на изменение каждого веса влияет выходное значение его выходного нейрона, не влияют ли записи набора данных, которые просто дают более высокие значения в нейронах (а не только выходные), на веса больше, чем другие записи?
Теперь я предпочитаю первый метод, потому что я считаю, что его проще реализовать и легче думать.
Хотя, если у него есть проблемы, о которых я упоминал (которые, я надеюсь, нет), есть ли реальная причина использовать его по сравнению со вторым методом?