Нейронный сети. Эволюция. Каниа Алексеевич Кан

Читать онлайн.



Скачать книгу

= A*x+b, поступает на выход.

      Ну и давайте всё представим согласно тем принятым условным обозначениям, которые используются при моделировании искусственных нейронов и нейронных сетей. А именно – коэффициент А и параметр b, обозначим как w1 и w2 соответственно. И теперь будем их называть – весовыми коэффициентами.

      Ну и конечно же, визуализируем структуру нашего нейрона, с новыми обозначениями:

      Переименуем в нашей первой программе коэффициент (А) и параметр (b), на обозначения весовых коэффициентов, как показано на слайде. Инициализируем их в ней. Дополним небольшую её часть в области с обучением, формулой изменения веса (w2), как мы это делали ранее с коэффициентом (А).

      После чего, область с обучением в программе, будет выглядеть следующим образом:

      # Прогон по выборке

      for e in range(epochs):

      for i in range(len(arr)): # len(arr) – функция возвращает длину массива

      # Получить x координату точки

      x = arr[i]

      # Получить расчетную y, координату точки

      y = w1 * x + w2

      # Получить целевую Y, координату точки

      target_Y = arr_y[i]

      # Ошибка E = целевое значение – выход нейрона

      E = target_Y – y

      # Меняем вес при входе x

      w1 += lr*(E/x)

      # Меняем вес при входе x2 = 1, w2 += lr*(E/x2) = lr*E

      w2 += lr*E

      И забегая вперед, скажу, что тут нас постигнет разочарование – ничего не выйдет…

      Дело в том, что вес (w2) (бывший параметр (b)), вносит искажение в поправку веса (w1) (бывшего коэффициента (А)) и наоборот. Они действуют независимо друг от друга, что сказывается на увеличении ошибки с каждым проходом цикла программы.

      Нужен фактор, который заставит наша веса действовать согласованно, учитывать интересы друг друга, идти на компромиссы, ради нужного результата. И такой фактор у нас уже есть – ошибка.

      Если мы придумаем как согласованно со всеми входами уменьшать ошибку с каждым проходом цикла в программе, подгоняя под неё весовые коэффициенты таким образом, что в конечном счете привело к самому минимальному её значению для всех входов. Такое решение, являлось бы общим для всех входов нашего нейрона. То есть, согласованно обновляя веса в сторону уменьшения их общей ошибки, мы будем приближаться к оптимальному результату на выходе.

      Поэтому, при числе входов нейрона, больше одного, наши выработанные до этого правила линейной классификации, необходимо дополнить. Нужно использовать ошибку, чтобы математически связать все входы таким образом, при котором они начнут учитывать общие интересы. И как следствие, на выходе получить нужный классификатор.

      Итак, мы постепенно подходим к ключевому понятию в обучении нейрона и нейронных сетей – обучение методом градиентного спуска.

      Обновление весовых коэффициентов

      Найдем решение, которое, даже будет не идеальным с точки зрения математики, но даст нам правильные результаты, поскольку всё же опирается на математический инструмент.

      Для понимания всего процесса, давайте представим себе спуск с холма,