首页 文章

Keras / TensorFlow中的非符号丢失

提问于
浏览
0

对于大学项目,我想训练一个(模拟的)机器人在给定位置和速度的情况下击球 . 首先要尝试的是策略渐变:我有一个参数轨迹生成器 . 对于每个训练位置,我通过我的网络提供位置,将轨迹发送到模拟器并获得奖励 . 我现在可以使用它作为损失,对渐变进行采样,反馈并更新网络的权重,以便下次更好 .

因此,目标是学习从位置到轨迹权重的映射 . 当使用像Theano和Tensorflow(或Keras)这样的全明星计算图库时,我遇到的问题是我不知道如何对该系统进行实际建模 . 我想首先使用标准的完全连接的层,然后输出是我的轨迹权重 . 但是,我如何实际计算损失,以便它可以使用backprop?

在自定义丢失函数中,我会忽略/不指定真实标签,运行模拟器并返回它给出的损失 . 但是根据我的阅读,你需要返回一个象征性的Theano / Tensorflow函数 . 我的损失非常复杂,所以我不想将它从模拟器转移到网络 . 我该如何实现呢?然后问题是区分这种损失,因为我可能需要采样以获得该梯度 .

1 回答

  • 0

    我前段时间遇到过类似的问题 .

    有一个损失函数,它在很大程度上依赖于优化的C代码和第三方库 . 将此移植到张量流是不可能的 .

    但我们仍然希望训练张量流图以从当前设置创建转向信号 .

    Here is an ipython notebook which explains how to mix numerical and analytical derivatives https://nbviewer.jupyter.org/gist/lhk/5943fa09922693a0fbbbf8dc9d1b05c0

    Here is a more detailed description of the idea behind it:

    图的训练是一个优化问题,所以你肯定需要损失的导数 . 挑战在于将张量流中的分析导数与损失的数值导数混合 .

    你需要这个设置

    • 输入I

    • 输出P.

    • 图G将I映射到P,P = G(I)

    • 添加与P相同形状的常数,P = C * G(I)

    • 损失函数L.

    训练张量流图与反向传播一起使用 . 对于图中的每个参数X,计算以下导数

    dL / dX = dL / dP * dP / dX

    第二部分,dP / dX只需设置张量流图就可以免费使用 . 但我们仍然需要损失的衍生物 .

    现在有一个技巧 .

    我们希望tensorflow基于正确的梯度dL / dP * dP / dX来更新X,但我们无法获得计算dL / dP的张量流,因为这不是张量流图 .

    我们将使用P~ = P * C,

    其衍生物是dP~ / dX = dP / dX * C.

    因此,如果我们将C设置为dL / dP,我们将得到正确的梯度 .

    我们只需要用数值梯度估算C.

    这是算法:

    • 设置图表,将输出乘以常数C.

    • 为常量提供1,计算正向通道,得到预测值P.

    • 计算P的损失

    • 计算P的数值导数

    • 将数值导数作为C,计算后向传递,更新参数

相关问题