在神经网络中使用单一权重矩阵进行反向传播

在我的神经网络中,我将所有的权重矩阵合并成了一个大的矩阵:例如,一个三层矩阵通常有三个权重矩阵W1、W2、W3,每层一个。我创建了一个大的权重矩阵W,将W2和W3附加到W1的末尾。如果W1有3列,W2有3列,W3有2列,我的矩阵W将有8列。

层数/输入/输出的数量被存储为全局变量。

这意味着我可以使用只有两个输入参数的前馈代码,因为前馈代码会在函数内部将W拆分为W1、W2、W3等。

Output_of_Neural_Net = feedforward(Input_to_Neural_Net,W)

我还将训练数据存储为全局变量。这意味着我可以使用只有一个输入参数的成本函数。

cost = costfn(W)

这样做的目的是为了使用MATLAB内置函数来最小化成本函数,从而获得最能近似我的训练数据的神经网络的W。

我尝试过fminsearch(@costfn,W)fminunc(@costfn,W)。两者对于我试图近似的函数都给出了中等的结果,尽管fminunc稍好一些。

现在我想尝试使用反向传播来训练这个网络,看看它是否能做得更好,然而大多数实现都是针对具有多个权重矩阵的网络,这使得它更加复杂。

我的问题是:我能否使用我的单一附加权重矩阵来实现反向传播?如果可以,如何实现?

我觉得使用单一权重矩阵应该会使代码更简单,但我无法弄清楚如何实现,因为我看到的所有其他例子都是针对多个权重矩阵的。

附加信息

该网络将是一个函数近似器,具有8到30个输入和3个输出。它近似的函数相当复杂,涉及椭圆积分的逆运算(因此没有解析解)。网络的输入和输出将被归一化,使其在0到1之间。


回答:

您描述的方法存在几个问题。

首先,从您描述的情况来看,前馈代码或反向传播代码并没有真正简化。您只是将三个权重矩阵合并成一个,这使得feedforwardcostfn函数可以接受更少的参数,但您仍然需要在这些函数内部解包W来实现前向和反向传播逻辑。前馈和反向传播逻辑需要在每一层评估激活函数及其导数,因此不能简单地表示为矩阵乘法。

第二个问题是,您通过附加列将三个权重矩阵打包成一个,从而限制了您的神经网络结构。权重矩阵中的行数和列数分别对应于层中的神经元数和输入数。假设您的网络有M个输入和第一层有N个神经元。那么W1的形状将是(N, M)。一般来说,对于全连接网络,第二层的权重(W2)将具有形状(K, N),其中N是输入的数量(由第一层的输出数量限制),K是第二层的神经元数量。

问题在于,由于您通过附加列创建了一个组合权重矩阵,K(第二权重矩阵的行数)必须与第一层的神经元/行数相同,依此类推。对于后续层也是如此。换句话说,您的网络将具有形状M x N x N x NM个输入,然后每层N个神经元)。这对您的网络来说是一个不好的限制,因为您通常不希望隐藏层中的神经元数量与输出层相同。

请注意,为了简化,我忽略了偏置输入,但即使包含它们,同样问题仍然存在。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注