Alterna · учебный материал

07.5 Почему одной прямой недостаточно

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

Что в этом материале

Содержание и основные понятия

На предыдущей странице: нелинейные правила преобразования.
Некоторые группы точек нельзя разделить одной прямой. Нелинейные промежуточные признаки позволяют построить более гибкое решение.
Он собирает вклады входов, добавляет смещение и применяет нелинейное правило. Все части этого расчёта уже доступны школьной арифметике.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Глубина сама не создаёт нелинейность
Композиция двух аффинных слоёв без активации сворачивается в один:
W
2
(
W
1
x
+
b
1
)
+
b
2
=
(
W
2
W
1
)
x
+
(
W
2
b
1
+
b
2
)
.
W_2(W_1x+b_1)+b_2=(W_2W_1)x+(W_2b_1+b_2).
W
2
​
(
W
1
​
x
+
b
1
​
)
+
b
2
​
=
(
W
2
​
W
1
​
)
x
+
(
W
2
​
b
1
​
+
b
2
​
)
.
XOR на точках (0,0),(0,1),(1,0),(1,1) имеет ответы 0,1,1,0. Две диагональные пары не разделяются одной прямой. Чтобы получить подходящее представление, введём два нелинейных скрытых признака (N02 §6.1):
s
=
x
1
+
x
2
,
h
1
=
ReLU
⁡
(
s
)
,
h
2
=
ReLU
⁡
(
s
−
1
)
,
y
^
=
h
1
−
2
h
2
.
s=x_1+x_2,\quad h_1=\operatorname{ReLU}(s),\quad
h_2=\operatorname{ReLU}(s-1),\quad \hat y=h_1-2h_2.
s
=
x
1
​
+
x
2
​
,
h
1
​
=
ReLU
(
s
)
,
h
2
​
=
ReLU
(
s
−
1
)
,
y
^
​
=
h
1
​
−
2
h
2
​
.
При s=0,1,2 скрытые пары равны [0,0],[1,0],[2,1], а выходы 0,1,0. Следовательно, все четыре вершины обработаны правильно. Эти веса
назначены вручную
, не получены текущим обучением.
Эксперимент.
Отключите ReLU, сохранив веса: теперь выход 2−s, то есть [2,1,1,0]. Некоторые точки совпали, но функция уже не XOR. Это контрпример к выводу «ничего не изменилось», сделанному по одной удачной точке.
Линейный output полезен после нелинейного представления. Однако ручной пример не доказывает generalization вне четырёх вершин и не гарантирует, что GD найдёт именно эти целочисленные веса. Далее соберём
MLP
и отдельно реализуем настоящее обучение.
outputs=[]
for x1,x2 in [(0,0),(0,1),(1,0),(1,1)]:
s=x1+x2
outputs.append(max(0,s)-2*max(0,s-1))
assert outputs==[0,1,1,0]
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Произведение матриц и новый bias не создают нелинейную семью.
Что могут несколько таких элементов, чего не может один?
Python-примеры главы 07
Академическая база →

Структурная карта учебников