zoukankan      html  css  js  c++  java
  • 【HowTo ML】分类问题->神经网络入门

    非线性分类器(Non-linear hypotheses)

    为什么使用非线性分类器

    我们举几个栗子:
    house
    假如我们有一个数据空间如左上角坐标系所看到的,那么我们要的模型须要如右边公式所看到的的预測函数.
    如果有n个特征那么计算二次多项式就有O(n^2)的复杂度.n能有多大?

    我们来看以下这个栗子.
    Car
    如果我们须要识别汽车,假如选取图像上两个点,那么就如左边坐标系所看到的,这没什么.
    但实际上我们须要的数据空间时整张图片全部的像素.也就是如果图像是5050那么我们就有2500个像素点.也就是须要2500个特征.
    刚才说的是灰度图,如果时RGB的话时7500个,实际运用中也不仅仅5050 这么小.
    综上所述,线性分类器肯定是不行的.

    神经网络

    神经网络是模拟人类的神经元时发明的.
    TrueNeural

    神经网络的表示

    SingalNeural
    一个神经元(Neuron)就是如图所看到的,他和我们的逻辑回归表示并没有什么差别.
    Sigmoid Function叫做激励(activation)函数.
    θ也被成为权重(weights)
    network1
    神经网络由多个神经元连接而成,当中第一层被称为输入层(input layer);最后一层被称为输出层(output layer);其它的被称为隐藏层(Hidden layer).

    记号

    mark

    • a(j)i:
      第j层第i个激励
    • Θ(j)(波矩阵?

      ):
      第 j 层到第 j+1 层的參数控制映射

    我们通常使用Θ(j)矩阵来表示參数,表示方法如上所述.当中Θ的大小为(sj+1(sj+1),sj 为第j层激励的个数.

    向量化(Vectorized)实现

    Vectorized
    我们能够将通过向量化来简化神经网络的计算.
    我们能够把左下角图中Layer 2的Sigmoid函数提出,这样我们能够用Θ向量的形式表示出整个Layer 2.
    也就是右边所看到的的过程.
    写成一般形式就是:

    Adda(i1)0=1z(i)=Θ(i1)a(i1)a(i)=g(z(i))

    我们循环运行这个步骤.直到输出层输出hΘ(x),这就是前向传播(Forward propagation).

    架构(Architecture)

    Architecture
    我们把神经元连接的方式叫做架构.

    神经网络栗子

    AndFunction
    为了方便我们理解神经网络,这里有几个栗子.
    假如我们有右边的数据空间,那么比較好的边界就是如图所看到的.
    我们先简化数据为左边的图,也就是说我们须要训练一个模型求得左下的y式,非常复杂.
    AndFunction
    我们先来个简单的AND运算.如上图,如果我们的theta例如以下

    θ=30+20+20

    那么就能预測出如真值表的值.
    那么同理,我们就能训练出能求或与非的模型.那么我们要求XNOR运算怎么办?
    AndFunction
    这里我们来构建一个神经网络,每一个节点训练出不同的模型,达到不同的效果,最后达到输出层.

    多类别分类

    之前说过多类别分类问题採用(one vs all)
    MC
    如果我们有4个类别须要识别,那么我们就有四个分类器.
    MC
    每一个分类器的含义同之前,P(y=j|θ(i)j).

    代价函数


    Tips:
    数据空间=

    {(x(1),y(1)),(x(2),y(2)),(x(m),y(m))}

    L=

    Sl=l.

    在神经网络中,神经单元的代价函数就是逻辑回归中的代价函数的一般式.

    hΘ(x)RK(hΘ(x))i=ithoutput

    J(Θ)=1m[i=1mk=1Ky(i)klog(hΘ(x(i)))k+(1y(i)k)log(1(hΘ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(Θ(l)ji)2

    解释一下:
    hΘ(x)RK就是神经网络的输出在K维向量中,二元分类K就是1
    (hΘ(x))i表示第i个输出.
    y(i)klog(hΘ(x(i)))ky是一个K维向量,yk就是第K维向量,如果这组样本属于第K组,那么yk就是1,vise varsa.
    须要注意的是sl+1j=1中依然能够遵循”不把偏差项Θ(l)i0 (j=0)正规化”.

    反向传播算法(Backpropagation Algorithm)

    我们的目标是:

    minΘJ(Θ)

    为了找到这个Θ,我们须要计算:

    • J(Θ)
    • Θ(l)ijJ(Θ)

    当中J(Θ)我们已经知道了怎么计算.
    那么我们须要计算的就是J(Θ)的偏导,这时候我们用到反向传播算法:
    直观上来说就是对每一个节点计算δ(l)j(第l层第j个节点的误差).
    如果我们有一个网络如图:
    delta
    首先我们从输出节点開始求δ(4)
    δ(4)j=a(4)jyj.
    变成向量化的形式:δ(4)=a(4)y
    然后往前倒推:
    δ(l)=(Θ(l))Tδ(l+1).g(z(l)),当中g(z(l))=a(l).(1a(l)).
    直到l=1,输入层不须要计算误差.
    那么忽略λ,需求偏导公式可变为:
    Θ(l)ijJ(Θ)=a(l)jδ(l+1)i

    实现

    BPimplement
    使用上述公式Θ(l)ijJ(Θ)=a(l)jδ(l+1)i须要使用aδ.
    我们引入Δ,Δ(l)ij是用于计算Θ(l)ijJ(Θ)的一个累加项.
    对于每一组例子,
    我们先用FP来计算a,再反向计算误差δ(l)
    最后依照偏导项公式累加Δ,得到公式:

    Θ(l)ijJ(Θ)=D(l)ij=1mΔ(l)ij+λΘ(l)(ij)

    若将Δ向量化得到Δ(l):=Δ(l)+δ(l+1)(a(l))T.

    矩阵向量化(Matrices “Unroll” into vectors)

    vectorized
    fminunc这些高级函数在使用的时候须要传递向量,而Θ这样的却是矩阵.
    我们能够把矩阵展开,来达到向量化的目的,然后在costFunction中重组Θ等矩阵.
    Unroll

    梯度检測(Gradient Checking)

    简单的说就是使用双側差分(two sided difference)求近似导数.
    gradApprox
    在神经网络中详细实现就是例如以下.
    gradApprox
    一般我们取ϵ103,然后检验上述所得向量(gradApprox)近似于DVec.
    总结:
    1. BP求DVec.
    2. 求gradApprox.
    3. 检測是否类似
    4. 关闭检測(由于梯度检測非常慢),使用BP学习.

    随机初始化(Random Initialization)

    经过之前的学习,我们发现每一层的全部单元都会经过同样的训练.所以我们使用随机初始化来打破这样的对称性.
    随机初始化指的是随机化初始的參数矩阵,使他们接近0却不全然同样.

    总结

    架构(Architecture)

    Sumary
    - 输入单元数:特征空间维度.
    - 输出单元数:类数
    - 隐藏层:通常为一层,每层激励个数同样,数量选择时须要考虑输入输出层,通常稍大于输入层.

    训练

    1. 随机初始化权重.
    2. FP求hΘ,也就是a.
    3. 计算代价函数J(Θ)
    4. BP求 Θ(l)ijJ(Θ).
    5. 使用梯度检測比較BP所求Θ(l)ijJ(Θ),然后关闭梯度检測.
    6. 使用梯度下降等算法和BP求Θ(J(Θ)是非凸函数).

    神经网络背景知识

    起源

    人们想要模拟大脑,由于大脑是最好的学习模型.
    兴起与80s~90s,但随后衰退.可是今年由于数据量和计算速度的提高又变得兴起

    思考

    人类的大脑能学习非常多的东西,比方分辨事物,学习,计算,说话等等.
    我们也能写非常多算法来模拟这些”任务”,实现该过程.可是大脑的学习应该是仅仅有一个学习算法的(The “one single learning algorithm” hypothesis).

    实验(Neural Re-wired Experiment)

    experiment
    科学家把动物视神经切断,而把听觉神经连接到本来由视神经连接的位置(视觉皮层),最后发现动物能完毕视觉辨别任务.
    rewiredusing
    左上角:在额头上佩戴灰度摄像机,数据输出到舌头的电极,刺激舌头.失明的人能在几十分钟内学会”看”.
    右上角:人类声呐定位.通过打响指或者咂舌来制造声音,通过听觉来分辨回声,定位周围的物体(这是一种训练,手机上玩过一个游戏叫 Echo还是Dark Echo的就是这样的感觉).
    左下角:蜂鸣腰带,朝向北时腰带蜂鸣非常强,使人类拥有鸟类的方向感(这个..恩..).
    右下角:给青蛙按第三仅仅眼睛,青蛙能学着使用(卧槽,那岂不是给人类大脑接一个高清摄像头即可,学习量可能有点大吧)

  • 相关阅读:
    MFC知识点总结
    fopen函数打开文件总是返回NULL错误
    四.Windows I/O模型之重叠IO(overlapped)模型
    三.Windows I/O模型之事件选择(WSAEventSelect )模型
    二.Windows I/O模型之异步选择(WSAAsyncSelect)模型
    6.openldap客户端安装
    5.openldap设置用户本身修改密码
    4.openldap创建索引
    3.openldap生成LDAP用户
    2.openldap安装
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8863688.html
Copyright © 2011-2022 走看看