zoukankan      html  css  js  c++  java
  • 机器学习--多层感知机(2)

    简单的感知机的使用界限
    上一节介绍了一个简单的感知机的运作过程,如下图:

    由于输出的是0和1,所以激活函数f(u)的结果也是0或者1。

    虽然简单的感知机可以解决一些问题,但是当涉及到比较复杂的问题的时候简单的感知机明显无法
    做到我们想要的。比如XOR运算。

    对于简单的感知机的权重计算方法,在上一节已经介绍过了。那么具体到真实的数据化是怎么变化的呢。
    我们用以下几个例子具体说明。(为了方便说明只使用两个输入元x1,x2)

    OR运算
    首先,对于OR运算,简单回顾一下定义

    1 OR 1 = 1
    1 OR 0 = 0
    0 OR 1 = 0
    0 OR 0 = 0

    对于简单的感知机,输入值x1,x2我们假设存在x2 = -x1 + 1。按照感知机常用的表达式
    w0 + w1x1 + w2x2 = 0,我们可以换算成-1 + x1 +x2 = 0。那么对于下图中的左边红色点可以知道
    -1 + x1 +x2 > 0 而右边的蓝色点 -1 + x1 +x2 < 0。也就是我们的到的权重为
    w = (-1,1,1)时,我们就可以计算OR运算了。

    对于AND运算也可以使用同样的推导方式。

    但是对于XOR运算就不一样了。

    XOR
    首先看一下XOR的结果
    1 XOR 1 = 0
    1 XOR 0 = 1
    0 XOR 1 = 1
    0 XOR 0 = 0
    感觉有点奇怪,用简单的感知机好像无法计算吧。

    多层感知机
    x1 OXR x2的表达可以换成以下的计算方式:

    x1 XOR x2 = (x1 OR x2) AND (x1 NAND x2)

    对于上面这个运算,我们用感知机的图展示出来是这个样子的。

    整理在一起就是这样的一个表达了。

    使用这种多层感知机就可以解决那些使用线性方程所无法解决的问题了。当然不止是XOR这种3层结构,
    还可以使用4层,5层甚至更多。当然都是视问题而定。


    当然对于这种XOR问题,我们基本看一眼就知道权重是什么,在实际的训练时,我们只可能输入数据和期待结果,对于中间层需要什么
    数据是无法预测的,那么对于这样的数据我们应该怎样计算他的权重呢?
    我们一会回答这个问题。

     多个分类结果的机器学习

    到现在为止我们的内容都只是涉及到两个指定结果的感知机,比如垃圾邮件与否。
    在实际工作中,我们可能会根据需要把邮件分为:垃圾邮件,私人邮件,工作邮件等等。
    在这样的需求下多层感知机的存在也是非常必要的。

    多层感知机
    为了实现多层感知机(也就是通常所说的深度神经网络)我们会用到BP算法(也就是反向传播算法)。
    为了理解这个算法还是需要一点数学基础的,可以先去Google以下BP算法。
    具体的过程先介绍一下(下一篇文章的内容):
      * 多城感知机的激活函数需要有微分
      * 有效的激活函数有很多
      * 简单介绍激活函数和它的导数

    以上

  • 相关阅读:
    深入Log4J源码之Log4J Core
    ScheduledThreadPoolExecutor与System#nanoTime
    []JSR 133 (Java Memory Model) FAQ
    happens-before俗解
    ScheduledThreadPoolExecutor实现原理
    Java Timer&TimerTask原理分析
    Java 编程的动态性,第 1 部分: 类和类装入
    结合反射与 XML 实现 Java 编程的动态性
    Java 日志缓存机制的实现
    Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析
  • 原文地址:https://www.cnblogs.com/dinghing154/p/6130803.html
Copyright © 2011-2022 走看看