精华内容
下载资源
问答
  • 神经网络分类
    千次阅读
    2021-02-18 20:30:34

    概念:人工神经网络是在现代神经生物学研究基础上提出的模拟生物过程,反映人脑某些特性的一种计算结构。

    人工神经元模型中的激活函数
    在这里插入图片描述
    其中 w_i·x_i为输入信号加权,θ为阈值(偏置量)
    常见的形式有四种:

    1. 阶跃式
    2. sigmoid
    3. ReLu
    4. ELu

    人工神经元网络

    神经元与神经元之间彼此连接成复杂的网络才有用。有两种主要的人工神经元网络。

    前馈型神经网络

    信息时有层次的,总是从前一层的神经元单向传递到下一层
    在这里插入图片描述
    隐含层的神经元是外界无法直接访问的,与输入输出层以及隐含层神经元互相之间的连接是人工神经元网络实现复杂功能的核心。

    前馈型神经网络是一个静态的模型,当前时刻的网络输出与历史时刻的网络输入输出无关,给定输入就可以得到输出。

    反馈型神经网络

    是一种存在从靠近输出端的神经元向靠近输入端的神经元的信息传递网络,后端的输出会链接到更考前的神经元的输入上,与之前的输入输出有关,是有“记忆”的。

    输出层到输入层的反馈——>Hopfield
    后一层向前一层的反馈 ——>受限玻尔兹曼机
    无明显层次,相互链接——> 任意反馈链接

    ★输入与输出的映射关系是由其内部结构和参数(最优权向量、偏置量θ)共同决定的。

    特点:

    • 有简单单元构成的复杂网络
    • 本质上进行大规模的并行计算
    • 分布式信息存储
    • 自适应学习能力强

    主流方案

    GPU:远不是对于计算机图形进行高速处理的芯片
    FPGA:现场可编程门阵列,是一种可以通过软件编程改变电路结构的半定制大规模集成电路
    专门设计的AI芯片:包含GPU和 FPGA的元素

    人工神经元的学习规则

    分为单神经元和多神经元,多神经元由单神经元添加层次或者是参数实现

    完整的神经网络训练问题可以分为两个层次研究

    1. 每个神经元如何根据输入输出数据来学习到自身最优的参数
    2. 如何使得到网络中的所有神经元都能获得有效的输入输出来完成自身的学习

    在这里插入图片描述
    通过增加一个取值固定的-1的维度,构成n+1维的输入的权值和偏置量。则将激活函数转化为
    在这里插入图片描述
    对于每一个神经元来说,它是用输入信号与偏置量之间的线性组合构成净激励,再用净激励通过激活函数去激发输出。

    ★直接求最优权值较为困难,通过递推不断修正w的解 △w
    w(k+1)=w(k)+ △w(t)

    如何求解设定△w?
    在这里插入图片描述
    △w(t):t时刻神经元权值的修正量
    x(t):输入向量
    y(t):输出向量
    Yd(t):x(t)对应的期望输出
    r:学习信号
    η:学习速率

    两种神经元的学习规则

    误差反馈学习

    学习目标通过逐步递推修正权向量使得误差减小直至消失
    r=r(e(t)) e(t)=Yd(t)-y(t)

    感知器算法

    在这里插入图片描述
    在这里插入图片描述
    为学习信号
    所有的神经元学习规则其权向量修正值都是由学习速率与学习信号及输入向量相乘构成。
    感知器的激活函数是一个阶跃函数

    △w(t)=±ηx(t),x∈错分样本

    整体神经网络学习规则

    并不是所有输入输出层都能与外界相连,大致有三种学习方案

    逐层更新学习

    适用于前馈网络
    (1)无监督学习模式
    在所有神经元的状态更新完成后,可以进行每个神经元的权向量调整,逐一完成。
    (2)有监督学习
    需要从输出层开始,从输出误差估计输入误差,将误差传递给所有的神经元
    状态更新——>误差更新——>神经元学习

    竞争学习

    指在同一层中,接受相同输入的神经元,输出最大的一个获胜,可以调整权向量,调整规则 △w(t)=η(x(t)-w(t))
    用训练集样本训练网络时,可以使每个神经元的权向量逐步逼近样本集的聚类中心,

    更多相关内容
  • 目录前置知识1、前言2、人工神经网络模型2.1、神经元模型与单层神经网络2.2、多层人工神经网络模型人工神经网络分类算法1、构建数据集2、响应函数3、模型训练4、测试样本分类 前置知识 1、前言 紧接着前面两篇关于...

    前置知识

    1、前言

    紧接着前面两篇关于分类算法的文章,今天我们来讲一讲人工神经网络分类算法,本文算法代码实现部分的数据与之前两篇一致,大家可自行查看:
    【python代码实现】决策树分类算法
    【python代码实现】朴素贝叶斯分类算法

    2、人工神经网络模型

    2.1、神经元模型与单层神经网络

    人工神经网络中最基本的成分是神经元模型,也称MP神经元模型。在这个模型中,神经元接收到来自其他神经元传递过来的信息,如图中的箭头称之为连接。连接是神经元中最重要的东西,每一个连接上都有一个权重,输入信号通过带权重的连接进行传递,神经元接收到的总输入值与神经元阀值进行比较,然后通过激活函数处理以产生神经元输出。
    在这里插入图片描述
    在MP神经元模型的输入位置添加神经元节点,标志其为“输入单元”,输入层的输入单元只负责接收信号后传递给输出层;而输出层的输出单元需要对前面一层的输入进行计算。我们把需要计算的层次称为计算层,并把拥有一个计算层的网络称之为单层神经网络

    2.2、多层人工神经网络模型

    单层神经网络本质上是若干个权重与信号的线性组合,无法解决非线性问题。因此在此基础上加入隐含层,发展出可以解决非线性问题的多层神经网络
    在这里插入图片描述
    多层神经网络实际上是将多个神经元进行组合,用不同的方法进行连接并作用到激活函数上,一般使用的激活函数是Sigmoid函数

    之所以选用Sigmoid函数,主要是它与正态高斯分布函数图像接近;符合日常生活大多数现象且计算简单,可降低算法计算开销。
    在这里插入图片描述
    与文章【实战】——以波士顿房价为例进行数据的相关分析和回归分析中逻辑回归部分相似,这里的模型以是否买产品将数据分为0/1类,也就是目标值y;其对应的输入矩阵x与权重矩阵相乘得到另一个数据,称之为预测值y’。预测值与真实值之间的距离越小,损失也越小,模型越准确。

    神经网络算法的基本思路是:从随机设置的权重开始,通过网络输出与实际样本之间的误差来调整权重,使得输出样本与样本观测值之间的误差不断减小来完成模型训练。

    人工神经网络分类算法

    1、构建数据集

    # 构建数据集
    def createdataset():
        dataSet=[[0,2,0,0,0],
                [0,2,0,1,0],
                [1,2,0,0,1],
                [2,1,0,0,1],
                [2,0,1,0,1],
                [2,0,1,1,0],
                [1,0,1,1,1],
                [0,1,0,0,0],
                [0,0,1,0,1],
                [2,1,1,0,1],
                [0,1,1,1,1],
                [1,1,0,1,1],
                [1,2,1,0,1],
                [2,1,0,1,0],]
        labels=['age','income','job','credit']
        return dataSet,labels
    

    与之前的分类算法不同,这里将数据分类标签‘Y/N’改为了0/1

    ds1,lab = createdataset()
    x = np.array(ds1)[:,0:4]
    y = np.array(ds1)[:,4].reshape(14,1)
    print(x)
    print(y)
    

    因为后续的计算都是基于二维矩阵的,所以这里将目标值y转化为二维数组。

    2、响应函数

    # 响应函数
    def nonlin(x,deriv=False):
        if(deriv==True):
            return x*(1-x)
        return 1/(1+np.exp(-x))
    

    相应函数充分利用了Sigmoid函数的数学特征,简化了计算

    3、模型训练

    # 中间层/隐含层系数矩阵
    syn0 = np.random.random((4,4))
    # 输出层系数
    syn1 = np.random.random((4,1))
    print('算法开始前,随机系数矩阵:')
    print("syn0:",str(syn0))
    print("syn1:",str(syn1))
    

    在这里插入图片描述

    首先,先产生一个随机矩阵作为模型的权重系数矩阵;然后再经过训练得出模型的系数矩阵:

    for i in range(1000):
        # 计算误差
        layer0 = x
        layer1 = nonlin(np.dot(layer0,syn0))
        layer2 = nonlin(np.dot(layer1,syn1))
        
        layer2_error = y - layer2
        # 每循环200,输出一次系数矩阵
        if((i+1)%200)==0:
            print("After:",i)
            print("Error:",np.mean(np.abs(layer2_error)))
            print("syn0:\n",syn0)
            print("syn1:\n",syn1)
        # 梯度下降法调整系数矩阵
        layer2_delta = layer2_error*nonlin(layer2,deriv=True)
        layer1_error = layer2_delta.dot(syn1.T)
        layer1_delta = layer1_error*nonlin(layer1,deriv=True)
        
        syn0 += layer0.T.dot(layer1_delta)
        syn1 += layer1.T.dot(layer2_delta)
    

    这里循环1000次,利用梯度下降法调整系数矩阵,使得误差收敛。为了便于观察迭代效果,每运行200输出一次误差Error和系数矩阵:
    在这里插入图片描述
    直到循环结束:
    在这里插入图片描述
    到此,我们就已经得到了一个误差为0.02的模型了。

    4、测试样本分类

    与之前的分类算法一样,我们对新的测试数据进行分类,看结果是否正确:

    ly = [0,2,0,1]
    ly1 = nonlin(np.dot(ly,syn0))
    ly2 = nonlin(np.dot(ly1,syn1))
    print("Test input:"+str(ly)+";Test output:"+str(ly2))
    

    Test input:[0, 2, 0, 1];Test output:[0.00784408]

    ly0 = [0,0,1,1]
    ly01 = nonlin(np.dot(ly0,syn0))
    ly02 = nonlin(np.dot(ly01,syn1))
    print("Test input:"+str(ly0)+";Test output:"+str(ly02))
    

    Test input:[0, 0, 1, 1];Test output:[0.99941724]

    可以看到结果与决策树分类算法、朴素贝叶斯分类算法的结果一致,进一步证明了结果的正确性。

    案例:股票价格波动分析

    1、数据来源

    案例股票是中国平安保险集团股份有限公司(601318),2016-01-01至2020-12-31的开盘价、最高价、最低价、收盘价和日收益率,数据来自锐思金融数据库,共1218个数据。
    在这里插入图片描述

    2、变量与指标

    输入矩阵由4个基于5天预测时段的收益率(rdp5、rdp10、rdp15、rdp20)和转变后的收盘价(ema15)5个分量组成。

    rdpn = (p(i+5 - n) - p(i - n))/p(i - n) * 100
    ema15是当天收盘价减去前15天价格指数滑动平均值

    输出变量(rdp)是首先分别将当天与其后第5天的原始收盘价转换为各自前3天的指数滑动平均值,在以此求收益率。

    指标均方误差(MSE)与平均绝对误差(MAE)用于衡量真实值与预测值之间的偏差度,值越小预测越好。

    3、数据处理

    模型主要用到的是收盘价,因此将数据提取出来并转化为浮点数:

    f1 = csv.reader(open('a601318.csv'))
    closeprice = [row[4] for row in f1]
    del closeprice[0]
    p = list(map(float,closeprice))
    len(p)
    

    4、指标计算

    计算指标rdp5、rdp10、rdp15、rdp20:

    rdp5 = []
    for i in range(len(p)):
        if i > 5:
            rdp5.append((p[i]-p[i-5])/p[i-5]*100)
    rdp5 = rdp5[14:1211]
    
    rdp10 = []
    for i in range(len(p)):
        if i > 10:
            rdp10.append((p[i-5]-p[i-10])/p[i-10]*100)
    rdp10 = rdp10[9:1206]
    
    rdp15 = []
    for i in range(len(p)):
        if i > 15:
            rdp15.append((p[i-10]-p[i-15])/p[i-15]*100)
    rdp15 = rdp15[4:1201]
    
    rdp20 = []
    for i in range(len(p)):
        if i > 20:
            rdp20.append((p[i-15]-p[i-20])/p[i-20]*100)
    

    计算指标ema15:

    def get_ema(cps,days):
        emas = cps.copy()
        for i in range(len(cps)):
            if i < 15:
                emas[i] = cps[i]
            if i >= 15:
                emas[i] = ((days-1)*emas[i-1]+2*cps[i])/(days+1)
        return emas
    
    ema = get_ema(p,15)
    ema15 = [p[i] - ema[i] for i in range(len(p))]
    ema15 = ema15[20:1217]
    

    计算指标rdp:

    p1 = get_ema(p,3)
    rdp = []
    for i in range(len(p1)):
        if i < len(p1)-5:
            rdp.append((p1[i+5]-p[i])/p1[i]*100)
    rdp = rdp[15:1212]
    

    4、模型训练

    构造数据集:

    data = pd.DataFrame()
    data['rdp5'] = np.array(rdp5)
    data['rdp10'] = np.array(rdp10)
    data['rdp15'] = np.array(rdp15)
    data['rdp20'] = np.array(rdp20)
    data['ema15'] = np.array(ema15)
    target = pd.DataFrame()
    target = np.array(rdp)
    

    将数据集分为训练集测试集:

    x_train,x_test,y_train,y_test = train_test_split(data,target,random_state=7,test_size=0.1)
    print(len(x_train),len(x_test),len(y_train),len(y_test))
    print(y_test[0:5])
    

    模型训练:

    mlplr = MLPRegressor(activation='logistic',learning_rate='adaptive')
    mlplr.fit(x_train,y_train)
    

    这里构造了多层感知回归器mlplr,它本质上是一个基于人工神经网络的回归方程。使用logistic(Sigmoid)函数作为神经元的激活函数,学习率采用adaptive自适应方式。

    5、模型预测及可视化

    mlplr_y_predict = mlplr.predict(x_test)
    print('MSE:',"%.4f"%mean_squared_error(y_test,mlplr_y_predict))
    print('MAE:',"%.4f"%mean_absolute_error(y_test,mlplr_y_predict))
    

    MSE: 0.0365
    MAE: 0.1552

    从模型的MSE、MAE来看,测试集的预测数据与实际数据吻合较为理想

    point = []
    for i in range(len(x_test)):
        a=1+i
        point.append(a)
    plt.plot(point,mlplr_y_predict,color='r',linestyle='-',label='predicted values in MLP')
    plt.plot(point,y_test,color='c',linestyle='-',label='actual values')
    plt.xlabel('Test data points')
    plt.ylabel('Normalized target value')
    plt.legend()
    plt.show()
    

    在这里插入图片描述

    结语

    神经网络的发展非常迅速,其在金融中的股票市场预测、借贷风险管理、信用卡欺骗检测等应用领域取得较好结果。

    关于分类算法的文章就讲到这里啦,大家如果觉得文章不错的话,记得收藏、点赞、关注三连~

    【python代码实现】决策树分类算法
    【python代码实现】朴素贝叶斯分类算法
    【python代码实现】人工神经网络分类算法及其实战案例(股票价格波动分析)本文
    以上三篇文章的代码和数据我已经整理完整上传至我的资源了,大家可以下载下来练习哦

    展开全文
  • 利用交叉验证方法检验所建立的BP神经网络分类效果,该程序是基于5折交叉验证对所建立的神经网络进行检验。
  • 神经网络分类总结

    千次阅读 2021-04-10 17:26:32
    神经网络分类 人工智能、机器学习与深度学习 人工智能:努力将通常由人类完成的智力任务自动化。 机器学习机器学习( machine learning)是人工智能的一个特殊子领域,其目标是仅靠观察训练数据来自动开发程序...

    1.人工智能、机器学习与深度学习

    • 人工智能:努力将通常由人类完成的智力任务自动化。
    • 机器学习机器学习( machine learning)是人工智能的一个特殊子领域,其目标是仅靠观察训练数据来自动开发程序[即模型( model)]。
    • 深度学习是机器学习的一个分支领域:它是从数据中学习表示的一种新方法,强调从连续的层( layer)中进行学习。“深度学习”中的“深度”指的并不是利用这种方法所获取的更深层次的理解,而是指一系列连续的表示层。数据模型中包含多少层,这被称为模型的深度( depth)。

    人工智能、机器学习与深度学习关系如图 1所示。在深度学习中,这些分层表示几乎总是通过叫作神经网络 neural network)的模型来学习得到的。以下主要讨论神经网络的分类     

      

    1. 人工智能、机器学习与深度学习

    人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型。该模型以并行分布的处理能力、高容错性、智能化和自学习等能力为特征,将信息的加工和存储结合在一起,以其独特的知识表示方式和智能化的自适应学习能力,引起各学科领域的关注。它实际上是一个有大量简单元件相互连接而成的复杂网络,具有高度的非线性,能够进行复杂的逻辑操作和非线性关系实现的系统。

    2.神经网络分类

     

    可以从不同的角度对人工神经网络进行分类

    • 从网络性能角度可分为连续型与离散型网络、确定性与随机性网络。
    • 从网络结构角度可为前向网络与反馈网络。
    • 从学习方式角度可分为有导师学习网络和无导师学习网络。
    • 按连续突触性质可分为一阶线性关联网络和高阶非线性关联网络。

     

    3. 单层神经网络

    所谓单层前向网络是指拥有的计算节点(神经元)是“单层”的,如图 2所示。这里表示源节点个数的“输入层”被看做一层神经元,因为该“输入层”不具有执行计算的功能。

    2. 单层前向网络

     

     

    4.前馈神经网络

    前馈神经网络(feedforward neural network,FNN),如图 3所示。

    3. 多层前馈神经网络结构示意图

    多层前向网络与单层前向网络的区别在于:多层前向网络含有一个或更多的隐含层,其中计算节点被相应地称为隐含神经元或隐含单元,如图 4所示

    4. 多层前向网络

     

    4.1 单层前馈神经网

    4.1.1 感知器

    感知器(Perceptron)由两层神经元组成。如图 5所示,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,也称为“阈值逻辑单元”。 主要用于分类。

     

     

    5. 两个输入神经元的感知机网络结构示意图

    优点:感知器模型简单易于实现。

    缺点:仅能解决线性可分问题。

    4.2 多层前馈神经网络

    4.2.1 径向基神经网络

    径向基函数 RBF 神经网络((Radial Basis Function,RBF)是一个只有一个隐藏层的三层前馈神经网络结构,它与前向网络相比最大的不同在于,隐藏层得转换函数是局部响应的高斯函数,而以前的前向网络、转换函数都是全局响应的函数。由于这样的不同,如果要实现同一个功能,RBF 网络的神经元个数就可能要比前向 BP 网络的神经元个数要多。 但是,RBF 网络所需要的训练时间却比前向 BP 网络的要少。

    主要功能:图像处理,语音识别,时间系列预测,雷达原点定位,医疗诊断,错误处理检测,模式识别等。RBF网络用得最多之处是用于分类,在分类之中,最广的还是模式识别问题,次之是时间序列分析问题。

    神经网络有很强的非线性拟合能力,可映射任意复杂的非线性关系,而且学习规则简单,便于计算机实现。具有很强的鲁棒性、记忆能力、非线性映射能力以及强大的自学习能力,因此有很大的应用市场。

    优点:

    1. 具有唯一最佳逼近的特性,且无局部极小问题存在。
    2. RBF神经网络具有较强的输入和输出映射功能,并且理论证明在前向网     络中RBF网络是完成映射功能的最优网络。
    3. 网络连接权值与输出呈线性关系。
    4. 分类能力好。
    5. 学习过程收敛速度

    局限性:

    1. 最严重的问题是没能力来解释自己的推理过程和推理依据。
    2. 不能向用户提出必要的询问,而且当数据不充分的时候,神经网络就无法进行工作。
    3. 把一切问题的特征都变为数字,把一切推理都变为数值计算,其结果势必是丢失信息。
    4. 理论和学习算法还有待于进一步完善和提高。
    5. 隐层基函数的中心是在输入样本集中选取的, 这在许多情况下难以反映出系统真正的输入输出关系, 并且初始中心点数太多; 另外优选过程会出现数据病态现象。

    4.2.1.1 广义回归神经网络(General Regression Neural Network,GPNN)

    径向基神经元和线性神经元可以建立广义回归神经网络(图 6),它是径RBF网络的一种变化形式,经常用于函数逼近。在某些方面比RBF网络更具优势。GRNN与PNN一样也是一个四层的网络结构:输入层、模式层、求和层、输出层。

    图 6. 广义回归神经网络

    • 优点:GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预测效果很好, 网络还可以处理不稳定数据。广义回归神经网络对x的回归定义不同于径向基函数的对高斯权值的最小二乘法叠加,他是利用密度函数来预测输出。

     

    • 与PNN的区别:GRNN用于求解回归问题,而PNN用于求解分类问题。

     

    4.2.1.2 概率神经网络(Probabilistic Neural Network,PNN)

    径向基神经元和竞争神经元还可以组成概率神经网络。PNN也是RBF的一种变化形式,结构简单训练快捷,特别适合于模式分类问题的解决。理论基础是贝叶斯最小风险准则,即是贝叶斯决策理论。

    结构:由输入层、隐含层、求和层、输出层组成。也把隐含层称为模式层,把求和层叫做竞争层,如图 7所示。

     

    7. PNN网络结构

     

    第一层为输入层,用于接收来自训练样本的值,将数据传递给隐含层,神经元个数与输入向量长度相等。

    第二层隐含层是径向基层,每一个隐含层的神经元节点拥有一个中心,该层接收输入层的样本输入,计算输入向量与中心的距离,最后返回一个标量值,神经元个数与输入训练样本个数相同。

     

    • 优点:训练容易,收敛速度快,从而非常适用于实时处理。在基于密度函数核估计的PNN网络中,每一个训练样本确定一个隐含层神经元,神经元的权值直接取自输入样本值。口可以实现任意的非线性逼近,用PNN网络所形成的判决曲面与贝叶斯最优准则下的曲面非常接近。
    • 隐含层采用径向基的非线性映射函数,考虑了不同类别模式样本的交错影响,具有很强的容错性。只要有充足的样本数据,概率神经网络都能收敛到贝叶斯分类器,没有BP网络的局部极小值问题。
    • 隐含层的传输函数可以选用各种用来估计概率密度的基函数,且分类结果对基函数的形式不敏感。
    • 扩充性能好。网络的学习过程简单,增加或减少类别模式时不需要重新进行长时间的训练学习。
    • 各层神经元的数目比较固定,因而易于硬件实现。

    4.2.2 BP神经网络(Back Propagation,BP)

    强化多层神经网络的训练,必须引入算法,其中最成功的是误差逆传播算法(Back Propagation,简称BP算法)。BP算法不仅用于多层前馈神经网络,还可以用于训练递归神经网络。解决了多层神经网络隐含层连接权学习问题,并在数学上给出了完整推导。人们把采用这种算法进行误差校正的多层前馈网络称为BP神经网络。

    BP神经网络网络主要四个方面的应用:

    1. 函数逼近:用输入向量和相应的输出向量训练一个网络逼近一个函数。
    2. 模式识别:用一个待定的输出向量将它与输入向量联系起来。
    3. 分类:把输入向量所定义的合适方式进行分类。
    4. 数据压缩:减少输出向量维数以便于传输或存储。

    优点

    1. BP神经网络最主要的优点是具有极强的非线性映射能力。
    2. BP神经网络具有对外界刺激和输入信息进行联想记忆的能力。
    3. BP 神经网络通过预先存储信息和学习机制进行自适应训练,可以从不完整的信息和噪声干扰中恢复原始的完整信息。这种能力使其在图像复原、语言处理、模式识别等方面具有重要应用。
    4. BP 神经网络对外界输入样本有很强的识别与分类能力。由BP 神经网络具有优化计算能力。
    5. BP神经网络本质上是一个非线性优化问题, 它可以在已知的约束条件下,寻找一组参数组合,使该组合确定的目标函数达到最小。

    局限性

    1. 由于BP网络训练中稳定性要求学习效率很小,所以梯度下降法使得训练很慢。
    2. 对于非线性系统,选择合适的学习率是一个重要的问题。在
    3. 非线性网络的误差面比线性网络的误差面复杂得多,问题在于多层网络中非线性传递函数有多个局部最优解。
    4. 网络隐层神经元的数目也对网络有一定的影响。神经元数目太少会造成网络的不适性,而神经元数目太多又会引起网络的过适性。

    4.2.3 全连接神经网络

    全连接神经网络(fully connected neural network),顾名思义,就是相邻两层之间任意两个节点之间都有连接。全连接神经网络是最为普通的一种模型(比如和CNN相比),由于是全连接,所以会有更多的权重值和连接,因此也意味着占用更多的内存和计算。

    如定义了一个两层的全连接神经网络。

     

    图 8. 两层全连接神经网络

    4.2.4 卷积神经网络(Convolutional Neural Networks, CNN)

    卷积神经网络CNN(Convolutional Neural Networks, CNN)可以应用在场景分类,图像分类,现在还可以应用到自然语言处理(NLP)方面的很多问题,比如句子分类等。

    优点:

    • 与传统的多层感知器-MLP相比,CNN中卷积层的权值共享使网络中可训练的参数边少,降低了网络模型复杂度,较少过拟合,从而获得一个更好的泛化能力。
    • CNN结构中使用池化操作使得模型中的神经元个数大大的减少,对输入空间的平移不变行也更有鲁棒性
    • CNN结构的拓展性很强,它可以采用很深的层数,深度模型具有更强的表达能力,能够处理更复杂的分类问题
    • CNN的局部连接、权值共享和池化操作比传统的MLP具有更少的连接和参数,更易于训练。

    4.3 线性神经网络

    线性神经网络最典型的例子是自适应线性元件(Adaptive Linear Element,Adaline)。自适应线性元件 20 世纪 50 年代末由 Widrow 和 Hoff 提出,主要用途是通过线性逼近一个函数式而进行模式联想以及信号滤波、预测、模型识别和控制等。

     

    主要功能:

    1. 线性预测
    2. 自适应滤波噪声抵消
    3. 自适应滤波系统辨识

     

    优点:线性神经网络只能反应输入和输出样本向量空间的线性映射关系。由于线性神经网络的误差曲面是一个多维抛物面,所以在学习速率足够小的情况下,对于基于最小二乘梯度下降原理进行训练的神经网络总是可以找到一个最优解。

    局限性:线性神经网络的训练并不能一定总能达到零误差。线性神经网络的训练性能要受到网络规模、训练集大小的限制。

     

    线性神经网络与感知器的主要区别:

    • 感知器的传输函数只能输出两种可能的值,而线性神经网络的输出可以取任意值,其传输函数是线性函数。
    • 线性神经网络采用Widrow-Hoff 学习规则,即 LMS(Least Mean Square)算法来调整网络的权值和偏置。线性神经网络在收敛的精度和速度上较感知器都有了较大提高,但其线性运算规则决定了它只能解决线性可分的问题。
    • 线性神经网络在结构上与感知器网络非常相似,只是神经元传输函数不同。

     

     

    图 9. 线性神经网络的结构

     

    4.3.1 Madaline 神经网络

    若网络中包含多个神经元节点,就能形成多个输出,这种线性神经网络叫Madaline神经网络。

     

    图 10. Madaline结构图

    Madaline 可以用一种间接的方式解决线性不可分的问题,方法是用多个线性函数对区域进行划分,然后对各个神经元的输出做逻辑运算。如图所示,Madaline 用两条直线实现了异或逻辑。

    5.反馈型神经神经网络

    反馈网络是指在网络中至少含有一个反馈回路的神经网络。反馈网络可以包含一个单层神经元,其中每个神经元将自身的输出信号反馈给其他所有神经元的输入反馈神经网络中神经元不但可以接收其他神经元的信号,而且可以接收自己的反馈信号。和前馈神经网络相比,反馈神经网络中的神经元具有记忆功能,在不同时刻具有不同的状态。反馈神经网络中的信息传播可以是单向也可以是双向传播,因此可以用一个有向循环图或者无向图来表示。

     

    5.1 递归神经网络(Recurrent neural network,RNN)

    与前馈神经网络不同"递归神经网络" (recurrent neural networks)允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号.这样的结构与信息反馈过程,使得网络在 t 时刻的输出状态不仅与 t 时刻的输入有关,还与 t - 1 时刻的网络状态有关,从而能处理与时间有关的动态变化。

     

    5.1.1 Elman网络

     

    图 11. Elman网络结构

    基本的Elman伸进网络由输入层、隐含层、连接层、输出层组成。与BP网络相比,在结构上了多了一个连接层,用于构成局部反馈。

    特点

    1. 连接层的传输函数为线性函数,但是多了一个延迟单元,因此连接层可以记忆过去的状态,并在下一时刻与网络的输入一起作为隐含层的输入,使网络具有动态记忆功能,非常适合时间序列预测问题。
    2. 输出层和连接层的的传递函数为线性函数,隐含层的传递函数则为某种非线性函数,如Sigmoid函数。由于隐含层不但接收来自输入层的数据,还要接收连接层中存储的数据,因此对于相同的输入数据,不同时刻产生的输出也可能不同。输入层数据反映了信号的空域信息,而连接层延迟则反映了信号的时域信息,这是Elman网络可以用于时域和空域模式识别的原因。

     

    主要应用:Elman网络主要用于信号检测和预测方面

    优点:

    1. 具有自组织、自学习的特征。在Elman神经网络模型中增加了隐层及输出层节点的反馈,因而更进一步地增强了网络学习的精确性和容错性。
    2. 利用Elman神经网络建立的网络模型,对具有非线性时间序列特征的其它应用领域都具有较好地应用前景,它具有较强的鲁棒性、良好的泛化能力、较强的通用性和客观性,充分显示出神经网络方法的优越性和合理性,这种神经网络方法在其它领域预测和评价方面的使用将具有较好的实际应用价值

       

    5.2 Hopfield神经网络

    一种基于能量的模型(Energy Based Model,EBM)——可用作联想存储的互连网络,称该模型为 Hopfield 网络。

    主要应用:Hopfield网络主要用于联想记忆、聚类以及优化计算等方面。

     

    根据其激活函数的不同,Hopfield 神经网络有两种:

    1. 离散Hopfield 网络(Discrete Hopfield Neural Network,DHNN)
    2. 连续Hopfield 网络(Continues Hopfield Neural Network,CHNN)。

    从图 12中可以看出每个神经元的输出都成为其他神经元的输入,每个神经元的输入又都来自其他神经元。神经元输出的数据经过其他神经元之后最终又反馈给自己。

     

    12. Hopfield网络的网状结构

    局限性:

    1. 在具体神经网络实现中要保证连接权矩阵是对称的;
    2. 在实际的神经网络实现中, 总会存在信息的传输延迟, 这些延迟对神经网络的特性有影响。
    3. 神经网络实现中的规模问题, 即集成度问题。

    5.2.1 离散Hopfield网络

    输出值只能取0或1,分别表示神经元的抑制和兴奋状态。如图 13所示输出神经元的取值为0/1或-1/1。对于中间层,任意两个神经元间的连接权值为wij = wji ,神经元的连接是对称的。如果wij等于0,即神经元自身无连接,则成为无自反馈的Hopfield网络,如果wij != 0,则成为有自反馈的Hopfield网络。但是出于稳定性考虑,一般避免使用有自反馈的网络。

     

    13. 离散Hopfield网络

    5.2.2 连续Hopfield网络

    连续的Hopfield网络结构和离散的Hopfield网络的结构相同,不同之处在于传输函数不是阶跃函数或符号函数,而是S型的连续函数,如sigmoid函数。每个神经元由一个运算放大器和相关的元件组成,其输入一方面由输出的反馈形成,另一方面也有以电流形式从外界连接过来的输入。

     

    5.3 盒中脑模型(BSB)

    盒中脑(Brain-State-in-a-Box,BSB)模型是一种节点之间存在横向连接和节点自反馈的单层网络,可以用作自联想最邻近分类器,并可存储任何模拟向量模式。该模型是一种神经动力学模型,可以看作是一个有幅度限制的正反馈系统。      

    特点:BSB模型实际上是一种梯度下降法,在迭代的过程中,使得能量函数达到最小。

     

    6 自组织神经网络

    6.1 竞争神经网络

    竞争型学习(compaetitive learning)是神经网络的中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个获胜的神经元被激活,其他神经元的状态被抑制,中级机制也别称为"胜者通吃"原则。

    特点:

    • 竞争神经网络的显著特点是它的输出神经元相互竞争以确定胜者,胜者指出哪一种原形模式最能代表输入模式。
    • Hamming 网络是一个最简单的竞争神经网络,如图 14所示。神经网络有一个单层的输出神经元,每个输出神经元都与输入节点全相连,输出神经元之间全互连。从源节点到神经元之间是兴奋性连接,输出神经元之间横向侧抑制。

     

    14. 最简单的竞争神经网络-Hamming网络

    6.2 自适应谐振理论网络(Adaptive Resonance Theory,ART)

    自适应谐振理论网络(Adaptive Resonance Theory,ART)是一种竞争学习型神经网络。该网络由比较层、识别层、识别阈和重要模块构成。其中,比较层负责接受输入样本,并将其传递给识别层神经元。识别曾每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。

     

    优点:课进行增量学习(incremental Learning)或者在线学习(online learning)

     

    6.3 自组织映射神经网络(Self-Organizing Map,SOM)

    SOM(Self-Organizing Map,自组织映射)网络,是一种竞争学习型的无监督神经网络,它能将高维输入数据映射到低维空间(通常是二维),同时保持输入数据在高维空间的拓扑结构,即将高维空间中想死的样本点映射到网络输出层中的邻近神经元。

    如图所示, SOM 网络中的输出层神经元以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量,网络在接收输入向量后,将会确定输出层获胜神经元,它决定了该输入向量在低维空间中的位置.

     

    图 15. SOM网络结构

     

    SOM的训练目标:每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的

     

    SOM训练过程:在接收到一个训练样本后.每个输出层神经局会计算该样本与自身携带的权向量之间的距离,距离最近的神经兀成为竞争获胜者,称为最佳匹配单元 (best matching unit). 然后,最佳匹配单元及其邻近神经

    元的权向量将被调整,以使得这些权向量与当前输入样本的距离缩小.这个过程不断迭代,直至收敛.

    与竞争神经网络的区别和联系

    联系

    • 非常类似,神经元都具有竞争性,都采用无监督的学习方式。
    • 同样包含输入层、输出层两层网络

    区别

    • 自组织映射网络除了能学习输入样本的分布外,还能够识别输入向量的拓扑结构。
    • 自组织网络中,单个神经元对模式分类不起决定性的作用,需要靠多个神经元协同作用完成。
    • 自组织神经网络输出层引入网络的拓扑结构,以更好的模拟生物学中的侧抑制现象。
    • 主要区别是竞争神经网络不存在核心层之前的相互连接,在更新权值时采用了胜者全得的方式,每次只更新获胜神经元对应的连接权值;而自组织神经网络中,每个神经元附近一定领域内的神经元也会得到更新,较远的神经元则不更新,从而使得几何上相近的神经元变得更相似。

    7 结构自适应神经网络

    一般的神经网络模型通常假定 网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权、 阙值等参数.与此不同, 结构自适应网络则将网络结构也当作学习的目标之 一,并希望能在训练过程中找到最利合数据特点的网络结构

     

    7.1 级联相关 (Cascade-Correlation) 网络

    级联相关 (Cascade-Correlation) 网络是结构自适应网络的重要代表。级联相关网络有两个主要成分"级联"和"相关" 级联是指建立层次连接的层级结构.在开始训练时,网络只有输入层和输出层,处于最小拓扑结构;随着训练的进行,如图 16所示,新的隐层神经元逐渐加入,从而创建起层级结构. 当新的隐层神经元加入时,其输入端连接权值是冻结固 定的相关是指通过最大化新神经元的输出与网络误差之间的相关性(correlation)来训练相关的参数.

     

    16. 级联相关网络的训练过程。新的隐结点加入时,红色连接权通过最大化新结占的输出与网终误差之间的相关性来讲行训练。

    优缺点:与一般的前馈神经网络相比,级联相关网络无需设置网络层数、隐层神经元数目,且训练速度较快,但其在数据较小时易 陷入过拟合

     

    8.对抗神经网络GAN

    对抗神经网络其实是两个网络的组合,可以理解为一个网络生成模拟数据,另一个网络判断生成的数据是真实的还是模拟的。生成模拟数据的网络要不断优化自己让判别的网络判断不出来,判别的网络也要不断优化自己让判断的更加精确。两者的关系形成对抗,因此叫对抗神经网络。

    结构:GAN由generator(生成模型)和discriminator(判别式模型)两部分构成。 二者结合之后,经过大量次数的迭代训练会使generator尽可能模拟出以假乱真的样本,而discrimator会有更精确的鉴别真伪数据的能力,最终整个GAN会达到所谓的纳什均衡,即discriminator对于generator的数据鉴别结果为正确率和错误率各占50%。

     

    图 17. GAN结构

    • generator网络:主要是从训练数据中产生相同分布的samples,对于输入x,类别标签y,在生成模型中估计其联合概率分布。
    • discriminator网络:判断输入的是真实数据还是generator生成的数据,即估计样本属于某类的条件概率分布。它采用传统的监督学习的方法。

    举例:如果用到图片生成上,则训练完成后,G可以从一段随机数中生成逼真的图像。G, D的主要功能是:

    • G是一个生成式的网络,它接收一个随机的噪声z(随机数),通过这个噪声生成图像
    • D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片

     

    图 18. 模型结构如下图所示。图的左侧是生成网络,右侧是判别网络。

     

    9 随机神经网络

    随机神经网络是对神经网络引入随机机制,认为神经元是按照概率的原理进行工作的,这就是说,每个神经元的兴奋或抑制具有随机性,其概率取决于神经元的输入。

     

    9.1 玻尔兹曼机(Boltzmann)

    在Hopfield网络中引入随机机制,提出了Boltzmann机,这是第一个由统计力学导出的多层学习机,可以对给定数据集的固有概率分布进行建模,可以用于模式识别等领域。得此名的原因是,它将模拟退火算法反复更新网络状态,网络状态出现的概率服从Boltzmann分布,即最下能量状态的概率最高,能量越大,出现的概率越低。

    由随机神经元组成,神经元分为可见神经元和隐藏神经元,与输入/输出有关的神经元为可见神经元,隐藏神经元需要通过可见神经元才能与外界交换信息。

    特点:Boltzmann机学习的主要目的在于产生一个神经网络,根据Bolazmann分布对输入模型进行正确建模,训练挽留过的权值,当其导出的可见神经元状态的概率分布和被约束时完全相同时,训练就完成了。

    • 训练过程

    Boltzmann 机的训练过程:将每个训练样本视为一个状态向量,使其出现的概率尽可能大.标准的 Boltzmann 机是一个全连接图,训练网络的复杂度很高,这使其难以用于解决现实任务. 现实中 常采用受限Boltzmann机(Restricted Boltzmann Machine,简称 RBM) . 如图 19所示,受限 Boltzmann 机仅保留显层与隐层之间的连接 从而将 Boltzmann 机结构由完全图简化为二部图。

     

    19. Boltzmann机与受限Boltzmann机

    展开全文
  • 基于MATLAB写的可对遥感影像进行BP神经网络分类的m文件,里面有测试图像数据,其中感兴趣区域数据是由ENVI选取的感兴趣区域保存而来。
  • 神经网络分类

    万次阅读 2017-09-19 15:37:27
    人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的...

    人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型。

    一、神经网络的发展

    1. 第一阶段-启蒙
      (1)M-P神经网络模型:40年代,美国心理学家麦克洛奇(Mcculloch)和数学家皮兹(Pitts)提出了M-P模型。这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-Pitts Model ),也称为神经网络的一个处理单元( PE, Processing Element )。此时并没有引入激活函数。
      这里写图片描述
      (2)Hebb规则(无监督学习规则):1949 年,心理学家赫布(Hebb)出版了《The Organization of Behavior》(行为组织学),他在书中提出了突触连接强度可变的假设。可变性是学习和记忆的基础 这里写图片描述
      (3)Delta学习规则(有监督学习规则):这里写图片描述
      (4)感知器模型:1957 年,罗森勃拉特(Rosenblatt)以M-P 模型为基础,提出了感知器(Perceptron)模型,激活函数实际为阶跃函数。即为单层的人工神经网络,以区别于较复杂的多层感知机(Multilayer Perceptron)。一个一个样本进行调节。
      这里写图片描述
      (5)自适应线性神经网络(Adaline):自适应线性神经网络(Adaptive Linear,简称Adaline) 是由威德罗(Widrow)和霍夫(Hoff)首先提出的。它与感知器的主要不同之处在于 其神经元有一个线性激活函数,这允许输出可以是任意值,而不仅仅只是像感知器中那样只能取0或1。它采用的是Widrow-Hoff学习法则(又称最小均方差算法LMS或称δ规则),对权值进行训练。自适应线性元件的主要用途是线性逼近一个函数式而进行模式联想。其结构和感知机一样,仍然是单层。仍然不能解决线性不可分问题,但是学习规则相对于感知机进行了改进。多样本进行调节,批处理?
      这里写图片描述
      采用W-H规则训练自适应性元件使其能够收敛的必要条件是被训练的输入矢量必须是线性独立的(思考:如果线性相关产生什么样的结果),且必须选择合适的学习速率以免产生振荡现象。
      感知器和自适应线性神经网络对比
      这里写图片描述
      线性神经网络与感知器的区别在于:线性神经网络的神经元传递函数是线性函数,因此线性神经网络的输出可以取任意值,而感知器的输出只可能是0或者1。
      这里写图片描述
      线性神经网络在收敛速度与精度上都比感知器要高,但是同感知器一样,线性神经网络只能解决线性分离问题。
    2. 第二阶段—-低潮
      人工智能的创始人之一Minsky和Papert对以感知器为代表的网络系统的功能及局限性从数学上做了深入研究,于1969年发表了轰动一时《Perceptrons》一书,指出简单的线性感知器的功能是有限的,它无法解决线性不可分的两类样本的分类问题,如简单的线性感知器不可能实现“异或”的逻辑关系等。
      (1)自组织神经网络SOM模型(自组织神经网络和 K-means 聚类算法的比较分析http://blog.csdn.net/lg1259156776/article/details/47780695
      http://blog.csdn.net/u010540396/article/details/52733380):1972年,芬兰的KohonenT.教授,提出了自组织神经网络SOM(Self-Organizing feature map)。后来的神经网络主要是根据KohonenT.的工作来实现的。SOM网络是一类无监督学习网络,主要用于模式识别﹑语音识别及分类问题。自组织神经网络,是一种用于聚类的神经网络算法,从名字便可以看出,这是一种无监督式的算法,意味着,它不需要任何训练样本,便可以直接对输入样本根据其特征 分类,将具有相似特征的划分为一类。SOM是一类“无监督学习”模型,一般的用法是将高维的input数据在低维的空间表示[1],因此SOM天然是一种降维方法。除了降维,SOM还可以用于数据可视化,以及聚类等应用中。这里写图片描述
      (2)自适应共振理论ART:1976年,美国Grossberg教授提出了著名的自适应共振理论ART(Adaptive Resonance Theory),其学习过程具有自组织和自稳定的特征。
    3. 第三阶段—-复兴时期
      (1) Hopfield模型:1982年,美国物理学家霍普菲尔德(Hopfield)提出了一种离散神经网络,即离散Hopfield网络,从而有力地推动了神经网络的研究。在网络中,它首次将李雅普诺夫(Lyapunov)函数引入其中,后来的研究学者也将Lyapunov函数称为能量函数。证明了网络的稳定性。1984年,Hopfield 又提出了一种连续神经网络,将网络中神经元的激活函数由离散型改为连续型。1985 年,Hopfield和Tank利用Hopfield神经网络解决了著名的旅行推销商问题(Travelling Salesman Problem)。Hopfield神经网络是一组非线性微分方程。
      (2)Boltzmann机模型:1983年,Kirkpatrick等人认识到模拟退火算法可用于NP完全组合优化问题的求解,这种模拟高温物体退火过程来找寻全局最优解的方法最早由Metropli等人1953年提出的。1984年,Hinton与年轻学者Sejnowski等合作提出了大规模并行网络学习机,并明确提出隐单元的概念,这种学习机后来被称为Boltzmann机。
      Hinton和Sejnowsky利用统计物理学的感念和方法,首次提出的多层网络的学习算法,称为Boltzmann 机模型。
      (3)BP神经网络模型:1986年,儒默哈特(D.E.Ru melhart)等人在多层神经网络模型的基础上,提出了多层神经网络权值修正的反向传播学习算法—-BP算法(Error Back-Propagation),解决了多层前向神经网络的学习问题,证明了多层神经网络具有很强的学习能力,它可以完成许多学习任务,解决许多实际问题。
      (4)并行分布处理理论
      (5)细胞神经网络模型:1988年,Chua和Yang提出了细胞神经网络(CNN)模型,它是一个细胞自动机特性的大规模非线性计算机仿真系统。Kosko建立了双向联想存储模型(BAM),它具有非监督学习能力。
      按性能分:连续性神经网络和离散型神经网络
      (6)Darwinism模型:Edelman提出的Darwinism模型在90年代初产生了很大的影响,他建立了一种神经网络系统理论
      (7)1988年,Linsker对感知机网络提出了新的自组织理论,并在Shanon信息论的基础上形成了最大互信息理论,从而点燃了基于NN的信息应用理论的光芒。
      (8)1988年,Broomhead和Lowe用径向基函数(Radialbasis function, RBF)提出分层网络的设计方法,从而将NN的设计与数值分析和线性适应滤波相挂钩。
      (9)1991年,Haken把协同引入神经网络,在他的理论框架中,他认为,认知过程是自发的,并断言模式识别过程即是模式形成过程。
      (10)1994年,廖晓昕关于细胞神经网络的数学理论与基础的提出,带来了这个领域新的进展。通过拓广神经网络的激活函数类,给出了更一般的时滞细胞神经网络(DCNN)、Hopfield神经网络(HNN)、双向联想记忆网络(BAM)模型。
      (11)90年代初,Vapnik等提出了支持向量机(Supportvector machines, SVM)和VC(Vapnik-Chervonenkis)维数的概念。
    4. 第四阶段—-高潮时期
      深度学习(Deep Learning,DL)由Hinton等人于2006年提出,是机器学习(Machine Learning, ML)的一个新领域。深度学习本质上是构建含有多隐层的机器学习架构模型,通过大规模数据进行训练,得到大量更具代表性的特征信息。深度学习算法打破了传统神经网络对层数的限制,可根据设计者需要选择网络层数。

    二、神经网络的优点及特性

    1. 高度的并行性
    2. 高度的非线性局部作用
    3. 联想记忆功能和良好的容错性
    4. 良好的自适应和自学习能力
    5. 知识的分布存储
    6. 非凸性

    神经元的功能特性

    1. 时空整合功能
    2. 神经元的动态极性化
    3. 兴奋和一直兴奋状态
    4. 结构的可塑性
    5. 脉冲和电位信号的转换
    6. 突触延期和不应期
    7. 学习、遗忘和疲劳
      人类的大脑能够收到输入的信息的刺激由分布式并行处理的神经元相互连接进行非线性映射处理,从而实现复杂的信息处理和推理任务。

    神经结构

    在人工神经网络设计及应用研究中,通常需要考虑三个方面的内容,即神经元激活函数、神经元之间的连接形式和网络的学习(训练)。

    神经网络的学习形式:

    在构造神经网络时,其神经元的传递函数和转换函数就已经确定了

    神经网络的工作过程:

    神经网络的工作过程包括离线学习和在线判断两部分。学习过程中各神经元进行规则学习,权参数调整,进行非线性映射关系拟合以达到训练精度;判断阶段则是训练好的稳定的网络读取输入信息通过计算得到输出结果。

    神经网络的学习规则:

    神经网络的学习规则是修正权值的一种算法,分为联想式和非联想式学习,有监督学习和无监督学习等。下面介绍几个常用的学习规则。

    1. 误差修正型规则:是一种有监督的学习方法,根据实际输出和期望输出的误差进行网络连接权值的修正,最终网络误差小于目标函数达到预期结果。误差修正法,权值的调整与网络的输出误差有关, 它包括δ学习规则、Widrow-Hoff学习规则、感知器学习规则和误差反向传播的BP(Back Propagation)学习规则等。
      1) δ学习规则:
      Wij(t+1)=Wij(t)a(diyi)xj(t)
      其中 Wij 表示神经元 j 到神经元i的连接权, di 是神经元 i 的期望输出,yi是神经元 i 的实际输出,xj表示神经元 j 状态,若神经元j处于激活态则 xj 为1,若处于抑制状态则 xj 为0或-1(根据激活函数而定)。 a 是表示学习速度的常数。假设xi为1,若 di yi 大,那么 Wij 将减小,若 di yi 小,那么 Wij 将变大。
    2. 竞争型规则:无监督学习过程,网络仅根据提供的一些学习样本进行自组织学习,没有期望输出,通过神经元相互竞争对外界刺激模式响应的权利进行网络权值的调整来适应输入的样本数据。
      对于无监督学习的情况,事先不给定标准样本,直接将网络置于“环境”之中,学习(训练)阶段与应用(工作)阶段成为一体。
    3. Hebb型规则:利用神经元之间的活化值(激活值)来反映它们之间联接性的变化,即根据相互连接的神经元之间的活化值(激活值)来修正其权值。Hebb规则如下:
      Wij(t+1)=Wij(t)+ayiyj
      其中 Wij 表示神经元 j 到神经元i的连接权, yi yj 表示两个神经元的输出, a 是表示学习速率的常数,如果yi yj 同时被激活,即 yi yj 同时为正,那么 wij 将增大。如果 yi 被激活,而 yj 处于抑制状态,即 yi 为正 yj 为负,那么 wij 将变小。
      在Hebb学习规则中,学习信号简单地等于神经元的输出。Hebb学习规则代表一种纯前馈﹑无导师学习。该学习规则至今在各种神经网络模型中起着重要作用。典型的应用如利用Hebb规则训练线性联想器的权矩阵。
    4. 随机型规则:在学习过程中结合了随机、概率论和能量函数的思想,根据目标函数(即网络输出均方差)的变化调整网络的参数,最终使网络目标函数达到收敛值。

    激活函数:

    在神经网络中,网络解决问题的能力与效率除了与网络结构有关外,在很大程度上取决于网络所采用的激活函数。激活函数的选择对网络的收敛速度有较大的影响,针对不同的实际问题,激活函数的选择也应不同。
    常用的激活函数有以下几种形式:

    1. 阈值函数:该函数通常也称为阶跃函数。当激活函数采用阶跃函数时,人工神经元模型即为MP模型。此时神经元的输出取1或0,反应了神经元的兴奋或抑制。
    2. 线性函数:该函数可以在输出结果为任意值时作为输出神经元的激活函数,但是当网络复杂时,线性激活函数大大降低网络的收敛性,故一般较少采用。
    3. 对数S形函数:对数S形函数的输出介于0~1之间,常被要求为输出在0~1范围的信号选用。它是神经元中使用最为广泛的激活函数。
    4. 双曲正切S形函数:双曲正切S形函数类似于被平滑的阶跃函数,形状与对数S形函数相同,以原点对称,其输出介于-1~1之间,常常被要求为输出在-1~1范围的信号选用。

    神经元之间的连接形式

    1. 前向网络(前馈网络):网络可以分为若干“层”,各层按信号传输先后顺序依次排列,第i层的神经元只接受第(i-1)层神经元给出的信号,各神经元之间没有反馈。前馈型网络可用一有向无环路图表示。BP网络就是典型的前向网络。
    2. 反馈网络:典型的反馈型神经网络如下图a所示:
      这里写图片描述
      每个节点都表示一个计算单元,同时接受外加输入和其它各节点的反馈输入,每个节点也都直接向外部输出。Hopfield网络即属此种类型。在某些反馈网络中,各神经元除接受外加输入与其它各节点反馈输入之外,还包括自身反馈。有时,反馈型神经网络也可表示为一张完全的无向图,如上图b。图中,每一个连接都是双向的。这里,第i个神经元对于第j个神经元的反馈与第j至i神经元反馈之突触权重相等,也即wij=wji。

    三、人工神经网络模型

    分类

    按性能分:连续型和离散型网络,或确定型和随机型网络。
    按拓扑结构分:前向网络和反馈网络。
    按学习方法分:有教师(监督)的学习网络和无教师(监督)的学习网络。
    按连接突触性质分:一阶线性关联网络和高阶非线性关联网络。

    前向网络

    有自适应线性神经网络(AdaptiveLinear,简称Adaline)、单层感知器、多层感知器、BP等。前向网络,网络中各个神经元接受前一级的输入,并输出到下一级,网络中没有反馈,可以用一个有向无环路图表示。这种网络实现信号从输入空间到输出空间的变换,它的信息处理能力来自于简单非线性函数的多次复合。网络结构简单,易于实现。反传网络是一种典型的前向网络。

    反馈网络

    有Hopfield、Hamming、BAM等。反馈网络,网络内神经元间有反馈,可以用一个无向的完备图表示。这种神经网络的信息处理是状态的变换,可以用动力学系统理论处理。系统的稳定性与联想记忆功能有密切关系。Hopfield网络、波耳兹曼机均属于这种类型。

    反向传播模型也称B-P模型,

    是一种用于前向多层的反向传播学习算法。之所以称它是一种学习方法,是因为用它可以对组成前向多层网络的各人工神经元之间的连接权值进行不断的修改,从而使该前向多层网络能够将输入它的信息变换成所期望的输出信息。之所以将其称作为反向学习算法,是因为在修改各人工神经元的连接权值时,所依据的是该网络的实际输出与其期望的输出之差,将这一差值反向一层一层的向回传播,来决定连接权值的修改。
    B-P算法的学习过程如下:
    (1)、选择一组训练样例,每一个样例由输入信息和期望的输出结果两部分组成。
    (2)、从训练样例集中取一样例,把输入信息输入到网络中。
    (3)、分别计算经神经元处理后的各层节点的输出。
    (4)、计算网络的实际输出和期望输出的误差。
    (5)、从输出层反向计算到第一个隐层,并按照某种能使误差向减小方向发展的原则,调整网络中各神经元的连接权值。
    (6)、对训练样例集中的每一个样例重复(3)-(5)的步骤,直到对整个训练样例集的误差达到要求时为止。
    在以上的学习过程中,第(5)步是最重要的,如何确定一种调整连接权值的原则,使误差沿着减小的方向发展,是B-P学习算法必须解决的问题。
    B-P算法的优缺点:
    优点:理论基础牢固,推导过程严谨,物理概念清晰,通用性好等。所以,它是目前用来训练前向多层网络较好的算法。
    缺点:(1)、该学习算法的收敛速度慢;(2)、网络中隐节点个数的选取尚无理论上的指导;(3)、从数学角度看,B-P算法是一种梯度最速下降法,这就可能出现局部极小的问题。当出现局部极小时,从表面上看,误差符合要求,但这时所得到的解并不一定是问题的真正解。所以B-P算法是不完备的。
    BP算法局限性:
    (1)、在误差曲面上有些区域平坦,此时误差对权值的变化不敏感,误差下降缓慢,调整时间长,影响收敛速度。这时误差的梯度变化很小,即使权值的调整量很大,误差仍然下降很慢。造成这种情况的原因与各节点的净输入过大有关。
    (2)、存在多个极小点。从两维权空间的误差曲面可以看出,其上存在许多凸凹不平,其低凹部分就是误差函数的极小点。可以想象多维权空间的误差曲面,会更加复杂,存在更多个局部极小点,它们的特点都是误差梯度为0。BP算法权值调整依据是误差梯度下降,当梯度为0时,BP算法无法辨别极小点性质,因此训练常陷入某个局部极小点而不能自拔,使训练难以收敛于给定误差。
    BP算法改进:误差曲面的平坦区将使误差下降缓慢,调整时间加长,迭代次数增多,影响收敛速度;而误差曲面存在的多个极小点会使网络训练陷入局部极小,从而使网络训练无法收敛于给定误差。这两个问题是BP网络标准算法的固有缺陷。
    针对此,国内外不少学者提出了许多改进算法,几种典型的改进算法:

    (1)、增加动量项:标准BP算法在调整权值时,只按t时刻误差的梯度下降方向调整,而没有考虑t时刻以前的梯度方向,从而常使训练过程发生振荡,收敛缓慢。为了提高训练速度,可以在权值调整公式中加一动量项。大多数BP算法中都增加了动量项,以至于有动量项的BP算法成为一种新的标准算法。
    (2)、可变学习速度的反向传播算法(variable learning rate back propagation,VLBP):多层网络的误差曲面不是二次函数。曲面的形状随参数空间区域的不同而不同。可以在学习过程中通过调整学习速度来提高收敛速度。技巧是决定何时改变学习速度和怎样改变学习速度。可变学习速度的VLBP算法有许多不同的方法来改变学习速度。
    (3)、学习速率的自适应调节:可变学习速度VLBP算法,需要设置多个参数,算法的性能对这些参数的改变往往十分敏感,另外,处理起来也较麻烦。此处给出一简洁的学习速率的自适应调节算法。学习率的调整只与网络总误差有关。学习速率η也称步长,在标准BP中是一常数,但在实际计算中,很难给定出一个从始至终都很合适的最佳学习速率。从误差曲面可以看出,在平坦区内η太小会使训练次数增加,这时候希望η值大一些;而在误差变化剧烈的区域,η太大会因调整过量而跨过较窄的“凹坑”处,使训练出现振荡,反而使迭代次数增加。为了加速收敛过程,最好是能自适应调整学习率η,使其该大则大,该小则小。比如可以根据网络总误差来调整.
    (4)、引入陡度因子—-防止饱和:误差曲面上存在着平坦区。其权值调整缓慢的原因在于S转移函数具有饱和特性造成的。如果在调整进入平坦区后,设法压缩神经元的净输入,使其输出退出转移函数的饱和区,就可改变误差函数的形状,从而使调整脱离平坦区。实现这一思路的具体作法是在转移函数中引进一个陡度因子。
    BP神经网络设计的一般原则:关于它的开发设计,大多数是根据使用者的经验来设计网络结构﹑功能函数﹑学习算法﹑样本等。

    [1]、BP网络参数设计

    (1)、BP网络输入与输出参数的确定

    A、输入量的选择:
    a、输入量必须选择那些对输出影响大且能够检测或提取的变量;
    b、各输入量之间互不相关或相关性很小。从输入、输出量性质分类来看,可以分为两类:数值变量和语言变量。数值变量又分为连续变量或离散变量。如常见的温度,压力,电压,电流等就是连续变量;语言变量是用自然语言表示的概念。如红,绿,蓝;男,女;大,中,小,开,关,亮,暗等。一般来说,语言变量在网络处理时,需要转化为离散变量。
    c、输入量的表示与提取:多数情况下,直接送给神经网络的输入量无法直接得到,常常需要用信号处理与特征提取技术从原始数据中提取能反映其特征的若干参数作为网络输入。
    B、输出量选择与表示:
    a、输出量一般代表系统要实现的功能目标,如分类问题的类别归属等;
    b、输出量表示可以是数值也可是语言变量;

    (2)、训练样本集的设计

    网络的性能与训练用的样本密切相关,设计一个好的训练样本集既要注意样本规模,又要注意样本质量。
    A、样本数目的确定:一般来说样本数n越多,训练结果越能正确反映其内在规律,但样本的获取往往有一定困难,另一方面,当样本数n达到一定数量后,网络的精度也很难提高。
    选择原则:网络规模越大,网络映射关系越复杂,样本数越多。一般说来,训练样本数是网络连接权总数的5~10倍,但许多情况难以达到这样的要求。
    B、样本的选择和组织:
    a、样本要有代表性,注意样本类别的均衡;
    b、样本的组织要注意将不同类别的样本交叉输入;
    c、网络的训练测试,测试标准是看网络是否有好的泛化能力。测试做法:不用样本训练集中数据测试。一般是将收集到的可用样本随机地分成两部分,一部分为训练集,另一部分为测试集。若训练样本误差很小,而对测试集的样本误差很大,泛化能力差。

    (3)、初始权值的设计

    网络权值的初始化决定了网络的训练从误差曲面的哪一点开始,因此初始化方法对缩短网络的训练时间至关重要。
    神经元的作用函数是关于坐标点对称的,若每个节点的净输入均在零点附近,则输出均出在作用函数的中点,这个位置不仅远离作用函数的饱和区,而且是其变化最灵敏的区域,必使网络学习加快。从神经网络净输入表达式来看,为了使各节点的初始净输入在零点附近,如下两种方法被常常使用:
    A、取足够小的初始权值;
    B、使初始值为+1和-1的权值数相等。

    [2]、BP网络结构参数设计

    隐层结构设计
    (1)、隐层数设计:理论证明,具有单隐层的前馈网络可以映射所有连续函数,只有当学习不连续函数时才需要两个隐层,故一般情况隐层最多需要两层。一般方法是先设一个隐层,当一个隐层的节点数很多,仍不能改善网络性能时,再增加一个隐层。最常用的BP神经网络结构是3层结构,即输入层﹑输出层和1个隐层。
    (2)、隐层节点数设计:隐层节点数目对神经网络的性能有一定的影响。隐层节点数过少时,学习的容量有限,不足以存储训练样本中蕴涵的所有规律;隐层节点过多不仅会增加网络训练时间,而且会将样本中非规律性的内容如干扰和噪声存储进去。反而降低泛化能力。一般方法是凑试法:
    M-P:http://ibillxia.github.io/blog/2013/03/24/classes-of-neural-networks/
    综述:http://blog.csdn.net/app_12062011/article/details/54290982
    自组织:http://www.ziyoubaba.com/archives/606
    线性神经网络:http://blog.csdn.net/fieldoffier/article/details/44401305

    展开全文
  • BP神经网络分类问题(含matlab仿真)

    千次阅读 2020-12-31 17:40:18
    BP神经网络进行模式识别 具体的BP神经网络详细说明请参考博客:https://www.jianshu.com/p/3d96dbf3f764 ...那么我们这次使用的是matlab编程来训练该神经网络达到分类的效果 由于数据太简单,对输入数
  • 神经网络分类与预测的基本原理

    千次阅读 2020-05-07 17:10:25
    神经网络虽然用到了数学,但是它不像数学这样“严谨”,它不像传统的机器学习手段(比如决策树、随机森林、近邻法等)一样,能让我们清楚地知道它到底学了什么,虽然现在有很多人致力于研究神经网络背后原理——它到底...
  • BP神经网络分类MATLAB代码+测试数据,亲测绝对可运行,绝对业界良心
  • 本例中包含两层BP神经网络模板程序(可以直接调用,可定制中间层神经元个数,设置学习率,绘制衰减曲线,可用于简单的模式识别和预测)、一个调用的例程(包括简单的数据预处理如归一化的使用,测试结果准确率为98.3...
  • 前一篇文章分享了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。这篇文章将详细讲解循环神经网络RNN的原理知识,并采用TensorFlow实现手写数字识别的RNN分类案例及可视化呈现。基础性文章,希望...
  • 目录 ...全程为人工神经网络,是一种模仿生物神经网络(大脑)的结构和功能的数学模型或计算机模型 生物神经细胞; 神经细胞是构成神经系统的基本单元,称为生物神经元,简称神经元 # 简单神经...
  • 本文主要内容包括: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 。   第0节、引例   本文以Fisher的Iris数据集作为神经网络程序的测试...
  • 人工神经网络(Artificial Neural Network)分类算法属于监督学习算法。人工神经网络(Artificial Neural Network)是模拟神经元的处理信息的数学模型。神经网络包含多个层次,同层之间的神经元相互之间不进行数据通信;...
  • 神经网络分类算法 数据挖掘

    万次阅读 2017-02-09 16:36:47
    神经网络分类介绍:  神经网络就是一组相互连接的输入输出单元,这些单元之间的每个连接都关联一个权重。在网络学习阶段,网络通过调整权重来实现输入样本与其相应(正确)类别的对应。由于网络学习主要是针对其中...
  • 引言 最近在读西瓜书,查阅了多方资料,恶补了数值代数、统计概率和线代,总算是勉强看懂了西瓜书中的公式推导。...神经网络其实是一个宽泛的概念,西瓜书中也只不过是对神经网络进行了简单的介...
  • sklearn神经网络分类

    千次阅读 2017-09-16 22:57:00
    sklearn神经网络分类 神经网络学习能力强大,在数据量足够,隐藏层足够多的情况下,理论上可以拟合出任何方程。 理论部分 sklearn提供的神经网络算法有三个: neural_network.BernoulliRBM,neural_network....
  • Part1:PyTorch简单知识Part2:PyTorch的自动梯度计算Part3:使用PyTorch构建一个神经网络Part4:训练一个神经网络分类器Part5:数据并行化本文是关于Part4的内容。 Part4:训练一个神经网络分类器前面已经介绍了...
  • 继上文的集成学习模型之后,本文实践使用的pyspark提供的多层感知机神经网络模型,这是一种比较简单但是却又很重要的神经网络模型。MLP是一种前向结构的人工神经网络,映射一组输入向量到一组输出向量。MLP可以被...
  • 1、BP网络的分类程序和回归程序又很多地方不一样,首先分类程序的输出层神经元个数大于1,BP网络的输出层...2、神经网络的隐层数目的确定可以通过经验公式确定。 3、有一个很困惑的地方,那就是神经网络最终输出的...
  • 神经网络模型分类总结

    千次阅读 2021-11-28 19:55:27
    一、神经网络类别 一般的,神经网络模型基本结构按信息输入是否反馈,可以分为两种:前馈神经网络和反馈神经网络。 1.1 前馈神经网络 前馈神经网络(Feedforward Neural Network)中,信息从输入层开始输入,每层...
  • 针对鸢尾花(Iris)数据集,基于scikit-learn训练logistic Regression分类器,基于Keras构建并训练三层前馈神经网络分类器,对比两者的正确率差异。 Keras深度学习库入门级教程,“Hello world” in Keras!
  • 极简pytorch-分类神经网络

    千次阅读 2022-01-28 14:27:53
    我们知道,神经网络里面输出的都是数字,二分类问题就是把这些数字转成0或1,多分类问题就是把这些数字转成0到N 这个时候我们就需要用一个函数来把输出值做映射了,下图是sigmoid函数,可以把值z映射成0或1 ...
  • 在特征提取的基础上进行模式分类是基于基因的计算机辅助诊断的重要步骤,如人工神经网络分类方法已广泛的应用于疾病诊断及预防系统之中。 人工神经网络的研究已有半个多世纪的历史,起源于20世纪40年代,20世纪80...
  • 语音特征信号分类---BP神经网络---MATLAB实现

    千次阅读 热门讨论 2022-01-30 14:17:32
    end end 用训练好的BP神经网络分类语音特征信号,根据分类结果分析BP神经网络分类能力。 %% 语音特征信号分类 inputn_test=mapminmax('apply',input_test,inputps); for ii=1:1 for i=1:500%1500 %隐含层输出 for j...
  • 基于遗传算法GA优化的BP神经网络预测和分类(含优化前对比) 文章目录基于遗传算法GA优化的BP神经网络预测和分类(含优化前对比)1. BP神经网络预测原理简介2. 遗传算法GA优化BP神经网络原理3. GA-BP模型建立3.1 ...
  • 利用具有1层隐藏层的神经网络分类红色和蓝色的花。目标:建立具有隐藏层的完整神经网络 善用非线性单位 实现正向传播和反向传播,并训练神经网络 了解不同隐藏层大小(包括过度拟合)的影响 代码要求:定义模型结构 ...
  • 卷积神经网络分类实战:疫情期间戴口罩识别

    千次阅读 热门讨论 2020-07-14 22:00:50
    今天上了一个人工智能课程,学习了用alexnet做了一个是否戴口罩的二分类问题 ,笔记如下 首先总结几个重要的知识点: 图片的数据格式 工业显示系统均通过RGB(red, green, blue)三色合成色彩, 计算机图像数据的存储...
  • BP神经网络分类器MATLAB代码

    千次阅读 2021-04-24 16:32:34
    现学现卖,csdn论坛有许多3分类器的MATLAB代码,4分类器MATLAB代码比较少 BP神经网络多4分类器代码如下,欢迎访问: 4分类器MATLAB代码: 寻来
  • BP神经网络的数据分类

    万次阅读 2018-11-06 22:17:38
    一、BP神经网络概述 BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。在前向传播的过程中,输入信号从输入层经隐含层处理,直至输出层。每一层的神经元状态只影响下一层神经元...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 231,754
精华内容 92,701
关键字:

神经网络分类

友情链接: 4.rar