深度学习相关的模式识别知识

#深度学习相关的模式识别知识

本文记录了博主学习《模式识别:算法及实现方法》一书中总结的与深度学习相关的知识点,如果有兴趣建议阅读原著。更新于2018.09.15。
附书的信息:书名《模式识别:算法及实现方法》,英文名《Pattern Recognition: an Algorithmic Approach》,原著作者M.Narasimaha Murty和V.Susheela Devi,翻译作者王振永。出版时间2017.10.1。

更多内容,欢迎加入星球讨论。

文章目录


##第一章 导论

书中对模式识别的定义:

模式识别可以定义为一种基于已知知识或者依据模式表述所抽象出的统计信息进行数据分类的方法。

也就是说模式识别是一种分类方法,目前博主所研究的深度学习就属于模式识别的一种手段。因此,想要真正在深度学习的方向上走得更远,模式识别的基础知识是必不可少的。

书中推荐了模式上识别相关应用可以参考的文献:

Pattern Recognition
IEEE Transactions on Pattern Analysis and Machine Intelligence

以及一些数据库:

用于训练分类算法的 UC Irvine的机器学习库 (博主搜索书中提供的网址提示数据库不存在,因此附上搜索到的另一个网址)
用于数据挖掘的大型数据库UCI KDD数据库 和 KDNuggets数据库

解决模式识别问题最主要的两种理论框架是统计模式识别和结构模式识别。其中,统计模式识别应用更广泛,因为在大多数实际问题中,都需要处理有噪声数据和不确定性,而统计和概率在这方面更有优势。


##第二章 模式集合的表征

模式是一个物理对象或抽象概念,也就是通常深度学习中所说的特征的组合。这种应用不同模式特征组合起来的描述就是模式。
模式可以表示为:

**1. 矢量:**矢量中的每个元素代表模式的一个属性,该元素就存储其对应属性下所描述物体的值。抽象理解的话,深度学习中所学到的“特征”就是隐含属性下各个目标所对应的值。学习的也就是这样一个矢量矩阵。

**2. 字符串:**字符串可以看作某种语言中的句子,如一个DNA序列或蛋白质序列(例如GAAGTCCAG…)。

**3. 逻辑类型:**也就是用逻辑运算的组合描述模式: ( x 1 = a 1 . . a 2 ) ∧ ( x 2 ) = b 1 . . b 2 ∧ ⋅ ⋅ ⋅ (x_1 = a_1 .. a_2)\wedge (x_2) = b_1 .. b_2 \wedge \cdot\cdot\cdot (x1=a1..a2)(x2)=b1..b2。比如一个球可以描述为 ( 颜 色 = 红 ∨ 白 ) ∧ ( 质 地 = 皮 革 ) ∧ ( 形 状 = 球 体 ) (颜色=红 \vee 白)\wedge (质地 = 皮革)\wedge(形状 = 球体) ===

**4. 模糊集和粗糙集:**粗糙集用于描述无法精确描述的模式,通常由上近似和下近似给一个范围。这一种方式比较复杂,博主不是数学系出身,无法充分理解。好在目前还没有遇到需要用模糊的方式描述的模式,因此这一部分暂时略过,只给出粗略描述。

**5. 树和图:**树或图中的每一个节点都可以表示一个或多个模式,例如最小生成树、德劳奈树、R树和k-d树等。博主目前主攻卷积神经网络,对于树和图的深入学习后面用到再进行。

--------------------------------------------------------------------

###相似度度量方法
书中详细阐述了基于距离的度量方法、基于加权距离的度量方法、非度量相似函数、编辑距离、互近邻距离、概念内聚性、核函数这7中度量方法,博主从目前接触到的深度学习应用出发,着重看了其中的几种。

**需要注意的是,**这里所说的是用于度量模式是否相似的方法,要与深度学习中经常用到的损失函数区分开。相似度量只是判断相似性,并未对是否相似作出处罚;而损失函数则是将这种相似性量化,惩罚不相似的部分。

1. 基于距离的度量方法
距离函数可以是量化的也可以是非量化的,量化的方法应当具有:

