深度神经网络
前面一章我们讨论了只有一个隐藏层的浅层神经网络。本章,我们将转向深度神经网络,这种网络拥有多个隐藏层。无论是浅层还是深层网络,当使用 ReLU (Rectified Linear Unit) 激活函数时,它们都能实现从输入到输出的分段直线式的变换。
浅层神经网络的能力随着隐藏单元数量的增加而提升。实际上,如果隐藏单元足够多,这些网络甚至能够模拟高维空间中极其复杂的函数。但是,对于某些特定的函数,所需的隐藏单元数量可能非常庞大,以至于实际应用变得不现实。相比之下,深度神经网络能够在相同数量的参数条件下创造出更多的线性判断区域。因此,从实际应用的角度来看,深度网络能够描述更加广泛的函数类型。
4.1 组合神经网络
为了更深入地理解深度神经网络的行为特征,我们首先考虑将两个浅层网络进行组合,使得第一个网络的输出成为第二个网络的输入。设想两个各有三个隐藏单元的浅层网络(见图 4.1a)。第一个网络接收输入 x,并产生输出 y,其定义如下:
h1=a[θ10+θ11x]h2=a[θ20+θ21x]h3=a[θ30+θ31x](4.1) \begin{align} h_1 = a[\theta_{10}+\theta_{11}x] \\ h_2 = a[\theta_{20}+\theta_{21}x] \\ h_3 = a[\theta_{30}+\theta_{31}x] \end{align} \tag{4.1} h1=a[θ10+θ11x]h2=a[θ20+θ21x]h3=a[θ30+θ31x](4.1)
以及
y=ϕ0+ϕ1h1+ϕ2h2+ϕ3h3(4.2) y = \phi_0 + \phi_1h_1 + \phi_2h_2 + \phi_3h_3 \tag{4.2} y=ϕ0+ϕ1h1+ϕ2h2+ϕ3h3(4.2)
第二个网络以 y 作为输入,产生输出 y′,定义如下:
h1′=a[θ10′+θ11′y]h2′=a[θ20′+θ21′y]h3′=a[θ30′+θ31′y](4.3) \begin{align} h^\prime_1 = a[\theta^\prime_{10}+\theta^\prime_{11}y] \\ h^\prime_2 = a[\theta^\prime_{20}+\theta^\prime_{21}y] \\ h^\prime_3 = a[\theta^\prime_{30}+\theta^\prime_{31}y] \end{align} \tag{4.3} h1′=a[θ10′+θ11′y]h2′=a[θ20′+θ21′y]h3′=a[θ30′+θ31′y](4.3)
以及
y′=ϕ0′+ϕ1′h1′+ϕ2′h2′+ϕ3′h3′(4.2) y^\prime = \phi^\prime_0 + \phi^\prime_1h^\prime_1 + \phi^\prime_2h^\prime_2 + \phi^\prime_3h^\prime_3 \tag{4.2} y′=ϕ0′+ϕ1′h1′+ϕ2′h2′+ϕ3′h3′(4.2)
在使用 ReLU(线性整流单元)激活函数的情况下,该模型描述了一系列分段线性函数。然而,与拥有六个隐藏单元的浅层网络相比,这种组合网络的线性区域数量潜在地更多。例如,若第一个网络产生三个正负斜率交替的区域(见图 4.1b),这意味着三个不同范围的 x 值被映射到同一输出范围 y ∈ [−1, 1]。接下来,从该 y 范围到 y′ 的映射被重复应用三次。最终的效果是,第二个网络定义的函数被复制三次,从而形成九个线性区域。这一原理在更高维度同样适用(见图 4.2)。
图 4.1: 结合了各含三个隐藏单元的两个单层网络。a) 第一个网络的输出 y 成为第二个网络的输入。b) 第一个网络通过一个包含三个线性区域的函数,将输入 x(取值范围为 [−1, 1])映射到输出 y(取值范围为 [−1, 1])。这些线性区域的设计目的是让它们的斜率符号交替出现。因此,多个输入 x(以灰色圆圈表示)可以被映射到同一个输出 y(以青色圆圈表示)。c) 第二个网络定义了一个包含三个线性区域的函数,它将输入 y 转换为输出 y′(即将青色圆圈映射到棕色圆圈)。d) 当这两个函数结合后,它们共同作用的结果是:(i) 第一个网络能将三个不同的输入 x 映射到任意一个特定的输出 y,以及 ((ii) 第二个网络以相同的方式处理这些输出;这导致第二个网络在面板 (c) 中定义的函数被重复三次,并根据面板 (b) 中各区域的斜率不同,进行了相应的翻转和缩放处理。
图 4.2: 结合了两个神经网络,输入为二维。a) 第一个网络(源自图 3.8)包含三个隐藏单元,它接收两个输入 x1 和 x2,并输出一个标量 y。这个输出随后被送入一个含有两个隐藏单元的第二网络,生成输出 y′。b) 第一个网络构建的函数包含七个线性区域,其中一个区域保持水平。c) 第二个网络定义了一个在 y ∈ [−1, 1] 范围内包含两个线性区域的函数。d) 当这两个网络结合时,第一个网络中的六个非平坦区域每个都被第二网络划分为两个新的区域,总共形成了 13 个线性区域。
图 4.3: 深层网络用于折叠输入空间。a) 对于图 4.1 中的第一个网络,一种理解方式是它把输入空间折叠,使其叠加在自身之上。b) 第二个网络则在这个已被折叠的空间上施加其功能。c) 最终的输出结果,是在再次展开这些折叠后得到的。
组合网络的另一种思考方式是,第一个网络将输入空间 x 折叠回自身,使得多个输入产生相同的输出。随后,第二个网络在所有重叠点上应用同一函数,实现了函数在这些点上的复制(见图 4.3)。
4.2 从组合网络到深层网络
上一节我们展示了通过将一个浅层神经网络的输出传递给另一个网络,可以创建复杂的函数。现在我们将说明,这实际上是一个包含两个隐藏层的深层网络的特例。
第一个网络的输出(y=ϕ0+ϕ1h1+ϕ2h2+ϕ3h3y = \phi_0 + \phi_1h_1 + \phi_2h_2 + \phi_3h_3y=ϕ0+ϕ1h1+ϕ2h2+ϕ3h3)是隐藏单元激活值的线性组合。第二个网络的初始操作(根据方程 4.3,我们计算 θ10′+θ11′y、θ20′+θ21′y和θ30′+θ31′y\theta'_{10}+\theta'_{11}y、\theta'_{20}+θ'_{21}y 和 \theta'_{30}+\theta'_{31}yθ10′+θ11′y、θ20′+θ21′y和θ30′+θ31′y)是对第一个网络输出的线性函数。将一个线性函数应用于另一个线性函数,结果仍然是线性函数。将 y 的表达式代入方程 4.3,可以得到:
h1′=a[ψ0+θ11ψ1]=a[ψ0+θ11ϕ0+θ11ϕ1h1+θ11ϕ2h2+θ11ϕ3h3]h2′=a[ψ0+θ21ψ1]=a[ψ0+θ21ϕ0+θ21ϕ1h1+θ21ϕ2h2+θ21ϕ3h3]h3′=a[ψ0+θ31ψ1]=a[ψ0+θ31ϕ0+θ31ϕ1h1+θ31ϕ2h2+θ31ϕ3h3](4.5) \begin{align} h'_1 = a[\psi_0 + \theta_{11} \psi_1] = a[\psi_0 + \theta_{11} \phi_0 + \theta_{11} \phi_1 h_1 + \theta_{11} \phi_2 h_2 + \theta_{11} \phi_3 h_3] \\ h'_2 = a[\psi_0 + \theta_{21} \psi_1] = a[\psi_0 + \theta_{21} \phi_0 + \theta_{21} \phi_1 h_1 + \theta_{21} \phi_2 h_2 + \theta_{21} \phi_3 h_3] \\ h'_3 = a[\psi_0 + \theta_{31} \psi_1] = a[\psi_0 + \theta_{31} \phi_0 + \theta_{31} \phi_1 h_1 + \theta_{31} \phi_2 h_2 + \theta_{31} \phi_3 h_3] \end{align} \tag{4.5} h1′=a[ψ0+θ11ψ1]=a[ψ0+θ11ϕ0+θ11ϕ1h1+θ11ϕ2h2+θ11ϕ3h3]h2′=a[ψ0+θ21ψ1]=a[ψ0+θ21ϕ0+θ21ϕ1h1+θ21ϕ2h2+θ21ϕ3h3]h3′=a[ψ0+θ31ψ1]=a[ψ0+θ31ϕ0+θ31ϕ1h1+θ31ϕ2h2+θ31ϕ3h3