跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一个神经网络求函数最大值的问题
未分類
14 1 月 2022

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

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

資深大佬 : zxCoder 68

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

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

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

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

大佬有話說 (36)

  • 資深大佬 : Joshua999

    求最大值应该不需要神经网络吧,记得好像有什么牛顿法,退火法。用神经网络的话,是最大值了就 1 ,不是最大值了就 0 呗

  • 資深大佬 : Xs0ul

    按你的想法,模型学到的预测值就是 MAX_VALUE ,并不能实现预测某个函数最值的效果

  • 資深大佬 : ipwx

    你能不能把你的原始问题说一说。
    这估计也是个 XY problem

  • 資深大佬 : rpman

    你这样 y_pred 逼近的就是 MAX_VALUE
    你想逼近的其实就是 max(x)

  • 資深大佬 : GuuJiang

    并不能,神经网络解决的问题是
    求**一个函数**,使其对于测试集的输入得到的输出值(即 loss)最小
    而你想要解决的问题是
    对于一个**已知的函数**,求其在定义域上的最大值
    看出区别了吧?问题的关键不在于最小和最大的区别,假如仅仅是最小和最大的区别的话确实可以通过一些手段把最大值问题变为最小值问题,而你这里压根就是两个完全不一样的问题
    BTW ,你这个想法让我想到了一些刚开始学编程的初学者试图通过赋值语句来达到解方程的目的,这两种场景非常相似,都是有两个问题 A 和 B ,乍一看描述非常相似,实际上是完全不同的问题

  • 資深大佬 : Xs0ul

    试图理解了一下主想问什么:
    1. 一般的机器学习问题是,已有一组观测到的 xy 和由未知参数 w 定义的函数,求最优的 w 使函数预测的 y 与实际的 y 差距最小。
    2. 让模型自动找某类函数的最大值也可以,比如一堆由 x=(a,b,c)定义的二次函数和对应的二次函数的最值 y ,神经网络够复杂或者恰好用到正确的层,可以拟合出求最值的公式(二次函数)。
    3. 主想问的好像把 1 和 2 混在了一起,输入是 1. 但输出是 2.,这只要 max()就行了

  • 主 資深大佬 : zxCoder

    就是有个作业 给一个函数比如 y=f(x),x 的取值是有限的,确定的,比如[x1=1 x2=5 x3=4 …],然后 f(x)是一个神经网络,网络结构也给好了,就是一个两个线性层和一个激活函数。
    然后要训练这个网络,最大化 y 的值。
    @Joshua999
    @Xs0ul
    @ipwx
    @rpman
    @GuuJiang
    @Xs0ul

  • 資深大佬 : ipwx

    1 、你要训练的是 f(x) 本身? f(x) 可变?
    2 、那训练了之后 y=f(x) 就变了啊。。。它可以变成任何东西。你有训练目标吗?就是 t[x] = f(x) 的正确答案 t[x]。
    3 、没有目标去训练,它可以变成任何值啊。
    主能不能用数学语言形式化一下你的问题,我无法理解。

  • 資深大佬 : ipwx

    还有,两个线性层和一个激活层它顺序到底是啥?
    y = A2*(u(A1*x+b1)) + b2 ?
    如果是 y = u(A2*(A1*x+b1)+b2) 那是没有用的。两个线性层和一个线性层没有区别(参数可以训练的情况下)

  • 資深大佬 : ipwx

    这种东西不能靠叙述,它根本不精确。上公式啊喂

  • 主 資深大佬 : zxCoder

    @ipwx 就是有一个式子 y=xxxxx 我打不出来,里面有一部分是一个神经网络,然后现在要训练这个神经网络的参数使得这个式子的值最大。
    这个式子是不是就相当于有标签的学习里面 loss function 的概念

  • 資深大佬 : ipwx

    @zxCoder 不是,那你的目标到底是什么。。。
    你一直在说值最大,但是不可能没有目标啊?没目标你根本不是有监督(你说的有标签)学习。

  • 資深大佬 : ipwx

    so 你是不是想要 max L=sum_x f(x)

  • 資深大佬 : ipwx

    对于单独的 for any x, max f(x) 这个问题似乎就没有意义了

  • 資深大佬 : ipwx

    @zxCoder 你看,这不是 y=xxxxxx 我需要看你数学公式的形式化,而是问你,你的“最大化一个函数”到底形式化是什么意思。我给了两个形式:
    max sum_x f(x)
    for any x, max f(x)
    所以你是哪个?

  • 主 資深大佬 : zxCoder

    @ipwx 我从来没说过是有标签学习的啊。。。。

  • 資深大佬 : ipwx

    @zxCoder 那行,所以你的问题是哪个
    max sum_x f(x)
    for any x, max f(x)

  • 主 資深大佬 : zxCoder

    @ipwx 我看不太懂你下面的意思。不知道怎么描述了。。。

  • 主 資深大佬 : zxCoder

    @ipwx 应该是第二种

  • 資深大佬 : ipwx

    @zxCoder 那这个问题的定义很奇怪,因为对于一个足够宽的、一个非线性层的神经网络,可以拟合任何实数域上的可测函数。也就是说,
    对于任何 C ,f(x) 恒等于 C
    是你这个神经网络可以拟合的函数。
    最终你会得到一个 meaningless 的函数,C 在训练过程中不断被推向负无穷(或者正无穷)

  • 資深大佬 : ipwx

    除非你的 f(x) 有值域,那么这个函数会被推向下界(或者上界)。
    为了避免 f(x) 退化成常值函数,你的训练目标或者网络结构必须把数据之间的关联性发掘出来。。。所以你这个问题是不是真的不对头,不好说,得看你的问题数据本身是什么样子,以及神经网络是什么样子。
    但是在我的经验中,for any x, max f(x) 很少见。至少也是 max E[f(x)]

  • 主 資深大佬 : zxCoder

    @ipwx max E[f(x)] 大佬可以讲一下这个吗,或者给我点参考资料。我不知道如何下手

  • 資深大佬 : ipwx

    @zxCoder 每个 mini-batch
    随机采样,计算 f(x[i]) 然后求平均。接着梯度下降 -(sum f(x[i]))/N

  • 主 資深大佬 : zxCoder

    @ipwx 看不懂有什么区别啊。这里是算有监督学习吗?那哪个是 loss

  • 資深大佬 : Xs0ul

    主不如直接作业截图或者拍个照发上来,感觉越说越糊涂了

  • 主 資深大佬 : zxCoder

    问了一下同学,题目是这样
    f(x)=g(a)的期望 a 属于 q
    q 是一个神经网络满足一个分布
    目标是最大化 f(x)的值
    @ipwx
    @Xs0ul
    大佬们帮忙看看

  • 資深大佬 : ipwx

    你这形式化还是不太对劲。你能不能作业拍个照截个图。
    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

    顺便 L = E_x[f(x)] 是神经网络很普适的写法,表示的是 x 从全部训练集上采样(也就是 mini-batch ),E_x 就是 mini-batch 上所有 f(x) 的平均,这个在代码里面也很常见才对。

  • 主 資深大佬 : zxCoder

    @ipwx 平均值为什么能做 loss 啊 loss 不是预测值和真实值的差距吗

  • 資深大佬 : ipwx

    @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

    更正:在回归任务中,l(x) = (f(x) – t[x])^2

  • 資深大佬 : ipwx

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

  • 資深大佬 : Joshua999

    @zxCoder fx 是两个线性层加一个激活函数,最大化输出。那就直接把线性层系数 w 设为 0 ,偏置 b 设最大(或者激活函数的最大点)。不管输入什么,都是最大值

  • 主 資深大佬 : zxCoder

    @ipwx 大佬 按你说的现在有 f(x) = E_a[g(x,a)],然后 a 满足一个分布,然后要最大化 f(x),我还是没懂为什么 L = E_x[E_a[g(x,a)]]

  • 資深大佬 : ipwx

    @zxCoder 你去把 deep learning 这本(英文书)学一遍吧求你了

  • 主 資深大佬 : zxCoder

    @ipwx 。。。我不问了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具