深度学习指的是训练神经网络
所谓训练就是和正确的结果对比,然后不断更正有操作的偏差。就像且土豆丝,不断调整自己下刀的厚度,既不能太细,也不能切成块。
什么是神经网络
一个简单的神经网络。
现在假设我们有一些关于房屋的数据集,这个数据集里面包含了房屋的面积以及房价。我们希望从房屋的面积大小来预测该房屋的价格(面积->价格)。
如下图所示,横轴代表房屋的面积大小(size of house),纵轴代表房屋的价格(price of house),红叉代表房屋。很明显可以看出,随着面积的变大,房子的价格也随着增长,近似线性关系。于是,我们可以使用一条一元一次方程,来近似的描述房屋的面积和价格关系。
蓝色的线条表示我们的函数,因为房屋的面积不能是负数,所以,从坐标原点开始,有一段直线的值为0。这个函数也叫做修正线性单元(Rectified linear unit,ReLU)。
也就是说,我们输入一个房屋的面积,经过一个处理的过程(比如函数计算),得出一个输出的结果,房屋的价格。我们把这样一个接受输入并且能够输出一个对应的结果的单元,叫做神经单元。神经网络就是一系列神经单元的组合堆叠。现在,我们这个神经网络只有一个神经单元。
稍微大一点的神经网络
事实上,从面积直接通过一个函数计算出房价,明显是不合理的。影响房价的因素有很多,比如房间的个数(bedrooms),当地的邮政编码(Eip Code),当地的经济(wealth)。如下图所示,左侧蓝色方框的内容,是可能影响房价的因素。
图中的每一个圆圈都表示一个神经单元。从房屋的面积和房间的个数,可以推出购买家庭的大小;从邮编号码可以推出当地的步行化程度(描述地区繁荣度的一个指标),从邮编和当地经济可以推出学校的教学水平。注意:以上的推出过程,都是指经过一个神经单元的计算,这也符合上文所说的“神经网络就是一系列神经单元的组合堆叠”。然后,还有另外的一个神经单元,这个单元可以对输入的家庭大小(family size)、步行化程度(walkability)、学校的教学能力(school quality)等参数,输出房屋的价格。
那么,有一个问题是,我们为什么不直接通过输入的四个参数(蓝色方框)一步到位的计算出最终的房价呢?其实是可以的。之所以不这么做,是因为我们希望每一个神经单元做尽量简单的工作,通过这些不同的神经单元的组合堆叠,从而得出一个更加准确的预测结果,同时,也提高了每一个神经单元的可重用性。
现在,我们有了一个稍微大一点的神经网络了。只需要输入四个参数,就能预测出房价的多少,中间的过程全部是自动完成的。
一个基本的神经网络
在上面的例子中,我们每一个神经节点都是以上一层节点若干个输出作为输入。实际上,我们在设计神经节点的时候,每一个神经节点的输入都同时来自上一层节点所有的特征。如下图所示,第一层的三个节点,每一个节点都把前面的四个特征作为输入,第二层只有一个节点,这个节点也把第一层的所有节点的输出作为输入。
这样,我们就构建了一个基本的神经网络。这个神经网络有若干层,每一层都是由若干个神经单元组成,每一层每一个神经单元的输入,是上一层所有的神经单元的输出。
注意:以上介绍的是构建神经网络,默认所有的节点都是已经训练完成(参数调整到最佳)。这里还没有加入训练神经网络的过程,所以看起来,和简单的函数计算没有什么区别。下面要做的,就是在这个神经网络进行实际应用之前,如何训练它。