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



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

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

将 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抽象化这一点,但是抽象是如何发生的呢?

映射相对简单,我将完全关注 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] 的矩阵相乘,这只是数学中的常规线性投影运算(偏差使其仿射(

相关内容

  • 没有找到相关文章

最新更新