感知机——神经网络基本模型

1. 感知机

1.1 什么是感知机

                   

        X 是输入信号, y 是输出信号,W 权重(每个输入信号都有一个对应的w),b为偏置项 。图中的○称为“神经元”或者“节点”。
        输入信号被送往神经元时,会被 分别乘以固定的权重加上偏置项  。神经元会计算传送过来的信号的 总和,在经过一个符号函数 sign()输出最终的值 (激活函数)。
                                        
       (注:-1也常常用0表示)
        因此,感知机是一个 二分类模型会产生一个线性分割超平面

1.2 w与b的作用   

        w 是控制输入信号的 重要性的参数 ,而 b 是调整 神经元被激活的容易程度 (输出信号为1 的程度)的参数。比如,若 b 0 . 1 ,则只要输入信号的加权总和超过 0 . 1 ,神经元就会被激活。但是如果 b 20 . 0 ,则输入信号的加权总和必须超过 20 . 0 ,神经元才会被激活。像这样, 偏置的值决定了神经元被激活的容易程度。对于只有一个神经元的感知机,W与b可以初始化为0。

1.3 数据集的线性可分性

          因此 感知机不能完全拟合只能由弯曲的曲线分割的数据集 (但是可以部分拟合),如下图XOR函数(异或)
                                                
           任何一个线性分割面都无法完全划分这两个不同的点

1.4 损失函数 

      损失函数的一个自然选择是误分类点的总数,但是这样损失函数与w和b无关,不是参数w和b的连续可导函数,不易优化。

        于是,感知机采用误分类点到超平面S的总距离,如下图

                                ​​​​​​​        ​​​​​​​        ​​​​​​​

超平面S:​​​​​​​—用向量/矩阵表示—WX + b=0

        单个​​​​​​​样本到超平面S的距离如下公式

其中​​​​​​​

        对于每个误分类样本来说,都有​​​​​​​​​​成立,其中yi是xi样本对应的真实标签值。原因如下:

        1.当yi=1,而wxi + b<=0,此时会错误的预测标签值为-1,上述式子成立。而且有下式:​​​​​​​

         2.当yi=-1,而wxi + b>0,此时会错误的预测标签值为-1,​​​​​​​上述式子成立。而且有下式:

        

        于是误分类点到超平面S的总距离可以表示为下式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​

        此外,1/||w||用来归一化超平面法向量,得到几何间隔,也就是点到超平面的距离,但超平面只要能够将两类样本分类开即可,下图中两条线都是正确的

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        于是忽略掉1/||w||,最终感知机的损失函数为:

                ​​​​​​​        ​​​​​​​

1.5. 感知机的优化器

        对于感知机来说,极小化过程中不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降,因此感知机的优化器使用的是随机梯度下降(SGD)。

        对于一个误分类点,计算该点损失函数的梯度:

    

        更新w,b

代码实现

# 训练参数
epochs = 100
η = 0.1

# 感知机
def perceptron(X, y, η, epochs):
    n_samples, n_features = X.shape
    # 初始化权重参数
    w = np.zeros(n_features)
    b = 0
    for epoch in range(epochs):
        for i in range(n_samples):
            # 预测值
            y_pred = 1 if (np.dot(X[i], w) + b) > 0 else -1            
            # 随机梯度下降法随机选择一个误分点进行参数更新
            if -y[i]*(np.dot(X[i], w) + b)>=0:
                w = w + η * X[i] * y[i]
                b = b + η * y[i]
                loss += 1
    return w, b

# 预测函数
def predict(X,w):
    y_pred = np.where(np.dot(X,w)+b>0,1,-1)
    return y_pred

w,b = perceptron(trainx,trainy,η,epochs)

5.多层感知机

5.1使用多层感知机解决非线性问题

        使用多层感知机解决异或问题:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

5.2 多层感知机的基本结构

       通过在结构中加入一个或多个隐藏层来克服线性模型的限制, 使其能处理更普遍的函数关系类型。 要做到这一点,最简单的方法是将许多全连接层堆叠在一起,(全连接的意思就是:上一层的任何一个神经元与下一层的所有神经元都有连接)。 3层感知机的示例下所示:

5.3 前向传播

        假设有m个样本n个特征的X作为输入层,一个隐藏层的神经元个数为h,则隐藏层的权重矩阵W_h的大小为n×h(每个特征与每个神经元对应一个权重),偏置矩阵b_h大小为1×h

        则隐藏层的输入H为:

                H_m×h =XW_h +  b_h                                                                       

        假设输出的标签值有q个,则输出层的权重矩阵W_o的大小为h×q,偏置矩阵b_h大小为1×q

        隐藏层的输出O为:

                O_m×q = HW_o + b_o(每个输入x都对应一个输出值)                                     

5.4 激活函数

        如果不加上激活函数,上式仅仅是对数据进行了线性变换,仍然是单层网络

                H = XW_h +  b_h (线性函数)

                O = HW_o + b_o=(XW_h + b_h)W_o + b_o=XW_hW_o + b_hW_o  + b_o 

        将上式子b=b_hW_o  + b_o,W=W_hW_o,所以结果仍然是仍然是一个XW + b

引入激活函数对结果进行非线性变换,计算式为:

        H = σ(XW_h +  b_h)                (σ为激活函数)

引入非线性后,使网络可以逼近任意非线性函数

常见的激活函数有:Relu函数、sigmoid函数以及tanh函数。

1. Relu函数

        

Relu(x) = max(x,0),计算非常简单

其导函数图像为:

        

不存在梯度消失现象

2. Sigmoid函数

    

Sigmoid函数可以将输入的任何值映射到(0,1)。注意,当输入接近0时,sigmoid函数接近线性变换

导函数图像如下:

               

        当输入为0时,sigmoid函数的导数达到最大值0.25; 而输入在任一方向上越远离0点时,导数越接近0(饱和区梯度消失现象),此时不利于参数更新。

3. tanh函数(双曲正切函数)

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

tanh函数可以将输入的任何值映射到(-1,1)

        ​​​​​​​    

        注意,当输入在0附近时,tanh函数接近线性变换。 函数的形状类似于sigmoid函数, 不同的是tanh函数关于坐标系原点中心对称

导函数图像如下图所示:

        ​​​​​​​      

        当输入接近0时,tanh函数的导数接近最大值1。同样存在饱和区梯度消失现象。

        

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值