V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
FutureApple
V2EX  ›  奇思妙想

在相同的条件下用相同的算法训练相同的深度学习模型,训练的结果会是怎么样的呢?

  •  
  •   FutureApple · 2022-07-23 17:55:11 +08:00 · 1747 次点击
    这是一个创建于 880 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在相同的条件下用相同的算法训练相同的深度学习模型,训练的结果是否会完全相同,又是为什么呢?

    7 条回复    2022-07-25 17:16:20 +08:00
    zxCoder
        1
    zxCoder  
       2022-07-23 18:00:52 +08:00
    怎么定义“相同的条件”

    如果真的是相同的条件,那结果肯定是相同的
    jdhao
        2
    jdhao  
       2022-07-23 18:04:05 +08:00 via Android
    不太可能完全相同,因为模型的参数初始化,batch 里面数据选择,这些都会影响结果,如果你把这些变化的量全部固定,结果基本上是一样的。
    hsfzxjy
        3
    hsfzxjy  
       2022-07-23 18:10:20 +08:00 via Android
    一些 CUDA 运算有随机性,会导致结果不同
    xiri
        4
    xiri  
       2022-07-23 18:31:29 +08:00 via Android
    有可能会不同,不少算法为了避免过拟合都会引入一些随机因子
    Muniesa
        5
    Muniesa  
       2022-07-23 18:39:33 +08:00 via Android
    用相同的随机种子应该结果是完全相同的
    hsfzxjy
        6
    hsfzxjy  
       2022-07-23 19:36:20 +08:00   ❤️ 3
    我来说一个很多人不会注意到的随机性来源:并行化计算和浮点运算造成的不确定性。

    首先要知道,IEEE754 浮点数的加法和乘法是不符合结合律的。也就是说在某些情况下 (a+b)+c!=a+(b+c),一个反例是在 64-bit 情况下

    1e40+((-1e40)+1e10) == 0.0
    (1e40+(-1e40))+1e10 == 1000000000.0

    因此,对于同一批浮点数相加,它们加的顺序会影响最终的结果。

    其次要知道,GPU 算法通常会将一个问题分为几个子问题,对子问题并行计算,再将子问题的结果汇总为最终的结果。

    比如你要用 GPU 计算 3 个浮点数的和,你可以开 3 个线程使用 atomicAdd 把这些数加在结果数上。

    atomicAdd 能保证没有 race condition ,但是不能保证加的顺序,你这次跑可能是 (a+b)+c ,下一次就可能是 (b+c)+a 。而根据前一条,浮点数的运算顺序会影响运算结果。因此,你每次跑都有可能得到不一样的结果。

    只要你的运算涉及将多路并行的浮点数结果汇总,这种随机性就无可避免,不管你如何固定应用层的随机种子。这种随机性的影响可能很小,但在漫长的训练过程中会不断放大,直到产生肉眼可见的差异。

    为了克服这种随机性以得到确定性的结果,有时你需要和运算效率做 trade-off ,即以更慢的但是顺序确定的方式汇总浮点数。这也是 torch.backends.cudnn.deterministic 这个开关的由来。

    但需要注意的是,torch.backends.cudnn.deterministic 不能保证完全消除这种不确定性。因为这涉及算法的重新设计,而不像固定一个种子这么简单。如果 cudnn 等库的作者考虑不周,那还是会有这种随机性。
    lookStupiToForce
        7
    lookStupiToForce  
       2022-07-25 17:16:20 +08:00
    依稀记得有人反映过以前洋垃圾至强 CPU 有其他因素全固定死,运算结果也会不稳定的情况

    所以排除上面那位大神说的算法层面的影响,物理层面的影响你也不能忽视

    啊,找到了一篇知乎的答案,就讲的不要用洋垃圾的道理
    https://www.zhihu.com/question/300500895/answer/656703745
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5232 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:20 · PVG 16:20 · LAX 00:20 · JFK 03:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.