Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Большие данные - лекция-12 - многослойный перцептрон (многомерный градиент, обратное распространение)

3a855e4e8dd144b8942da2463831a067?s=47 Anton
May 29, 2019

Большие данные - лекция-12 - многослойный перцептрон (многомерный градиент, обратное распространение)

Обучение нейронной сети: обратное распространение ошибки, дифференцирование сложной функции.

Обновлено: 22.05.2020
https://vk.com/video53223390_456239475

3a855e4e8dd144b8942da2463831a067?s=128

Anton

May 29, 2019
Tweet

Transcript

  1. Обучение нейронной сети: объединение нейронов в сеть, классификация объектов линейно-неразделимых

    множеств, градиентный спуск (обратное распространение ошибки) для нейронной сети
  2. Использованы материалы • Python и машинное обучение, Себастьян Рашка •

    Глубокое обучение. Погружение в мир нейронных сетей, С. Николенко, А. Кадурин, Е. Архангельская • Википедия, Хабр, Интернет
  3. neuro-sigma.py import numpy as np import math # точки -

    признаки (одно измерение) X1 = np.array([0.1, 0.2, 0.5, 0.6, 0.8, 1.0]) # метки классов (правильные ответы) y = np.array([0, 0, 1, 1, 0, 0])
  4. None
  5. Попробуем разделить [линейно]-неразделимое

  6. None
  7. Здесь • Точки на оси Φ=0.5 — объекты обучающей выборки

    с единственным признаком X1 • Синие — класс-1 (y=1), красные — класс-2 (y=0), • Фиолетовая линия — фрагмент сигмоиды, параметры подобраны алгоритмом логистической регрессии (градиентный спуск для единственного нейрона, активация — сигмоида) за 10 тыс. эпох • Бледные точки на сигмоиде — проекции объектов обучающей выборки на сигмоиду (их можно трактовать как предсказание класса) • Горизонтальная серая линия Φ=0.5 — порог активации сигмоиды • Для правильной классификации: бледные синие точки должны быть выше порога активации, светлые красные — ниже
  8. • Как видим, алгоритм не смог отделить красные точки от

    синих, т. к. множество объектов обучающей выборки изначально линейно неразделимо • И не удивительно, ведь мы никаким образом не сможем расположить монотонную сигмоиду так, чтобы крайние красные точки оказались с одной, а средние синие в то же время — с другой стороны от точки пересечения порога активацией • (т.к. сигмоида пересекает порог только в одной точке)
  9. • «Мыслящую машину класса перцептрон», состоящую из единственного нейрона, можно

    научить отличать лево и право • Можно ли построить такую «мыслящую машину», которая будет отличать то, что снаружи, от того, что внутри?
  10. Структура искусственного нейрона (с фиктивным входом — «нейроном» смещения)

  11. Попробуем связать нейроны в такую сеть

  12. Здесь • w(l) kj — весовой коэффициент входящей связи нейрона

    • Верхний индекс (l) [эль маленькая] — номер слоя сети • Первый нижний индекс k — номер нейрона в текущем слое (начинаем с 1) • (иногда k будет сквозным индексом коэффициентов всей сети — смотрите контекст) • Второй нижний индекс j — номер входящей связи текущего нейрона; 0-й индекс (j=0) — для свободного члена (вес для входа от фиктивного единичного нейрона смещения)
  13. Обратим внимание, что • Количество входящих связей одинаково для всех

    нейронов текущего слоя (у нас полносвязная сеть) • и оно равно количеству нейронов на предыдущем слое (или количеству прямых входов для первого скрытого слоя) плюс один нейрон смещения (фиктивный нейрон) • На разных слоях эти значения (количество входящих связей) могут (и будут) отличаться • У нас уже отличаются: на первый скрытый слой один вход с единственным признаком одномерного объекта (плюс нейрон смещения); на единственный нейрон второго выходного слоя — два выхода от двух нейронов первого скрытого слоя (плюс нейрон смещения) • (для второго слоя нейрон смещения — уже настоящий нейрон)
  14. Активации на 1-м слое a 1 (i)(1)=Φ(x(i) , w 1

    (1))=Φ(∑ j=0 m(1) w 1 j (1) x j (i))=σ(∑ j=0 m(1) w 1 j (1) x j (i))=σ(s 1 (i)(1))= 1 1+e−s 1 (i)(1) , s 1 (i)(1)=s(x(i) ,w 1 (1))=∑ j=0 m(1) w 1 j (1) x j (i)=w 10 (1)+w 11 (1) x 1 (i) a 2 (i)(1)=Φ(x(i) , w 2 (1))=Φ(∑ j=0 m(1) w 2 j (1) x j (i))=σ(∑ j=0 m(1) w 2 j (1) x j (i))=σ(s 2 (i)(1))= 1 1+e−s 2 (i)(1) , s 2 (i)(1)=s(x(i) ,w 2 (1))=∑ j=0 m(1) w 2 j (1) x j (i)=w 20 (1)+w 21 (1) x 1 (i)
  15. Активация на 2-м слое a 1 (i)(2)=Φ(x(i) ,W )=Φ(∑ j=0

    m(2) w 1 j (2) a j (i)(1))=σ(∑ j=0 m(2) w 1 j (2)a j (i)(1))=σ(s 1 (i)(2)), s 1 (i)(2)=s(x(i),W )=∑ j=0 m(2) w 1 j (2) a j (i)(1)=w 10 (2)+w 11 (2) a 1 (i)(1)+w 12 (2) a 2 (i)(1), a 0 (i)(1)=1
  16. Здесь и далее • W — множество всех весовых коэффициентов

    на всех слоях • M — количество всех весовых коэффициентов на всех слоях • m(l) — количество весовых коэффициентов для каждого из нейронов на текущем [эль]-том слое (без нулевого) • a(i)(l) k — значение активации для i-го элемента на k-м нейроне l-го слоя • s(i)(l) k — взвешенная сумма для i-го элемента на k-м нейроне l-го слоя
  17. Порог (квантизатор) • Порог для окончательной классификации только на последнем

    слое: ŷ(i)= {1,σ(s 1 (i)(2))≥0.5 0,σ(s 1 (i)(2))<0.5
  18. Теоретически можем представить • Нейрон 1 на первом слое разделяет

    выборку так • Нейрон 2 на первом слое разделяет выборку эдак
  19. None
  20. Теперь • Значения активаций 1-го и 2-го нейрона для одного

    и того же исходного объекта — это признаки некоторого производного 2-мерного объекта, • который попадает на вход единственного нейрона второго слоя. • Класс нового производного двумерного объекта — тот же самый, что и у исходного одномерного. • Только вместо одного исходного признака (одна координата) мы получили два производных признака (две координаты). • Значит теперь исходную выборку мы можем изобразить как разноцветные точки на плоскости. • И он (нейрон 2-го слоя) теперь их сможет разделить...
  21. None
  22. None
  23. Вроде сможет...

  24. Точно сможет

  25. None
  26. Кстати, а что, если здесь возьмем не сигмоиду, а наш

    старый линейный нейрон ADALINE (активация — линейная сумма)?
  27. None
  28. None
  29. None
  30. None
  31. • Как видим, при любых параметрах для нейронов первого слоя,

    значения их выходов (линейные активации) выстраиваются на плоскости в линию • Нейрон на 2-м слое все так же не может отделить синие точки от красных (как и на 1-м слое) • Поэтому мы не можем строить глубокую сеть на линейных нейронах • Для того, чтобы превратить линейно неразделимые точки на первом слое в линейно разделимые точки на втором, нам нужна кривая (нелинейная) активация (в частности, отлично подходит сигмоида)
  32. конец замечания

  33. Но сможет ли алгоритм повторить это автоматически?

  34. Предположения • Общее (сильное) предположение: что цвет шара (класс объекта,

    диагноз пациента) действительно определяется известными нам параметрами и что эта зависимость действует как некоторый вероятностный закон • Частное предположение-1: о форме этого неизвестного закона, в каком виде мы будем его искать, как выглядит функция, параметры которой мы будем под него подгонять • Частное предположение-2: насколько хороши выбранные параметры в рамках частного предположения-1, можно ли сделать еще более качественную подгонку
  35. Функция стоимости (потери, ошибки) • Все та же (логарифм правдоподобия

    с минусом) — вычисляется на выходном нейроне • Но коэффициентов теперь больше • И структура функции усложнилась • Входные значения X теперь спрятаны глубже по уровням вложенности • Но все равно можно попробовать найти производную по каждому из параметров (посчитать градиент) • И использовать любимый градиентный спуск
  36. Функция стоимости (потерь) J (W )=−ln L(W )=∑ i=1 n

    [− y(i) ln(Φ(s(i)))−(1− y(i))ln(1−Φ(s(i)))] s(i)=s 1 (i)(2)=w 10 (2)+∑ k=1 m(2) (w 1k (2)a k (i)(1))=w 10 (2)+∑ k=1 m(2) (w 1k (2)Φ(∑ j=0 m(1) w kj (1) x j (i))) =w 10 (2)+w 11 (2)Φ(∑ j=0 m(1) w 1 j (1) x j (i))+w 12 (2)Φ(∑ j=0 m(1) w 2 j (1) x j (i)) =w 10 (2)+w 11 (2)Φ(w 10 (1)+w 11 (1) x 1 (i))+w 12 (2)Φ(w 20 (1)+w 21 (1) x 1 (i)) • Развернем для нашей сети из 2-х слоёв с одним нейроном на выходном слое и 2-мя нейронами на одном скрытом слое:
  37. None
  38. Здесь и далее • W — множество всех весовых коэффициентов

    на всех слоях • m(l) — количество весовых коэффициентов для каждого из нейронов на текущем [эль]-том слое (без нулевого) • s(i) = s(i)(W) - взвешенная сумма входов единственного нейрона последнего (выходного) слоя для i-го элемента обучающей выборки (зависит от всех весовых коэффициентов модели) • s = s(W) — то же, что s(i) (если встречается без индекса, подразумевается текущий элемент или некий элемент не из обучающей выборки)
  39. • Мы сами не будем подбирать параметры на 1-м слое

    так, чтобы с ними можно было разделить производные (здесь производные — не в математическом смысле) объекты на 2-м • Мы будем надеяться, что путешествие к минимуму функции стоимости само приведет нас к таким параметрам модели
  40. Попробуем найти минимум вручную по сетке

  41. Сеть из 3-х нейронов, по 1 признаку на объект •

    Скрытый слой: два нейрона по 2 коэффициента — 4 коэффициента • Плюс 3 коэффициента на входе выходного нейрона • Итого: всего 4+3=7 коэффициентов • Возьмем сетку 10 шагов на измерение • Диапазон поиска для всех коэффициентов: от -10 до 10 • Итого: 10^7 (10 000 000) комбинаций для перебора
  42. None
  43. Нашли минимум • w1_10= -7.78, w1_11= 10.0 • w1_20= -3.33,

    w1_21= 10.0 • w2_10= -5.56, w2_11= -10.0, w2_12= 10.0 • J(W) = 0.501329
  44. None
  45. None
  46. Будем двигаться к минимуму итеративно нашим любимым градиентным спуском

  47. [вспоминаем из прошлой лекции]

  48. Посчитаем градиент функции стоимости — частные производные по отдельным параметрам

    w ∂J (W ) ∂w k = ∂ ∂w k ∑ i=1 n [− y(i) ln(Φ(s(i)))−(1− y(i))ln(1−Φ(s(i)))] = ∂ ∂w k ∑ i=1 n [− y(i) ln(σ(s(i)))−(1− y(i))ln(1−σ(s(i)))] =∑ i=1 n [− y(i) 1 σ(s(i))lne −(1− y(i)) −1 (1−σ(s(i)))lne ] ∂ ∂w k σ(s(i)) =∑ i=1 n [ − y(i) σ(s(i)) + (1− y(i)) 1−σ(s(i)) ] ∂ ∂w k σ(s(i))
  49. Отдельно посчитаем производную сигмоиды Итого ∂ ∂s σ(s)= ∂ ∂

    s 1 1+e−s = −1 (1+e−s )2 ∂ ∂s (1+e−s )= e−s (1+e−s )2 = (1+e−s )−1 (1+e−s )2 = 1 (1+e−s ) − 1 (1+e−s )2 = 1 (1+e−s ) (1− 1 (1+e−s ) ) =σ(s)(1−σ(s)) ∂ ∂s σ(s)=σ(s)(1−σ(s))
  50. Продолжаем (s=s(W)) ∂J (W ) ∂w k =∑ i=1 n

    [ − y(i) σ(s(i)) + (1− y(i)) 1−σ(s(i)) ] ∂ ∂w k σ(s(i)) =∑ i=1 n [ − y(i)(1−σ(s(i)))+(1− y(i))σ(s(i)) σ(s(i))(1−σ(s(i))) ]σ(s(i))(1−σ(s(i))) ∂ ∂w k s(i) =∑ i=1 n [− y(i)+ y(i) σ(s(i))+σ(s(i))− y(i) σ(s(i))] ∂ ∂w k s(i) =∑ i=1 n [− y(i)+σ(s(i))] ∂ ∂w k s(i) =−∑ i=1 n [ y(i)−σ(s(i))] ∂ ∂w k s(i)
  51. [и здесь стоп]

  52. В итоге получили производную: ∂ J (W) ∂w k =−∑

    i=1 n [ y(i)−σ(s(i))] ∂ ∂ w k s(i) ∂s(i)(W ) ∂ w k = ∂ ∂ w k [w 10 (2)+w 11 (2)Φ(w 10 (1)+w 11 (1) x 1 (i))+w 12 (2) Φ(w 20 (1)+w 21 (1) x 1 (i))] • Для нашей сети из 2-х слоёв с одним нейроном на выходном слое и 2-мя нейронами на одном скрытом слое нам теперь нужно найти:
  53. Теперь вычислим частные производные отдельно для каждого слоя

  54. Для последнего слоя (слой 2): ∂ s(i)(W ) ∂ w

    10 (2) =1 ∂ s(i)(W ) ∂ w 1k (2) =Φ(∑ j=0 m(1) w kj (1) x j (i)),k≥1 ∂ s(i)(W ) ∂ w 11 (2) =Φ(∑ j=0 m(1) w 1 j (1) x j (i))=Φ(w 10 (1)+w 11 (1) x 1 (i)) ∂ s(i)(W ) ∂ w 12 (2) =Φ(∑ j=0 m(1) w 2 j (1) x j (i))=Φ(w 20 (1)+w 21 (1) x 1 (i))
  55. Для скрытого слоя (слой 1) • k-й нейрон, v-й вход

    (v-й признак): ∂ s(i)(W ) ∂w kv (1) = ∂ ∂w kv (1) [w 1k (2) Φ(∑ j=0 m(1) w kj (1) x j (i))]=w 1k (2) ∂ ∂w kv (1) Φ(∑ j=0 m(1) w kj (1) x j (i)) =w 1k (2) ∂ ∂w kv (1) σ(∑ j=0 m(1) w kj (1) x j (i))=w 1k (2) σ(∑ j=0 m(1) w kj (1) x j (i))(1−σ(∑ j=0 m(1) w kj (1) x j (i))) ∂ ∂w kv (1) ∑ j=0 m(1) w kj (1) x j (i) =w 1k (2) σ(∑ j=0 m(1) w kj (1) x j (i))(1−σ(∑ j=0 m(1) w kj (1) x j (i)))x v (i)
  56. Для скрытого слоя (слой 1) — 2 нейрона ∂ s(i)(W

    ) ∂ w 1v (1) =w 11 (2)σ(∑ j=0 m(1) w 1 j (1) x j (i))(1−σ(∑ j=0 m(1) w 1 j (1) x j (i)))x v (i) ,v=0 ,...,m(1) ∂ s(i)(W ) ∂ w 2v (1) =w 12 (2)σ(∑ j=0 m(1) w 2 j (1) x j (i))(1−σ(∑ j=0 m(1) w 2 j (1) x j (i)))x v (i) ,v=0 ,...,m(1)
  57. Для скрытого слоя (слой 1) — два нейрона, входы •

    Нейрон 1: ∂ s(i)(W ) ∂ w 10 (1) =w 11 (2)σ(∑ j=0 m(1) w 1 j (1) x j (i))(1−σ(∑ j=0 m(1) w 1 j (1) x j (i))) ∂ s(i)(W ) ∂ w 20 (1) =w 12 (2)σ(∑ j=0 m(1) w 2 j (1) x j (i))(1−σ(∑ j=0 m(1) w 2 j (1) x j (i))) ∂ s(i)(W ) ∂ w 11 (1) =w 11 (2)σ(∑ j=0 m(1) w 1 j (1) x j (i))(1−σ(∑ j=0 m(1) w 1 j (1) x j (i)))x 1 (i) ∂ s(i)(W ) ∂ w 21 (1) =w 12 (2)σ(∑ j=0 m(1) w 2 j (1) x j (i))(1−σ(∑ j=0 m(1) w 2 j (1) x j (i)))x 1 (i) • Нейрон 2:
  58. Градиент — вектор частных производных • ∇ [набла] (перевернутая дельта)

    • Определим правило шага: • Правило шага для k-го измерения: ∇ J (W )=( ∂ J (W ) ∂ w 1 ,..., ∂ J (W ) ∂w M ),W =(w 1 ,..., w M ) w:=w+Δ w ,Δ w=−η∇ J(W ) w k :=w k +Δ w k ,Δ w k =−η ∂J (W ) ∂w k
  59. Лучше записать в виде матрицы (точнее, семейства матриц) ∇(l) J

    (W )= (∂J (W ) ∂w 10 (l) ,..., ∂J (W ) ∂w 1m(l) (l) ... ∂J (W ) ∂w k 0 (l) ,..., ∂J (W ) ∂w km(l) (l) ) • Здесь k — количество нейронов на текущем слое l [эль]
  60. Размерности матриц градиента будут разные на разных слоях ∇(2) J

    (W )= (∂J (W ) ∂w 10 (2) , ∂J (W ) ∂w 11 (2) , ∂J (W ) ∂w 12 (2) ) ∇(1) J (W )= (∂ J (W ) ∂w 10 (1) , ∂ J (W ) ∂w 11 (1) ∂ J (W ) ∂w 20 (1) , ∂ J (W ) ∂w 21 (1) )
  61. Для последнего слоя (слой 2): Δ w 10 (2)=−η ∂J

    (W ) ∂w 10 (2) =η∑ i=1 n [ y(i)−σ(s(i))] Δ w 11 (2)=−η ∂J (W ) ∂w 11 (2) =η∑ i=1 n [ y(i)−σ(s(i))]σ(∑ j=0 m(1) w 1 j (1) x j (i)) Δ w 12 (2)=−η ∂J (W ) ∂w 12 (2) =η∑ i=1 n [ y(i)−σ(s(i))]σ(∑ j=0 m(1) w 2 j (1) x j (i))
  62. Для скрытого слоя (слой 1) • Нейрон 1: • Нейрон

    2: Δ w 10 (1)=−η ∂J (W ) ∂w 10 (1) =η∑ i=1 n [ y(i)−σ(s(i))]w 11 (2) σ(∑ j=0 m(1) w 1 j (1) x j (i))(1−σ(∑ j=0 m(1) w 1 j (1) x j (i))) Δ w 11 (1)=−η ∂J (W ) ∂w 11 (1) =η∑ i=1 n [ y(i)−σ(s(i))]w 11 (2) σ(∑ j=0 m(1) w 1 j (1) x j (i))(1−σ(∑ j=0 m(1) w 1 j (1) x j (i)))x 1 (i) Δ w 20 (1)=−η ∂J (W ) ∂w 20 (1) =η∑ i=1 n [ y(i)−σ(s(i))]w 12 (2) σ(∑ j=0 m(1) w 2 j (1) x j (i))(1−σ(∑ j=0 m(1) w 2 j (1) x j (i))) Δ w 21 (1)=−η ∂J (W ) ∂w 21 (1) =η∑ i=1 n [ y(i)−σ(s(i))]w 12 (2) σ(∑ j=0 m(1) w 2 j (1) x j (i))(1−σ(∑ j=0 m(1) w 2 j (1) x j (i)))x 1 (i)
  63. Ух, и это только для 3-х нейронов... • Должен быть

    алгоритм попроще • Должен быть алгоритм поуниверсальнее • Алгоритм, который позволит рассчитать частную производную по весовым коэффициентам на каждом слое • Для сетки с любым количеством слоев (производная функции потерь с любым уровнем вложенности) • Без необходимости выводить каждую формулу аналитически вручную
  64. Есть такой алгоритм • Алгоритм дифференцирования сложных функций обратным распространением

    • Для нейронных сетей его называют алгоритм обратного распространения ошибки • Важный бонус: алгоритм можно представить в виде матричных операций • При использовании аппаратного ускорения обучения нейронных сетей с распараллеливанием операций в множество потоков матричное представление — наиважнейшая возможность • Библиотеки автоматического дифференцирования: Theano, TensorFlow • Аппаратные ускорители нейросеток — матричные вычислители плюс автоматическое дифференцирование (если сетку нужно еще и обучать)
  65. Вообще, на вычисленных нами производных уже видно • Первый множитель

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

    раз уж все равно их посчитали
  67. Градиент по w(1) 10

  68. Градиент по w(1) 11

  69. Градиент по w(2) 10

  70. Градиент по w(2) 11

  71. Здесь видно • Градиент нейрона на 2-м слое — такой

    же, как для сети из 1 нейрона (спуск по сигмоиде) • Градиенты 1-го нейрона на 1-м слое выглядят любопытнее (очевидно, сказывается влияние 2-го нейрона на общую ошибку на выходе) • Видим продолжительные локальные минимумы (длинное плато наверху с нулевой производной) • И даже что-то, похожее на ямку на спуске (но производная все-таки не обнулилась, поэтому там не застрянем) • Оптимальный темп обучения для коэффициентов на слое 1 и слое 2 отличается на порядки. Скорее всего это скажется на сходимости алгоритма в целом и эту проблему придется как-то обходить Это только если не приводить исходные X в диапазон [0, 1]
  72. Выбираем начальные коэффициенты # слой1: нейрон-1 w1_10 = 0.1 w1_11

    = 2 # слой1: нейрон-2 w1_20 = 0.1 w1_21 = -2 # слой2: нейрон-1 w2_10 = 3 w2_11 = 0.1 w2_12 = 0.1 (противоположный знак w1_11 и w1_21 обеспечивает наклон сигмоид в разные стороны)
  73. None
  74. None
  75. None
  76. None
  77. Запускаем обучение • Возьмем коэффициент обучения η=0.5 • И 300

    эпох (итераций — шагов спуска)
  78. None
  79. Посмотрим, что получилось

  80. None
  81. None
  82. None
  83. Замечание • Обратим еще раз внимание, что на графике с

    сигмоидами (активации нейронов 1-го слоя) у нас нет никакого порога активации, • здесь нет никакого деления точек на классы (как было при обучении одного нейрона); • точка пересечения активации с Ф=0.5 или близость проекции точки на активации к линиям Ф=0 или Ф=1 нас не интересуют. • Здесь роль активаций — сгенерировать пару новых координат для объекта нелинейно из одной старой, чтобы отправить их на следующий слой. • Деление на классы происходит поверхностью активации на 2-м слое
  84. Замечание • На 2-м слое меняется не только изгиб поверхности

    активации, но и перемещаются точки • На первом слое — только активация
  85. В процессе

  86. None
  87. None
  88. None
  89. None
  90. None
  91. None
  92. None
  93. None
  94. None
  95. None
  96. None
  97. None
  98. None
  99. None
  100. None
  101. None
  102. None
  103. None
  104. None
  105. None
  106. None
  107. None
  108. None
  109. None
  110. None
  111. None
  112. None
  113. None
  114. None
  115. None
  116. None
  117. None
  118. None
  119. None
  120. None
  121. None
  122. Интересно посмотреть, как ведет себя функция ошибки

  123. • (7+1)-мерный график мы построить не сможем, но сможем сделать

    несколько разрезов по выбранным парам измерений w • На каждом шаге будут меняться значения всех коэффициентов модели, • а текущий график будет показывать поверхность ошибки на выбранном диапазоне значений выбранной пары w • (при всех остальных параметрах для данного шага фиксированных)
  124. Рассмотрим пары по нейронам: • на 1-м слое: - нейрон-1:

    (w1_10, w1_11) - нейрон-2: (w1_20, w1_21) • На 2-м слое один нейрон с 3-мя параметрами (для него одного полностью уже не можем построить функцию ошибки): - (w2_10, w2_11) — свободный коэффициент + 1-я активация - (w2_11, w1_12) — активации нейронов с предыдущего слоя
  125. «Пока противник рисует карты наступления, мы меняем ландшафты, причём вручную.

    Когда приходит время атаки, противник теряется на незнакомой местности и приходит в полную небоеготовность.»
  126. Слой-1, нейрон-1 w1_10, w1_11

  127. None
  128. None
  129. None
  130. None
  131. None
  132. None
  133. None
  134. None
  135. None
  136. None
  137. None
  138. None
  139. None
  140. None
  141. None
  142. None
  143. None
  144. • Здесь было интересно, как мы в начале попали, а

    потом выбрались из локальной ямы • Это был явно не минимум, но градиент нас оттуда никак бы не вывел • Но постепенная смена окружающего ландшафта (за счет изменения других коэффициентов модели) подняла дно локальной ямы наверх к желобу • И шарик выкатился и покатился по желобу вниз
  145. Слой-1, нейрон-1 w1_10, w1_11

  146. None
  147. None
  148. None
  149. None
  150. None
  151. None
  152. None
  153. None
  154. None
  155. None
  156. • Два желоба в самом начале • Силой начального положения

    покатились по одному из них
  157. Слой-2, нейрон-1 w2_10, w2_11

  158. None
  159. None
  160. None
  161. None
  162. None
  163. None
  164. None
  165. None
  166. С логарифмической шкалой

  167. None
  168. None
  169. None
  170. None
  171. None
  172. None
  173. None
  174. None
  175. Слой-2, нейрон-1 w2_11, w2_12

  176. None
  177. None
  178. None
  179. None
  180. None
  181. None
  182. None
  183. None
  184. С логарифмической шкалой

  185. None
  186. None
  187. None
  188. None
  189. None
  190. None
  191. None
  192. None
  193. • Похоже на прогулку по многомерной поляне, когда с каждым

    шагом меняется не только положение в пространстве, но и окружающий ландшафт. • Можно представить такую ситуацию в жизни, если вы идете по пустыне и между шагами проходит достаточно продолжительное время так, что ветер и гравитацию успевают изменить форму окружающих барханов. • Или плывете по волнам в океане • Как вариант: выкатывание мячика из одеяла подниманием за концы и встряхиванием одеяла
  194. Подытожим • Обучили нейронную сетку из 3-х нейронов • Она

    сможет разделять объекты на группы так, как не умеет единичный нейрон • TODO: проверить работу обученной сетки для нашего случая
  195. Нашли коэффициенты • w1_10=-6.62, w1_11=9.04 • w1_20=3.44, w1_21=-11.77 • w2_10=4.38,

    w2_11=-9.79, w2_12=-9.78 • J(W)=0.42
  196. Проверим результат • x=(0.55) — должна быть синей (внутри) •

    x=(-1) — должна быть красной (снаружи) • x=(0.9) — должна быть красной (снаружи)
  197. neuro-sigma.py import numpy as np import math # точки -

    признаки (одно измерение) X1 = np.array([0.1, 0.2, 0.5, 0.6, 0.8, 1.0]) # метки классов (правильные ответы) y = np.array([0, 0, 1, 1, 0, 0])
  198. None
  199. None
  200. x=(0.55): активации на 1-м слое • Нейрон-1 • Нейрон-2 s

    1 (1)=w 10 (1)+w 11 (1) x 1 =−6.62+9.04 x 1 =−6.62+9.040.55=−1.648 a 1 (1)= 1 1+e1.648 =0.16 s 2 (1)=w 20 (1)+w 21 (1) x 1 =3.44−11.77 x 1 =3.44−11.77 0.55=−3.03 a 2 (1)= 1 1+e3.03 =0.05
  201. x=(0.55): активация на 2-м слое • Выходной нейрон: • Порог

    0.9 > 0.5 => ŷ=1 => объект x=(0.55) — класс y=1, т. е. это синий цвет (то, что внутри) => как и следовало ожидать s=s 1 (2)=w 10 (2)+w 11 (2) a 1 (1)+w 12 (2) a 2 (1)=4.38−9.79a 1 (1)−9.78 a 2 (1) =4.38−9.790.16−9.780.05=2.32 a 1 (2)= 1 1+e−2.32 =0.9
  202. Самостоятельно • Проверить другие точки

  203. Мы научили нашу мыслящую машину класса «многослойный перцептрон» отличать то,

    что снаружи, от того, что внутри, и нам потребовалось для этого всего 200 попыток
  204. Еще сравним с минимумом, найденным вручную

  205. None
  206. None
  207. • Как видим, обученная сетка и сетка с найденным вручную

    минимумом имеют разную конфигурацию весов • Они отличаются разной стратегией группировки объектов на 2-м слое (синие точки уходят в разные углы) • При этом они обе дают правильный результат
  208. • Можно предположить, что сеть имеет несколько минимумов (как минимум,

    два), точнее, направлений спуска, которые удовлетворяют решению задачи, обеспечивая группировку объектов на последнем слое • В какой из них мы попадем — зависит от выбора начальных значений весов w • (если весовые коэффициенты выбираются случайно, то мы не знаем, в какую из ям мы поедем заранее) • (скорее всего таких направлений спуска четыре — по количеству углов, куда могут уползать синие точки) • (с другой стороны, без дополнительного исследования нельзя совсем исключать вариант, когда мы перескочим из одной ямы в другую в процессе обучения)
  209. Другие коэффициенты обучения

  210. None
  211. None
  212. None
  213. Важные нюансы • Выбрать X1 от 0 до 1 (иначе

    может не получиться спуститься) • На входе второго слоя значения и так получаются от 0 до 1 (спасибо сигмоиде) • Начальные коэффициенты w тоже лучше брать не очень большие (хотя, как видим, они могут вырасти далеко за пределы интервала -1, 1) • Можно попасть в локальный минимум, для этого используются разные приёмы (подбор коэффициента обучения, слагаемые регуляризации и т. п.) • Но в этот раз обошлось без «наворотов» • При этом на нейроне-1 наблюдали локальный минимум (классическая яма), но благодаря изменениям ландшафта на каждом шаге через некоторое количество шагов смогли из него выкатиться (в яму провели желоб и шарик покатился дальше вниз)
  214. Нам повезло, но случается всякое • Попадание в локальные минимумы

    • Проблема затухания градиента • и т.п.
  215. Всякие приёмчики • Выбор начальных значений коэффициентов w • Выбор

    оптимального коэффициента обучения η • Стохастический спуск (обновлять веса для каждого элемента или группы элементов обучающей выборки, а не всей выборки сразу) • Масштабирование признаков: стандартизация, нормализация • Регуляризация (дополнительные слагаемые к функции ошибки) • И т.п.
  216. Например, L2-регуляризация • Добавляем к функции ошибки слагаемое ∂ J

    (W ) ∂w k =−∑ i=1 n [ y(i)−σ(s(i))] ∂ ∂w k s(i)+λ w k J (W )=−ln L(W )=∑ i=1 n [− y(i) ln(Φ(s(i)))−(1− y(i))ln(1−Φ(s(i)))]+ λ 2 ∑ j=1 M w j 2
  217. Самостоятельно • Попробуйте повторить • У кого получится, сделайте сеть

    посложнее