Глубокое обучение | 3 | Правильный способ открытия многослойного персептрона

однослойный персептрон

вставьте сюда описание изображения
Существенная разница между персептроном и линейной регрессией: результат отличается

  • Выход линейной регрессии представляет собой непрерывное действительное значение

  • Выход персептрона представляет собой дискретный класс {0, 1} или {-1, 1}.

Следовательно, персептрон можно рассматривать как классификатор для двоичной классификации: когда на выходе 0, он указывает на первую категорию, а когда на выходе 1, он указывает на вторую категорию .

Метод обучения персептрона

  1. Инициализировать w и b
  2. цикл:
  3.    ~~  如果yi × ( < wi , xi > + b ) ≤ 0 y_i \times (<w_i, x_i> + b) \leq 0уя×( <жя,Икся>+ б )0 , то:
  4.      ~~~~    w ← w + yixi , b ← b + yiw \leftarrow w + y_ix_i, b \leftarrow b + y_iжж+уяИкся,бб+уя
  5. Пока все категории не будут правильно классифицированы

В приведенном выше процессе функция потерь может быть записана как:

l = max ( 0 , − y < w , x > ) \ mathcal {l} = \ text {max} (0, -y <\ pmb {w, x}>)л"="макс ( 0 ,у<ш ,Икс>)

Первый кризис ИИ: проблема XOR

Персептроны не могут решить проблему XOR: трудно разделить проблему XOR линейной функцией.

В это время для решения проблемы вступает в действие многослойный персептрон.

многослойный персептрон

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

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

Учитывая ввод dim=m, требуется, наконец, вывести выходной вектор (категорию) dim=n, тогда интуитивно понятный способ добиться этого:

[ час 1 ⋮ hk ] знак равно [ w 1 1 ( 0 ) ⋯ w 1 м ( 0 ) ⋮ ⋱ ⋮ wk 1 ( 0 ) ⋯ wnm ( 0 ) ] ⋅ [ x 1 ⋮ xm ] + [ b 1 ( 0 ) ⋮ bk ( 0 ) ] \left[\begin{matrix} h_1 \\ \vdots \\ h_k\\ \end{matrix}\right]=\left[\begin{matrix} w_11^{(0)} & \cdots & w_1m^{(0)} \\ \vdots & \ddots & \vdots \\ w_k1^{(0)} & \cdots & w_nm^{(0)} \\ \end{matrix}\right]\cdot \left[\begin{matrix} x_1 \\ \vdots \\ x_m\\ \end{matrix}\right] + \left[\begin{matrix} b_1^{(0)} \\ \vdots \\ b_k^ {(0)}\\ \конец{матрица}\справа] час1часк "=" ж11( 0 )жк1( 0 )ж1м( 0 )жнм( 0 ) Икс1Иксм + б1( 0 )бк( 0 )

[ о 1 ⋮ on ] знак равно [ ш 1 1 ( 1 ) ⋯ ш 1 k ( 1 ) ⋮ ⋱ ⋮ wn 1 ( 1 ) ⋯ wnk ( 1 ) ] ⋅ [ час 1 ⋮ hk ] + [ б 1 ( 1 ) ⋮ bn ( 1 ) ] \left[\begin{matrix} o_1 \\ \vdots \\ o_n\\ \end{matrix}\right]=\left[\begin{matrix} w_11^{(1)} & \cdots & w_1k^{(1)} \\ \vdots & \ddots & \vdots \\ w_n1^{(1)} & \cdots & w_nk^{(1)} \\ \end{matrix}\right]\cdot \left[\begin{matrix} h_1 \\ \vdots \\ h_k\\ \end{matrix}\right] + \left[\begin{matrix} b_1^{(1)} \\ \vdots \\ b_n^ {(1)}\\ \end{matrix}\right] о1он "=" ж11( 1 )жн1( 1 )ж1к( 1 )жнк( 1 ) час1часк + б1( 1 )бн( 1 )

Записанное в матричной форме, приведенное выше

h = W ( 0 ) x + b ( 0 ) \ pmb {h = W ^ {(0)} x + b ^ {(0)}}час"="Вт( 0 ) х+б( 0 )

о = W ( 1 ) ч + b ( 1 ) \ pmb {o = W ^ {(1)} h + b ^ {(1)}}о"="Вт( 1 ) ч+б( 1 )

Но по факту это все же однослойная сеть,
после приведения вышеприведенной формулы она будет иметь следующий вид:

о = W ( 1 ) ( W ( 0 ) x + b ( 0 ) ) + b ( 1 ) \ pmb {o = W} ^ {(1)} (\ pmb {W} ^ {(0)} \ pmb {х+b}^{(0)})+\pmb{b}^{(1)}о"="Вт( 1 ) (Вт( 0 ) х+б( 0 ) )+б( 1 )

