Tensorflow 使用Keras优化黑盒函数的LSTM

Tensorflow 使用Keras优化黑盒函数的LSTM,tensorflow,keras,lstm,keras-layer,lstm-stateful,Tensorflow,Keras,Lstm,Keras Layer,Lstm Stateful,我正在尝试实现本文()中提出的递归神经网络架构,作者使用LSTM最小化黑盒函数(但假设它是可微的)。以下是拟议架构的示意图:。简单地说,我们的想法是使用一个类似于优化器的LSTM,它必须学习一个好的启发式方法,为未知函数y=f(parameters)提出新的参数,以便它朝着最小值移动。以下是建议程序的工作原理: 为参数p0和函数y0=f(p0) 使用input=[p0,y0]调用LSTM单元格,其输出是参数output=p1 评估y1=f(p1) 使用input=[p1,y1]调用LSTM单元格

我正在尝试实现本文()中提出的递归神经网络架构,作者使用LSTM最小化黑盒函数(但假设它是可微的)。以下是拟议架构的示意图:。简单地说,我们的想法是使用一个类似于优化器的LSTM,它必须学习一个好的启发式方法,为未知函数y=f(parameters)提出新的参数,以便它朝着最小值移动。以下是建议程序的工作原理:

  • 为参数
    p0
    和函数
    y0=f(p0)
  • 使用
    input=[p0,y0]
    调用LSTM单元格,其输出是参数
    output=p1
  • 评估
    y1=f(p1)
  • 使用
    input=[p1,y1]
    调用LSTM单元格,并获取
    output=p2
  • 评估
    y2=f(p2)
  • 重复几次,例如在第五次迭代时停止:
    y5=f(p5)
  • 我试图在Tensorflow/Keras中实现一个类似的模型,但遇到了一些问题。特别是,这种情况不同于“标准”情况,因为我们没有要分析的预定义时间序列,而是在LSTM单元每次迭代后在线生成。因此,在这种情况下,我们的输入将只包括时间
    t=0
    的开始猜测
    [p0,y0=f(p0)]
    。如果我理解正确,该模型类似于一对多LSTM,但不同之处在于,下一时间步的输入不仅来自前一个单元格,还形成了一个附加函数的输出(在我们的示例f中)

    我设法创建了一个自定义的
    tf.keras.layers.Layer
    ,它执行单个时间步长的计算(即它执行LSTM单元格,然后使用其输出作为函数f的输入):

    但我不知道如何构建循环部分。我尝试手动操作,即执行以下操作:

    my_cell = my_layer(units = 4)
    
    outputs = my_cell(inputs)
    outputs1 = my_cell(outputs)
    outputs2 = my_cell(outputs1)
    
    对吗?还有其他更合适的方法吗

    附加问题:我想培训LSTM,使其不仅能够优化单个函数f,而且能够优化一类不同的函数
    [f1,f2,…]
    ,这些函数共享一些共同的结构,使得它们足够相似,可以使用相同的LSTM进行优化。我如何实现这样一个训练循环,它将函数列表作为输入,并尝试将其最小化?我的第一个想法是用“蛮力”的方式:在函数上使用for循环和一个
    tf.GradientTape
    ,它计算并应用每个函数的梯度

    非常感谢您的帮助! 提前非常感谢!:)

    my_cell = my_layer(units = 4)
    
    outputs = my_cell(inputs)
    outputs1 = my_cell(outputs)
    outputs2 = my_cell(outputs1)