(1) 正自反性: d ( x , x ) = 0 d(x,x) = 0 d(x,x)=0
(2) 对称性: d ( x , y ) = d ( y , x ) d(x,y) = d(y,x) d(x,y)=d(y,x)
(3) 三角不等式: d ( x , y ) ≤ d ( x , z ) + d ( z , y ) d(x,y)\leq d(x,z)+d(z,y) d(x,y)d(x,z)+d(z,y)

常用的距离计量闵科夫斯基计量形式为

d m ( X , Y ) = ( ∑ k = 1 d ∣ x k − y k ∣ m ) 1 m d^m(X,Y) = (\sum_{k=1}^d{|x_k-y_k|^m})^\frac{1}{m} dm(X,Y)=(k=1dxkykm)m1

特别地,当 m m m为1时,其称为曼哈顿距离或者 L 1 L_1 L1距离;当 m m m为2时就是最常见的欧氏距离,即 L 2 L_2 L2距离。
马氏距离也是一种常见的距离计量:

d 2 ( X , Y ) = ( X − Y ) T Σ − 1 ( X − Y ) d^2(X,Y) = (X-Y)^T\Sigma^{-1}(X-Y) d2(X,Y)=(XY)TΣ1(XY)
其中 Σ \Sigma Σ是协防差矩阵。

注:在深度学习中,博主遇到的方法经常应用L1损失比较估计与真值之间的误差,从而作为反向传播的依据。

2. 基于加权距离的度量方法

上面这种方法是将所有的属性一视同仁地计算两个模式的相似度,但是有些情况下期望给予某个属性更多的关注,就可以在它们的值上加权重。形式如下:

d ( X , Y ) = ( ∑ k = 1 d w k × ( x k − y k ) m ) 1 m d(X,Y) = (\sum_{k=1}^d{w_k}\times (x_k - y_k)^m)^{\frac{1}{m}} d(X,Y)=(k=1dwk×(xkyk)m)m1
其中 w k w_k wk是第 k k k维(特征)相关的权重。

书中还提到了用于判断两种形状是否相似的豪斯多夫距离,此处因与博主所从事的深度学习任务无关,故省略。

3. 非度量相似函数

这类相似函数不遵从三角不等式也不遵从对称性,在图像及数据串的处理中往往十分有效。
**k-median距离:**如果 X = ( x 1 , x 2 , ⋅ ⋅ ⋅ , x n ) , Y = ( y 1 , y 2 , ⋅ ⋅ ⋅ , y n ) X=(x_1,x_2,\cdot\cdot\cdot,x_n), Y = (y_1,y_2,\cdot\cdot\cdot,y_n) X=(x1,x2,,xn),Y=(y1,y2,,yn),那么

d ( X , Y ) = k − m e d i a n { ∣ x 1 − y 1 ∣ , ⋅ ⋅ ⋅ , ∣ x n − y n ∣ } d(X,Y) = k-median\{|x_1-y_1|,\cdot\cdot\cdot,|x_n-y_n|\} d(X,Y)=kmedian{x1y1,,xnyn}
其中k-median运算符返回排序的差分矢量的第 k k k个值。

余弦相似度:

S ( X , Y ) = X t Y ∥ X ∥ ∥ Y ∥ S(X,Y) = \frac{X^tY}{\Vert X\Vert \Vert Y\Vert} S(X,Y)=XYXtY

发散度距离(KL距离):
这是在深度学习的实际应用中可能用到哦啊的距离,它是一个从“真实”概率分布 p p p到“目标”概率分布 q q q的自然距离函数。其不具有对称性。对于离散概率分布,如果 p = p 1 , ⋅ ⋅ ⋅ , p n p={p_1,\cdot\cdot\cdot,p_n} p=p1,,pn q = q 1 , ⋅ ⋅ ⋅ , q n q = {q_1,\cdot\cdot\cdot,q_n} q=q1,,qn,那么KL距离定义为:

K L ( p , q ) = Σ i p i l o g 2 ( p i q i ) KL(p,q)=\Sigma_ip_ilog_2(\frac{p_i}{q_i}) KL(p,q)=Σipilog2(qipi)

对于连续概率密度,用积分代替求和。

