第1271章 F(x)=H(x)-x (第1/2页)
说完,成文飞重新看向白板。
白板左侧写着“语音识别”,右侧则是何恺明刚刚画出的网络结构。
十几层卷积模块一层层往上叠,训练曲线却在十五层以后开始下滑。
成文飞指着曲线:“我的模型加深到十五层以后,训练集准确率不升反降。ReLU、BN、DrOpOUt都用上了,还是解决不了。”
“深度网络不是越深越好。”何恺明说。
“这话已经听过很多次了。”
“但是问题不一定出在深度本身。”
何恺明拿起笔,在白板上写下一个H。
“传统网络每一组卷积层,都在学习完整变换H(X)。输入是X,输出目标是H(X)。如果网络继续加深,后面的层就必须重新学习一套完整特征。”
成文飞看着公式,没有打断。
何恺明又在旁边写下:
F(X)=H(X)-X
“那我们换一个目标,不让这几层直接学习H(X),只学习残差F(X),最后输出F(X)+X。”
“加一条捷径。”成文飞说。
“对。”何恺明在图上画了一条从输入绕到输出的线,“原始输入X不再被迫经过所有卷积层,而是直接跨过去,和卷积模块的输出相加。”
成文飞盯着那条线:“这会破坏特征提取链路。”
“成教授,我们做个思想实验。”何恺明转过身,“一个二十层网络已经能工作,我在后面再加三十六层。如果这三十六层什么都不做,只把输入原样传下去,那么五十六层网络至少不应该比二十层更差。”
“但是直接堆叠以后,它反而会变差。”
“这说明网络很难学会恒等映射。残差结构把最简单的答案直接留给它。如果新增层没有价值,就把F(X)学成零,原始信号直接通过。新增层有价值,就只补充需要修正的特征。”
成文飞看着白板,许久没有说话。
他过去的认知很明确,神经网络每一层都应当完成一次特征提取,信息必须经过连续变换才能逐层抽象。
让输入跨过中间层,在他看来像是给网络偷懒。
“这在前向传播上说得通。”成文飞拿起笔,“但反向传播呢?梯度经过加法结构,会不会出现新的不稳定?”
“我也在算这个。”
何恺明把白板擦出一块空白,写下损失函数和输出表达式。
“假设y=F(X)+X,反向传播时,损失对X的梯度不只经过F这一条路径,还会多一条直接传递的路径。只要加法结构没有被破坏,梯度就能沿着捷径回到浅层。”
成文飞接过笔,在公式旁边补了一行。
两个人很快投入推导。
实验室里只剩下笔尖划过白板的声音,旁边的研究员也围了过来。
成文飞不断提出问题,何恺明不断修改表达式。
一个小时后,成文飞放下笔。
“成教授,先别判断它是不是普适,跑一次数据会回答。”
成文飞看着白板上的结构图,“那好,准备实验。”
“现在?”
“现在。”
“语料还没完全标注。”
“先用现有数据做对照。普通堆叠网络和残差结构各训练一版,层数从十层开始,逐步加到二十六层。”
“行。”
成文飞转身看向服务器区,“如果这个结构能把深度网络的问题解决,语音识别的进度会快很多。”
何恺明没有接话,他知道,成文飞真正关心的不是一篇论文,也不是谁先提出一个结构,倒是自己,这个想法完全可以整理出一篇论文来。
如果这条路能让深层模型继续
(本章未完,请点击下一页继续阅读)