深度学习基础技术分析2:神经网络
感知机仅能解决线性的问题,这个局限性使得其无法适应多数的实际应用。因此人们提出了神经网络。如图2.1所示。图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)=1−e−z1
它有良好的数学性质:
- 把数据从 ( − ∞ , + ∞ ) (-\infty, +\infty) (−∞,+∞)映射到 ( − 1 , + 1 ) (-1, +1) (−1,+1);
- 从0往两边,变化速度很快,然后平稳;
-
f
′
(
z
)
=
f
(
z
)
(
1
−
f
(
z
)
)
f'(z) = f(z) (1 - f(z))
f′(z)=f(z)(1−f(z))
显然,经过**函数后,神经网络所表达的变换肯定不是线性的了。
技术2.3 多层反馈
一般将神经网络称为BP神经网络,BP就是Backpropagation。从输出层可以向输入层反馈,逐步调整每层的权重。
技术2.4 输出层表示
神经网络的输出层是多样的,既可是一个节点,也可以是多个。这使得它可以应对不同的任务。例如,回归时只需要一个节点,多标签学习时就可以给相应个数的节点。
小结
- 每层都有针对偏移量的 + 1 +1 +1,参见技术1.2.
- 在实际应用中,神经网络的层数、每层的节点个数、每个节点使用的**函数,都对其性能产生重要影响。所谓的“调参师”,就是干这些活儿。
- 在本文所述的几个技术上进行改动,都可以做出新的工作。