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

    View full-size slide

  2. Использованы материалы

    Python и машинное обучение, Себастьян
    Рашка

    Глубокое обучение. Погружение в мир
    нейронных сетей, С. Николенко, А. Кадурин,
    Е. Архангельская

    Википедия, Хабр, Интернет

    View full-size slide

  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])

    View full-size slide

  4. Попробуем разделить [линейно]-неразделимое

    View full-size slide

  5. Здесь

    Точки на оси Φ=0.5 — объекты обучающей выборки с
    единственным признаком X1

    Синие — класс-1 (y=1), красные — класс-2 (y=0),

    Фиолетовая линия — фрагмент сигмоиды, параметры подобраны
    алгоритмом логистической регрессии (градиентный спуск для
    единственного нейрона, активация — сигмоида) за 10 тыс. эпох

    Бледные точки на сигмоиде — проекции объектов обучающей
    выборки на сигмоиду (их можно трактовать как предсказание
    класса)

    Горизонтальная серая линия Φ=0.5 — порог активации сигмоиды

    Для правильной классификации: бледные синие точки должны
    быть выше порога активации, светлые красные — ниже

    View full-size slide


  6. Как видим, алгоритм не смог отделить красные
    точки от синих, т. к. множество объектов обучающей
    выборки изначально линейно неразделимо

    И не удивительно, ведь мы никаким образом не
    сможем расположить монотонную сигмоиду так,
    чтобы крайние красные точки оказались с одной, а
    средние синие в то же время — с другой стороны от
    точки пересечения порога активацией

    (т.к. сигмоида пересекает порог только в одной
    точке)

    View full-size slide


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

    Можно ли построить такую «мыслящую
    машину», которая будет отличать то, что
    снаружи, от того, что внутри?

    View full-size slide

  8. Структура искусственного нейрона
    (с фиктивным входом — «нейроном» смещения)

    View full-size slide

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

    View full-size slide

  10. Здесь

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

    Верхний индекс (l) [эль маленькая] — номер слоя сети

    Первый нижний индекс k — номер нейрона в текущем
    слое (начинаем с 1)

    (иногда k будет сквозным индексом коэффициентов
    всей сети — смотрите контекст)

    Второй нижний индекс j — номер входящей связи
    текущего нейрона; 0-й индекс (j=0) — для свободного
    члена (вес для входа от фиктивного единичного нейрона
    смещения)

    View full-size slide

  11. Обратим внимание, что

    Количество входящих связей одинаково для всех нейронов текущего
    слоя (у нас полносвязная сеть)

    и оно равно количеству нейронов на предыдущем слое (или
    количеству прямых входов для первого скрытого слоя) плюс один
    нейрон смещения (фиктивный нейрон)

    На разных слоях эти значения (количество входящих связей) могут (и
    будут) отличаться

    У нас уже отличаются: на первый скрытый слой один вход с
    единственным признаком одномерного объекта (плюс нейрон
    смещения); на единственный нейрон второго выходного слоя — два
    выхода от двух нейронов первого скрытого слоя (плюс нейрон
    смещения)

    (для второго слоя нейрон смещения — уже настоящий нейрон)

    View full-size slide

  12. Активации на 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)

    View full-size slide

  13. Активация на 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

    View full-size slide

  14. Здесь и далее

    W — множество всех весовых коэффициентов на всех
    слоях

    M — количество всех весовых коэффициентов на всех
    слоях

    m(l) — количество весовых коэффициентов для каждого
    из нейронов на текущем [эль]-том слое (без нулевого)

    a(i)(l)
    k
    — значение активации для i-го элемента на k-м
    нейроне l-го слоя

    s(i)(l)
    k
    — взвешенная сумма для i-го элемента на k-м
    нейроне l-го слоя

    View full-size slide

  15. Порог (квантизатор)

    Порог для окончательной классификации
    только на последнем слое:
    ŷ(i)=
    {1,σ(s
    1
    (i)(2))≥0.5
    0,σ(s
    1
    (i)(2))<0.5

    View full-size slide

  16. Теоретически можем представить

    Нейрон 1 на первом слое разделяет выборку
    так

    Нейрон 2 на первом слое разделяет выборку
    эдак

    View full-size slide

  17. Теперь

    Значения активаций 1-го и 2-го нейрона для одного и того же
    исходного объекта — это признаки некоторого производного
    2-мерного объекта,

    который попадает на вход единственного нейрона второго слоя.

    Класс нового производного двумерного объекта — тот же
    самый, что и у исходного одномерного.

    Только вместо одного исходного признака (одна координата) мы
    получили два производных признака (две координаты).

    Значит теперь исходную выборку мы можем изобразить как
    разноцветные точки на плоскости.

    И он (нейрон 2-го слоя) теперь их сможет разделить...

    View full-size slide

  18. Вроде сможет...

    View full-size slide

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

    View full-size slide

  20. Кстати, а что, если здесь возьмем
    не сигмоиду, а наш старый
    линейный нейрон ADALINE
    (активация — линейная сумма)?

    View full-size slide


  21. Как видим, при любых параметрах для нейронов первого
    слоя, значения их выходов (линейные активации)
    выстраиваются на плоскости в линию

    Нейрон на 2-м слое все так же не может отделить синие
    точки от красных (как и на 1-м слое)

    Поэтому мы не можем строить глубокую сеть на
    линейных нейронах

    Для того, чтобы превратить линейно неразделимые точки
    на первом слое в линейно разделимые точки на втором,
    нам нужна кривая (нелинейная) активация (в частности,
    отлично подходит сигмоида)

    View full-size slide

  22. конец замечания

    View full-size slide

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

    View full-size slide

  24. Предположения

    Общее (сильное) предположение: что цвет шара (класс
    объекта, диагноз пациента) действительно определяется
    известными нам параметрами и что эта зависимость
    действует как некоторый вероятностный закон

    Частное предположение-1: о форме этого неизвестного
    закона, в каком виде мы будем его искать, как выглядит
    функция, параметры которой мы будем под него подгонять

    Частное предположение-2: насколько хороши выбранные
    параметры в рамках частного предположения-1, можно ли
    сделать еще более качественную подгонку

    View full-size slide

  25. Функция стоимости (потери, ошибки)

    Все та же (логарифм правдоподобия с минусом) —
    вычисляется на выходном нейроне

    Но коэффициентов теперь больше

    И структура функции усложнилась

    Входные значения X теперь спрятаны глубже по уровням
    вложенности

    Но все равно можно попробовать найти производную по
    каждому из параметров (посчитать градиент)

    И использовать любимый градиентный спуск

    View full-size slide

  26. Функция стоимости (потерь)
    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-мя нейронами на одном скрытом слое:

    View full-size slide

  27. Здесь и далее

    W — множество всех весовых коэффициентов на всех слоях

    m(l) — количество весовых коэффициентов для каждого из
    нейронов на текущем [эль]-том слое (без нулевого)

    s(i) = s(i)(W) - взвешенная сумма входов единственного
    нейрона последнего (выходного) слоя для i-го элемента
    обучающей выборки (зависит от всех весовых
    коэффициентов модели)

    s = s(W) — то же, что s(i) (если встречается без индекса,
    подразумевается текущий элемент или некий элемент не из
    обучающей выборки)

    View full-size slide


  28. Мы сами не будем подбирать параметры на 1-м
    слое так, чтобы с ними можно было разделить
    производные (здесь производные — не в
    математическом смысле) объекты на 2-м

    Мы будем надеяться, что путешествие к
    минимуму функции стоимости само приведет нас
    к таким параметрам модели

    View full-size slide

  29. Попробуем найти минимум
    вручную по сетке

    View full-size slide

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

    Скрытый слой: два нейрона по 2 коэффициента — 4
    коэффициента

    Плюс 3 коэффициента на входе выходного нейрона

    Итого: всего 4+3=7 коэффициентов

    Возьмем сетку 10 шагов на измерение

    Диапазон поиска для всех коэффициентов: от -10 до 10

    Итого: 10^7 (10 000 000) комбинаций для перебора

    View full-size slide

  31. Нашли минимум

    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

    View full-size slide

  32. Будем двигаться к минимуму
    итеративно нашим любимым
    градиентным спуском

    View full-size slide

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

    View full-size slide

  34. Посчитаем градиент функции стоимости —
    частные производные по отдельным параметрам 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))

    View full-size slide

  35. Отдельно посчитаем производную
    сигмоиды
    Итого

    ∂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))

    View full-size slide

  36. Продолжаем (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)

    View full-size slide

  37. [и здесь стоп]

    View full-size slide

  38. В итоге получили производную:
    ∂ 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-мя
    нейронами на одном скрытом слое нам теперь нужно найти:

    View full-size slide

  39. Теперь вычислим частные производные
    отдельно для каждого слоя

    View full-size slide

  40. Для последнего слоя (слой 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))

    View full-size slide

  41. Для скрытого слоя (слой 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)

    View full-size slide

  42. Для скрытого слоя (слой 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)

    View full-size slide

  43. Для скрытого слоя (слой 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:

    View full-size slide

  44. Градиент — вектор частных производных

    ∇ [набла] (перевернутая дельта)

    Определим правило шага:

    Правило шага для 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

    View full-size slide

  45. Лучше записать в виде матрицы
    (точнее, семейства матриц)
    ∇(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 [эль]

    View full-size slide

  46. Размерности матриц градиента
    будут разные на разных слоях
    ∇(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)
    )

    View full-size slide

  47. Для последнего слоя (слой 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))

    View full-size slide

  48. Для скрытого слоя (слой 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)

    View full-size slide

  49. Ух, и это только для 3-х нейронов...

    Должен быть алгоритм попроще

    Должен быть алгоритм поуниверсальнее

    Алгоритм, который позволит рассчитать частную
    производную по весовым коэффициентам на каждом
    слое

    Для сетки с любым количеством слоев (производная
    функции потерь с любым уровнем вложенности)

    Без необходимости выводить каждую формулу
    аналитически вручную

    View full-size slide

  50. Есть такой алгоритм

    Алгоритм дифференцирования сложных функций обратным
    распространением

    Для нейронных сетей его называют алгоритм обратного
    распространения ошибки

    Важный бонус: алгоритм можно представить в виде матричных
    операций

    При использовании аппаратного ускорения обучения нейронных сетей
    с распараллеливанием операций в множество потоков матричное
    представление — наиважнейшая возможность

    Библиотеки автоматического дифференцирования: Theano, TensorFlow

    Аппаратные ускорители нейросеток — матричные вычислители плюс
    автоматическое дифференцирование (если сетку нужно еще и обучать)

    View full-size slide

  51. Вообще, на вычисленных нами
    производных уже видно

    Первый множитель одинаковый везде — это ошибка на
    выходном слое

    Дальше она домножается на частные производные по
    весовым коэффициентам на каждом слое

    Причем производные на более ранних слоях (ближе к входу)
    получаются из производных на более поздних (ближе к
    выходу) домножением на дополнительные конструкции

    Получается, что мы как бы распространяем ошибку
    выходного слоя по сети в обратном направлении к 1-му слою

    View full-size slide

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

    View full-size slide

  53. Градиент по w(1)
    10

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  57. Здесь видно

    Градиент нейрона на 2-м слое — такой же, как для сети из 1 нейрона
    (спуск по сигмоиде)

    Градиенты 1-го нейрона на 1-м слое выглядят любопытнее (очевидно,
    сказывается влияние 2-го нейрона на общую ошибку на выходе)

    Видим продолжительные локальные минимумы (длинное плато наверху
    с нулевой производной)

    И даже что-то, похожее на ямку на спуске (но производная все-таки не
    обнулилась, поэтому там не застрянем)

    Оптимальный темп обучения для коэффициентов на слое 1 и слое 2
    отличается на порядки. Скорее всего это скажется на сходимости
    алгоритма в целом и эту проблему придется как-то обходить
    Это только если не приводить исходные X в диапазон [0, 1]

    View full-size slide

  58. Выбираем начальные коэффициенты
    # слой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 обеспечивает наклон сигмоид в разные стороны)

    View full-size slide

  59. Запускаем обучение

    Возьмем коэффициент обучения η=0.5

    И 300 эпох (итераций — шагов спуска)

    View full-size slide

  60. Посмотрим, что получилось

    View full-size slide

  61. Замечание

    Обратим еще раз внимание, что на графике с сигмоидами (активации
    нейронов 1-го слоя) у нас нет никакого порога активации,

    здесь нет никакого деления точек на классы (как было при обучении
    одного нейрона);

    точка пересечения активации с Ф=0.5 или близость проекции точки
    на активации к линиям Ф=0 или Ф=1 нас не интересуют.

    Здесь роль активаций — сгенерировать пару новых координат для
    объекта нелинейно из одной старой, чтобы отправить их на
    следующий слой.

    Деление на классы происходит поверхностью активации на 2-м слое

    View full-size slide

  62. Замечание

    На 2-м слое меняется не только изгиб
    поверхности активации, но и перемещаются
    точки

    На первом слое — только активация

    View full-size slide

  63. В процессе

    View full-size slide

  64. Интересно посмотреть,
    как ведет себя функция ошибки

    View full-size slide


  65. (7+1)-мерный график мы построить не сможем, но
    сможем сделать несколько разрезов по выбранным
    парам измерений w

    На каждом шаге будут меняться значения всех
    коэффициентов модели,

    а текущий график будет показывать поверхность ошибки
    на выбранном диапазоне значений выбранной пары w

    (при всех остальных параметрах для данного шага
    фиксированных)

    View full-size slide

  66. Рассмотрим пары по нейронам:

    на 1-м слое:
    - нейрон-1: (w1_10, w1_11)
    - нейрон-2: (w1_20, w1_21)

    На 2-м слое один нейрон с 3-мя параметрами (для него одного
    полностью уже не можем построить функцию ошибки):
    - (w2_10, w2_11) — свободный коэффициент + 1-я активация
    - (w2_11, w1_12) — активации нейронов с предыдущего слоя

    View full-size slide

  67. «Пока противник рисует карты наступления,
    мы меняем ландшафты, причём вручную. Когда
    приходит время атаки, противник теряется на
    незнакомой местности и приходит в полную
    небоеготовность.»

    View full-size slide

  68. Слой-1, нейрон-1
    w1_10, w1_11

    View full-size slide


  69. Здесь было интересно, как мы в начале попали, а потом
    выбрались из локальной ямы

    Это был явно не минимум, но градиент нас оттуда никак
    бы не вывел

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

    И шарик выкатился и покатился по желобу вниз

    View full-size slide

  70. Слой-1, нейрон-1
    w1_10, w1_11

    View full-size slide


  71. Два желоба в самом начале

    Силой начального положения покатились по
    одному из них

    View full-size slide

  72. Слой-2, нейрон-1
    w2_10, w2_11

    View full-size slide

  73. С логарифмической шкалой

    View full-size slide

  74. Слой-2, нейрон-1
    w2_11, w2_12

    View full-size slide

  75. С логарифмической шкалой

    View full-size slide


  76. Похоже на прогулку по многомерной поляне, когда с каждым
    шагом меняется не только положение в пространстве, но и
    окружающий ландшафт.

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

    Или плывете по волнам в океане

    Как вариант: выкатывание мячика из одеяла подниманием
    за концы и встряхиванием одеяла

    View full-size slide

  77. Подытожим

    Обучили нейронную сетку из 3-х нейронов

    Она сможет разделять объекты на группы
    так, как не умеет единичный нейрон

    TODO: проверить работу обученной сетки
    для нашего случая

    View full-size slide

  78. Нашли коэффициенты

    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

    View full-size slide

  79. Проверим результат

    x=(0.55) — должна быть синей (внутри)

    x=(-1) — должна быть красной (снаружи)

    x=(0.9) — должна быть красной (снаружи)

    View full-size slide

  80. 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])

    View full-size slide

  81. 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

    View full-size slide

  82. 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

    View full-size slide

  83. Самостоятельно

    Проверить другие точки

    View full-size slide

  84. Мы научили нашу мыслящую
    машину класса «многослойный
    перцептрон» отличать то, что
    снаружи, от того, что внутри, и
    нам потребовалось для этого
    всего 200 попыток

    View full-size slide

  85. Еще сравним с минимумом,
    найденным вручную

    View full-size slide


  86. Как видим, обученная сетка и сетка с
    найденным вручную минимумом имеют
    разную конфигурацию весов

    Они отличаются разной стратегией
    группировки объектов на 2-м слое (синие
    точки уходят в разные углы)

    При этом они обе дают правильный результат

    View full-size slide


  87. Можно предположить, что сеть имеет несколько минимумов (как
    минимум, два), точнее, направлений спуска, которые
    удовлетворяют решению задачи, обеспечивая группировку
    объектов на последнем слое

    В какой из них мы попадем — зависит от выбора начальных
    значений весов w

    (если весовые коэффициенты выбираются случайно, то мы не
    знаем, в какую из ям мы поедем заранее)

    (скорее всего таких направлений спуска четыре — по количеству
    углов, куда могут уползать синие точки)

    (с другой стороны, без дополнительного исследования нельзя
    совсем исключать вариант, когда мы перескочим из одной ямы в
    другую в процессе обучения)

    View full-size slide

  88. Другие коэффициенты обучения

    View full-size slide

  89. Важные нюансы

    Выбрать X1 от 0 до 1 (иначе может не получиться спуститься)

    На входе второго слоя значения и так получаются от 0 до 1 (спасибо
    сигмоиде)

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

    Можно попасть в локальный минимум, для этого используются разные
    приёмы (подбор коэффициента обучения, слагаемые регуляризации и т. п.)

    Но в этот раз обошлось без «наворотов»

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

    View full-size slide

  90. Нам повезло, но случается всякое

    Попадание в локальные минимумы

    Проблема затухания градиента

    и т.п.

    View full-size slide

  91. Всякие приёмчики

    Выбор начальных значений коэффициентов w

    Выбор оптимального коэффициента обучения η

    Стохастический спуск (обновлять веса для каждого элемента
    или группы элементов обучающей выборки, а не всей
    выборки сразу)

    Масштабирование признаков: стандартизация, нормализация

    Регуляризация (дополнительные слагаемые к функции
    ошибки)

    И т.п.

    View full-size slide

  92. Например, 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

    View full-size slide

  93. Самостоятельно

    Попробуйте повторить

    У кого получится, сделайте сеть посложнее

    View full-size slide