首页 文章

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

提问于
浏览
-1

在我的神经网络中,我将所有权重矩阵组合成一个大矩阵:例如,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 回答

  • 4

    您描述的方法存在一些问题 .

    首先,根据您的描述,实际上没有前馈代码或反向传播代码的简化 . 您只需将三个权重矩阵合并为一个,这允许 feedforwardcostfn 函数占用较少的参数,但您仍需要在这些函数中解压缩 W 以实现前向和反向传播逻辑 . 前馈和反向传播逻辑需要评估每层中的激活函数及其导数,因此您不能将其表示为简单的矩阵乘法 .

    第二个问题是,您通过附加列将三个权重矩阵打包为一个来约束神经网络的结构 . 权重矩阵中的数字或行和列分别对应于层中的神经元和输入的数量 . 假设你的网络有 M 输入,第一层有 N 神经元 . 然后 W1 将具有形状 (N, M) . 通常,对于完全连接的网络,第二层权重( W2 )将具有形状 (K, N) ,其中 N 是输入的数量(受第一层的输出数量约束),并且 K 是神经元的数量 . 第二层 .

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

    请注意,为简化起见,我忽略了偏置输入,但即使包含它们也存在相同的问题 .

相关问题