深度学习入门 -- 感知机

感知机

    感知机(Perceptron)是二类分类的线性分类模型,对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。感知机关键字信息:二分类模型、线性可分。

    感知机预测是学习得到的感知机模型对新的输入实例进行分类。感知机模型求解方法:导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。

    感知机接收多个输入信号量,经过计算并判断结果是否超过阈值,而决定下一个神经元是否被激活。

  以包含两个输入信号量为例,创建数学模型 y = w1*x1 + w2x2 + b。表达式w1*x1 + w2x2 + b作为模拟信号量完成计算,结果>0,返回1;否则返回0。

  深度学习入门 -- 感知机

  1、简单逻辑电路实现

  通过感知机显示与门、或门等简单电路。与门、或门、与非门对应真值表如下:

x1 x2 x1 & x2 x1 | x2 !(x1 & x2)
0 0 0 0 1
1 0 0 1 1
0 1 0 1 1
1 1 1 1 0

  由人工根据“真值表”,可设计出无穷个w1、w2、b组合的解。而机器学习的目标应是,根据数学模型和训练数据集,设计出最优解。

  以下则通过Python代码,给出与门的其中一种解法:

def AndGate(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.3, 0.5])
    b = -0.7
    if np.sum(x * w) + b <= 0:
        return 0
    else:
        return 1

 

   在设计过程中,或门、与非门的实现仅仅是在参数的设定上有所区别,如下所示:

def NAndGate(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.3, -0.5])
    b = 0.7
    if np.sum(x * w) + b <= 0:
        return 0
    else:
        return 1

def OrGate(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.3, 0.5])
    b = -0.2
    if np.sum(x * w) + b <= 0:
        return 0
    else:
        return 1

 

   2、多层感知机

  根据感知机二分类的线性分类模型的特点,因此仅能表示由一条直线分割的线性空间。

    尝试使用感知机实现异或门电路,异或门真值表如下表所示:

x1 x2 x1 ^ x2
0 0 0
1 0 1
0 1 1
1 1 0

  通过平面图形表示上记真值表,其中⚪表示0值,而▲表示1,如下所示:

深度学习入门 -- 感知机

  上记异或门的图形无法利用一条直线进行分割,由于感知机只能表示线性空间。因此单层感知机无法表示异或门,其无法分离非线性空间。

  但是通过上文真值表的组合运算,能够实现异或门运算。如下所示:

x1 x2

!(x1 & x2)

s1

x1 | x2

s2

s1 & s2
0 0 1 0 0
1 0 1 1 1
0 1 1 1 1
1 1 0 1 0

    借助与非门、或门的组合运算能够实现异或操作,单层感知机可分别实现与非门和或门。因此可通过叠加感知机的方式实现异或运算,从而分离出非线性空间。

def XorGate(x1, x2):
    s1 = NAndGate(x1, x2)
    s2 = OrGate(x1, x2)
    return AndGate(s1, s2)

   上记代码,通过图表示如下:

深度学习入门 -- 感知机

  通过上图可看出,异或门是一种多层结构的神经网络,是一个2层的感知机。

  通过感知机的叠加,实现对非线性空间的表示。

 

 

上一篇:C语言 谭浩强 题目 -第五章


下一篇:不用Sqrt(x)实现Sqrt(x)