【问题标题】:Gradient from non-trainable weights function不可训练权重函数的梯度
【发布时间】:2017-12-11 02:43:24
【问题描述】:

我正在尝试实现一个自写的损失函数。我的管道如下

x -> {常数计算} = x_feature -> 机器学习训练 -> y_feature -> {常量计算} = y_produced

这些“不断的计算”对于找出所需的 o/p 和产生的 o/p 之间的差异是必要的。

所以如果我取 y_produced 和 y_original 的 L2 范数,我应该如何将这个损失合并到原始损失中。

请注意y_produced 的维度与y_feature 不同。

【问题讨论】:

  • 你原来的损失是多少?您使用的是哪种语言?如果你有两个损失变量,你可以简单地添加它们。
  • 我原来的损失函数处理 y_feature 和 x_feature,但是我没有通过使用这些损失值得到所需的训练,所以我使用常量计算来放大它们的效果,这也会改变维度.这些尺寸变化不是一种选择。语言是 Python,整个设置都在 tensorflow 中。 @WasiAhmad
  • 更具体地说,这些常量计算涉及傅立叶变换和更多@WasiAhmad

标签: machine-learning backpropagation gradient-descent loss-function


【解决方案1】:

只要您使用 可微分 运算,“恒定转换”和“可学习转换”之间就没有区别。没有这样的区别,看看神经网络的线性层

f(x) = sigmoid( W * x + b )

它是恒定的还是可学习的? W 和 b 是经过训练的,但“sigmoid”不是,但梯度以相同的方式流动,无论某物是否是变量。特别是梯度wrt。到 x 是一样的

g(x) = sigmoid( A * x + c )

其中 A 和 c 是常数。

您将遇到的唯一问题是使用不可微操作,例如:argmax、排序、索引、采样等。这些操作没有明确定义的梯度,因此您不能直接使用一阶优化器。只要您坚持可区分的问题-所描述的问题实际上并不存在-“恒定转换”和任何其他转换之间没有区别-无论大小等变化。

【讨论】:

  • 我现在正在用 tensorflow 编写整个计算,如果该代码涉及不可区分的内容,我会寻求更多帮助。如果该函数涉及不可微分的东西,我们不会引入这些梯度,对吧?
  • Gradient 应该变为 None,但是也可能实现不断返回 0,这可能更棘手。无论哪种方式,您最终都会得到 improper 优化。它不仅仅是“缺失的一点”,它实际上会导致没有收敛保证(如果你的模型中有一些不可微的路径,梯度下降可能无法学习任何东西,它可能会循环、爆炸等)跨度>
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2016-11-09
  • 2019-10-17
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
相关资源
最近更新 更多