0

我想实现在Python或C反向传播算法++以下输入如何为以下输入/输出实施Back Propagation算法?

[[11, 15], [22, 17]] 
[[8, 11], [23, 19]] 
[[9, 14], [25, 22]] 
[[6, 9], [17, 13]] 
[[2, 6], [29, 25]] 
[[4, 8], [24, 20]] 
[[11, 15], [27, 24]] 
[[8, 11], [31, 26]] 
[[3, 8], [25, 21]] 
[[11, 15], [26, 22]] 
[[15, 19], [22, 17]] 
[[7, 11], [17, 13]] 
[[19, 24], [14, 10]] 

其中所述第一元组是我的输入和所述第二元组是我的输出。我通过互联网搜索的反向传播算法的每个实现都使用分类过程(1或0)。

给定的输入/输出集合用于为跳棋游戏开发神经网络。我想它使用与实现国际象棋相同的技术。

是可以为此开发一个算法吗?请为我提供一些指导方针或实施方法。 OpenCV功能也可以使用。

+0

您可以使用两个线性输出单位来代替S形输出单元。 –

+0

我会尝试。谢谢! :) –

回答

0

这是我将如何继续。

让我们从{-1,1}分类问题的经典问题开始。 f表示你的(神经)网络。 x是您输入的属于RxR。 y_obs是属于{-1,1}的输出。

u_j是x和z之间的权重,z是中间输出,j从1到h以及u_j是R^2阵列。 w是z和y之间的权重,y是最终输出,w是R^h数组。

当你喂养你的网络时,你会得到属于R的f(x)= y。训练一个神经网络包括在网络顶部添加一个标准E(x,y_obs),并尽量减少这个标准对于二元分类问题,可以通过更新网络中的权重来最小化(f(x)-y_obs)^ 2)。 您的预测g(x)由训练结束时的符号(f(x))给出。

因此,为了适应你在网上找到的问题的实现,创建一个神经网络2 x h x 2,h是隐藏单元的数量。然后,您需要在代码中找到函数标准并将其替换为合适的标准,例如2d欧氏准则。在这种情况下,您不需要实现任何预测函数g,您的问题不是分类问题

您可能需要更改反向传播实施的定义以更新新权重。 对于1-dim输出,您有以下梯度来更新w_j,j从1到h(隐藏单位的数量)。

dE/dw_j = dE/dy * dy/dw_j 
dE/du_jk = dE/dz_j * dz_j/du_jk 
      = dE/dy * dy/dz_j * dz_j/du_jk 

(u_jk是u_j的第k个分量中,k = 1,2)

随着新的情况下,你可以获得:

Y_1和y的Y_2的组件。 w_1和w_2在z和y之间的权重,w_1和w_2是R^h阵列。

dE/dw_1j = dE/dy_1 * dy_1/dw_1j 
dE/dw_2j = dE/dy_2 * dy_2/dw_2j 
dE/du_jk = dE/dz_j * dz_j/du_jk 
      = dE/dy_1 * dy_1/dz_j * dz_j/du_jk + dE/dy_2 * dy_2/dz_j * dz_j/du_jk 

右侧的所有派生物都由您的网络定义。

该算法的精度对标准非常敏感,也许有比标准更复杂的解决方案。测试会告诉你!

+0

这太棒了!非常感谢。让我尝试 :) –

0

您可以使用它的一般反向传播算法。有很多来源解释了它的细节(例如它的维基百科页面)。但为了更好的结果,我有一个建议给你。

最好是规范你的输入和输出。如果为输入数据的每个组成部分添加一些常数,并将其平均值接近0的训练数据移动,它将帮助网络更快,更好地了解您的模式。