Понимание различных нейронов в глубоком обучении? - PullRequest
0 голосов
/ 04 мая 2018

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

Этот код генерирует матрицы различных измерений и вычисляет точечное произведение. Я попытался сосредоточиться на ядре операции перемещения значений по сети.

импорт numpy как np

def gm(m , n):
  return np.random.uniform(1 , 1 , (m , n))

x = gm(4,2)
print('x' , x)

m1 = gm(2,3)
print('m1' , m1)

d1 = np.dot(x , m1)
print('d1' , d1)

отпечатков:

x [[1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]]
m1 [[1. 1. 1.]
 [1. 1. 1.]]
d1 [[2. 2. 2.]
 [2. 2. 2.]
 [2. 2. 2.]
 [2. 2. 2.]]

Если выходная матрица 2x1, как это получается? Другими словами, как получить матрицу 2x1 из матрицы d1?

Фреймворки, такие как keras, абстрагируют это, но как происходит абстракция?

1 Ответ

0 голосов
/ 05 мая 2018

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

Скажем, ваш ввод представляет собой пакет размером [B x D], где B - количество выборок (может быть 1), а D - количество объектов (входные измерения). В качестве выхода вы хотите иметь [B x K], где K - количество выходов.

Типичная MLP - это просто последовательность аффинных преобразований, за которыми следуют некоторые (точечные) нелинейности f:

h_{i+1} = f( h_i W_i + B_i)

где h_0 = X (входы), а h_N - выход

Скажем, я хочу иметь один скрытый слой с Z нейронами, тогда все, что мне нужно сделать, это создать две матрицы W и два вектора B, одна пара будет использоваться для отображения входных данных в Z измерениях, а другой для сопоставления от Z до желаемого K:

W_1 is D x Z
B_1 is 1 x Z

W_2 is Z x K
B_2 is 1 x K

Следовательно, мы имеем

f(X W_1 + B_1) W_2 + B_2   

X W_1 is [B x D] [D x Z] = [B x Z]
X W_1 + B_1 is [B x Z] + [1 x Z] = [B x Z]   # note that summation 
                    # is overloaded in the sense that it is adding the
                    # same B to each row of the argument
f(X W_1 + B_1) is [B x Z]
f(X W_1 + B_1) W_2 is [B x Z] [Z x K] = [B x K]
f(X W_1 + B_1) W_2 + B_2 is [B x K] + [1 x K] = [B x K]

Аналогично с более скрытыми слоями, вы просто умножаете матрицу справа на матрицу размера [dimension_of_previous_one x required_output_dimension], которая является просто обычной операцией линейной проекции из математики (а смещения делают ее аффинной)

...