4. 互近邻距离:

两个模式 A A A B B B之间的相似度为
S ( A , B ) = f ( A , B , ε ) S(A,B)=f(A,B,\varepsilon) S(A,B)=f(A,B,ε)
其中 ε \varepsilon ε为一组相互邻近的模式,称为语境,相当于周围的点。对于每一个数据点,所有其他数据点按照某种距离递增的顺序从1到 N − 1 N-1 N1进行标号,与之最近的记为1,最远的记为 N − 1 N-1 N1
如果用 N N ( u , v ) NN(u,v) NN(u,v)来表示数据带你 v v v对于 u u u的标号,则互近邻距离(MND)记为:
M N D ( u , v ) = N N ( u , v ) + N N ( v , u ) MND(u,v)=NN(u,v)+NN(v,u) MND(u,v)=NN(u,v)+NN(v,u)

互近邻距离自反、对称,但不满足三角不等式。

5. 核函数:
核函数可以用来描述模式 x x x y y y之间的距离。

**多项式核函数:**多项式核函数可以将输入空间中的线性相关矢量转换为核空间的线性无关矢量。

K ( x , y ) = φ ( x ) t φ ( y ) = ( x t y + 1 ) 2 K(x,y)=\varphi(x)^t\varphi(y)=(x^ty+1)^2 K(x,y)=φ(x)tφ(y)=(xty+1)2
其中, φ ( x ) = ( x 1 2 , x 2 2 , 1 , 2 x 1 x 2 , 2 x 1 , 2 x 2 ) \varphi(x)=(x_1^2,x_2^2,1,\sqrt2x_1x_2,\sqrt2x_1,\sqrt2x_2) φ(x)=(x12,x22,1,2 x1x2,2 x1,2 x2)

**径向基核函数:**径向基核函数的输出依赖于 x x x y y y之间的欧氏距离。

采用RBF核如下:
K ( x , y ) = e x p − ∥ x − y ∥ 2 2 σ 2 K(x,y)=exp^{\frac{-\Vert x-y\Vert^2}{2\sigma^2}} K(x,y)=exp2σ2xy2

--------------------------------------------------------------------

###模式的尺寸
在深度学习中,为了保证样本具有相同的“权力”,通常需要进行一定的前期数据处理,从而解决样本长度、大小不一致的问题。解决的方式可以是进行数据的归一化,也可以选择合适的相似度度量。

--------------------------------------------------------------------

###特征提取与特征选择
特征提取对于图像数据非常重要,博主接触过的大部分处理图像的神经网络总有一部分是用来提取图像特征,从而方便进一步计算的。书中介绍了Fisher线性判别法和主分量分析法。这两种数学方法虽然效果很好,但是目前,特征提取的工作越来越多地被某种结构的神经网络隐性地习得,因此就不详细记录了。

用于分类的特征并不总是有意义的,移除那些对于分类无用的特征,可能会得到更高的分类精度。书中介绍了穷举搜索法、分支定界搜索法、最优特征选择法、顺序选择法、顺序浮动选择法、最大最小特征选择法、随机搜索法、人工神经网络等方法。其中,人工神经网络方法就类似于在神经网络训练过程中的dropout,也就是通过剔除一部分神经元的方法缓解过拟合等问题。介于其他方法与深度学习相关性有限,需要的话可自行研究。

--------------------------------------------------------------------

###分类分析方法
在使用分类器进行分类任务之前,有必要评估它的表现。尽管现在大多应用神经网络直接习得分类器,但是这些传统方法的思想在博主看来是很有启发意义的,因此也简要记录在这里。

需要考虑的分类器参数:

  1. 分类器的准确性
  2. 设计时间和分类时间
  3. 所需要的空间
  4. 解释说明能力
  5. 噪声容限

