神经网络 二 从感知机到BP

脑洞大开的机器学习江湖史——一代天才感知机不敌VC维,BP横空出世惜败梯度消失

#感知机模型
话说1943年神经网络横空出世,作为机器学习的小门小派,一直无人问津。直到57年一代天才感知机(( ̄" ̄;))拜入神经网络门下,此门派才突然名声大振。

模型

感知机本身的模型比较简单,分类函数为
$$f(x)=sign(wx+b)\\ sign(x)=\begin{cases} 0& \text{x≥0}\\ 1& \text{x>0} \end{cases}$$

损失函数

根据上面的损失函数,我们可以发现对于正确分类的样本来说$y_i(wx_i+b)\ge0$对于错误分类样本来说,有$y_i(wx_i+b)<0$与SVM过程类似,可以将误分点到分类面的距离定义如下为 $d_i=-\dfrac{y_i(wx_i+b)}{\|w\|}$ 。我们的目标就是对所有的误分点进行优化,使得 $\sum_{x \in M} d_i$ 最小化。固定$\|w\|$化简后的目标函数为
$l(w,b) = -\sum_{x \in M} y_i(wx_i+b)$

##更新规则
还是求不出闭式解的老一套:梯度下降。对$w,b$分别求导,得:
$$\dfrac{\partial l(w,b)}{\partial w} = y_ix_i\\ \dfrac{\partial l(w,b)}{\partial b} = y_i$$
因此更新规则如下:
$$w = w + \alpha y_ix_i\\ b = b + \alpha x_i$$

收敛性证明

唯一一个感觉能证出来收敛的梯度下降。。。。

设存在参数$w^*,\|w^*\|=1$,存在 $\gamma > 0$使得下式成立

$$\begin{aligned} y_i(w^*x_i)\ge 0 \end{aligned}$$

同时我们认为所有的样本均满足$\|x\|\le R$。我们定义$w^k$为第k轮迭代时$w$的值,同时令$w^1=0$
对于第k轮的第i个样本,我们有下式成立:
$$\begin{aligned} w^{k+1}w^* &= {(w^k+y_ix_i)}^Tw^*\\ &= {w^k}^Tw^*+y_ix_i^Tw^*\\ &\ge {w^k}^Tw^* + \gamma \end{aligned}$$

所以我们通过k次迭代,我们可以得到${w^{k+1}}^Tw^*\ge k \gamma$ 。故有 $\|w^{k+1}\|\|w^*\|\ge {w^{k+1}}^T w^* \ge k \gamma$,由前面的假设知$\|w^*\|=1$故有$\|w^{k+1}\|\ge k \gamma$

同时,对于错误分类的样本t,我们有下式成立:
$$\begin{aligned} {\|w^{k+1}\|}^2 &= {\|w^k\|+y_tx_t}^2\\ &={\|w^k\|}^2 + {y_t}^2{\|x_t\|}^2 + 2y_tx_t^Tw^k\\ &\le {\|w^k\|}^2 + R^2 + 2y_tx_t^Tw^k\\ &\le {\|w^k\|}^2 + R^2 \end{aligned}$$
经过k轮迭代后,可知${\|w^{k+1}\|}^2 \le kR^2$
故我们有
$$\begin{aligned} k^2\gamma^2 \le \|w^{k+1}\| \le k R^2 \end{aligned}$$
$k \le \dfrac{R^2}{\gamma^2}$

##问题
作为在上个世纪60年代大红大紫的模型,当年好像有人已经用感知机做出了很简单的手写识别。但是感知机的主要问题是只能处理可以完全二分的样本,也就是其VC维是1。作为一个连异或都做不了的模型,要你何用!╭∩╮(︶︿︶)╭∩╮所以感知机就这么被甩了。。。。一代天骄惨死于VC维啊。。。。

#BP神经网络
在感知机被VC维戳中死穴之后,作为小门小派后继无人,神经网络这一派迅速衰败。直到近20年后,乡土少年闰土,啊,不,BP拜入神经网络门下,该门派才再度兴起,又掀起了江湖的一番腥风血雨。。。。。。

##一些基础定义
hexo放图太麻烦了,所以就不放图了,简单说一下= =

  • 神经元

    每个神经元都有多个输入和一个输出,输入为上一层的节点的输出,其使用激活函数根据输入计算输出

  • 激活函数

    如上文所说,一个多维数据到一维数据的映射函数,但是需要满足导数在0-1之间。后面会说具体原因

一些奇怪的符号

终于到了要定义符号的高度了٩(๑ᵒ̷͈᷄ᗨᵒ̷͈᷅)و

  • $x,y,z$ 样本,神经网络的输出,label
  • $w_{ih}$ 输入层到隐层的权重
  • $w_{ho}$ 隐层到输出层的权重
  • $x_h$ 隐层的输入
  • $J$ 损失函数
  • $f$ 激活函数
  • $net$ 每个神经元激活函数的输入,即$net=w^Tx+b$

##BP算法
BP就是个一说你就觉得这么SB的办法谁想不出来的东西= =虽然说是误差的反向传导,也就一个链式求导而已啊。。。。
简单写下链式求导法则吧
$$\begin{aligned} \frac{\partial J}{\partial w_{ho}} = \frac{\partial J}{\partial y} \frac{\partial y}{\partial f}\frac{\partial f}{\partial net_{ho}}\frac{\partial net_{ho}}{\partial w_{ho}}=J'f'x_h\\ \frac{\partial J}{\partial w_{ih}} = \frac{\partial J}{\partial net_{ho}} \frac{\partial net_{ho}}{\partial x_h}\sum\frac{\partial x_h}{\partial net_{ih}}\frac{\partial net_{ih}}{\partial x}=J'f'\sum w_{ho}f'x \end{aligned}$$

求和存在的原因是隐层所有的 $x_h$ 都有对 $w_{ih}$ 的导数。对于不同的 $J,f$ ,直接套上去就好了。
我们可以看到层数越高,$f'$ 指数越高。因此如果 $f'$ 大于1,那么底层的指数就爆炸了,这个网络根本无法更新,所以只能在0到1之间。这样导致了梯度随层数指数级下降,导致了梯度消失的情况出现,使得神经网络难以训练。虽然是难以,总比无法好。所以后面针对于神经网络的训练问题,各种正常的,奇葩的东西开始纷纷出现。。。。