小编kei*_*uld的帖子

带有异或、非或的布尔乘法(使用特征矩阵库)

我正在尝试实现汉明纠错码,为此我需要获取一个布尔向量(数据)并将其与布尔矩阵(汉明生成器矩阵)相乘,执行异或运算(而不是像 OR 那样) Eigen 的默认 bool 行为)。在这个简单的教程中可以找到我正在做的一个例子:http : //michael.dipperstein.com/hamming/

我不一定必须使用 Eigen,所以如果您有解决方案,请随时提出 Eigen 以外的其他建议。

因此,例如一些编译的 C++ 代码,但不能以正确的方式工作:

#include <Eigen/Dense>
#include <iostream>

using namespace std;
using namespace Eigen;

typedef Eigen::Matrix<bool, 4, 7> Matrix4by7Bool;
typedef Eigen::Matrix<bool, 1, 4> Vector4Bool;
int main()
{
Matrix4by7Bool gm;
gm << 0,1,1,1,0,0,0,
      1,0,1,0,1,0,0,
      1,1,0,0,0,1,0,
      1,1,1,0,0,0,1;

Vector4Bool dm;
dm << 1,0,1,0;

cout << dm * gm;
}
Run Code Online (Sandbox Code Playgroud)

当前结果: 1 1 1 1 0 1 0
但我需要: 1 0 1 1 0 1 0

不同之处在于默认行为是先进行乘法运算,然后对每次乘法进行 OR 运算。由于我需要 XOR 而不是 …

c++ matrix hamming-code eigen eigen3

6
推荐指数
1
解决办法
2714
查看次数

标准化奖励以在强化学习中产生回报

问题是关于普通的非批量强化学习。基本上是被定义在这里萨顿的书。我的模型训练,(呜呜!)虽然有一个元素让我感到困惑。

背景:

在持续时间得到奖励的环境中(如极点平衡),我们每一步有(比如)1 个奖励。在一集之后,在将这个 1 数组发送到训练步骤之前,我们进行标准折扣和标准化以获得回报:

returns = self.discount_rewards(rewards)
returns = (returns - np.mean(returns)) / (np.std(returns) + 1e-10) // usual normalization
Run Code Online (Sandbox Code Playgroud)

折扣奖励是常用的方法,但如果好奇,这里是要点

所以奖励数组 [1,1,1,1,1,1,1,1,1] 变成了回报数组 [1.539, 1.160, 0.777, 0.392, 0.006, -0.382, -0.773, -1.164, - 1.556]。

鉴于基本背景,我可以问我的问题:

如果强制执行正回报,不鼓励负回报(在优化步骤中),那么无论情节的长度如何,大约前半部分的行动将被鼓励,后半部分将被阻止。这是真的,还是我误解了什么?

如果它不是真的,很想了解我做错了什么。

如果这真的,那么我不明白为什么模型会训练,因为即使是表现良好的剧集也会阻止其后半部分的动作。

重申一下,这是非批量学习(因此回报与训练步骤中另一个情节的回报无关)。每一集之后,模型都会训练,而且训练得很好:)

希望这是有道理的,并且足够短,感觉像是一个适当的明确问题。

python machine-learning reinforcement-learning tensorflow

4
推荐指数
2
解决办法
6225
查看次数