为了考察分类器的表现,可以评估训练集本身,也可以用新的数据。这对于神经网络也是适用的。不同的校验方法有:

  1. 保持法:训练集被分为两个子集,一个用于训练,一个用于测试。通常采用的比例有2/3,1/2。
  2. 随机子抽样:在这种方法中,保持法被反复应用数次,每次用不同的训练数据和校验次数。如果这个过程重复了 k k k次,那么整体精确度为: a c c o v e r a l l = 1 k ∑ i = 1 k a c c i acc_{overall}=\frac{1}{k}\sum_{i=1}^k{acc_i} accoverall=k1i=1kacci
  3. 交叉校验:每个样本用同样多的次数训练和测试,比如双重交叉检验,即将数据集分成等同的两个子集,用其中一个训练,另一个测试,再交换。如果分成 k k k组,则称为留一交叉法,即每次仅保留其中之一作为测试集。这种方法在神经网络的训练过程中非常常见。
  4. 拔靴法:随机从样本集合中抽取用作训练,但并不删除,其余用于测试。

##第七章 支持向量机

支持向量机(SVM)是一个二进制分类器,其利用训练序列的适当子集在多维空间分离出一个决策边界,这个子集的元素称为支持向量机。几何上,支持向量机是最接近决策边界的训练模式。

--------------------------------------------------------------------

###线性判别函数
线性判别函数可以用来判别两个或多个类别的模式。将分割两类数据的直线抽象成函数,有:

f ( x ) = w 1 x 1 + w 2 x 2 + b = 0 f(x)=w_1x_1+w_2x_2+b=0 f(x)=w1x1+w2x2+b=0

运用这种表达方式,可以灵活处理模式和多维空间下的线性决策边界的问题。例如,在一个 d d d维空间,决策边界是一个超平面,可以表示为:

f ( x ) = w t x + b = 0 f(x)=w^tx+b=0 f(x)=wtx+b=0
其中 w w w x x x d d d维向量。

从某种意义上讲, b b b决定决策边界的位置,也决定着决策边界偏离原点的程度; w w w决定决策边界的方向。这个结论对于高维空间同样适用,此时决策边界是一个超平面,且 w w w与决策边界正交,方向指向正半空间。这意味着,任意位于正半平面的模式 x x x都会与 w w w θ \theta θ角,且 − 9 0 o < θ < 9 0 o -90^o\lt\theta\lt90^o 90o<θ<90o,因此 c o s θ > 0 cos\theta\gt0 cosθ>0

另一个有用的概念是点 x x x到决策平面之间的距离。任意一点 x x x均可以表示成两个向量的和,其中一个向量平行于决策边界,另一个向量与决策边界正交。即

x = x b + x o x=x_b+x_o x=xb+xo
其中 x b x_b xb x x x在决策边界上的投影, x o x_o xo是正交分量。

考虑到 w w w也与决策边界正交并且指向正半空间, x o x_o xo也可以携程 p w ∣ w ∣ p\frac{w}{\vert w\vert} pww的形式,其中 p p p是实数。当 x x x属于正半空间内的模式时, p p p为正数;反之,当 x x x属于负半空间内的模式时, p p p为负数。由此可以得出以下结论:

KaTeX parse error: No such environment: split at position 7: \begin{̲s̲p̲l̲i̲t̲}̲f(x) &=&w^tx+b=…

从上式可以得出

p = w t x + b ∥ w ∥ p=\frac{w^tx+b}{\Vert w\Vert} p=wwtx+b

p p p为法线或点 x x x到决策边界的最短距离。
为了能够以齐次形式表示决策边界,可以将 d d d为空间扩展到 d + 1 d+1 d+1维空间,此时有

z = ( w b ) z= \left(\begin{array}{c} w\\ b \end{array}\right) z=(wb)

x ′ = ( x 1 ) x'= \left(\begin{array}{c} x\\ 1 \end{array}\right) x=(x1)

**后面用 w w w代表 z z z。**在二分类问题中,可以通过归一化使所有模式均处于正半平面。这是通过将位于负半平面的每个模式的特征值由其相反数来代替,包括第 d + 1 d+1 d+1项。

--------------------------------------------------------------------

