了解深度学习中的不同神经元?
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] 的矩阵,这只是来自数学的常规线性投影运算(并且偏差使它仿射)
在执行线性代数运算时,深度学习如何改变每层中的神经元数量并保持正确的代数运算?
此代码生成各种维度的矩阵并计算点积,我试图只专注于通过网络移动值的操作核心。
将 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] 的矩阵,这只是来自数学的常规线性投影运算(并且偏差使它仿射)