第十五讲 · 深度学习导论与多层感知机

Views: --

图像分类、目标检测、机器翻译、语音识别看起来完全不同,但都可以抽象成同一件事:给定输入 XX,学习一个函数 FF,输出任务需要的 YY

深度学习的重要变化,是把过去分开的“人工设计特征”和“训练分类器”合成一个可端到端优化的模型。网络直接从数据中学习中间表示,再完成最终任务。

一、数据驱动学习在学什么

监督学习给出训练样本

D={(xi,yi)}i=1n,\mathcal D=\{(x_i,y_i)\}_{i=1}^n,

希望学到 F(x)F(x) 或条件分布 P(YX)P(Y\mid X)。这里有两个容易混淆的目标:

  • 拟合:在训练样本上预测得准;
  • 泛化:对训练时没见过的新样本也预测得准。

把训练数据背下来只完成了拟合,不等于学到可推广的规律。模型容量、训练目标、正则化与数据覆盖共同决定泛化。

二、参数模型与非参数模型

课件用两种形式作对比。

非参数模型的预测显式依赖训练样本:

y=F(x;x1,x2,,xn).y=F(x;x_1,x_2,\ldots,x_n).

例如 K 近邻预测时必须保存并查询训练集。这里“非参数”并不表示真的没有参数,而是模型复杂度可随数据量增长,通常没有固定维度的参数向量概括全部训练数据。

参数模型用固定形式的参数 θ\theta 概括数据:

y=F(x;θ).y=F(x;\theta).

训练阶段从数据中求 θ\theta,推理阶段只需输入和参数。神经网络属于参数模型;即使参数多达数十亿,它的参数维度在模型结构确定后仍是固定的。

三、从一个神经元到多层感知机

一层线性变换先计算预激活值

a=Wx+b,a=Wx+b,

再通过逐元素非线性函数得到激活值

h=σ(a).h=\sigma(a).

课件以 Sigmoid 为例:

σ(a)=11+ea.\sigma(a)=\frac1{1+e^{-a}}.

将若干层串联,得到 LL 层多层感知机(Multi-layer Perceptron,MLP):

h(0)=x,a(l)=W(l)h(l1)+b(l),h(l)=σ(l)(a(l)),l=1,,L,y=h(L).\begin{aligned} h^{(0)}&=x,\\ a^{(l)}&=W^{(l)}h^{(l-1)}+b^{(l)},\\ h^{(l)}&=\sigma^{(l)}\bigl(a^{(l)}\bigr), \quad l=1,\ldots,L,\\ y&=h^{(L)}. \end{aligned}

也可以把偏置并入权重:给输入补一个恒为 11 的节点 x0=1x_0=1,对应连接权重就是偏置。但实际写矩阵形状时,把 bb 单独列出通常更清楚。

非线性为什么不可缺

若每层都没有激活函数,两层线性变换仍然只是一次线性变换:

W(2)(W(1)x+b(1))+b(2)=W~x+b~.W^{(2)}(W^{(1)}x+b^{(1)})+b^{(2)} =\widetilde W x+\widetilde b.

堆再多层也无法表达弯曲决策边界。非线性激活让网络能把简单特征逐层组合成复杂函数。

四、层、节点、权重与参数怎么数

设网络宽度为

d0d1dL.d_0\rightarrow d_1\rightarrow\cdots\rightarrow d_L.

ll 层的权重矩阵形状为 dl×dl1d_l\times d_{l-1},偏置长度为 dld_l,所以总参数量为

l=1L(dldl1+dl).\sum_{l=1}^L(d_l d_{l-1}+d_l).

课件给出两个具体网络。

例 1:3423\rightarrow4\rightarrow2

  • 非输入神经元:4+2=64+2=6
  • 权重:4×3+2×4=204\times3+2\times4=20
  • 偏置:4+2=64+2=6
  • 总参数:20+6=2620+6=26

例 2:34413\rightarrow4\rightarrow4\rightarrow1

  • 非输入神经元:4+4+1=94+4+1=9
  • 权重:4×3+4×4+1×4=324\times3+4\times4+1\times4=32
  • 偏置:4+4+1=94+4+1=9
  • 总参数:32+9=4132+9=41

网络“几层”存在两种口径:有的资料数所有带参数的层,有的只数隐藏层。最稳妥的表达是直接说“两个隐藏层”,不要只写一个可能有歧义的数字。

五、一个完整前向传播例子

取输入

x=(0,ln3)T,x=(0,\ln3)^{\mathsf T},

第一层参数为单位矩阵和零偏置:

W(1)=[1001],b(1)=(0,0)T.W^{(1)}= \begin{bmatrix} 1&0\\ 0&1 \end{bmatrix}, \qquad b^{(1)}=(0,0)^{\mathsf T}.

使用 Sigmoid 激活,第一层输出为

h(1)=σ(W(1)x+b(1))=(0.5,0.75)T.h^{(1)} =\sigma(W^{(1)}x+b^{(1)}) =(0.5,0.75)^{\mathsf T}.

第二层参数为

W(2)=(1,1),b(2)=0.W^{(2)}=(1,-1), \qquad b^{(2)}=0.

于是

a(2)=0.50.75=0.25,a^{(2)}=0.5-0.75=-0.25, y=σ(0.25)0.438.y=\sigma(-0.25)\approx0.438.

整个前向过程只有“矩阵乘法 → 加偏置 → 非线性”反复出现。训练要做的,就是根据预测与目标的差距,反过来调整每层的 W,bW,b;具体推导见下一讲:梯度下降与反向传播

六、MLP 的能力与代价

足够宽、带非线性激活的 MLP 可以近似很广的一类连续函数。但“能表示”不等于“容易学到”:参数过多会增加数据需求和计算量,结构没有利用任务先验也会很低效。

例如把图像所有像素直接接到全连接层,会忽略局部邻域和同一特征可出现在不同位置的规律。CNN 用局部连接与权重共享解决这个问题;RNN 则让参数沿时间复用,专门处理序列。

课件用“现代 CNN 约千万神经元、人类视觉皮层约数十亿神经元”形成数量直觉。两者的单元、连接方式和学习机制并不相同,所以这个对比只能说明规模,不能把人工神经元与生物神经元逐个等同。

七、常见误区与 sanity check

  • 参数量要同时计算权重和偏置;漏掉偏置会使课件两个例子分别少算 6 和 9。
  • 矩阵形状应满足 W(l)Rdl×dl1W^{(l)}\in\mathbb R^{d_l\times d_{l-1}},输出维数等于行数。
  • 多层线性映射仍是线性的;隐藏层之间必须有非线性才有意义。
  • 训练与推理不同:训练要计算损失和梯度,推理只做前向传播。
  • 参数模型不是“参数少的模型”,非参数模型也不是“完全没有参数”。区分点是模型复杂度是否由固定维参数概括。

评论