了解深度学习中的不同神经元?

Understanding varying neurons in deep learning?

在执行线性代数运算时,深度学习如何改变每层中的神经元数量并保持正确的代数运算?

此代码生成各种维度的矩阵并计算点积,我试图只专注于通过网络移动值的操作核心。

将 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,这是如何产生的?换句话说,如何从矩阵 d1 生成 2x1 矩阵?

keras 等框架对 this 进行了抽象,但是如何进行抽象?

映射相对简单,我将专注于 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 desired_output_dimension] 的矩阵,这只是来自数学的常规线性投影运算(并且偏差使它仿射)