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