第77章 我给的灵感? (第1/2页)
漆昊想起了之前他指出Sigmoid函数在反向传播时,每一层梯度都会打折。
当时他说过梯度没有消失,只是在衰减,这是激活函数选取带来的结构性缺陷,所以必须更换激活函数。
现在,陈工等人听从了自己的建议,可为什么换了之后,梯度不仅没救回来,反而疯狂抽风,不是直接卡死,就是爆出NaN导致程序崩溃?
漆昊想要从面前的数据中找出一点线索。
轻量化网络、波动性的点云原始输入、以及……机载芯片。
等一下,这地方不对啊。
“陈工,我能再看看相关的代码吗?”
“稍等。”陈工开始操作,在屏幕上调出了训练端基于NumPy写的网络初始化和数据预处理脚本。
漆昊看了一会儿,指着屏幕某处说:“陈工,你看这行输入,原始点云的数据范围在0.5米到50米之间,你们没有做Zscore或者MinMax归一化,直接以原始float值喂了进去。”
“然后,你们的参数初始化,用的是刚提出来的Xavier初始化对吧?”
“我看你给的文献中,有这么一篇。”
陈工有些得意:“那当然,这是学术界最前沿的初始化方法,论文里证明了它能保证输入和输出的方差一致。”
漆昊轻叹了口气,完了,他的想法是对的。
“陈工,Xavier初始化是有严格前提的,它是专门给Sigmoid或者Tanh这种对称激活函数设计的,推导的假设是,激活函数关于原点对称……”
“每一层网络的输出方差,都会直接缩水一半,如果是10层网络,传到最后一层,方差也没剩下多少,这跟梯度消失有什么区别?”
“那NaN又是怎么爆出来的?”
“机载芯片算力差,你们直接喂了原始点云,点云原始数值大,输入方差可能高达上千,再加上Xavie使用场景不合适,问题就暴露了出来。”
陈工疑惑地问道:“这是你刚才想出来的?”
“是的,这也多亏陈工刚才的讲解,才让我找到了灵感。”
陈工顿时一脸懵圈。
我给的灵感?
我自个儿想了几天,脑袋都快想秃了也没整明白,我什么时候给你灵感了?
陈工仔细想了下,漆昊这一手基于方差传播的数学推导看上去没什么问题,但作为典型的工科博士,他们显然不可能只凭嘴上说说就彻底信服,毕竟,在工程落地领域,再完美的数学公式也必须经历实际代码的检验。
陈工没轻易说好或者不好,只是斟酌道:“漆昊同学,你这个Relu初始化方差修正的思路现在听起来没问题,但是,神经网络在多层级迭代中的实际表现很复杂,我们得把你这一套写进初始化脚本里,重新跑一遍几万组的点云训练数据,看看收敛曲线才能下结论。”
“没错,实践是检验真理的唯一标准。”漆昊爽快回答。
“大概需要多久能出测试结果?”
“咱们组里这几台工作站虽然配了显卡,但由于数据集庞大,加上要跑满完整的epoch观察稳定性,怎么着也得等个七八天吧。”陈工估算了一下时间。
(本章未完,请点击下一页继续阅读)