深度学习基础技术分析2:神经网络

感知机仅能解决线性的问题,这个局限性使得其无法适应多数的实际应用。因此人们提出了神经网络。如图2.1所示。
深度学习基础技术分析2:神经网络图2.1 神经网络

技术2.1 隐藏层

从结构上看,神经网络有多层,比感知机复杂。除了输入层、输出层,还增加了1个或多个隐藏层。输入层与输出层节点的个数由具体应用所确定,这个和感知机没有区别。隐藏层的层数、每层节点个数(这两个可称为神经网络的参数),则对神经网络的效果起到很大作用。
对于神经网络的新手玩家而言,针对具体应用,调整这些参数既可能是有意思的活儿,也可能是枯燥的活儿。
仅仅增加隐藏层能否增强网络的能力的,很遗憾,答案是否定的。可以证明,多层结构和单层结构起的作用完全相同,这些复杂的联接并未改变线性的本质。

技术2.2 **函数

激函数才是使得神经网络变得无所不能的技术。如图2.1所示,第1层的输出是 z = ( z 1 , z 2 , z 3 ) \mathbf{z} = (z_1, z_2, z_3) z=(z1,z2,z3),它们经过变换,成为 a = ( a 1 , a 2 , a 3 ) \mathbf{a} = (a_1, a_2, a_3) a=(a1,a2,a3)。干这个事儿的就是**函数。最常见的**函数是sigmoid
f ( z ) = 1 1 − e − z f(z) = \frac{1}{1 - e^{-z}} f(z)=1ez1
它有良好的数学性质:

  1. 把数据从 ( − ∞ , + ∞ ) (-\infty, +\infty) (,+)映射到 ( − 1 , + 1 ) (-1, +1) (1,+1)
  2. 从0往两边,变化速度很快,然后平稳;
  3. f ′ ( z ) = f ( z ) ( 1 − f ( z ) ) f'(z) = f(z) (1 - f(z)) f(z)=f(z)(1f(z))
    显然,经过**函数后,神经网络所表达的变换肯定不是线性的了。

技术2.3 多层反馈

一般将神经网络称为BP神经网络,BP就是Backpropagation。从输出层可以向输入层反馈,逐步调整每层的权重。

技术2.4 输出层表示

神经网络的输出层是多样的,既可是一个节点,也可以是多个。这使得它可以应对不同的任务。例如,回归时只需要一个节点,多标签学习时就可以给相应个数的节点。

小结

  1. 每层都有针对偏移量的 + 1 +1 +1,参见技术1.2.
  2. 在实际应用中,神经网络的层数、每层的节点个数、每个节点使用的**函数,都对其性能产生重要影响。所谓的“调参师”,就是干这些活儿。
  3. 在本文所述的几个技术上进行改动,都可以做出新的工作。