###学习线性判别函数
前面已经说过,令模式空间的维数为 d d d,在非齐次的情况下( b ≠ 0 b\neq 0 b̸=0), w w w d + 1 d+1 d+1维向量,第 d + 1 d+1 d+1个分量是 b b b。相应地,齐次情况下, w w w的第 d + 1 d+1 d+1个分量是0。在这两种情况下, x x x d + 1 d+1 d+1个分量值选为1。这将允许在齐次和非齐次的条件下使用相同的表示形式。当类线性可分时,学习权向量 w w w更容易。这也是为什么现在大多数神经网络所学习、更新的参数都是 w w w b b b,而其中 w w w是主要更新的对象。

感知学习方法:
Step 1. 初始化 w w w为零向量,即令 i = 0 i=0 i=0 w i = 0 w_i=0 wi=0
Step 2. 对 j = 1 , ⋅ ⋅ ⋅ , n j=1,\cdot\cdot\cdot, n j=1,,n,如果 w i t x j ≤ 0 w_i^tx_j\leq0 witxj0,令 i = i + 1 , w i = w i − 1 + x i i=i+1,w_i=w_i-1+x_i i=i+1,wi=wi1+xi
Step 3. 重复步骤2,直到整个迭代过程中对所有模式 i i i值不再发生变化。

多个类别的分类问题:
普遍使用的方案是:一次考虑两个类,在给定的集合中有 C C C类模式时,这样的模式对有 C ( C − 1 ) 2 \frac{C(C-1)}{2} 2C(C1)对。对每对模式学习线性判别函数,将这些决策结合起来做最终决策。

线性判别的普遍性:
线性判别函数的概念是一般性的,这个想法可以拓展到使用齐次形式处理非线性判别问题。例如:

f ( x ) = 1 + x + x 2 = 0 f(x)=1+x+x^2=0 f(x)=1+x+x2=0

可以表示为