Тогда, после раскрытия, это можно записать так:

о = W ( 1 ) W ( 0 ) x + W ( 1 ) b ( 0 ) + b ( 1 ) \ pmb {o = W} ^ {(1)} \ pmb {W} ^ {(0)} \ pmb{x+W}^{(1)}\pmb{b}^{(0)}+\pmb{b}^{(1)}о"="Вт( 1 ) Вт( 0 ) х+Вт( 1 ) б( 0 )+б( 1 )

其中,W(0) ∈ Rk×m, W(1) ∈ Rk×n, b(0) ∈ Rk×1, b(1) ∈ Rn×1 \pmb{W}^{(0 )}\in\mathbb{R}^{k\times m}, \pmb{W}^{(1)}\in\mathbb{R}^{k\times n}, \pmb{b}^{ (0)}\in\mathbb{R}^{k\times 1}, \pmb{b}^{(1)}\in\mathbb{R}^{n\times 1}Вт( 0 )ерк × м ,Вт( 1 )ерк × п ,б( 0 )ерк × 1 ,б( 1 )ерп × 1

那么, W = W (1) × W (0) ∈ Rn × m, b = W (1) b (0) + b (1) ∈ Rn × 1 \pmb{W}=\pmb{W} ^{(1)}\times\pmb{W}^{(0)}\in\mathbb{R}^{n\times m}, \pmb{b}=\pmb{W}^{(1) }\pmb{b}^{(0)}+\pmb{b}^{(1)}\in\mathbb{R}^{n\times 1}Вт"="Вт( 1 )×Вт( 0 )ерп × м ,б"="Вт( 1 ) б( 0 )+б( 1 )ерп × 1

По существу, формулу можно записать в виде

о = Wx + b \pmb{o=Wx+b}о"="Вт х+б

Поэтому по сути это все еще однослойная нейронная сеть.

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

Один вход, умноженный на несколько матриц, по существу эквивалентен умножению на одну матрицу.

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

Основная форма линейного преобразования:

у = W х \pmb{y}=\pmb{Wx}у"="Вт х

Способ изменить эту ситуацию — добавить в модель нелинейные преобразования.

Добавить нелинейное преобразование, функцию активации

Сигмод функция

х = 1 1 + exp ( - x ) \text{x}=\frac{1}{1 + \text{exp}(-x)}Икс"="1+ехр ( - х )1
нарисовать изображение

import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

import torch
import matplotlib.pyplot as plt

plt.figure(figsize=(2, 2))

x = torch.arange(-5, 5, 0.1, requires_grad=True)
y = x.sigmoid()
plt.scatter(x.detach().numpy(), y.detach().numpy())
plt.show()

вставьте сюда описание изображения

При каких обстоятельствах уместно использовать функцию активации сигмоида?

Выход сигмовидной функции находится в диапазоне от 0 до 1. Он нормализует выходные данные каждого нейрона, поскольку выходное значение ограничено от 0 до 1
для моделей, в которых в качестве вывода используются предсказанные вероятности. Поскольку вероятность колеблется от 0 до 1, сигмовидная функция очень удобна;
градиент плавный, чтобы избежать «прыгающих» выходных значений;
функция дифференцируема. Это означает, что можно найти наклон сигмовидной кривой для любых двух точек,
четкое предсказание, т. е. очень близкое к 1 или 0.

Недостатки сигмовидной функции активации:

Исчезновение градиента: Примечание. Скорость изменения становится плоской, когда функция сигмоиды приближается к 0 и 1, то есть градиент сигмоиды приближается к 0. Когда нейронная сеть использует сигмовидную функцию активации для обратного распространения, градиент нейрона, выходной сигнал которого близок к 0 или 1, стремится к 0. Эти нейроны называются насыщающими нейронами. Поэтому веса этих нейронов не обновляются. Кроме того, очень медленно обновляются веса нейронов, связанных с такими нейронами. Эта проблема называется исчезающим градиентом. Итак, представьте, если большая нейронная сеть содержит сигмовидные нейроны, многие из которых насыщены, сеть не может выполнять обратное распространение.
Не центрировано на нуле: выходные данные сигмоиды не центрируются на нуле, и выходные данные всегда больше 0. Результат ненулевого центрирования приведет к тому, что вход нейронов в следующем слое будет иметь сдвиг смещения (смещение смещения), и далее Это замедляет скорость сходимости градиентного спуска.
Вычислительно дорого: функция exp() требует больших вычислительных ресурсов и медленнее работает на компьютере по сравнению с другими нелинейными функциями активации.

y.sum().backward()
plt.figure(figsize=(3, 3))
plt.scatter(x.detach().numpy(), x.grad.detach().numpy())
plt.show()

вставьте сюда описание изображения

Тан функция

