如何为以下输入/输出实现反向传播算法?

我想用Python或C++为以下输入实现一个反向传播算法

[[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函数。


回答:

以下是我会采取的步骤。

让我们从经典的{-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数组。

当你向网络输入数据时,你得到f(x)=y,属于R。训练神经网络包括在网络之上添加一个标准E(x,y_obs),并尝试最小化这个标准(对于二元分类问题,可以最小化(f(x)-y_obs)^2)通过更新网络中的权重。你的预测g(x)在训练结束时由sign(f(x))给出。

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

你可能需要更改反向传播实现的定义来更新新的权重。对于你的一维输出,你有以下梯度来更新w_j,j的范围从1到h(隐藏单元的数量)。

dE / dw_j = dE / dy * dy / dw_jdE / 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_2是y的分量。w_1和w_2是z和y之间的权重,w_1和w_2是R^h数组。

dE / dw_1j = dE / dy_1 * dy_1 / dw_1jdE / dw_2j = dE / dy_2 * dy_2 / dw_2jdE / 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

右侧的所有导数都由你的网络定义。

算法的精度对标准非常敏感,可能有比范数更复杂的解决方案。测试会告诉我们答案!

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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