请教一个神经网络求函数最大值的问题

2021-11-09 22:54:17 +08:00
 zxCoder

最近在学神经网络,对于监督学习来说,步骤就是输入 x ,模型输出一个 y_pred ,然后和标签 y 计算一下 loss ,然后就反向传播更新参数。

那我如果想用神经网络求一个函数的最大值,是不是可以当模型输出 y_pred 时,我用 MAX_VALUE ,一个很大很大的值来跟 y_pred 计算 loss ,然后反向传播更新参数,让 loss 尽量小。

我不知道这个想法对不对,因为我找不到相关的介绍。


重新想了一下,是不是可以把这个函数直接加个负号,直接当成 loss 就行了?

1462 次点击
所在节点    问与答
36 条回复
ipwx
2021-11-10 11:18:07 +08:00
除非你的 f(x) 有值域,那么这个函数会被推向下界(或者上界)。

为了避免 f(x) 退化成常值函数,你的训练目标或者网络结构必须把数据之间的关联性发掘出来。。。所以你这个问题是不是真的不对头,不好说,得看你的问题数据本身是什么样子,以及神经网络是什么样子。

但是在我的经验中,for any x, max f(x) 很少见。至少也是 max E[f(x)]
zxCoder
2021-11-10 14:22:53 +08:00
@ipwx max E[f(x)] 大佬可以讲一下这个吗,或者给我点参考资料。我不知道如何下手
ipwx
2021-11-10 15:26:01 +08:00
@zxCoder 每个 mini-batch

随机采样,计算 f(x[i]) 然后求平均。接着梯度下降 -(sum f(x[i]))/N
zxCoder
2021-11-10 15:39:59 +08:00
@ipwx 看不懂有什么区别啊。这里是算有监督学习吗?那哪个是 loss
Xs0ul
2021-11-10 15:49:07 +08:00
楼主不如直接作业截图或者拍个照发上来,感觉越说越糊涂了
zxCoder
2021-11-10 16:07:20 +08:00
问了一下同学,题目是这样

f(x)=g(a)的期望 a 属于 q
q 是一个神经网络满足一个分布

目标是最大化 f(x)的值


@ipwx
@Xs0ul

大佬们帮忙看看
ipwx
2021-11-10 16:37:35 +08:00
你这形式化还是不太对劲。你能不能作业拍个照截个图。

f(x) = g(a) 这个肯定有问题。

f(x) = E_a[g(x,a)], a ~ q(a) 或者 a~q(a|x) 那我还能理解。

----

另外用 a 来表示分布变量,你这是在做 Reinforcement learning 的 action network 吗?

这样的话你需要用 REINFORCE 算法去蒙特卡洛采样 a 。当然具体请参照 RL 的最新文章,我不是专门做 RL 的。

不管怎么样如果你的目的是优化 f(x),那么你的 loss 应该是


L = E_x[E_a[g(x,a)]]

其中 x ~ p(x) 是数据分布,a ~ q(a) 或者 q(a|x) 是 action network 导出的分布。当然一般而言我觉得 q(a) 应该是有条件概率 q(a|x) 的。

max L 就梯度下降 min -L
ipwx
2021-11-10 16:39:06 +08:00
顺便 L = E_x[f(x)] 是神经网络很普适的写法,表示的是 x 从全部训练集上采样(也就是 mini-batch ),E_x 就是 mini-batch 上所有 f(x) 的平均,这个在代码里面也很常见才对。
zxCoder
2021-11-10 16:44:21 +08:00
@ipwx 平均值为什么能做 loss 啊 loss 不是预测值和真实值的差距吗
ipwx
2021-11-10 16:48:51 +08:00
@zxCoder 嗯,再引入一个新的记号,l(x)

在回归任务中,l(x) = f(x) - t[x]

其中 f(x) 是神经网络输出,t[x] 是 x 对应的标注( label )。

那么 L = E_x[l(x)]

就算是普普通通的回归任务还是有这个 E_x 。只是现在的人上手都是 pytorch 框架,直接写 loss='mse',没看见它源代码里面的求平均而已。。。而这个求平均的数学意义是蒙特卡洛采样

E_x[f(x)] 约等于 1/N f(x[i]), x[i] 是 第 i 个从 p(x) 上采到的样本。

如果 x 是训练集数据,那么采样只需要取一个 mini-batch 就行了。
ipwx
2021-11-10 16:49:11 +08:00
更正:在回归任务中,l(x) = (f(x) - t[x])^2
ipwx
2021-11-10 16:50:41 +08:00
更正:E_x[f(x)] 约等于 1/N sum_i f(x[i]), x[i] 是 第 i 个从 p(x) 上采到的样本。
Joshua999
2021-11-10 16:51:06 +08:00
@zxCoder fx 是两个线性层加一个激活函数,最大化输出。那就直接把线性层系数 w 设为 0 ,偏置 b 设最大(或者激活函数的最大点)。不管输入什么,都是最大值
zxCoder
2021-11-10 16:56:22 +08:00
@ipwx 大佬 按你说的现在有 f(x) = E_a[g(x,a)],然后 a 满足一个分布,然后要最大化 f(x),我还是没懂为什么 L = E_x[E_a[g(x,a)]]
ipwx
2021-11-10 21:10:51 +08:00
@zxCoder 你去把 deep learning 这本(英文书)学一遍吧求你了
zxCoder
2021-11-10 21:27:46 +08:00
@ipwx 。。。我不问了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/814275

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX