跳到主要内容

深度前馈网络

一个深度前馈网络定义了一个映射 y=f(x,θ)y=f(x,\theta),并学习参数的数值,从而近似某个函数 ff。该参射由一序列函数的复合构成,例如 f(x)=f3(f2(f1(x)))f(x)=f_3(f_2(f_1(x))) 其中 xx 称为输入层,而 fif_i 称为第 i 层,ff 称为输出层。

除了输出层和输入层之外的其他层称为隐含层。

代价函数

大多数神经网络用最大似然训练,即

J(θ)=Ex,yp^datalogpmodel(yx)J(\theta)=-\mathbb E_{x,y\sim\hat p_{\mathrm data}} \log p_{\mathrm model} (y|x)

注意到如果有 p(yx)=N(y;f(x,θ),I)p(y|x)=N(y;f(x,\theta),I) 那么,这就对应于均方误差:

J(θ)=12Ex,yp^datayf(x;θ)2+constJ(\theta)=\frac{1}{2} \mathbb{E}_{\mathbf{x}, \mathbf{y} \sim \hat{p}_{\mathrm{data}}}\|\boldsymbol{y}-f(\boldsymbol{x} ; \boldsymbol{\theta})\|^{2}+\mathrm{const}

单元

线性单元

一个单元就是一层函数。线性单元是

y^=Wh+b\hat{\boldsymbol{y}}=\boldsymbol{W}^{\top} \boldsymbol{h}+\boldsymbol{b}

当这个线性单元是输出层时,它可以用来产生 Gauss 分布的均值:

p(yx)=N(y;y^,I)p(\boldsymbol{y} \mid \boldsymbol{x})=\mathcal{N}(\boldsymbol{y} ; \hat{\boldsymbol{y}}, \boldsymbol{I})

Logistic 单元

y=σ(wTh+b)y=\sigma(w^Th+b)

当这个单元是输出层时,它可以用来产生 Bernoulli 分布:

P(y=1x)=yP(y=1|x)=y

Softmax 单元

如果说 logistic 函数可以用来描述一个二值变量的分布,则 softmax 函数可以用于多值变量的函数:

softmax(z)i=exp(zi)jexp(zj)\operatorname{softmax}(\boldsymbol z)_{i}=\frac{\exp \left(z_{i}\right)}{\sum_{j} \exp \left(z_{j}\right)}

这个函数输出 nn 个数,每个元素介于 0 和 1 之间,并且整个向量的和为 1。

整流线性单元

使用激活函数 relu(x)=max{0,x}\operatorname{relu}(x)=\max\{0,x\},使得 h=relu(wTx+b)h=\operatorname{relu}(w^Tx+b) 几个重要的扩展:

  • 绝对值整流
  • 渗漏整流
  • 参数化整流

双曲正切

双曲正切函数 tanhz=2σ(z)1\tanh z=2\sigma(z)-1 一般推荐使用整流线性单元而不是其他,但必须使用这类函数,时,双曲正切通常比 logistic 要好,因为它更像是单位函数。

架构设计

万能近似定理

一个前馈神经网络如果具有线性输出层和至少一层具有任何一种挤压性质的激活函数(例如 logistic 函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的 Borel 可测函数。

深度问题

虽然单层神经网络可以表示这个函数,但一般不太现实,往往需要指数数量的隐藏单元。通过增加深度可以解决这一问题。