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

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

Anton
May 29, 2019

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

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

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

Anton

May 29, 2019
Tweet

More Decks by Anton

Other Decks in Education

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. Здесь • Точки на оси Φ=0.5 — объекты обучающей выборки

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

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

    научить отличать лево и право • Можно ли построить такую «мыслящую машину», которая будет отличать то, что снаружи, от того, что внутри?
  7. Здесь • w(l) kj — весовой коэффициент входящей связи нейрона

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

    нейронов текущего слоя (у нас полносвязная сеть) • и оно равно количеству нейронов на предыдущем слое (или количеству прямых входов для первого скрытого слоя) плюс один нейрон смещения (фиктивный нейрон) • На разных слоях эти значения (количество входящих связей) могут (и будут) отличаться • У нас уже отличаются: на первый скрытый слой один вход с единственным признаком одномерного объекта (плюс нейрон смещения); на единственный нейрон второго выходного слоя — два выхода от двух нейронов первого скрытого слоя (плюс нейрон смещения) • (для второго слоя нейрон смещения — уже настоящий нейрон)
  9. Активации на 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)
  10. Активация на 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
  11. Здесь и далее • W — множество всех весовых коэффициентов

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

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

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

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

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

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

    с минусом) — вычисляется на выходном нейроне • Но коэффициентов теперь больше • И структура функции усложнилась • Входные значения X теперь спрятаны глубже по уровням вложенности • Но все равно можно попробовать найти производную по каждому из параметров (посчитать градиент) • И использовать любимый градиентный спуск
  18. Функция стоимости (потерь) 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-мя нейронами на одном скрытом слое:
  19. Здесь и далее • W — множество всех весовых коэффициентов

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

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

    Скрытый слой: два нейрона по 2 коэффициента — 4 коэффициента • Плюс 3 коэффициента на входе выходного нейрона • Итого: всего 4+3=7 коэффициентов • Возьмем сетку 10 шагов на измерение • Диапазон поиска для всех коэффициентов: от -10 до 10 • Итого: 10^7 (10 000 000) комбинаций для перебора
  22. Нашли минимум • 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
  23. Посчитаем градиент функции стоимости — частные производные по отдельным параметрам

    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))
  24. Отдельно посчитаем производную сигмоиды Итого ∂ ∂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))
  25. Продолжаем (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)
  26. В итоге получили производную: ∂ 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-мя нейронами на одном скрытом слое нам теперь нужно найти:
  27. Для последнего слоя (слой 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))
  28. Для скрытого слоя (слой 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)
  29. Для скрытого слоя (слой 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)
  30. Для скрытого слоя (слой 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:
  31. Градиент — вектор частных производных • ∇ [набла] (перевернутая дельта)

    • Определим правило шага: • Правило шага для 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
  32. Лучше записать в виде матрицы (точнее, семейства матриц) ∇(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 [эль]
  33. Размерности матриц градиента будут разные на разных слоях ∇(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) )
  34. Для последнего слоя (слой 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))
  35. Для скрытого слоя (слой 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)
  36. Ух, и это только для 3-х нейронов... • Должен быть

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

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

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

    же, как для сети из 1 нейрона (спуск по сигмоиде) • Градиенты 1-го нейрона на 1-м слое выглядят любопытнее (очевидно, сказывается влияние 2-го нейрона на общую ошибку на выходе) • Видим продолжительные локальные минимумы (длинное плато наверху с нулевой производной) • И даже что-то, похожее на ямку на спуске (но производная все-таки не обнулилась, поэтому там не застрянем) • Оптимальный темп обучения для коэффициентов на слое 1 и слое 2 отличается на порядки. Скорее всего это скажется на сходимости алгоритма в целом и эту проблему придется как-то обходить Это только если не приводить исходные X в диапазон [0, 1]
  40. Выбираем начальные коэффициенты # слой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 обеспечивает наклон сигмоид в разные стороны)
  41. Замечание • Обратим еще раз внимание, что на графике с

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

    активации, но и перемещаются точки • На первом слое — только активация
  43. • (7+1)-мерный график мы построить не сможем, но сможем сделать

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

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

    Когда приходит время атаки, противник теряется на незнакомой местности и приходит в полную небоеготовность.»
  46. • Здесь было интересно, как мы в начале попали, а

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

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

    сможет разделять объекты на группы так, как не умеет единичный нейрон • TODO: проверить работу обученной сетки для нашего случая
  49. Проверим результат • x=(0.55) — должна быть синей (внутри) •

    x=(-1) — должна быть красной (снаружи) • x=(0.9) — должна быть красной (снаружи)
  50. 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])
  51. 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
  52. 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
  53. Мы научили нашу мыслящую машину класса «многослойный перцептрон» отличать то,

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

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

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

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

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