AI4Finance-Foundation / AI4Finance-Foundation/RLSolver
✨ update 'Learn to optimize' to batch size mode
- Dominant language
- Python
- Stars
- 169
- Forks
- 36
- PR merge metrics
- No merged PRs in 30d
Description
问题需要求出的解,我们定义为 theta。例如在miso问题里,`theta.shape==(2, 8, 8)`,其中2是复数的实部和虚部,`(8, 8)` 分别是用户数量和基站天线数量。
这是之前的方案:
- 使用LSTM,需要保存**两个隐藏状态**,分别是 hidden state 和 cell state
- 需要求解theta的时候,对于模型LSTM,输入是**某一个解**theta `inp.shape=(2*8*8, 1)`,输出是这个解对应的梯度 grad `out.shape=inp.shape`
**里面对于解 theta 的不同特征,共用了一样的 LSTM模型参数**
在 miso问题里面,这是恰当的,因为在 theta这个矩阵里,任意用户和任意天线,以及实部与虚部,都可以相互替换。所以它们被 flatten后放在 batch size 这个并行维度上,对于解 theta 的不同特征,共用了一样的 LSTM模型参数。
https://github.com/AI4Finance-Foundation/ElegantRL_Solver/blob/a7cd35b66a99600386efe1b642dc9b1453ed10f7/rlsolver/rlsolver_learn2opt/tensor_train/L2O_H_term.py#L52-L68
如果想要推广 'Learn to optimize' 到其他问题,那么就需要把 theta的特征维度从 batch size 维度移动到 `inp_dim` 或者 `out_dim` 上,这样修改后,训练将会变慢,但是训练后得到的最高分数不会改变。
这是为了让调整后的代码适用于 张量收缩任务(TNCO) @spicywei ,以及 图的最大割任务 (Graph max cut) @shixun404
调整代码如下:
- 使用GRU,只需要保存**一个隐藏状态** hidden state
- 需要求解theta的时候,对于模型GRU,输入是**某一批次的解**theta `inp.shape=(batch_size, 2*8*8)`,输出是这个解对应的梯度 grad `out.shape=inp.shape`
```
class OptimizerOpti(nn.Module):
def __init__(self, opt_dim, hid_dim):
super().__init__()
self.opt_dim = opt_dim
self.hid_dim = hid_dim
self.num_rec = 4
self.activation = nn.Tanh()
self.recurs1 = nn.GRUCell(opt_dim, hid_dim)
self.recurs2 = nn.GRUCell(hid_dim, hid_dim)
self.output = nn.Linear(hid_dim * 2, opt_dim)
def forward(self, inp0, hid0):
hid1 = self.activation(self.recurs1(inp0, hid0[0]))
hid2 = self.activation(self.recurs2(hid1, hid0[1]))
hid = th.cat((hid1, hid2), dim=1)
return self.output(hid), (hid1, hid2)
```
完整代码见: https://github.com/AI4Finance-Foundation/ElegantRL_Solver/pull/119/files#diff-e03802a5a83ef6f88ad30c077b0f4cec4b4f6cc21f3cbac771087ea2824618ba
---
## Compare
在MISO问题上,(加入更多人类先验知识的)旧方法肯定比新方法更快(达到最好的结果的耗时 1: 3 ),但是他们能达到的最高分是一样高的
以下是旧方法:batch size 并行维度被用来作为 theta特征维度的 LSTM 的结果
```
start training
MMSE 5.598 15.900 31.134
L2O 6.078 11.540 12.724 TimeUsed 9
L2O 6.491 18.491 35.106 TimeUsed 160
L2O 6.108 18.211 35.091 TimeUsed 311
L2O 6.459 18.308 33.260 TimeUsed 465
L2O 6.454 18.421 34.214 TimeUsed 615
L2O 6.459 18.347 33.878 TimeUsed 754
L2O 6.430 18.030 34.527 TimeUsed 892
L2O 6.440 18.366 34.233 TimeUsed 1033
```
以下是新方法:区分batch size并行维度 和 theta 特征维度的GRU的结果
```
MMSE 5.598 15.900 31.134
training start
L2O 1.088 2.968 4.889 TimeUsed 7
L2O 5.991 16.585 21.792 TimeUsed 313
L2O 6.250 17.582 26.524 TimeUsed 613
L2O 6.063 16.946 28.046 TimeUsed 927
L2O 6.313 18.009 30.573 TimeUsed 1234
L2O 6.189 17.932 32.204 TimeUsed 1551
L2O 6.098 17.880 33.794 TimeUsed 1860
L2O 6.299 17.909 34.490 TimeUsed 2165
L2O 6.233 17.952 34.699 TimeUsed 2471
L2O 6.285 18.033 34.079 TimeUsed 2785
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.