f ( x ′ ) = z t x ′ = 0 f(x')=z^tx'=0 f(x)=ztx=0
其中
z = [ 1 1 1 ] z= \left[\begin{array}{c} 1\\ 1\\ 1 \end{array}\right] z=111
x ′ = [ x 2 x 1 ] x'= \left[\begin{array}{c} x^2\\ x\\ 1 \end{array}\right] x=x2x1

此外,这一想法也可以扩展到量值 x x x。神经网络是学习此类广义线性判别的重要工具。

--------------------------------------------------------------------

###神经网络

模拟人脑中神经元的工作方式,一个神经元的输入的加权代数和大于阈值,则神经元输出1,否则输出0。如果 x 1 , x 2 , ⋅ ⋅ ⋅ , x n x_1,x_2,\cdot\cdot\cdot,x_n x1,x2,,xn为输入,对应的权重为 w 1 , w 2 , ⋅ ⋅ ⋅ , w n w_1,w_2,\cdot\cdot\cdot,w_n w1,w2,,wn,激活值为:
a = w 1 x 1 + w 2 x 2 + ⋅ ⋅ ⋅ + w n x n a=w_1x_1+w_2x_2+\cdot\cdot\cdot+w_nx_n a=w1x1+w2x2++wnxn
神经元的输出 o o o是激活值的函数。深度学习中常见的激活函数有:

  • ReLU / Rectified-Linear and Leaky-ReLU - ReLU and Leaky-ReLU rectification.
  • PReLU - parametric ReLU.
  • ELU - exponential linear rectification.
  • Sigmoid
  • TanH
  • Absolute Value
  • Power - f(x) = (shift + scale * x) ^ power.
  • Exp - f(x) = base ^ (shift + scale * x).
  • Log - f(x) = log(x).
  • BNLL - f(x) = log(1 + exp(x)).
  • Threshold - performs step function at user defined threshold.
  • Bias - adds a bias to a blob that can either be learned or fixed.
  • Scale - scales a blob by an amount that can either be learned or fixed.

具体的Caffe实现可以参考Caffe官方说明中的Activation/Neuron Layers部分。其中,ReLU函数的具体使用范例可以参看激活函数层说明。

反馈前向网络
这是最简单的网络,包含输入单元和输出单元。输入单元的所有节点均连接到输出单元,输出单元的输出即是网络的输出。对应的网络结构不想画了,可以参考这个,不过仅用到了前面的两层:

![前馈网络](https://img-blog.csdn.net/20180915112340584?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NodXFpYW9T/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

**训练:**网络的权值是在0到1之间随机设定的。当一个输入给到网络时,输出单元 i ( 1 ≤ i ≤ m ) i(1\leq i \leq m) i1im的激活值为

a i = w 1 i x 1 + w 2 i x 2 + ⋅ ⋅ ⋅ + w d i x d a_i=w_{1i}x_1+w_{2i}x_2+\cdot\cdot\cdot+w_{di}x_d ai=w1ix1+w2ix2++wdixd

i i i个单元的输出为 o i = f ( a i ) o_i=f(a_i) oi=f(ai)

当训练模式输入到网络时,知道其正确的输出(或目标)。令正确的输出为 t 1 , ⋅ ⋅ ⋅ , t m t_1,\cdot\cdot\cdot,t_m t1,,tm。第 i i i个输出节点的误差为 e i = t i − o i e_i=t_i-o_i ei=tioi。这些误差值用于反向传播来更新神经网络的权重。第 j j j个输入节点和第 i i i个输出节点之间的权重更新公式为:

w j i = w j i + α × x j × e i w_{ji}=w_{ji}+\alpha \times x_j \times e_i wji=wji+α×xj×ei

博主所理解的这里的 α \alpha α应该就是学习率。

多层感知机
前面介绍的简单前馈网络可以处理线性可分类的分类问题,它不能代表非线性决策边界。为了处理非线性函数,需要用到多层网络,即除了输入、输出单元,还需要包含隐藏层。(也就是上图表示的整个网络)

输入为 x 1 , x 2 , ⋅ ⋅ ⋅ , x d x_1,x_2,\cdot\cdot\cdot,x_d x1,x2,,xd,从输入到隐藏层的权重为 w 11 , w 12 , ⋅ ⋅ ⋅ , w 21 , w 22 , ⋅ ⋅ ⋅ , w d k w_{11},w_{12},\cdot\cdot\cdot,w_{21}, w_{22}, \cdot\cdot\cdot,w_{dk} w11,w12,,w21,w22,,wdk,隐藏层到输出层的权重为 h 11 , h 12 , ⋅ ⋅ ⋅ , h k m h_{11},h_{12},\cdot\cdot\cdot,h_{km} h11,h12,,hkm。隐藏单元 j ( 1 < j < k ) j(1\lt j \lt k) j(1<j<k)的激活值为

a h j = x 1 × w 1 j + x 2 × w 2 j + ⋅ ⋅ ⋅ + x m × w m j ah_j=x_1 \times w_{1j} +x_2 \times w_{2j} + \cdot\cdot\cdot + x_m \times w_{mj} ahj=x1×w1j+x2×w2j++xm×wmj

j j j个隐藏节点的输出为 o h j = f ( a h j ) oh_j=f(ah_j) ohj=f(ahj),输出节点 l l l的激活值为

a 1 = o h 1 × h 11 + o h 2 × h 21 + ⋅ ⋅ ⋅ + o h k × h k 1 a_1=oh_1 \times h_{11}+oh_2 \times h_{21} + \cdot\cdot\cdot + oh_k \times h_{k1} a1=oh1×h11+oh2×h21++ohk×hk1

输出节点 o i o_i oi的输出是 o i = g ( a i ) o_i=g(a_i) oi=g(ai)。如果目标输出是 t 1 , t 2 , ⋅ ⋅ ⋅ , t n t_1,t_2,\cdot\cdot\cdot,t_n t1,t2,,tn,输出节点 o i o_i oi的误差为 e i = t i − o i e_i=t_i-o_i ei=tioi。隐藏单元和输出单元之间的权重更新公式为:

h j i = h j i + α × o j × e i × g ′ ( a i ) h_{ji}=h_{ji}+\alpha \times o_j \times e_i \times g'(a_i) hji=hji+α×oj×ei×g(ai)

这种更新方式是基于梯度下降法来最小化目标和所得到的输出之间的误差。输入单元和隐藏单元之间的权重可以通过类似的方式更新。
**要求激活函数 g ( ) g() g()可微!!(例:阈值函数不可微,Sigmoid可微。)

--------------------------------------------------------------------

###面向分类的支持向量机
支持向量机(SVM)是支持向量的集合的抽象,支持向量是训练向量的一部分。前面所确定的决策边界称为支持线(下图中的虚线),而位于支持线上的空间内待分类的点称为支持向量(位于虚线上的三个点),图中的这三个支持向量便可以表征分类器。

![支持向量机](https://img-blog.csdn.net/20180915140059886?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NodXFpYW9T/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

两条线之间的区域称为分类间隔,因为支持线对应于分类间隔的最大值,它们尽可能远离彼此。上图中的实线到两条决策边界的距离是相等的,它形成了两种类型之间的正确决策边界。

线性可分条件
根据前面的公式,可以得到决策边界与超平面之间的距离 w t x + b ∥ w ∥ \frac{w^tx+b}{\Vert w\Vert} wwtx+b。例如考虑 d d d维空间下超平面 w t x + b = 1 w^tx+b=1 wtx+b=1与决策边界 w t x + b = 0 w^tx+b=0 wtx+b=0,二者之间的距离为 w t x + b ∥ w ∥ = 1 ∥ w ∥ \frac{w^tx+b}{\Vert w\Vert}=\frac{1}{\Vert w\Vert} wwtx+b=w1,因此两个支持平面之间的距离为 2 ∥ w ∥ \frac{2}{\Vert w\Vert} w2,称为隔离带。

可以通过最小化 ∥ w ∥ \Vert w\Vert w的单调函数来获得最大距离(隔离带)。另外,每个模式均对 w w w的值加了限制条件。对于这种约束优化问题,可以通过拉格朗日解的形式给出。考虑到现在大多数深度学习框架都有集成的求解方式,这里博主不深究其中的数学求解了,直接给出一般性的表达式:

w = ∑ i α i y i x i w=\sum_i\alpha_iy_ix_i w=iαiyixi
其中, y i y_i yi是模式对应的类别标签(对于正模式为1,对于负模式为-1)。

非线性可分条件
前面讨论的是处理线性可分类的模式分类机制,下面讨论非线性的情况。通常解决非线性问题可以有两种方式:用形如 f ( x ) = x k f(x)=x^k f(x)=xk的函数映射在低维空间下不可线性划分的点;或者,将一维模式转换成二维模式。具体来讲,定义两个向量 ( p 1 , p 2 ) t (p_1,p_2)^t (p1,p2)t ( q 1 , q 2 ) t (q_1,q_2)^t (q1,q2)t的点积为 p 1 q 1 + p 2 q 2 p_1q_1+p_2q_2 p1q1+p2q2。一般情况下,可以将 d d d维空间下的点映射到 D ( D > d ) D(D>d) D(D>d)维空间探索线性可分的可能性。

例如在原始空间下无法线性划分时,引入特征 x 1 ∧ x 2 x_1 \wedge x_2 x1x2,从而将二维空间变成三维空间,使得原来的问题可线性划分。

另外,支持向量机中,这样做是使得在 D D D维空间中的点积计算变成 d d d维空间爱那种的点积计算。


##第八章 多分类器组合

组合分类器是将一系列分类器的独立决策组合起来用于分类新样本。组合分类器通常比组成它的单个分类器要准确得多。组合分类器是补偿不完善的分类的的一种方式。使用的学习算法可以提供真值的一个很好的近似值,但是并非正确的假设。通过对这些近似值进行加权组合,就可以表示出真正的假设。实际上,这种组合等效与非常复杂的决策树。

###构建集成分类器的方法
这些方法使每个分类器的输入不同。具体构建方法包括训练样本的子采样、控制训练集和的功能、控制输出目标和引入随机性以及一些针对特殊算法的一些方法。

训练样本的二次抽样
训练样本的二次抽样是指从一个训练集中获取一些简化数据集,将学习算法针对这些简化数据集多次运行。对于使训练集中微小变化引起的输出分类器的较大变化的算法,这种方法效果很好。数据集被简化的方式主要是通过选择训练集的子集或者使用每种情况下特征值的不同子集。
*在这里插一句:博主最近了解的一片深度学习的论文就是用了这种思想,其神经网络多次截取特征中的一部分,从而优化训练结果。

常用的方法:

  • 套袋法:每次运行时,这种方法可以给分类器提供一个包含从原始训练集的 n n n项中随机抽取的 m m m个训练样例的训练集。这样的训练集称为引导复制的原始训练集,这项技术被称为引导聚集。每个引导复制包含大约原始训练集的三分之二,其中某些样点可能多次出现。
  • 省略互不相交的子集:原始的训练集划分成若干个互不相交的子集,然后就可以通过丢弃这些子集中的一个来构建不同的重叠训练集。
  • ADABOOST算法:ADABOST是一个引导算法(inducer/booster),它在训练集合上保持一个概率分布 p t ( x ) p_t(x) pt(x)。每次迭代 t t t中,它根据概率分布 p t ( x ) p_t(x) pt(x)进行有放回抽样,以此得到一个大小为 m m m的训练集。
    假设输入是大小为 n n n的训练集 S S S,引导器是 I I I,实验次数为 T T T,算法如下:
    第一步: S ′ = S S'=S S=S,权重分配为1; m = n m=n m=n
    第二步:考虑 i i i从1到 T T T
    第三步: C i = I ( S ′ ) C_i=I(S') Ci=I(S)
    第四步: ε i = 1 m ∑ x j ∈ S ′ : C i ( x j ) ≠ y j w e i g h t ( x ) \varepsilon_i=\frac{1}{m}\sum_{x_j\in S': C_i(x_j) \neq y_j}weight(x) εi=m1xjS:Ci(xj)̸=yjweight(x)
    第五步:如果 ε > 1 2 \varepsilon \gt \frac {1}{2} ε>21,将 S ′ S' S设为 S S S中每个实例的权重为1的引导,然后回到第三步。
    第六步: β i = ε i 1 − ε i \beta_i=\frac{\varepsilon_i}{1-\varepsilon_i} βi=1εiεi
    第七步:对任意 x j ∈ S ′ x_j\in S' xjS,如果 C i ( x j ) = y j C_i(x_j)=y_j Ci(xj)=yj,那么 w e i g h t ( x j ) = w e i g h t ( x j ) ⋅ β i weight(x_j)=weight(x_j)\cdot \beta_i weight(xj)=weight(xj)βi
    第八步:规范化实例的权重使 S ′ S' S的总权重为 m m m
    第九步: C ∗ ( x ) = a r g m a x y ∈ Y ∑ i : C i ( x ) = y l o g 1 β i C^*(x)=argmax_{y\in Y}\sum_{i:C_i(x)=y}log\frac{1}{\beta_i} C(x)=argmaxyYi:Ci(x)=ylogβi1

输入特征的处理
这项技术用来处理分类器可用的输入特征值集合,可以得到特征值的一个子集。如果所有特征值都很重要,那么这种技术不太可能好用。只有当输入特征值高度冗余并可根据某些领域的知识组合在一起时它才好用,这种组合就可以用来形成特征值子集。

输出目标的处理
这种技术称为“纠错输出编码”。博主的理解是,如果存在大量的类,这些类会被反复成不同的组,从而优化结果。

随机性注入
即对训练过程引入随机性,比如随机抽取得到某个顺序排布的特征值。

###多分类器组合方法
组合分类器的最简单并且最具鲁棒性的方法是使用无加权投票。对一个数据点的概率估计是指真正的类就是 c c c的概率,也就是
P r ( f ( x ) = c ∣ h l ) , c = 1 , ⋅ ⋅ ⋅ , C Pr(f(x)=c\vert h_l),\quad c=1,\cdot\cdot\cdot,C Pr(f(x)=chl),c=1,,C
可以把所有假设的类概率相结合得到组合的类概率
P r ( f ( x ) = c ) = 1 L ∑ l = 1 L P r ( f ( x ) = c ∣ h l ) Pr(f(x)=c)=\frac{1}{L}\sum_{l=1}^LPr(f(x)=c\vert h_l) Pr(f(x)=c)=L1l=1LPr(f(x)=chl)
选取拥有最高类概率的那个类作为 x x x的预测类。

你可能感兴趣的:(笔记,模式识别,深度学习)