在我的神经网络中,我将所有权重矩阵组合成一个大矩阵:例如,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之间 .
1 回答
您描述的方法存在一些问题 .
首先,根据您的描述,实际上没有前馈代码或反向传播代码的简化 . 您只需将三个权重矩阵合并为一个,这允许
feedforward
和costfn
函数占用较少的参数,但您仍需要在这些函数中解压缩W
以实现前向和反向传播逻辑 . 前馈和反向传播逻辑需要评估每层中的激活函数及其导数,因此您不能将其表示为简单的矩阵乘法 .第二个问题是,您通过附加列将三个权重矩阵打包为一个来约束神经网络的结构 . 权重矩阵中的数字或行和列分别对应于层中的神经元和输入的数量 . 假设你的网络有
M
输入,第一层有N
神经元 . 然后W1
将具有形状(N, M)
. 通常,对于完全连接的网络,第二层权重(W2
)将具有形状(K, N)
,其中N
是输入的数量(受第一层的输出数量约束),并且K
是神经元的数量 . 第二层 .问题在于,由于您通过附加列创建一个组合权重矩阵,
K
(第二个权重矩阵中的行数)必须与第一个层中的行/神经元数相同,依此类推连续的层 . 换句话说,您的网络将具有形状M x N x N x N
(M
输入,然后每层中的N
个神经元) . 这对您的网络来说是一个不好的约束,因为您通常不希望隐藏层中的神经元数量与输出层中相同 .请注意,为简化起见,我忽略了偏置输入,但即使包含它们也存在相同的问题 .