机器学习中的分类器:感知机、逻辑回归、支持向量机

本文介绍了机器学习中三种基础的分类器:感知机、逻辑回归和支持向量机。感知机是简单的线性分类器,存在局限性,适合线性可分数据。逻辑回归引入sigmoid激活函数,适用于二分类问题,能给出概率预测。支持向量机通过最大间隔原则寻找最优超平面,可使用核函数处理非线性问题。三种模型在深度学习中都有其独特作用,对理解现代神经网络模型至关重要。
摘要由CSDN通过智能技术生成

  深度神经网络(Deep Neural Networks,DNN)是深度学习的基础,由于神经网路是基于感知机模型的扩展,因此多层感知机(Multi-Layer perceptron,MLP)就可以看作是深度神经网络。在深度学习中,用于分类的卷积神经网络(Convolutional Neural Networks, CNN),一般都会在全连接层(FC)之后使用softmax分类器,softmax函数可以看作是logistic函数(Sigmoid)的一般形式。当然,也有例如目标检测的经典网络RCNN,是将感兴趣区域提取的CNN特征输入到支持向量机(SVM)进行分类。为了更好地理解深度学习中的内容,以及发现深度学习对机器学习的继承性,我将上面描述的感知机(Perceptron)、逻辑回归(Logistic Regression,LR)、支持向量机(Support Vector Machine, SVM)这三种基础的分类器进行了整理。这是一篇需要数学基础的总结,做好迎接大量公式的准备吧。

感知机

  1957年,美国神经学家Frank Rosenblatt提出了可以模拟人类感知能力的机器,并称之为“感知机”,研究成果于1958年发表在《The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain》。感知机是人工神经网络的进一步发展,人工神经网络的概念及人工神经元的数学模型是1943年在《A logical calculus of the ideas immanent in nervous activity》论文中提出。感知机可以被视为一种最简单形式的前馈神经网络(即每个神经元只与前一层的神经元相连,各层间没有反馈),是一种二元线性分类器。二元线性分类器意味着,分类器尝试对于输入的多维数据找到一个超平面(二维数据是找到一条直线),能够把所有的二元类别分隔开。当然,如果数据不是线性可分的时候,感知机的局限性就显现出来了。

