为什么神经网络的结构如此重要?

概述

在深度学习领域,我们会经常看到某个模型刷榜的新闻。某个神经网络算法任务的重大突破,第一靠数据集,第二靠模型结构。

图像领域的突破,ImageNet数据集功不可没,这就是数据集的重要性,因为它记录了目标函数的信息。 但是我们从上一节中得知,数据集是有缺陷的,它不能完整地记录目标函数的信息,会遗失一部分。数据集的好坏就在于它对于目标函数信息保存率的高低。

训练阶段的任务就是要利用数据集中的信息(数据集函数d(\mathbf x)),还原出目标函数o(\mathbf x)。由于各种限制,我们只会得到一个与目标函数近似的函数f(\mathbf x)

好的模型,其对应的函数形式更接近目标函数,从而能够更好地弥补数据集的缺陷,获得更好的结果。

直观展示

2个点

引用上一个节的例子,该数据集有2个点,该数据集的信息保存率很低。

数据集

对其函数形式进行不同的假设:

直线形式
抛物线形式

通过调整参数w,我们可以得到无数条抛物线,且都可以完美模拟数据集函数

还存在很多其它的函数形式,函数形式本身也是无限的。其它函数形式也可以完美模拟数据集函数d(\mathbf x)

3个点

直线形式
多项式形式

5个点

直线形式
多项式形式

随着数据点的增多,函数形式正在向直线逼近,但仍然有无限多的可能。

总结

从数据中无法获得目标函数形式的信息,它存在无限多的可能。

设计神经网络的结构

数据集中的信息是不足的,我们需要从其它地方获得额外信息,用它来指导神经网络的结构设计,从而弥补信息的不足。

特殊结构

在各种深度学习的任务中,好的模型都使用了高度特化的结构。如:

  • 图像任务:二维CNN
  • 文本任务:Embedding、一维CNN、RNN、CRF、Transformer等

很多特化的结构都是参考了目标函数的处理过程而设计出来的。比如CNN,是模拟了视觉神经的组织结构的。 虽然目标函数的具体形式是未知的,但是人们往往可以得到其部分信息,通过模拟目标函数的处理过程,获得更好的结果。

结构设计

神经网络的结构是算法的骨架,直接决定算法的最终潜力。骨架没有设计好,无论怎么训练,最终也只会差强人意。

不恰当的结构
恰当的结构

神经网络的结构是无法通过训练得到的,通常情况下是需要人为设计的。 也有通过算法进行架构搜索的,也就是尝试各种不同的架构,根据最终的训练效果选择一个最好的,需要耗费非常巨大的算力,只适合极少数的财力雄厚的机构。

要人工设计出好的神经网络结构,需要:

  1. 对任务所对应的目标函数有一定的了解或合理的猜想;
  2. 熟悉神经网络中常见的结构,并理解其原理;
  3. 利用这些结构组装成与目标函数类似的结构。

总结

  1. 数据集无法提供足够的信息,需要通过神经网络的结构弥补信息的缺失
  2. 而神经网络结构的信息,来自于对目标函数处理过程的认识和模拟

问题

不是说神经网络可以模拟任意函数吗,为什么还要去设计它的结构呢?

参考软件

更多内容及可交互版本,请参考App:

神经网络与深度学习

可从App Store, Mac App Store, Google Play下载。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容