感知机#
感知机解决的是线性可分样本的二分类问题。
感知机和线性回归使用的神经网络比较像,但训练目标、训练算法、模型输出不同。感知机输出的是两个值,而线性回归输出的是连续的值;感知机只有在样本线性可分时才能完美分类;线性回归可以解析地找到全局最优解。二者都是多个输入得到一个输出的网络。
符号化定义#
给定输入 x 和感知机参数——包括权重 w 和偏移 b,感知机输出:
o=σ(⟨w,x⟩+b),where σ(x)={1,−1,if x>0 ,otherwise .
其值域为 {+1,−1},可以将输入样本分为两类。
几何理解#
⟨w,x⟩+b=0 实际上表示输入空间 x∈Rn 中的一个 n−1 维超平面(称为决策边界),其中 w 是该超平面的法向量,b 则是一个相对于原点的偏移。
可以借助二维输入空间来思考:
设 p(x)=⟨w,x⟩+b=w1x1+w2x2+b=0 表示 (x1,x2)∈R2 中的一条直线。直线上的点满足 p=0;与法向量同居直线一侧的点满足 p>0;另一侧满足 p<0。注意区分直线的方向向量和“法向量”,后者垂直于直线。
通过直线,我们把输入空间(二维平面)划分成两个部分(忽略在直线上的点),这可以解决一些分类问题。我们对 p 取 σ,可以把直线两侧的点对应到 {+1,−1} 的输出上去。
感知机的目的就是,找到平面中这样一条直线,使得对于给定的样本集,落在直线一侧的输入始终对应 +1 输出,另一侧的始终对应 −1 输出。
不难看出,直线就是二维输入空间的“一维”超平面,因此推广到 n 维,对应的超平面仍然会将输入空间划分为两部分,从而进行二分类。不难看出,并非所有样本数据集都可以被感知机完美分类,能被完美分类的称为“线性可分”。
训练过程#
initialize w=0, b=0.repeat until all satisfied:for each xi, yi in train dataset:if yi[⟨w,xi⟩+b]≤0:w←w+yixib←b+yielse:satisfied with xi,yi
相当于对损失函数 ℓ(w,b)=max(0,−y[⟨x,w⟩+b]) 进行批量大小为 1 的梯度下降。注意,损失函数并不一定要基于模型的最终输出,而只需要
常用的表示方式会将 b 合并到 w 中:w←[wb];相应地,对样本 x 补充一个 1:x←[x1].
收敛定理#
不会证明捏
当样本满足以下条件时,感知机能收敛:
- 数据在半径 r 内
- 余量 ρ 分为两类
y(xTw+b)≥ρ
对于 ∣∣w∣∣2+b2≤1
- 感知机保证在 ρ2r2+1 步后收敛
多层感知机 MLP#
名字里包含“感知机”,实则差别不小!
多层感知机里面的每个节点,可以看作一个感知机。但这个感知机不是前述的、激活函数是 sign(x) 的、只输出 ±1 的传统感知机,而是采用了连续可微的激活函数的广义感知机,又称人工神经元。这使得多层感知机的训练可以采用反向传播,而不局限在
单隐藏层单分类#
在输入与输出之间添加隐藏层,隐藏层神经元个数是一个超参数。
易错:隐藏层必须要加非线性激活函数,否则整个模型仍然是线性的,即导致模型层数坍缩,与单层感知机没有区别!
经典的激活函数:
- Sigmoid 函数 sigmoid(x)=1+exp(−x)1
- Tanh 函数 tanh(x)=1+exp(−2x)1−exp(−2x)
- ReLU 函数 ReLU(x)=max(x,0)
ReLU 的好处是求导快!
单隐藏层多分类#
将单分类的输出层改为多个输出,然后使用 softmax。
多隐藏层#
超参数:
炼丹秘方:
深度学习可以理解为对输入信息的压缩,因此对于复杂的输入,适合使用多层隐藏层、每层逐渐减少节点个数。有些时候,会在第一层稍微 expand 一些,也许有助于避免 overfit。
延伸:
- 初始化模型权重的时候,如果权重设置为全部相同,会导致对称性过高产生问题,即:接下来每一次更新,所有神经元的权重、梯度、更新方式都将完全一致,每一层等效于只有一个神经元,导致模型宽度坍缩,失去处理复杂数据的能力!因此应当使用随机噪声初始化。
- 不同的初始化噪声、不同的 batch 投喂顺序,模型最终收敛到的谷底是不同的。这些不同的谷底之间存在优劣之分,但是差距通常不大,而且深度学习更看重“平坦谷底”(flat minima)。
“平坦”谷底泛化更好
“陡峭”谷底更容易过拟合
SGD 天然偏向平坦解(noise smoothing)。
可以理解为:谷底的“深度”不重要,谷底的“宽度”重要 。
因此多个终态并非完全等价,但大致都不错。
- 在大规模神经网络中,大量不同谷底的“训练误差是一致的,泛化误差差别也非常小”,因为
- 巨量参数意味着大量“等价”解
- 现代深度网络优化往往不掉入“坏的局部极小值”
非凸中虽然有很多局部极小,但绝大多数局部极小都很接近全局最小(也就是都同样好)。
数学研究(Kawaguchi, 2016;杜绪鹏等人)指出:
在大网络中,真正意义上的“坏局部极小”几乎不存在。只有 “鞍点” 是主要危险点。
- 不同初始化得出的解性能往往差不多
- 理论上来说,只需要一层足够宽的隐藏层,MLP 就可以以任意精度拟合任意非线性函数(万能近似定律),相比没有隐藏层的传统感知机(只能处理线性可分样本)实现了飞跃。这是因为,大量具有非线性激活函数的神经元可以拼出任意形状的边界,如同用微积分/割圆术进行近似一般。但是,这样的扁平化层会导致拟合所需的神经元数量呈指数级增长,且难以训练(同时让多个并行的神经元进行分工合作,在如此宽的权重空间中寻找全局最优,十分困难)。相比这种浅层学习,只需稍微增加层数,即可大大简化训练复杂度,这便是深度学习。
- 书接上回,由于 MLP 具有这种端到端拟合一切的潜力,但是实际训练起来很难找到解,因此深度学习的一大部分研究就是在找:如何在 MLP 的基础上调整网络结构、限制参数,借助人类的先验知识简化训练,以便使模型能更快更好地收敛。