感知机模型

  为了模拟神经细胞的行为,神经元模型提出了与之对应的基础概念,如权重(突触)、偏置(阈值)及激活函数(细胞体)。感知机由两层神经元组成,输入层接收外界输入信号后传递给输出层。假设输入的m个样本数据可以表示为: ( x 1 ( 1 ) , x 2 ( 1 ) , . . . x n ( 1 ) , y 1 ) (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1) (x1(1),x2(1),...xn(1),y1) ( x 1 ( 2 ) , x 2 ( 2 ) , . . . x n ( 2 ) , y 2 ) (x_1^{(2)}, x_2^{(2)}, ...x_n^{(2)}, y_2) (x1(2),x2(2),...xn(2),y2),… ( x 1 ( m ) , x 2 ( m ) , . . . x n ( m ) , y m ) (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m) (x1(m),x2(m),...xn(m),ym),其中向量 x \pmb x xxx有n维特征, y \pmb y yyy每一维限制在两个取值中,代表着样本的类别。那么感知机需要预测的输出为:一类样本 w 1 x 1 + . . . + w n x n + θ > 0 w_{1}x_1 + ... + w_{n}x_{n} + \theta > 0 w1x1+...+wnxn+θ>0,另一类样本 w 1 x 1 + . . . + w n x n + θ < 0 w_{1}x_1 + ... + w_{n}x_{n} + \theta < 0 w1x1+...+wnxn+θ<0。再经过一个神经元激活函数, s i g n ( x ) = { − 1 x < 0 1 x ≥ 0 sign(x)= \begin{cases} -1& {x<0}\\ 1& {x\geq 0} \end{cases} sign(x)={ 11x<0x0。在 θ \theta θ 处增加一个特征 x 0 = 1 x_0=1 x0=1,这样权重和阈值的学习统一为权重的学习,得到分类结果 y p r e d = s i g n ( w ∙ x ) y_{pred} = sign(\pmb w \bullet \pmb x) ypred=sign(wwwxxx)。上述激活函数可以保证,在预测正确的时候 y p r e d × y ≥ 0 y_{pred}×y \geq 0 ypred×y0。感知机结构如下图所示:

感知机的训练过程

  感知机的训练过程较为简单,基本思想是:若感知机对训练样本 ( x ( i ) , y i ) (\pmb x^{(i)}, y_i) (xxx(i),yi) 预测正确,则感知机不发生变化,否则将根据错误的程度进行权重调整。感知机的损失函数是 J ( w ) = − ∑ x ( i ) ∈ M y i w ( i ) ∙ x ( i ) J(w) = - \sum\limits_{x^{(i)} \in M}y_i\pmb w^{(i)} \bullet \pmb x^{(i)} J(w)=x(i)Myiwww(i)xxx(i),其中M是所有误分类的数据的集合,即当预测正确的时候损失函数为0,只有当预测错误的时候损失函数是一组正数的和。由于符号函数的不连续性,这里没有使用标准的均方误差。误差函数的优化问题可以由梯度下降法或者牛顿法来解决,随机梯度下降每次仅仅需要使用一个误分类的数据来更新梯度,用损失函数对样本 i i i 的权重向量求偏导 ∂ ∂ w J ( w ) = − y i x ( i ) \frac{\partial}{\partial w}J(w) = - y_i x^{(i)} wJ(w)=yix(i),用该梯度对权重进行更新 w = w + α y i x ( i ) w = w + \alpha y_ix^{(i)} w=w+αyix(i),其中 α \alpha α 为学习率。

感知机的局限性和发展

  从上图可以看出,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,其学习能力非常有限。如果是线性可分的模型,感知机的学习过程一定会收敛,最后求得适当的权向量;否则感知机的学习过程将会发生震荡,权值难以稳定。“与”、“或”、“非”问题感知机都可以解决,但是无法学习比较复杂的非线性模型,像“异或”问题。因此DNN在感知机的基础上做了扩展,主要有以下三点:

  • 增加了隐藏层,增强了模型的表达能力和非线性;
  • 输出层的神经元数量增多,可以更灵活地处理分类问题;
  • 对激活函数做了修改,处理能力有限的符号函数用sigmoid函数进行替换。

参考链接:https://www.cnblogs.com/pinard/p/6418668.html

神经网络的反向传播算法

  尽管DNN的学习能力比单层感知机强得多,但是训练多层网络比单层网络也变得困难。反向传播(Backpropagation,BP)算法是一种与最优化方法(如梯度下降法)结合使用的,训练神经网络最有效的算法。1974年哈佛大学的Paul Werbos在论文《Beyond regression: new fools for prediction and analysis in the behavioral sciences》中发明了BP算法,但是由于当时正值神经外网络低潮期,并未受到应有的重视。反向传播算法的几个特点:

  • 通常被认为是一种监督学习方法:要求有对每个输入值期望得到的已知输出,来计算损失函数的梯度。然而,它也用在一些无监督网络(如自动编码器)中。
  • 链式法则对每层迭代计算梯度,是多层前馈网络的Delta规则(权值的修正量等于误差乘以输入)的推广。
  • 要求人工神经元的激活函数可微

算法流程
输入:神经网络结构(各层神经元数量及网络层数L),批量m个样本,损失函数,sigmoid激活函数用 σ \sigma σ表示,迭代步长(学习率) α \alpha α,最大迭代次数MAX,停止迭代阈值为ϵ。
输出:权重矩阵 w \pmb w www和偏置向量 b \pmb b bbb
(1)初始化网络权值(通常是小的随机值)。
(2)for iter in 1 to Max:
(2-1)for i in 1 to m:

  • 输入样本 x ( i ) x^{(i)} x(i);
  • for l l l = 2 to L:进行前向传播算法计算隐藏层的输出;
  • 通过损失函数计算输出层的误差;
  • for l l l = L-1 to 2:进行反向传播算法计算隐藏层的误差;

(2-2)for l l l = 2 to L,更新第 l l l层的权重和偏置。
(2-3)如果所有的 w \pmb w www b \pmb b bbb 的变化值都小于停止迭代阈值ϵ,则跳出迭代循环到步骤(3)。
(3)输出更新后的权重矩阵 w \pmb w www和偏置向量 b \pmb b bbb

由于网络隐藏层输出的真实值无法求得,所以反向传播算法主要是解决了隐藏层的误差计算,只要根据误差每一层的权重更新便很容易通过求梯度获得,推导过程如下:
误差反向传播

  1. 前向传播计算 l l l 层输出: o u t l = σ ( n e t l ) = σ ( W l o u t l − 1 + b l ) out^l = \sigma(net^l) = \sigma(W^lout^{l-1} + b^l) outl=σ(netl)=σ(Wloutl1+bl)
  2. 误差函数使用最常见的均方差来度量损失: J ( W , b , x , y ) = 1 2 ∣ ∣ o u t L − y ∣ ∣ 2 2 J(W,b,x,y) = \frac{1}{2}||out^L-y||_2^2 J(W,b,x,y)=21outLy22
    由于输出层可能有多个神经元,如上图所示,则最后一层的损失是多个神经元损失的和: E t o t a l = ∑ 1 2 ( o u t L − y ) 2 = E o 1 + E o 2 E_{total} = \sum \frac{1}{2}(out^L-y)^2=E_{o1}+E_{o2} Etotal=21(outLy)2=Eo1+Eo2
  3. 计算输出层的权值更新,以 w 5 w_5 w5 为例(链式法则):
    ∂ E t o t a l ∂ w 5 = ∂ E t o t a l ∂ o u t o 1 ∗ ∂ o u t o 1 ∂ n e t o 1 ∗ ∂ n e t o 1 ∂ w 5 \frac{\partial E_{total}}{\partial w_5}=\frac{\partial E_{total}}{\partial out_{o1}}*\frac{\partial out_{o1}}{\partial net_{o1}}*\frac{\partial net_{o1}}{\partial w_5} w5Etotal=outo1Etotalneto1outo1w5neto1
    其中,
    由 于 n e t o 1 = o u t h 1 ∗ w 5 + o u t h 2 ∗ w 6 + b 2 , 可 得 ∂ n e t o 1 ∂ w 5 = o u t h 1 ( 前 向 传 播 已 经 求 得 ) 。 由于net_{o1}=out_{h_1}*w_5+out_{h_2}*w_6+b_2 ,可得\frac{\partial net_{o1}}{\partial w_5}=out_{h_1}(前向传播已经求得)。 neto1=outh1w5+outh2w6+b2w5neto1=outh1
    由 于 o u t o 1 = σ ( n e t o 1 ) = 1 1 + e − n e t o 1 , 可 得 ∂ o u t o 1 ∂ n e t o 1 = o u t o 1 ∗ ( 1 − o u t o 1 ) 。 ( 利 用 s i g m o i d 函 数 导 数 f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) ) 由于out_{o1}=\sigma (net_{o1})=\frac {1}{1+e^{-net_{o1}}},可得\frac{\partial out_{o1}}{\partial net_{o1}}=out_{o1}*(1-out_{o1})。(利用sigmoid函数导数f^{'}(x)=f(x)(1-f(x))) outo1=σ(neto1)=1+eneto11neto1outo1=outo1(1outo1)(sigmoidf(x)=f(x)(1f(x)))
    由 于 E t o t a l = 1 2 ( o u t o 1 − t a r g e t o 1 ) 2 + 1 2 ( o u t o 2 − t a r g e t o 2 ) 2 , 可 得 ∂ E t o t a l ∂ o u t o 1 = o u t o 1 − t a r g e t o 1 。 由于E_{total}= \frac{1}{2}(out_{o1}-target_{o1})^2+ \frac{1}{2}(out_{o2}-target_{o2})^2,可得\frac{\partial E_{total}}{\partial out_{o1}}=out_{o1}-target_{o1}。 Etotal=21(outo1targeto1)2+21(outo2
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值