精华内容
下载资源
问答
  • 2021-12-11 22:22:27

    目录

    一、定义和公式

    1. 多层感知器 Multi Layer Perceptron MLP

    2. MLP实现非线性分类

    3. Keras介绍

    二、 代码实战

    1. 建立MLP模型实现二分类

    1.1 进行数据分离:test_size=0.33,random_state=10

    1.2 模型结构:一层隐藏层,有20个神经元

     2. 建立MLP模型实现图像多分类

    2.1 载入数据集,可视化图形数字

    2.2 数据预处理,图像数据维度转换,归一化,输出结果格式转换

    2.3 建立MLP模型,2层隐藏层,每层392个神经元,计算模型在预测数据的准确率


    一、定义和公式

    1. 多层感知器 Multi Layer Perceptron MLP

    由于当逻辑回归模型中的属性过多,会导致多项式的数据量很大,解决这个问题可以使用MLP,也叫人工神经网络ANN,该模型结构模仿人的思考机制。

    神经元结构的数值化(类似逻辑回归模型框架):

    在MLP应用中,可以把激活函数替换为relu、tanh、softmax等

    多层感知器MLP模型框架(多个逻辑回归模型叠加在一起):

    数学表达式为:

      

    逻辑回归模型与神经网络模型之间的关系:

    • 逻辑回归不适用于图像分类,因为图像分类通常是非线性分类,需要生成大量多项式数据,逻辑回归模型求解慢,预测效果不好,但是针对特征容易识别的图像,要求尽可能用简单的模型来实现分类,可以尝试使用逻辑回归。
    • 神经网络是把很多歌逻辑回归单元连接在一起组合成一个网络结构
    • 在MLP应用中,可以把激活函数替换为relu、tanh、softmax等

    2. MLP实现非线性分类

    通过3个简单逻辑回归模型可以得到一个非线性的复杂MLP模型,用于实现二分类,输出y为0或1

    有3个逻辑回归模型如下:

    1. 与门:y: x1 AND x2
    2. 与非门:y: (NOT x1) AND (NOT x2)
    3. 或门:y: x1 OR x2

    将1,2,3组合在一起实现同或门:y: x1 XNOR x2 (相同为1,不同为0)

    1. 前两层分别增加一个值为1的元素,即x0和a0
    2. 前两个模型作为输入层组成第一层,计算出a1^2和a2^2
    3. 第二层到第三层用第三个模型,作为输出层,计算出y函数关系式
    4. 分别将x1和x2代入y函数关系式中,计算出y值

    MLP实现多分类预测:

    • 判断输入数据属于输出数据y1,y2,y3,y4哪个类别,计算各种结果的概率,选取概率最大的为其预测结果
    • 一个隐藏层有2(n+1)个神经元
    • 需要对输出结果y进行预处理,将数值转换为One-Hot向量 

    MLP模型实现图像多分类任务

    算法流程:

    1. 加载图片并将其转换为数字矩阵
    2. 对输入数据进行维度转换与归一化处理
    3. 对输出结果进行格式转化
    4. 建立MLP模型结构
    5. MLP模型训练参数配置
    6. 模型训练与预测

    3. Keras介绍

    Keras:是用python编写的,以TensorFlow或Theano作为后台,用于神经网络开发的应用接口。集成了深度学习中各类成熟的算法,比调用TF更简单

    TensorFlow:用数据流图,用于数值计算的开源软件库,可自动计算模型相关的微分导数,适合用于神经网络模型的求解,用Keras可以将TF封装成一个接口,易于调用


    二、 代码实战

    1. 建立MLP模型实现二分类

    # 1. load the data
    import pandas as pd
    import numpy as np
    data = pd.read_csv('data.csv')
    data.head()
    
    # 2. define the X and y
    X = data.drop(['y'],axis=1)
    y = data.loc[:,'y']
    X.head()
    
    # 3. visualize the data
    %matplotlib inline
    from matplotlib import pyplot as plt
    fig1 = plt.figure(figsize=(5,5))
    passed=plt.scatter(X.loc[:,'x1'][y==1],X.loc[:,'x2'][y==1])
    failed=plt.scatter(X.loc[:,'x1'][y==0],X.loc[:,'x2'][y==0])
    plt.legend((passed,failed),('passed','failed'))
    plt.xlabel('x1')
    plt.ylabel('x2')
    plt.title('raw data')
    plt.show()

    fig1:


    1.1 进行数据分离:test_size=0.33,random_state=10

    '''
    任务1:进行数据分离:test_size=0.33,random_state=10
    '''
    # 4. 分离数据 split the data
    from sklearn.model_selection import train_test_split
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.33,random_state=10)
    print(X_train.shape,X_test.shape,X.shape)

    1.2 模型结构:一层隐藏层,有20个神经元

    '''
    建立模型结构:一层隐藏层,有20个神经元
    '''
    # 5. 建立模型,通过add方法叠加各层网络 set up the model
    from keras.models import Sequential
    from keras.layers import Dense, Activation
    
    mlp = Sequential()
    mlp.add(Dense(units=20, input_dim=2, activation='sigmoid')) # 第一层,units代表第一层的输出层有多少个神经元,input_dim代表输入层有多少个神经元
    mlp.add(Dense(units=1,activation='sigmoid'))
    mlp.summary()
    
    # 6. 配置模型求解过程参数 compile the model
    mlp.compile(optimizer='adam',loss='binary_crossentropy')
    
    # 7. 训练模型 train the model
    mlp.fit(X_train,y_train,epochs=3000) # epochs迭代次数
    
    # 8. 在训练数据集上预测模型,并计算准确率 make prediction and calculate the accuracy
    y_train_predict = mlp.predict_classes(X_train)
    from sklearn.metrics import accuracy_score
    accuracy_train = accuracy_score(y_train,y_train_predict)
    print(accuracy_train)
    
    # 9. 在测试数据集上预测模型,并计算准确率 make prediction based on the test data
    y_test_predict = mlp.predict_classes(X_test)
    accuracy_test = accuracy_score(y_test,y_test_predict)
    print(accuracy_test)
    
    # 10. 生成网格点坐标矩阵 generate new data for plot
    xx, yy = np.meshgrid(np.arange(0,1,0.01),np.arange(0,1,0.01))
    x_range = np.c_[xx.ravel(),yy.ravel()]
    y_range_predict = mlp.predict_classes(x_range) # predict输出的是概率,predict_classes可以将概率转化成数组
    print(type(y_range_predict))
    
    # 11. 把预测结果从数组转换为可用于索引的series类型 format the output
    y_range_predict_form = pd.Series(i[0] for i in y_range_predict)
    
    print(y_range_predict_form)
    
    # 12. 可视化
    fig2 = plt.figure(figsize=(5,5))
    passed_predict=plt.scatter(x_range[:,0][y_range_predict_form==1],x_range[:,1][y_range_predict_form==1])
    failed_predict=plt.scatter(x_range[:,0][y_range_predict_form==0],x_range[:,1][y_range_predict_form==0])
    
    passed=plt.scatter(X.loc[:,'x1'][y==1],X.loc[:,'x2'][y==1])
    failed=plt.scatter(X.loc[:,'x1'][y==0],X.loc[:,'x2'][y==0])
    plt.legend((passed,failed,passed_predict,failed_predict),('passed','failed','passed_predict','failed_predict'))
    plt.xlabel('x1')
    plt.ylabel('x2')
    plt.title('prediction result')
    plt.show()

    fig2:


     2. 建立MLP模型实现图像多分类

    mnist数据集介绍:

    60000个训练样本,10000个测试样本,每个样本是一张28*28像素的灰度手写数字图片

    2.1 载入数据集,可视化图形数字

    # 1. load the mnist data
    from keras.datasets import mnist
    (X_train,y_train),(X_test,y_test) = mnist.load_data()
    
    print(type(X_train),X_train.shape)
    
    # 2. visualize the data
    img1 = X_train[0]
    %matplotlib inline
    from matplotlib import pyplot as plt
    fig1 = plt.figure(figsize=(3,3))
    plt.imshow(img1)
    plt.title('image size: 28 X 28')
    plt.show()
    
    # 3. 输出该图片的数组矩阵
    img1

    fig1:


    2.2 数据预处理,图像数据维度转换,归一化,输出结果格式转换

    '''
    数据预处理,图像数据维度转换,归一化,输出结果格式转换
    '''
    # 4. 转换输入数据维度,将28*28像素转换为1行784列 format the input data
    feature_size = img1.shape[0]*img1.shape[1]
    X_train_format = X_train.reshape(X_train.shape[0],feature_size)
    X_test_format = X_test.reshape(X_test.shape[0],feature_size)
    
    
    print(X_train_format.shape) # 由(60000, 28, 28) 转换为 (60000, 784)
    
    # 5. 标准化输入数据,每个数据/255灰度值 normalize the input data
    X_train_normal = X_train_format/255
    X_test_normal = X_test_format/255
    print(X_train_normal[0])
    
    # 6. 转换输出格式为onehot format the output data(labels)
    from keras.utils import to_categorical
    y_train_format = to_categorical(y_train)
    y_test_format = to_categorical(y_test)
    print(y_train_format[0])
    
    # 7. 打印数据维度
    print(X_train_normal.shape,y_train_format.shape) # (60000, 784) (60000, 10)

    2.3 建立MLP模型,2层隐藏层,每层392个神经元,计算模型在预测数据的准确率

    '''
    建立MLP模型,计算模型在预测数据的准确率
    模型结构为2层隐藏层,每层392个神经元
    '''
    # 8. set up the model
    from keras.models import Sequential
    from keras.layers import Dense, Activation
    
    mlp = Sequential()
    mlp.add(Dense(units=392,activation='relu',input_dim=784)) # 输入层(784)+隐藏层1(392)
    mlp.add(Dense(units=392,activation='relu')) # 隐藏层2(392)
    mlp.add(Dense(units=10,activation='softmax')) # 输出层(10: 0,1,2...9)
    mlp.summary()
    
    # 9. 配置训练参数 configure the model
    mlp.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['categorical_accuracy'])
    
    # 10. 模型训练 train the model
    mlp.fit(X_train_normal,y_train_format,epochs=10)
    
    # 11. 模型预测 evaluate the model
    y_train_predict = mlp.predict_classes(X_train_normal)
    print(type(y_train_predict))
    print(y_train_predict[0:10])
    
    # 12. 训练数据的准确率
    from sklearn.metrics import accuracy_score
    accuracy_train = accuracy_score(y_train,y_train_predict)
    print(accuracy_train) # 0.99
    
    # 13. 测试数据的准确率
    y_test_predict = mlp.predict_classes(X_test_normal)
    accuracy_test = accuracy_score(y_test,y_test_predict)
    print(accuracy_test) # 0.98
    
    # 14. 输入新的图片
    img2 = X_test[100]
    fig2 = plt.figure(figsize=(3,3))
    plt.imshow(img2)
    plt.title(y_test_predict[100])
    plt.show()
    
    # 15. 输出所有图片及其对应的预测数字
    import matplotlib as mlp
    font2 = {'family' : 'SimHei',
    'weight' : 'normal',
    'size'   : 20,
    }
    mlp.rcParams['font.family'] = 'SimHei'
    mlp.rcParams['axes.unicode_minus'] = False
    a = [i for i in range(1,10)]
    fig3 = plt.figure(figsize=(5,5))
    for i in a:
        plt.subplot(3,3,i)
        plt.tight_layout()
        plt.imshow(X_test[i])
        plt.title('predict:{}'.format(y_test_predict[i]),font2)
        plt.xticks([])
        plt.yticks([])

    fig2:

     fig3:

    更多相关内容
  • 本研究旨在通过人工神经网络建立降雨径流模型,以填补卡夫里河流域伊特水文站流量数据系列的空白。 利用流量蒸散数据建立了具有两个条目(每月平均降雨量和蒸散量)和出口(流量)的前馈的多层感知器。 神经网络...
  • 基于多层人工神经网络的电力系统恢复过电压预测.pdf
  • 《Python机器学习》第12章复习思维导图
  • 1. 多层人工神经网络模型 由输入层、隐藏层(可有多层)和输出层组成。神经网络中最基本的成分是神经元(neuron)。其中,输入层神经元仅接收外界输入,不进行函数处理;隐藏层和输出层则包含功能神经元,能将接收...

    1. 多层人工神经网络模型

    • 多层感知机MLP(Multi-Layer Perceptron)也叫多层人工神经网络。一般的,常见的神经网络是如下图所示的层级结构。由输入层、隐藏层(可有多层)和输出层组成。神经网络中最基本的成分是神经元(neuron)。每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks),(前馈并不意味着网络中信号不能向后传,而是指网络拓扑结构上不存在环或回路),其中,输入层神经元仅接收外界输入,不进行函数处理;隐藏层和输出层则包含功能神经元,能将接收到的总输入值与一定的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出。若将阈值也作为输入信号在神经网络中标出,则除输出层之外,各层会多出一个固定输入为-1的“哑结点”(dummy node),该节点与下一层的连接权即为阈值。这样权重和阈值的学习就可以统一为权重的学习。为方便后续解释,下图中并未标出哑结点。

    • 下图给出“单隐层网络”模型并解释各层功能及其作用方式:

      在这里插入图片描述
      输入层拥有d个神经元,代表输入样本在d个属性下的值;
      输入层信号通过带权重的连接传递至隐藏层,隐藏层神经元分别接收到各自的总输入值ah(h=1,2…,q),将其与神经元的阈值进行比较,然后通过“激活函数”处理产生相应的输出bh(h=1,2,…,q);
      隐藏层输出信号同样通过带权重的连接传递至输出层,输出层神经元分别接收各自的总输入值co(o=1,2,…,l),并通过激活函数处理产生最后输出y’o(o=1,2,…l),即对该样本x的预测y’(这里的y’为 l 维列向量)。输出层神经元代表分类结果,其个数取决于最终分类标签的个数。
      神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connection weight)以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴涵在连接权与阈值中。

    • 为了方便理解,这里举出该神经网络模型的应用实例:识别手写数字。
      假设样本为n个手写数字图像,每个数字图像由28×28像素组成,每个像素由灰度值表示。我们把28×28的像素展开变成一个有784个维度的一维行向量,即一个样本向量,那么此时输入层的神经元个数就会有784个,即图中的d=784。因为是识别单个手写数字,其结果会有0-9这十种情况,因此输出层就会有10个神经元,即图中的 l=10。至于隐藏层的层数以及单元数则作为要优化的额外超参数,可以通过交叉验证技术解决,在此不对其进行详细展开。

    • 关于激活函数:
      理想的激活函数是如下图(a)所示的阶跃函数,它将输入值映射为输出值“0”或“1”,显然“1”对应于神经元兴奋,“0”对应于神经元抑制。然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数,如下图(b)所示。有时,输出层神经元也采用线性激活函数,即直接以输入值c与阈值θ的比较结果作为最后的预测值y’输出。
      在这里插入图片描述

    2. 算法公式推导

    (1)正向传播(Forward Propagation): 利用正向传播激活神经网络

    • 接下来,我们利用上述的神经网络模型,进一步用数学表达式来详细解释神经网络如何通过正向传播从输入信号输出预测结果的各个步骤:
      首先给定数据集 D:
      在这里插入图片描述
      即数据集D共有n个样本,且输入样本x(i)由 d 个属性描述,输出 l 维实值向量 y(i),如下所示:
      在这里插入图片描述
      在这里插入图片描述 将输入样本用矩阵X表示,输出值用矩阵Y表示:上标代表样本标号,下标代表相应的属性维度及分类维度。
      在这里插入图片描述
      在这里插入图片描述在输入层输入某一样本在各个属性维度下的值xk(k=1,2,…,d)作为接收信号并通过带权重v的连接传递至隐藏层,成为隐藏层的输入值ah(h=1,2,…q)。下图给出隐藏层的一个神经元如何接收输入层的输出信号:
      在这里插入图片描述用公式表示为:在这里插入图片描述
      则对应某一样本的隐藏层输入向量为:
      在这里插入图片描述
      记这里的权重矩阵为V:
      在这里插入图片描述
      这会是我们之后要学习的连接权之一。
      同理可以写出隐藏层的输入值矩阵A:
      在这里插入图片描述
      接下来,隐藏层的各个功能神经元将接收到的输入值ah(h=1,2,…,q),与某一阈值γh(h=1,2,…,q)进行比较,然后通过“激活函数”(这里用sigmoid函数)处理产生神经元的输出bh(h=1,2,…,q),用公式表示为:
      在这里插入图片描述
      则对应某一样本的输出层输出向量为:
      在这里插入图片描述其中阈值γ也是我们之后要学习的参数。
      同样可以写出隐藏层输出值矩阵B:
      在这里插入图片描述之后,隐藏层神经元的输出bh(h=1,2,…,q)继续通过带权重的连接w传递至输出层,成为输出层的输入值co(o=1,2,…,l),下图同样给出输出层的一个神经元如何接收隐藏层的输出信号:
      在这里插入图片描述用公式表示为:
      在这里插入图片描述
      则对应某一样本的输入层输入向量为:
      在这里插入图片描述
      记这里的权重矩阵为W:
      在这里插入图片描述
      这也是我们之后要学习的连接权之一。
      同理可以写出输出层的输入值矩阵C:
      在这里插入图片描述最后,输入层的各个功能神经元将接收到的输入值co(o=1,2,…,q),与某一阈值θo(o=1,2,…,q)进行比较,然后通过“激活函数”(这里用sigmoid函数)处理产生神经元的输出y’o(o=1,2,…,q),用公式表示为:
      在这里插入图片描述则对应某一样本的输出层输出向量为:
      在这里插入图片描述这里的阈值θ也是我们之后要学习的系数。同样可以写出输出层输出值矩阵Y’:
      在这里插入图片描述若输出层神经元采用线性激活函数,则输出预测结果y’o(o=1,2,…,q),用公式表示为:在这里插入图片描述则对应某一样本的输出层输出向量为:
      在这里插入图片描述以及输出层的输出值矩阵Y’:
      在这里插入图片描述
    • 以上就是“单隐层神经网络”中输入信号如何通过各层的处理最后输出预测结果的正向传播激活网络的全过程。这里将其简单总结如下图所示:在这里插入图片描述
      (2)逆向传播(BackPropagation,简称BP): 利用逆向传播学习神经网络的权重系数及阈值
    • BP是一种迭代学习算法,在迭代的每一轮中采用广义的感知机(perceptron)学习规则对参数进行更新估计,即任意参数w的更新方式为:
      在这里插入图片描述
      其中Δw是所谓“目标函数”(objective function)关于该参数的梯度(偏导)。若要使目标函数的迭代值与迭代数成反比,即随着迭代的进行,目标函数值越来越小,则目标函数要为凹函数拥有全局最小值用于收敛并采用负梯度下降更新权重;反之,若要使目标函数的迭代值与迭代数成正比,则目标函数为凸函数具有全局最大值同样用于收敛并用正梯度上升更新权重。具体如下图所示:在这里插入图片描述
      BP算法采用误差函数J(v,w,γ,θ)为目标函数,又称为“代价函数”(cost function),其数学表达式为:在这里插入图片描述
      既为误差函数,则必然要求其值随着迭代的进行而下降,从而找到能使代价函数为全局最小值的权重,因此代价函数为凹函数,采用梯度下降(gradient descent)策略,则Δw可以表示为:
      在这里插入图片描述其中,η为学习率,控制梯度下降的步长。当学习率很小时会使收敛缓慢,学习率过大则会增加忽略全局最小值的可能性。因此学习率η也是算法在实际运用中需要调优的超参数。
      此外需要注意的一点是,多层神经网络的代价函数与自适应线性神经元(Adaline)以及逻辑回归(logistic regression)这样的单层网络的代价函数相比更为复杂。单层网络的代价函数与参数相关的误差表面就如同上图所示一样通常是光滑的、无突起的。而多层神经网络的代价函数是复杂嵌套函数,维度更高,其误差表面有许多突起,即拥有许多局部极小值,如下图所示:
      在这里插入图片描述
      因此,要想找到全局最小值就必须克服这些局部极小值。神经网络参数化通常所面临的挑战就是处理高维特征空间的大量权重系数。
      微积分中的链式规则就是一种计算复杂嵌套函数导数的方法,如 F(x)=f(g(h(u(v(x))))) 应用链式法则的求导为:
      在这里插入图片描述
      计算机代数已经开发出了一套非常有效地解决这类问题的技术,也就是所谓的自动微分。自动微分有正向和反向两种模式,反向传播仅仅是反向模式自动微分的特例。关键是正向模式应用链式法则可能相当昂贵,因为要与每层的大矩阵(雅可比矩阵)相乘,最终乘以一个向量以获得输出。反向模式的技巧是从右往左:用一个矩阵乘以一个向量,从而产生另一个向量,然后再乘以下一个矩阵,以此类推。矩阵向量乘法比矩阵矩阵乘法在计算成本上要便宜得多,这就是为什么反向传播算法是神经网络训练中最常用的算法之一。
      根据上述分析,本质上可以认为BP算法是一种计算多层神经网络复杂成本函数的偏导数的非常有效的方法,其目标是利用这些导数来学习权重系数,以实现多层人工神经网络的参数化。
      接下来我们开始利用微积分的链式规则来逐步推导BP算法中的权重更新公式,以上述所介绍的“单隐层神经网络”模型为例。
      首先,这里我们需要更新的权重系数有四个,它们分别是:两个权重矩阵V、W,以及两组阈值向量γ和θ,我们对它们采用如下所示的广义感知机学习规则以及负梯度下降进行迭代更新:
      在这里插入图片描述从神经网络的右往左对代价函数J(v,w,γ,θ)进行求导,首先会遇到的是隐藏层的权重矩阵W以及阈值向量θ。这里首先写出代价函数J(v,w,γ,θ)的完整嵌套函数形式:
      在这里插入图片描述根据上式可写出代价函数关于权重w以及阈值θ的负梯度:
      在这里插入图片描述
      在这里插入图片描述
      其中:
      在这里插入图片描述
      值得一提的是,有些多层神经网络的输出层使用的激活函数为线性激活函数,而非Sigmoid函数,此时,权重w以及阈值θ的偏导则为:
      在这里插入图片描述
      在这里插入图片描述
      其中:
      在这里插入图片描述若设输出层的误差δ1o(o=1,2,…,l)为:
      在这里插入图片描述
      或者当输出层神经元的激活函数为线性激活函数时δo(o=1,2,…,l)可表示为:
      在这里插入图片描述
      则Δw和Δθ可以表示为:
      在这里插入图片描述
      接下来,继续从右往左求导,得到权重v和阈值γ的负梯度:
      在这里插入图片描述
      在这里插入图片描述其中:
      在这里插入图片描述若输出层神经元的激活函数为线性激活函数,则权重v和阈值γ的负梯度可表示为:
      在这里插入图片描述
      在这里插入图片描述
      其中:
      在这里插入图片描述若设隐藏层的误差δ2h(h=1,2,…,q)为:
      在这里插入图片描述
      其中δ1o(o=1,2,…,l)为:
      在这里插入图片描述
      或者当输出层神经元的激活函数为线性激活函数时δ2h(h=1,2,…,q)可表示为:
      在这里插入图片描述
      其中δ1o(o=1,2,…,l)为:
      在这里插入图片描述
      则Δv和Δγ可以表示为:
      在这里插入图片描述
    • 至此推导出所有参数的负梯度,将各个参数的权重更新总结如下:
      在这里插入图片描述
      其中:
      在这里插入图片描述
      用矩阵表示为:
      在这里插入图片描述
      其中:
      在这里插入图片描述

    3. 关于算法的实际应用

    • 关于每次参数更新所针对的数据集大小对模型学习的影响:
      在实际应用中,一般来说标准BP算法每次更新只针对单个样例,即上述推导过程中的样本个数n=1的情况。在这种情况下,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。
      与之相对应的累积BP算法直接针对整体训练集的总误差,即n>>1的情况。在这种情况下,每更新一次权重系数,算法都要读取整个训练集的数据一遍,因此其参数更新频率会非常缓慢。
      在实际应用中,我们可以采取折中的方式,即采用小批量(mini-batch)的数据读取方式,每次只读取总训练数据的一小部分数据来更新参数。这样既可以提高计算效率,也能够更快地进行参数更新。

    • 关于BP神经网络的“过拟合”(overfitting)问题:
      除此之外,多层神经网络由于其强大的表示能力而经常遭遇“过拟合”(overfitting),即模型在训练集上表现良好但无法概括未见过的新数据或测试数据的情况。在这种情况下,我们也称模型具有”高方差“(high variance)的属性,即模型对训练数据的随机性很敏感。
      有两种策略常用来缓解BP网络的过拟合问题:
      第一种策略是"早停"(early stopping):将数据分成训练集和验证集,训练集用来计算梯度、更新权重和阈值,验证集用来估计误差。若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
      第二种策略是"正则化"(regularization):其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和(L2正则化)。由于过拟合问题通常是由于训练后的模型表达式过于复杂所导致的,因此通过调整正则项系数λ使该正则项经过微分后能够不同程度地降低各个权重系数值以减少各个特征对结果的影响从而使模型得到不同程度的简化,就能最终达到抵抗模型过拟合的效果。

    4. 参考文献

    • [1] 周志华. 机器学习(第1版)[M]. 出版地:北京市清华大学学研大厦A座, 出版单位:清华大学出版社, 出版年份:2016, 起止页码:97-106.
    • [2] Sebastian Raschka,Vahid Mirijalili. Python机器学习(第2版)[M]. 出版地:北京市西城区百万庄大街22号, 出版单位:机械工业出版社, 出版年份:2019, 起止页码:238-261.
    展开全文
  • 教学课件 课件PPT 医学培训课件 教育资源 教材 讲义
  • 人工神经网络多层神经网络

    千次阅读 2021-05-05 15:19:03
    在上一讲中,我们提到从上个世纪80年代开始,人工神经网络领域迎来了新的突破,产生了多层神经网络,人们终于可以利用人工神经网络处理非线性问题了。 2. 多层神经网络结构 这一讲主要介绍多层神经网络的结构。下面...

    1. 回顾

      在上一讲中,我们提到从上个世纪80年代开始,人工神经网络领域迎来了新的突破,产生了多层神经网络,人们终于可以利用人工神经网络处理非线性问题了。

    2. 多层神经网络结构

    2.1 两层神经网络例子

      这一讲主要介绍多层神经网络的结构。下面这幅图是最简单的多层神经网络,它包含2层,总共由3个神经元相互连接而成。
    在这里插入图片描述

    图1 两层神经网络的例子

      输入 X X X向量,有两个分量 x 1 x_1 x1 x 2 x_2 x2,输出 y y y是一个数值。我们逐层写出输入到输出之间的关系:
       a 1 = ω 11 x 1 + ω 12 x 2 + b 1 a_1=ω_{11}x_1+ω_{12}x_2+b_1 a1=ω11x1+ω12x2+b1(第一个神经元)
       a 2 = ω 21 x 1 + ω 22 x 2 + b 2 a_2=ω_{21}x_1+ω_{22}x_2+b_2 a2=ω21x1+ω22x2+b2(第二个神经元)
       z 1 = φ ( a 1 ) z_1=φ(a_1) z1=φ(a1)(非线性函数)
       z 2 = φ ( a 2 ) z_2=φ(a_2) z2=φ(a2)(非线性函数)
       y = ω 1 z 1 + ω 2 z 2 + b 3 y=ω_1z_1+ω_2z_2+b_3 y=ω1z1+ω2z2+b3(第三个神经元)

    当然,我们也可以用一个非常复杂的公式描述多层神经网络输入与输出的关系
    y = w 1 φ ( ω 11 x 1 + ω 12 x 2 + b 1 ) + w 2 φ ( ω 21 x 1 + ω 22 x 2 + b 2 ) + b 3 (1) y=w_1φ(ω_{11}x_1+ω_{12}x_2+b_1)+w_2φ(ω_{21}x_1+ω_{22}x_2+b_2)+b_3\tag{1} y=w1φ(ω11x1+ω12x2+b1)+w2φ(ω21x1+ω22x2+b2)+b3(1)

    这个神经网络分成了两层,第一层是前2个神经元,第二层是后一个神经元,两层之间用非线性函数 φ ( ∗ ) φ(*) φ()连接起来。

      这里有个问题请大家思考一下,在这个多层神经网络模型中,待求的参数是哪些呢

      显然,待求的参数有9个,分别是:

    • 第一层网络中的( w 11 , w 12 , w 21 , w 22 , b 1 , b 2 w_{11},w_{12},w_{21},w_{22},b_1,b_2 w11w12w21w22b1b2
    • 第二层网络中的( w 1 , w 2 , b 3 w_1,w_2,b_3 w1w2b3

    2.2 非线性函数的作用

      需要强调的是两层之间的非线性函数 φ ( ∗ ) φ(*) φ()是必须的。我们不妨考虑一下,如果我们不加这个非线性函数 φ ( ∗ ) φ(*) φ(),而是让第一层的输出直接作用到第二层的输入上会有什么结果呢?

    这时输出 y y y将等于如下这个式子
    y = w 1 ( ω 11 x 1 + ω 12 x 2 + b 1 ) + w 2 ( ω 21 x 1 + ω 22 x 2 + b 2 ) + b 3 y=w_1(ω_{11}x_1+ω_{12}x_2+b_1)+w_2(ω_{21}x_1+ω_{22}x_2+b_2)+b_3 y=w1(ω11x1+ω12x2+b1)+w2(ω21x1+ω22x2+b2)+b3
    把它经过一系列的化简后
    y = ( w 1 ω 11 + w 2 ω 21 ) x 1 + ( w 1 ω 12 + w 2 ω 22 ) x 2 + ( w 1 b 1 + w 2 b 2 + b 3 ) (2) y=(w_1ω_{11}+w_2ω_{21})x_1+(w_1ω_{12}+w_2ω_{22})x_2+(w_1b_1+w_2b_2+b_3)\tag{2} y=(w1ω11+w2ω21)x1+(w1ω12+w2ω22)x2+(w1b1+w2b2+b3)(2)
    可以看到, y y y x 1 x_1 x1 x 2 x_2 x2加权求和再加上偏置的形式,输出仍然是输入的线性加权求和再加偏置的形式。

    如果我们现在假设一个神经元的状况
    在这里插入图片描述

    图2 单个神经元的例子

    那么将有
    y = w 1 x 1 + w 2 x 2 + b (3) y=w_1x_1+w_2x_2+b\tag{3} y=w1x1+w2x2+b(3)

    综合上述复杂的式(2)及简单的式(3),我们可以看到,如果式(3)的 w 1 = w 1 ω 11 + w 2 ω 21 w_1=w_1ω_{11}+w_2ω_{21} w1=w1ω11+w2ω21,同时另外两个相应的式子也相应的相等,那么式(2)与式(3)将会是同一个模型。也就是说,如果层与层之间不加非线性函数,那么多层神经网络将会退化到一个神经元的感知器模型状态。

    我们论证了在多层神经网络中必须加入非线性函数,下一个问题是我们要加的非线性函数是什么呢 ?

    这里先直接给出答案,非线性函数是阶跃函数。例如
    φ ( x ) = { 1 , x > 0 0 , x < 0 φ(x)=\begin{cases} 1, & x>0\\ 0, & x<0 \end{cases} φ(x)={1,0,x>0x<0
    在这里插入图片描述

    图3 阶跃函数

    为什么要用阶跃函数作为多层神经网络的非线性函数呢?

      因为有一个定理,如果非线性函数采用阶跃函数,那么三层神经网络可以模拟任意的非线性函数

    3. 三层神经网络可以模拟任意的非线性函数

      在证明这个定理之前,我们来看一下多层神经网络的结构。我们可以任意的增加神经网络的层数,同时对于每一层我们可以任意的设置这一层神经元的个数,运用前面讲述的连接方式,我们将获得更大的神经网络。例如在如下图4所示的神经网络中,总共有3层,第一层有3个神经元,第二层有2个神经元,第三层有2个神经元,层与层之间用非线性函数连接。在这里插入图片描述

    图4 多层神经网络结构

    接下来我们可以给出3层神经网络模拟任意非线性函数的证明了。

    在这里我们假设特征空间是二维的,同时我们假设是二分类问题。对于特征空间大于二维,类别数大于两类的情况,证明的思路也是一样的。

    3.1 构造三角形非线性函数的神经网络结构

      首先,我们来看一个简单的非线性函数。在特征空间上,有一个三角形,在三角形内部的区域属于一类,而在三角形外部的区域属于另一类,如下图所示。
    在这里插入图片描述

    我们要用多层神经网络来构造一个函数使得:
      如果 x x x在三角形内部,则输出 y > 0 y>0 y>0;
      如果 x x x在三角形外部,则输出 y < 0 y<0 y<0

    怎么做呢?首先我们假定这个三角形三条边的方程分别是
    { w 11 x 1 + w 12 x 2 + b 1 = 0 w 21 x 1 + w 22 x 2 + b 2 = 0 w 31 x 1 + w 32 x 2 + b 3 = 0 \begin{cases} w_{11}x_1+w_{12}x_2+b_1=0\\ w_{21}x_1+w_{22}x_2+b_2=0\\ w_{31}x_1+w_{32}x_2+b_3=0 \end{cases} w11x1+w12x2+b1=0w21x1+w22x2+b2=0w31x1+w32x2+b3=0
    在这里插入图片描述

    图5 三角形非线性函数

    同时我们假定上述三个方程中,在朝向三角形的一侧,其方程的值大于0;而远离三角形的一侧,其方程的值小于0。这是一定可以做到的,因为如果做不到,只需要将 w w w b b b取相反数即可。

    那么我们如何构造一个两层的神经网络来实现在三角形内输出大于0而三角形外输出小于0呢?

    构造如下:
    在这里插入图片描述

    图6 构造三角形非线性函数神经网络模型

    第一层有3个神经元,每个神经元的 w w w b b b的值分别对应着三角形每一条边的方程,如下图所示。这样如果一个二维向量 X X X,它的两个分量 x 1 x_1 x1 x 2 x_2 x2在三角形里面,那么三个神经元输出的 a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3将都大于0

    在这里插入图片描述

    经过阶跃函数过后,输出 Z 1 , Z 2 , Z 3 Z_1,Z_2,Z_3 Z1Z2Z3都将等于1
    φ ( x ) = { 1 , x > 0 0 , x < 0 φ(x)=\begin{cases} 1, & x>0\\ 0, & x<0 \end{cases} φ(x)={1,0,x>0x<0
    在这里插入图片描述
    另一方面,如果 X X X在三角形外,那么 a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3至少有一个小于0。经过阶跃函数过后, Z 1 , Z 2 , Z 3 Z_1,Z_2,Z_3 Z1Z2Z3也至少有一个等于0

    在这里插入图片描述
    根据上面的分析,我们在第2层,将 Z 1 , Z 2 , Z 3 Z_1,Z_2,Z_3 Z1Z2Z3对应的 w w w全设置为1,而将偏置 b b b设置为-2.5,则满足条件。
    在这里插入图片描述
    因为当且仅当 X X X在三角形内, Z 1 , Z 2 , Z 3 Z_1,Z_2,Z_3 Z1Z2Z3全为1,经过第2层神经元后,输出为y=0.5;而如果 X X X在三角形外, Z 1 , Z 2 , Z 3 Z_1,Z_2,Z_3 Z1Z2Z3不能全为1,至少有一个为0,经过第2层后,输出的y将会是一个负数,这样就达到了模拟这个非线性函数的目的。

    3.2 构造四边形非线性函数的神经网络结构

      下面我们假设特征空间有一个四边形,四边形里面属于一类,而四边形外面属于另一类,如下图所示。

    在这里插入图片描述
    我们如何做一个两层神经网络来区分这两类呢?有了前面的例子,这个问题很简单,只需要

    • 在第一层增加一个神经元
    • 第二层所有权重设置为1
    • 偏置设置为-3.5

    即可满足条件,可自行验证一下。

    那么对于任意的多边形都可以采用这样的方法,所以两层神经网络足以模拟这样多边形的非线性函数。

    3.3 构造不规则封闭曲线非线性函数的神经网络结构

      接下来,如果有一个不规则的封闭曲线呢?例如下图所示,在圆圈里面是属于一类,而圆圈外面属于另一类。

    在这里插入图片描述
    我们能否用两层神经网络来模拟这样的非线性函数呢?虽然我们不能精确的获得这个非线性函数,但是我们却可以无限地逼近它。因为任何一个不规则的封闭曲线都可以用多边形去近似。例如我们可以用下面的绿色多边形去近似图上的圆圈,当多边形的边数趋近无限时,第二层神经元的个数也会趋于无限,这时我们可以以任意精度去逼近这个非线性函数。

    在这里插入图片描述

    3.4 构造两个三角形非线性函数的神经结构

      最后我们看一下,如果特征空间有2个三角形,如果 X X X处于两个三角形的任何一个当中,我们把它判定为同一类,而两个三角形的外面是另外一类。

    在这里插入图片描述
    这时我们能否用多层神经网络来模拟这个非线性函数呢?

      答案是也是可以的。不过对于这个例子,我们需要用3层神经网络来模拟,如图所示。这个神经网络前面两层的设置都已经讲过,我们主要看最后一层,经过简单的推理可以得出,如果 X X X在第一个三角形里面,那么 C 1 = 1 , C 2 = 0 C_1=1,C_2=0 C1=1C2=0;如果 X X X在第二个三角形里面,那么 C 1 = 0 , C 2 = 1 C_1=0,C_2=1 C1=0C2=1;如果 X X X同时在两个三角形外面,那么 C 1 = 0 , C 2 = 0 C_1=0,C_2=0 C1=0C2=0。因此只要最后一层 C 1 , C 2 C_1,C2 C1,C2对应的权重都设置为1,而偏置 b b b设置为-0.5就可以区分 X X X在两个三角形内部还是在外部了,可自行验证一下。

    在这里插入图片描述

    图7 构造两个三角形非线性函数神经网络模型

      学习了上面的知识,我们可以利用三层神经网络模拟任意的非线性二分类函数了。我们把特征空间上任意的区域设置为一类,再把另外的区域设置为另一类。请大家思考,按照上面的知识,如何设计三层神经网络来逼近这些函数呢?

    4. 结尾

    作为结尾,有两道思考题:
    (1)假设非线性函数有三个取值的情况,例如特征空间中有两个三角形:
    当向量 X X X在第一个三角形内时,y=2;
    当向量 X X X在第二个三角形内时,y=1;
    当向量 X X X在两个三角形外时,y=-1;
    请设计一个三层神经网络来模拟这个非线性函数。

    (2)如图所示,两条直线相交将特征空间分为四个区域,其中两个对角的区域(如阴影部分)属于同一类,而另两个对角区域(如白色部分)属于另一类。

    在这里插入图片描述

    • 请设计一个神经网络来模拟这个非线性函数。
    • 请你深入思考一下,最少需要多少个神经元就能模拟这个非线性函数呢?

    参考资料

    1. 浙江大学《机器学习》课程—胡浩基老师主讲

    如果文章对你有帮助,请记得点赞与关注,谢谢!
    在这里插入图片描述

    展开全文
  • 一、多层神经网络 1、多层神经网络数学模型 2、数学模型中的非线性函数fai 1)非线性函数fai存在的意义 2)非线性函数fai具体是什么? 3、多层神经网络与单层神经网络的区别与改进 1)单层神经网络数学模型 2...

    目录

    一、多层神经网络

    1、多层神经网络数学模型

    2、数学模型中的非线性函数fai

    1)非线性函数fai存在的意义

    2)非线性函数fai具体是什么?

    3、多层神经网络与单层神经网络的区别与改进

    1)单层神经网络数学模型

    2)多层神经网络模型

    3)区别

    二、三层神经网络

    1、定理

    2、一些概念(决策面、神经元、神经网络层数)

    1)决策面

    2)神经元

    3)神经网络层数n

    3、常见的三层神经网络模型(含w,b的参数设置)

    1)一个三角形决策面的神经网络模型(两层神经网络)

    2)一个四边形决策面的神经网络模型(两层神经网络)

    3)一个曲线围成决策面的神经网络模型(两层神经网络)

    小结1:一个决策面时最后一层常用w,b参数的设置

    4)两个决策面的神经网络模型(三层神经网络)

    5)两个以上决策面的神经网络模型(三层神经网络)

    小结2:多个决策面时最后一层w,b常用参数和第二层w,b常用参数的设置

    疑问:


    一、多层神经网络

    1、多层神经网络数学模型

    并行化的系统


    2、数学模型中的非线性函数fai

    1)非线性函数fai存在的意义

    如下图可知如果没有非线性函数最后得出的y依据是线性的,这就又回到了最初的单层神经网络,没有新的突破,而fai函数则图突破了这个局限性

    2)非线性函数fai具体是什么?

    fai函数就是阶跃函数

     

    3、多层神经网络与单层神经网络的区别与改进

    1)单层神经网络数学模型

    具体见:《机器学习——人工神经网络之发展历史(神经元数学模型、感知器算法)

     

    2)多层神经网络模型

     

    3)区别

    多层神经网络顾名思义具有多层的神经网络,经过多层的变化后将输入的xi变化后进行y的输出

    该多层神经网络数学模型和阶跃函数(fai函数)的结合可以解决所有的非线性问题,这也是多层神经网络最大的优势所在

     

    二、三层神经网络

    1、定理

    三层神经网络可以模拟所有的决策面

    2、一些概念(决策面、神经元、神经网络层数)

    1)决策面

    决策面就是每一类样本所分布的一块区域,由多条线所围成的一个区域(若由曲线围成,可以将曲线看成由无数条非常短的线组成的曲线

    三条线围成一个决策面(C1类的区域)

    四条线围成一个决策面(C1类的区域)

    曲线围成一个决策面(C1类的区域)——将曲线看成由无数直线构成

    直线围成多个分开的决策面(C1类的区域)

     

    2)神经元

    神经元在数学模型中的位置如下图所示,神经元的个数其实就是围成决策面的直线条数,围成决策面的条数有多少,那么神经元就有多少个,若是曲线,则有无数个神经元

    3)神经网络层数n

    神经网络层数一般由决策面的个数决定,若决策面只有一个,神经网络数学模型采用两层神经网络就可以实现,但是如果决策面有多个(如上面的C1类的区域分开成了两个决策面)则神经网络数学模型采用三层神经网络就可以实现

    决策面个数m,则神经网络层数n:

    所以三层神经网络可以模拟所有的决策面

     

    3、常见的三层神经网络模型(含w,b的参数设置)

    1)一个三角形决策面的神经网络模型(两层神经网络)

     

    2)一个四边形决策面的神经网络模型(两层神经网络)

     

    3)一个曲线围成决策面的神经网络模型(两层神经网络)

    将曲线用无数个非常短的线去替代曲线,只是神经元为无限个

     

    小结1:一个决策面时最后一层常用w,b参数的设置

    答:设决策面为1个,围成决策面的直线条数为n,则取:所有w = 1 ; b = - n + 0.5

    只有一个决策面的数学模型最后一层神经网络是与逻辑关系,即所有输入为1,归类为C1,反之归类为C2

     

    4)两个决策面的神经网络模型(三层神经网络)

    一个决策面的神经元在第二层的输出为一个,有多少个决策面第二层就会有多少个输出(与关系)

    5)两个以上决策面的神经网络模型(三层神经网络)

    两个以上的决策面的神经网络模型和两个决策面是类似的,只是第一层的神经元数目多了,第二层的与关系多了而已

     

    小结2:多个决策面时最后一层w,b常用参数和第二层w,b常用参数的设置

    答:多个决策面时,最后一层的w,b参数固定为:w = 1 , b = -0.5

    第二层每个与关系处即每一个决策面的第二层的w,b参数设置参考上面的小结1

    疑问:

    那么该怎么取利用这个神经网络模型去解决实际的问题呢?至今为止神经网络的理论还不够完善,大部分还是通过实验的方式来获得神经网络模型中的参数(主要是第一层中的w,b参数),也因为这样,神经网络成为了一个实验性的学科,但是也有常用的神经网络模型训练方法(训练就是通过训练样本求解参数的一个过程,,进而获得完整的模型,利用模型可以对测试样本进行分类),可以参见文章:《机器学习——人工神经网络之后向传播算法(BP算法)

    展开全文
  • 多层神经网络

    2018-05-03 12:22:51
    使用多层神经网络预测动态数据,其中分为两部分,一是子网络,二是总网络,训练的数据是自己的数据。
  • 采用Levenberg-Marquardt优化方法训练的前馈多层感知器人工神经网络(ANN)模型。 =>有关示例用法,请参见“ example_code.m”。 alkim.gokcen@outlook.com
  • 神经网络与机器学习(原书第3版)是关于神经网络的全面的、彻底的、可读性很强的、最新的论述。全书共15章,主要内容包括Rosenblatt感知器、通过回归建立模型、最小均方算法、多层感知器、核方法和径向基函数网络、...
  • 内容提要: 本书共8章。包括前向多层人工神经网络,按照自适应谐振理论构成的自组织神经网络,自组织特征映射与联想记忆等。
  • 人工智能-基于多层卷积神经网络的研究与应用.pdf
  • 在计算机上验证和测试多层神经网络的原理和算法实现,测试多层神经网络的训练效果。 1、掌握多层神经网络的基本原理; 2、掌握多层神经网络的算法过程; 3、掌握反向传播的算法过程;
  • MLP(多层神经网络)与人工神经网络

    千次阅读 2017-02-09 10:55:06
    人工神经网络是由许多相同的简单处理单元并联组合而成,虽然每个单元的功能简单,但大量简单单元的并行活动,使其对信息的处理能力与效果惊人。 (2) 高度的非线性全局作用 神经网络系统是由大量简单神经元构成的,每...
  • 人工智能-基于多层前传神经网络的优化组合建模及其应用.pdf
  • 人工智能-基于多层卷积神经网络的服装图像分类与检索.pdf
  • 基于多层感知人工神经网络的执行机构末端综合定位.pdf
  • 多层变权人工神经网络智能评估方法研究.pdf
  • 第一章 人工神经网络………………………………………………… 3 §1.1人工神经网络简介………………………………………………………… 3 1.1 人工神经网络的起源 …………………………………………………… 3 1.2 ...
  • 人工智能-基于多层神经网络的室内定位算法研究.pdf
  • 人工智能-基于RBM多层神经网络的身份识别研究.pdf
  • 人工智能-深度学习-多层卷积神经网络深度学习算法的应用研究.pdf
  • 人工智能-基于多层神经网络的服务系统可靠性预测.pdf
  • 人工智能-基于多层神经网络的超宽带室内无线定位算法.pdf
  • 人工神经网络简介

    千次阅读 2022-02-19 00:38:51
    本文介绍了人工神经网络的基本概念。
  • 人工智能-目标检测-多层卷积神经网络在SAR图像目标检测与识别的应用研究.pdf
  • 采用基于片上网络通信的多核处理器,设计并实现了一种...实验结果表明所设计的结构满足精度和实时性要求,并且编程模型简单,易于扩展和维护,为人工神经网络在计算机视觉和人工智能领域的应用提供了良好的解决方法。
  • 人工神经网络

    千次阅读 2022-01-20 11:07:59
    1. 人工神经网络(ANN)概述 1.1 人工神经网络的研究目的和意义 目的: (1)探索和模拟人的感觉、思维和行为的规律,设计具有人类智能的计算机系统。 (2)探讨人脑的智能活动,用物化了的智能来考察和研究人脑智能的...
  • 多层前馈神经网络及BP算法

    万次阅读 多人点赞 2018-01-23 14:00:30
    多层前馈(multilayer feed-forward)神经网络由一个输入层、一个或多个隐藏层和一个输出层组成,后向传播(BP)算法在多层前馈神经网络上面进行学习,采用BP算法的(多层)前馈神经网络被称为BP神经网络。给出一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,087
精华内容 11,234
关键字:

多层人工神经网络