CoderXL's Blog

Back

感知机#

感知机解决的是线性可分样本的二分类问题。

感知机和线性回归使用的神经网络比较像,但训练目标、训练算法、模型输出不同。感知机输出的是两个值,而线性回归输出的是连续的值;感知机只有在样本线性可分时才能完美分类;线性回归可以解析地找到全局最优解。二者都是多个输入得到一个输出的网络。

符号化定义#

给定输入 x\boldsymbol{x} 和感知机参数——包括权重 w\boldsymbol{w} 和偏移 bb,感知机输出:

o=σ(<w,x>+b),where  σ(x)={1,if x>0 ,1,otherwise .o=\sigma(\left<\boldsymbol{w},\boldsymbol{x}\right>+b),\quad \text{where }\ \sigma(x) = \left\{ \begin{aligned} &1,& \text{if } x>0\ ,\\ &-1, &\text{otherwise }. \end{aligned} \right.

其值域为 {+1,1}\{+1,-1\},可以将输入样本分为两类。

几何理解#

<w,x>+b=0\left<\boldsymbol{w},\boldsymbol{x}\right>+b=0 实际上表示输入空间 xRn\boldsymbol{x} \in \mathbb{R}^n 中的一个 n1n-1 维超平面(称为决策边界),其中 w\boldsymbol{w} 是该超平面的法向量,bb 则是一个相对于原点的偏移。

可以借助二维输入空间来思考:
p(x)=<w,x>+b=w1x1+w2x2+b=0p(\boldsymbol{x})=\left<\boldsymbol{w},\boldsymbol{x}\right>+b=w_1x_1+w_2x_2+b=0 表示 (x1,x2)R2(x_1,x_2) \in \mathbb{R}^2 中的一条直线。直线上的点满足 p=0p=0;与法向量同居直线一侧的点满足 p>0p>0;另一侧满足 p<0p<0。注意区分直线的方向向量和“法向量”,后者垂直于直线。
通过直线,我们把输入空间(二维平面)划分成两个部分(忽略在直线上的点),这可以解决一些分类问题。我们对 ppσ\sigma,可以把直线两侧的点对应到 {+1,1}\{+1,-1\} 的输出上去。
感知机的目的就是,找到平面中这样一条直线,使得对于给定的样本集,落在直线一侧的输入始终对应 +1+1 输出,另一侧的始终对应 1-1 输出。

不难看出,直线就是二维输入空间的“一维”超平面,因此推广到 nn 维,对应的超平面仍然会将输入空间划分为两部分,从而进行二分类。不难看出,并非所有样本数据集都可以被感知机完美分类,能被完美分类的称为“线性可分”。

训练过程#

initialize w=0, b=0.repeat until all satisfied:for each xi, yi in train dataset:if yi[<w,xi>+b]0:ww+yixibb+yielse:satisfied with xi,yi\begin{align*} &\text{initialize } \boldsymbol{w}=0,\ b=0.\\ &\text{repeat until all satisfied}:\\ &\qquad \text{for each } \boldsymbol{x}_i,~y_i \text{ in train dataset}:\\ &\qquad \qquad \text{if } y_i[\left<\boldsymbol{w},\boldsymbol{x}_i\right>+b] \le 0:\\ &\qquad \qquad \qquad \boldsymbol{w} \gets \boldsymbol{w}+y_i\boldsymbol{x}_i\\ &\qquad \qquad \qquad b \gets b+y_i\\ &\qquad \qquad \text{else}:\\ &\qquad \qquad \qquad \text{satisfied with } \boldsymbol{x}_i,y_i\\ \end{align*}

相当于对损失函数 (w,b)=max(0,y[<x,w>+b])\ell(\boldsymbol{w},b)=\max(0,-y[\left<\boldsymbol{x},\boldsymbol{w}\right>+b]) 进行批量大小为 11 的梯度下降。注意,损失函数并不一定要基于模型的最终输出,而只需要
常用的表示方式会将 bb 合并到 w\boldsymbol{w} 中:w[wb]\boldsymbol{w} \gets \left[\begin{matrix}\boldsymbol{w} \\ b\end{matrix}\right];相应地,对样本 x\boldsymbol{x} 补充一个 11x[x1]\boldsymbol{x} \gets \left[\begin{matrix}\boldsymbol{x}\\1\end{matrix}\right].

收敛定理#

不会证明捏

当样本满足以下条件时,感知机能收敛:

  • 数据在半径 rr
  • 余量 ρ\rho 分为两类
    y(xTw+b)ρy(\boldsymbol{x}^T\boldsymbol{w} +b)\ge \rho
    对于 w2+b21||w||^2+b^2\le 1
  • 感知机保证在 r2+1ρ2\displaystyle{r^2+1\over \rho^2} 步后收敛

多层感知机 MLP#

名字里包含“感知机”,实则差别不小!

多层感知机里面的每个节点,可以看作一个感知机。但这个感知机不是前述的、激活函数是 sign(x)\mathrm{sign}(x) 的、只输出 ±1\pm 1 的传统感知机,而是采用了连续可微的激活函数的广义感知机,又称人工神经元。这使得多层感知机的训练可以采用反向传播,而不局限在

单隐藏层单分类#

在输入与输出之间添加隐藏层,隐藏层神经元个数是一个超参数。

易错:隐藏层必须要加非线性激活函数,否则整个模型仍然是线性的,即导致模型层数坍缩,与单层感知机没有区别!

经典的激活函数:

  • Sigmoid 函数 sigmoid(x)=11+exp(x)\displaystyle{\mathrm{sigmoid}(x)={1\over 1+\exp(-x)}}
  • Tanh 函数 tanh(x)=1exp(2x)1+exp(2x)\displaystyle{\tanh(x)={1 - \exp(-2x) \over 1 + \exp(-2x)}}
  • ReLU 函数 ReLU(x)=max(x,0)\mathrm{ReLU}(x)=\max(x,0)
    ReLU 的好处是求导快!

单隐藏层多分类#

将单分类的输出层改为多个输出,然后使用 softmax。

多隐藏层#

超参数:

  • 隐藏层数
  • 每个隐藏层大小

炼丹秘方: 深度学习可以理解为对输入信息的压缩,因此对于复杂的输入,适合使用多层隐藏层、每层逐渐减少节点个数。有些时候,会在第一层稍微 expand 一些,也许有助于避免 overfit。

延伸:

  1. 初始化模型权重的时候,如果权重设置为全部相同,会导致对称性过高产生问题,即:接下来每一次更新,所有神经元的权重、梯度、更新方式都将完全一致,每一层等效于只有一个神经元,导致模型宽度坍缩,失去处理复杂数据的能力!因此应当使用随机噪声初始化。
  2. 不同的初始化噪声、不同的 batch 投喂顺序,模型最终收敛到的谷底是不同的。这些不同的谷底之间存在优劣之分,但是差距通常不大,而且深度学习更看重“平坦谷底”(flat minima)。
    “平坦”谷底泛化更好
    “陡峭”谷底更容易过拟合
    SGD 天然偏向平坦解(noise smoothing)。
    可以理解为:谷底的“深度”不重要,谷底的“宽度”重要 。
    因此多个终态并非完全等价,但大致都不错。
  3. 在大规模神经网络中,大量不同谷底的“训练误差是一致的,泛化误差差别也非常小”,因为
  4. 巨量参数意味着大量“等价”解
  5. 现代深度网络优化往往不掉入“坏的局部极小值”
    非凸中虽然有很多局部极小,但绝大多数局部极小都很接近全局最小(也就是都同样好)。 数学研究(Kawaguchi, 2016;杜绪鹏等人)指出:
    在大网络中,真正意义上的“坏局部极小”几乎不存在。只有 “鞍点” 是主要危险点。
  6. 不同初始化得出的解性能往往差不多
  7. 理论上来说,只需要一层足够宽的隐藏层,MLP 就可以以任意精度拟合任意非线性函数(万能近似定律),相比没有隐藏层的传统感知机(只能处理线性可分样本)实现了飞跃。这是因为,大量具有非线性激活函数的神经元可以拼出任意形状的边界,如同用微积分/割圆术进行近似一般。但是,这样的扁平化层会导致拟合所需的神经元数量呈指数级增长,且难以训练(同时让多个并行的神经元进行分工合作,在如此宽的权重空间中寻找全局最优,十分困难)。相比这种浅层学习,只需稍微增加层数,即可大大简化训练复杂度,这便是深度学习。
  8. 书接上回,由于 MLP 具有这种端到端拟合一切的潜力,但是实际训练起来很难找到解,因此深度学习的一大部分研究就是在找:如何在 MLP 的基础上调整网络结构、限制参数,借助人类的先验知识简化训练,以便使模型能更快更好地收敛。
感知机
https://blog.leosrealms.top/blog/2025-11-16-perceptron
Author CoderXL
Published at 2025年11月16日
Comment seems to stuck. Try to refresh?✨