当前位置 博文首页 > shelgi的博客:机器学习---7.神经网络基础

    shelgi的博客:机器学习---7.神经网络基础

    作者:[db:作者] 时间:2021-07-28 08:51

    基本介绍

    神经网络最基本的成分是神经元模型,当输入值超过了神经元的阈值,神经元就被激活了。然后通过激活函数就可以将输出值对应为0或者1。

    感知机

    感知机是由两层神经元组成,输入层接收数据,输出层经过激活函数可以输出0或者1,所以感知机能实现一些基本的逻辑运算,下面来看看其中的数学原理。

    感知机的数学原理

    公式: f ( x ) = s i g n ( w ? x + b ) f(x)=sign(w*x+b) f(x)=sign(w?x+b)

    其中 s i g n ( x ) = { 1 x ≥ 0 0 x < 0 \begin{aligned} sign(x)=\left\{ \begin{aligned} 1 &&x \geq 0\\ 0 &&x<0 \end{aligned} \right. \end{aligned} sign(x)={10??x0x<0??

    x是输入,w是权重,b是偏差(偏置项)

    数学原理很简单,那开始实现一些基本的逻辑运算

    • 与运算
    • 或运算
    • 非运算
    • 异或运算

    1.与运算

    x1x2x1 AND X2
    000
    010
    100
    111

    对应的不等式为:

    b<0

    w2+b<0

    w1+b<0

    w1+w2+b>=0

    综上:只要权重满足w1,w2<-b,w1+w2>-b就可以实现与运算;

    # 1.与运算
    import numpy as np
    
    def AND(x1,x2):
        x=np.array([x1,x2])
        w=np.array([1,1])
        b=-1.5
        y=np.sum(x*w)+b
        if(y>=0):
            return 1
        elif(y<0):
            return 0
        
    print(AND(1,1))
    print(AND(0,1))
    print(AND(1,0))
    print(AND(0,0))
    

    在这里插入图片描述

    2.或运算

    x1x2x1 OR X2
    000
    011
    101
    111

    对应的不等式为:OR

    b<0

    w2+b>=0

    w1+b>=0

    w1+w2+b>=0

    综上:只要权重满足w1,w2>=-b就可以实现与运算;

    def OR(x1,x2):
        x=np.array([x1,x2])
        w=np.array([1,1])
        b=-0.5
        y=np.sum(x*w)+b
        if(y>=0):
            return 1
        elif(y<0):
            return 0
        
        
    print(OR(1,1))
    print(OR(0,1))
    print(OR(1,0))
    print(OR(0,0))
    

    在这里插入图片描述

    3.非运算

    xNOT x
    01
    10

    对应的不等式为:

    b>=0

    w+b<0

    综上:只要权重满足w<-b,b>=0就可以实现非运算;

    def NOT(x):
        x=np.array([x])
        w=np.array([-1])
        b=0.5
        y=np.sum(x*w)+b
        if(y>=0):
            return 1
        elif(y<0):
            return 0
        
        
    print(NOT(1))
    print(NOT(0))
    

    在这里插入图片描述

    4.异或运算

    x1x2x1 XOR X2
    000
    011
    101
    110

    对应的不等式为:

    b<0

    w2+b>=0

    x1+b>=0

    w1+w2+b<0

    这个不等式无解,所以这就是单层感知机的弊端,不能进行异或运算。
    所以这个时候就要用多层感知机去解决这个问题了

    #用多层感知机来解决这个问题
    def XOR(x1,x2):
        a=NOT(x1)
        b=NOT(x2)
        X1=AND(a,x2)
        X2=AND(x1,b)
        Y=OR(X1,X2)
        print(Y)
            
    XOR(0,0)    
    XOR(1,1)
    XOR(0,1)
    XOR(1,0)
    

    在这里插入图片描述
    通过这几个例子我们就知道了单层感知机只能解决线性可分问题,对于非线性可分问题的求解还得通过多层感知机(神经网络)。

    对于神经网络的训练

    需要训练多层网络,就需要更强大的学习算法—BP算法(反向传播算法)
    对训练集假设神经网络的输出为 y ^ j k = f ( β j ? θ j ) \hat{y}_{j}^{k}=f(\beta_j-\theta_j) y^?jk?=f(βj??θj?)
    则均方误差为: E k = 1 2 ∑ j = 1 l ( y ^ j k ? y j k ) 2 E_k=\frac{1}{2}\sum_{j=1}^{l}(\hat{y}_j^k-y_j^k)^2 Ek?=21?j=1l?(y^?

    下一篇:没有了