在我的神经网络中,我将所有权重矩阵组合成一个大矩阵: 例如,3层矩阵通常具有3个权重矩阵W1,W2,W3,每层一个。我创建了一个称为W的大权重矩阵,其中W2和W3被附加到W1的末尾。如果W1有3列,W2有3列,W3有2列,我的矩阵W将有8列。
层数/输入/输出数量存储为全局变量。
这意味着我可以使用只有2个输入参数的前馈代码,因为前馈代码将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
略微好一点,但两者都为我试图逼近的函数提供了平庸的结果。
我现在想尝试Back-Propagation来训练这个网络,看它是否做得更好,但是大多数实现都是针对具有多个权重矩阵的网络,使其更加复杂。
我的问题是:我是否可以使用单个附加权重矩阵实现反向传播,我该怎么做?
我觉得使用单个权重矩阵应该使代码更简单,但我无法弄清楚如何实现它,因为我见过的所有其他示例都是针对多个权重矩阵。
其他信息
网络将是一个近似函数,具有8到30个输入和3个输出。它近似的函数非常复杂,涉及椭圆积分的逆(因此没有解析解)。网络的输入和输出将被归一化,使其介于0和1之间。
答案 0 :(得分:4)
您所描述的方法存在一些问题。
首先,根据您的描述,实际上没有前馈代码或反向传播代码的简化。您只需将三个权重矩阵合并为一个,这允许feedforward
和costfn
函数占用较少的参数,但您仍需要在这些函数中解包W
以实现前向和后向传播逻辑。前馈和反向传播逻辑需要评估每层中的激活函数及其导数,因此您不能将其表示为简单的矩阵乘法。
第二个问题是你通过附加列将三个权重矩阵打包成一个来约束神经网络的结构。权重矩阵中的数字或行和列分别对应于层中的神经元和输入的数量。假设您的网络有M
个输入,第一层有N
个神经元。然后W1
将具有(N, M)
形状。通常,对于完全连接的网络,第二层权重(W2
)将具有形状(K, N)
,其中N
是输入的数量(受到来自的输出数量的约束)第一层)和K
是第二层中神经元的数量。
问题在于,由于您通过附加列创建一个组合权重矩阵,K
(第二个权重矩阵中的行数)必须与来自该列的行数/行数相同。第一层,依此类推,用于连续的图层。换句话说,您的网络将具有形状M x N x N x N
(M
输入,然后是每层中的N
个神经元。由于您通常不希望隐藏层中的神经元数量与输出层中相同,因此这对您的网络来说是一个不好的约束。
请注意,为简化起见,我忽略了偏见输入,但即使包含它们也存在同样的问题。