“你知道吗,我们养细胞的时候最怕也是环境波动。
“培养液的pH值只要差个0。1,或者温度波动个0。5度,那些酶就罢工了,细胞直接死给你看。生物体内的反应环境必须是绝对稳定的,这叫稳态Homeostasis。
“只有环境稳了,酶才能专心干活……………”
“稳态。。。。……”
林允宁听着程新竹的喋喋不休,端着咖啡的手忽然停在半空。
他的瞳孔猛地收缩,脑海中那个一直旋转的齿轮,突然卡进了一个关键的槽口。
【天?:灵感洞察LV。1已激活。】
他的目光从咖啡杯移到了屏幕上那乱糟糟的数据流上。
神经网络的每一层,不就是生物体内的一级级酶促反应吗?
现在的困境是,前一层的参数一变,输出的数据分布均值和方差就跟着变。
下一层神经元就像是那个可怜的细胞,上一秒培养液还是酸性的,下一秒就变成碱性了,它光顾着适应环境了,哪还有精力去处理信息?
“如果生物体需要稳态。。。。。。”
林允宁喃喃自语,眼睛越来越亮,“那神经网络也需要稳态。”
“我们需要把靶子焊死在墙上。”
他猛地放下杯子,咖啡溅出来几滴。
“什么?”正在嘟囔着养细胞经验的程新竹被他吓了一跳。
“我说,我要强制让每一层的数据环境保持稳态!”
林允宁抓起键盘,那种在绝境中找到出口的狂热让他兴奋起来。
不需要复杂的数学推导,只需要一个简单粗暴的工程手段。
不管前一层传过来什么乱七八糟的数据??
我先算出这批数据的均值Mean和方差Variance。
然后,强行减去均值,除以标准差!
x_norm=x-meansqrtvar+eps
把它们强行拉回到均值为0、方差为1的标准正态分布!
但这还不够。
如果强行归一化,可能会破坏数据的特征。得给它一点自由度。
所以,再引入两个可学习的参数:gamma拉伸和beta偏移。
y=x_norm*gamma+beta
让网络自己去决定需不需要还原,以及还原多少。
这就是??BatchNormalization批归一化。
给每一层神经元,都装上一台“空调”和“酸碱调节器”,让它们永远在最舒适的分布环境下工作!
“就是这个!新竹,你真是个天才!”
林允宁转过头,狠狠地拍了拍程新竹的肩膀,“生物稳态!就是这个!”
“啊?我干嘛了?”程新竹一脸懵逼。
林允宁没有解释,他的手指在键盘上飞舞,将这几行简洁而优美的代码插入到每一个卷积层和激活函数之间。
就像是给每一个神经元都装上了一个微型的“稳态调节器”。
这是一种从未在教科书上出现过的层结构。