х знак равно 1 - ехр ( - 2 х ) 1 + ехр ( - 2 х ) \text{x}=\frac{1-\text{exp}(-2x)}{1 + \text{exp}(-2x )}Икс"="1+ехр ( - 2 х )1ехр ( - 2 х )

y = x.tanh()
plt.figure(figsize=(3, 3))
plt.scatter(x.detach().numpy(), y.detach().numpy())
plt.show()

вставьте сюда описание изображения

Недостатки танга:

Подобно сигмоиде, функция Tanh также имеет проблему исчезновения градиента, поэтому она также «убивает» градиент, когда он насыщается (когда x большой или маленький).
Примечание. В общих задачах бинарной классификации функция tanh используется для скрытого слоя, а сигмовидная функция — для выходного слоя, но это не фиксировано и требует настройки для конкретной задачи.

x.grad.zero_()
y.sum().backward()
plt.figure(figsize=(3, 3))
plt.scatter(x.detach().numpy(), x.grad.detach().numpy())
plt.show()

вставьте сюда описание изображения

Функция ReLU

relu ( x ) = { 0 , x ≤ 0 x , x > 0 \text{relu}(x)= \begin{case} 0, & \text{x} \leq0 \\ x, & \text{x > 0} \конец{случаи}перечитай ( х )"="{ 0 ,х ,Икс0х > 0

y = x.relu()
plt.figure(figsize=(3, 3))
plt.scatter(x.detach().numpy(), y.detach().numpy())
plt.show()

вставьте сюда описание изображения

x.grad.zero_()
y.sum().backward()
plt.figure(figsize=(3, 3))
plt.scatter(x.detach().numpy(), x.grad.detach().numpy())
plt.show()

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

relu ( x ) = max ( x , 0 ) \text{relu}(x)=\text{max}(x, 0)перечитай ( х )"="макс ( х ,0 )

Функция ReLU — популярная функция активации в глубоком обучении.По сравнению с сигмовидной функцией и функцией тангенса она имеет следующие преимущества:

Когда вход положительный, производная равна 1, что в определенной степени улучшает проблему исчезновения градиента и ускоряет скорость сходимости градиентного спуска; скорость вычислений
намного выше. В функции ReLU есть только линейные отношения, поэтому ее можно вычислить быстрее, чем сигмовидную и тангенциальную.
Считается имеющим биологическое правдоподобие (биологическое правдоподобие), такое как одностороннее торможение, широкая граница возбуждения (то есть степень возбуждения может быть очень высокой)

Недостатки функции ReLU:

Мертвая проблема ReLU. ReLU полностью выходит из строя, когда вход отрицательный, что не является проблемой при прямом распространении. Некоторые области являются чувствительными, а другие нет. Но в процессе обратного распространения, если вводится отрицательное число, градиент будет полностью нулевым;
[проблема мертвого ReLU] нейроны ReLU относительно легко «умирают» во время обучения. Во время обучения, если нейрон ReLU в первом скрытом слое не может быть активирован на всех обучающих данных после неподходящего обновления параметров, градиент собственных параметров нейрона всегда будет равен 0. Он никогда не сможет быть активирован во время последующего процесса обучения. Это явление называется проблемой мертвого ReLU, и оно может возникать и в других скрытых слоях.
Не центрировано на нуле: как и в случае функции активации сигмоида, выходные данные функции ReLU не центрируются на нуле, а выходные данные функции ReLU равны 0 или положительному числу.Введение смещения смещения в нейронную сеть следующего слоя повлияет на эффективность градиентного спуска.

Для каждого нейрона настроена функция активации.

Его физический смысл таков: когда его порог достаточно велик, он будет активирован (передан на нижний уровень), иначе не будет пройден.

На самом деле, этот физический смысл имеет нейробиологическое объяснение.

Следовательно, общая форма многослойного персептрона:

h = δ ( W ( 0 ) x + b ( 0 ) ) \ pmb {h} = \ delta (\ pmb {W} ^ {(0)} \ pmb {x + b} ^ {(0)})час"="г ( Вт( 0 ) х+б( 0 ) )

о = softmax ( W ( 1 ) h + b ( 1 ) ) \pmb{o}=\text{softmax}(\pmb{W}^{(1)}\pmb{h+b}^{(1) })о"="софтмакс ( Вт( 1 ) ч+б( 1 ) )

Подведем итог

Многослойный персептрон — это многоуровневая модель классификации , основанная на нейронных сетях .

Его вывод — это вывод после softmax, то есть вывод — это вероятность;

Его несколько слоев происходят из-за нелинейности функции активации.

Наиболее часто используемой функцией активации является функция Relu, поскольку ее наиболее удобно вычислять.

Supongo que te gusta

Origin blog.csdn.net/weixin_51672245/article/details/131128833
Recomendado
Clasificación