
想知道什么是深度学习,或者说深度神经网络,我们先用大白话聊一聊什么是神经网络,然后再介绍为什么要把神经网络做“深”呢?相信看完本文之后就能理解什么是深度学习了。
从系统角度出发,一个系统通常有三个部分组成:输入、输出和模型
输入和输出比较好理解,那么模型是什么呢?简单的说,模型就是输入和输出之间的映射关系。
先拿一个最简单的例子来说:一个系统的输入是 ,输出为 ,我们知道 ,以此类推。我们很容易就得出 之间的映射关系,即 是两倍的 ( )。
这里的两倍,就是输入和输出之间的映射关系。当我们知道了这种映射关系之后,我随便给出一个输入 (比如1203),都能得到输出 (2406)。
这个例子比较简单,我们一眼就能看出输入和输出之间的关系,当 为图片、声音、股市交易单、人口与房价等等复杂的输入时,如何计算出想要的输出 呢?
这时候就很明确了,从输入推理出输出的关键就在于,获取输入和输出之间的映射关系,我们将输入和输出之间的映射关系定义成一个函数 ,这里的 就是输出, 是输入。
关键就在于,怎么求解这个 呢?这时候就要祭出神经网络了,它的作用就是通过调整参数 来求解输入输出之间的映射关系 。
从理论上来讲,神经网络通过调整各层的参数 ,可以拟合任意复杂度的函数(这一部分不展开了,感兴趣的可以去学习相关内容)。我们先喂给神经网络一定量的输入输出数据,通过一次次的训练,让网络学习到当前输入输出数据之间的映射关系。那么如果未知的输入 与训练神经网络的输入服从同分布的话,将这个未知输入 送入神经网络中就能够映射出一个输出 。
神经网络就get到预测的能力了!
可是这种映射的结果一定是准确的吗,比如我输入一张猫咪的图像进入识别动物的神经网络,我想要的输出结果是:这是一只猫咪。但神经网络给出的输出有可能是:这是一只狗狗
这意味着,神经网络学习到的输入和输出之间的映射关系,不一定是准确的!
那么什么样的神经网络能够更加准确的学习到输入和输出之间的映射关系呢?答案是更深的神经网络。
原来把网络层数加深就好了!
可是神经网络采取下图这种全连接的连接方式,即每层中的任意个神经元都与下一层的全部神经元相连接,然后每个连接之间都有一组参数 ,这种全连接形式带来的参数量是极其巨大的,导致的计算量是不可接受的。
那么是不是换成大算力的计算设备就可以了呢?答案是否定的。
参数量巨大只是其中的一个问题,还有一个问题是,过于深的神经网络在求解过程中很容易陷入局部最优解,而非全局最优解。这成为了阻碍深度神经网络发展的主要因素。
直到2006年,深度学习界的大牛,Hinton教授发表的论文中提出了两个重要观点:(1)多层的神经网络具有优秀的特征学习能力,能够学习到数据更本质的特征;(2)可通过逐层预训练的方式解决深度神经网络难以获得全局最优解的问题。
至此,深度学习迎来了快速的发展。
可是深度学习中还是存在很多问题,比如没能解决全连接引起的计算量过大的问题。
随着深度学习的继续发展,受到猫脑视觉皮层研究中局部感受野的启发,卷积神经网络(Convolutional Neural Network,CNN),通过稀疏连接、参数共享两个思想改进了深度神经网络。左边是CNN结构,右边是全连接形式的神经网络。
当然,深度学习中不仅有卷积神经网络,还有深度置信网络(Deep Belief Nets,DBN)、深度玻尔兹曼机(Deep Boltzmann Machines,DBM)等等。
以上介绍了什么是深度学习,篇幅有限可能有些地方没有讲到。为了将网络加深,在深度学习的研究中,又出现了dropout、Batch Normalization以及ResNet等优秀的结构,在这里就不过多介绍了。
最后欢迎大家关注我的公众号:一刻AI
