Обратное распространение и прямое распространение для 2 скрытых слоев - PullRequest
0 голосов
/ 11 февраля 2019

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

Я знаю, что мне нужно делать, если у меня есть один скрытый слой.В случае одного скрытого слоя, если мои входные данные X_train имеют n выборок, с d количеством объектов (т.е. X_train является размерной матрицей (n, d), y_train является размерностью (n,1)вектор), и если у меня есть h1 количество скрытых единиц в моем первом скрытом слое, тогда я использую Z_h1 = (X_train * w_h1) + b_h1 (где w_h1 - это матрица весов со случайными числами, которая имеет форму (d, h1), а b_h1 - этоединица смещения с формой (h1,1). Я использую сигмовидную активацию A_h1 = sigmoid(Z_h1) и нахожу, что и A_h1, и Z_h1 имеют формы (n, h1). Если у меня t количество выходных единиц, то я использую матрицу весовw_out с размерами (h1, t) и b_out с формой (t,1) для получения результата Z_out = (A_h1 * w_h1) + b_h1. Отсюда я могу получить A_out = sigmoid(Z_out) с формой (n, t). Если у меня есть 2-й скрытый слой(с количеством h2 единиц) после 1-го скрытого слоя и перед выходным слоем, какие шаги я должен добавить к прямому распространению и какие шаги я должен изменить?

У меня также есть представление о том, какбороться с распространением в случае одиночного сокрытиянейронные сети в ден-слое.Для примера с одним скрытым слоем в предыдущем абзаце я знаю, что на первом шаге обратного распространения (output layer -> hidden layer1) я должен сделать Step1_BP1: Err_out = A_out - y_train_onehot (здесь y_train_onehot - это однофотонное представление y_train. Err_out имеет форму (n,t). Далее следуют Step2_BP1: delta_w_out = (A_h1)^T * Err_out и delta_b_out = sum(Err_out). Символ (.)^T обозначает транспонирование матрицы. Для второго шага обратного распространения (hidden layer1 -> input layer) мы делаем следующее Step1_BP2: sig_deriv_h1 = (A_h1) * (1-A_h1). Здесь sig_deriv_h1 имеет форму (n,h1). На следующем шаге я делаю Step2_BP2: Err_h1 = \Sum_i \Sum_j [ ( Err_out * w_out.T)_{i,j} * sig_deriv_h1__{i,j} )]. Здесь Err_h1 имеет форму (n,h1). На последнем шаге я делаю Step3_BP2: delta_w_h1 = (X_train)^T * Err_h1 и delta_b_h1 = sum(Err_h1). Какие шаги обратного распространения я должен добавить, еслиУ меня есть 2-й скрытый слой (количество единиц h2) после 1-го скрытого слоя и перед выходным слоем? Должен ли я изменить шаги обратного распространения для одного случая скрытого слоя, который я описал здесь?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

● Пусть X - матрица выборок с формой (n, d), где n обозначает количество выборок, а d обозначает количество признаков.

● Пусть w h1 - матрица весов - формы (d, h1) и

● Пусть b h1 - вектор смещения формы (1, h1).

Для распространения вперед и назад необходимы следующие шаги:

РАСПРОСТРАНЕНИЕ РАСПРОСТРАНЕНИЯ:

Шаг 1:

Z h1 = [X • w h1 ] + b h1

↓ ↓ ↓ ↓

(n,h1) (n,d) (d,h1) (1,h1)

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

Шаг 2:

Позвольте Φ () - функция активации.Мы получаем.

a h1 = Φ (Z h1 )

↓ ↓

(n,h1) (n,h1)

Шаг 3:

Получить новые веса и уклоны:

w h2 формы (h1, h2) и

b h2 формы (1, h2).

110 Шаг 4:

Z h2 = [a h1 • w h2 ] + b h2

↓ ↓ ↓ ↓

(n,h2) (n,h1) (h1,h2) (1,h2)

Здесь, h2 - количество скрытых элементов во втором скрытом слое.

Шаг 5:

a h2 = Φ (Z h2 )

↓ ↓

(n,h2) (n,h2)

Шаг 6:

Получить новые веса и уклоны:

w out формы (h2, t)и

b out формы (1, t).

Здесь t - количество классов.

Шаг 7:

Z out = [a h2 • w out ] + b out

↓ ↓ ↓ ↓

(n,t) (n,h2) (h2,t) (1,t)

Шаг 8:

a out = Φ (Z out )

↓ ↓

(n,t) (n,t)

ЗАДНЕЕ РАСПРОСТРАНЕНИЕ:

Шаг 1:

Построить закодированную матрицу из горячих кодов уникальнойклассы вывода ( y one-hot ).

Ошибка out = a out - y горячая

↓ ↓ ↓

(n,t) (n,t) (n,t)

Шаг 2:

Δw out = η (a h2 T • Ошибка out )

↓ ↓ ↓

(h2,t) (h2,n) (n,t)

Δb out = η [∑ i = 1 n (ошибка out, i )]

↓ ↓

(1,t) (1,t)

Here η - скорость обучения.

w out = w out - Δw out (обновление веса.)

b out = b out - Δb out (обновление смещения)

Шаг3:

Ошибка 2 = [Ошибка out • w out T ] ✴ Φ / (a h2 )

↓ ↓ ↓ ↓

(n,h2) (n,t) (t,h2) (n,h2)

Здесь символ ✴ обозначает поэлементное умножение матриц.Символ Φ / представляет производную сигмоидальной функции.

Шаг 4:

Δw h2 = η ( h1 T • Ошибка 2 )

↓ ↓ ↓

(h1,h2) (h1,n) (n,h2)

Δb h2 = η [∑ i = 1 n (ошибка 2, i )]

↓ ↓

(1,h2) (1,h2)

ш h2 = ш h2 - Δw h2 (весовое обновление.)

b h2 = b h2 - Δb h2 (смещениеобновление.)

Шаг 5:

Ошибка 3 = [Ошибка 2 • w h2 T ] ✴ Φ / (a h1 )

↓ ↓ ↓↓

(n,h1) (n,h2) (h2,h1) (n,h1)

Шаг 6:

Δw h1 = η (X T • Ошибка 3 )

↓ ↓ ↓

(d,h1)(d,n) (n,h1)

Δb h1 = η [∑ i = 1 n (ошибка 3, i )]

↓ ↓

(1,h1) (1,h1)

ш х1 = ш х1 - Δw h1 (весовое обновление.)

b h1 = b h1 - Δb h1 (обновление смещения.)

0 голосов
/ 11 февраля 2019

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

Как упоминалось выше, ваш вход имеет размерность (n,d).Выход из скрытого слоя 1 будет иметь размер (n,h1).Таким образом, веса и смещения для второго скрытого слоя должны быть (h1,h2) и (h1,h2) соответственно.

Таким образом, w_h2 будет иметь размерность (h1,h2), а b_h2 будет (h1,h2).

Размеры для весов и смещений для выходного слоя будут w_output будут иметь размерность (h2,1), а b_output будет (h2,1).

То же самое вы должны повторить вобратное распространение.

...