精华内容
下载资源
问答
  • 反向传播思想及其优缺点

    千次阅读 2018-03-20 15:14:10
    反向传播思想:计算出输出与标签间的损失函数值,然后计算其相对于每个神经元的梯度,根据梯度方向更新权值。(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;...

    反向传播思想:



    计算出输出与标签间的损失函数值,然后计算其相对于每个神经元的梯度,根据梯度方向更新权值。
    (1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;
    (2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;

    (3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。


    多层前向BP网络的优点:

    • 网络实质上实现了一个从输入到输出的映射功能,而数学理论已证明它具有实现任何复杂非线性映射的功能。这使得它特别适合于求解内部机制复杂的问题;
    • 网络能通过学习带正确答案的实例集自动提取“合理的”求解规则,即具有自学习能力;
    • 网络具有一定的推广、概括能力

    多层前向BP网络的问题:

    • BP算法的学习速度慢,主要原因有:

      • 由于BP算法本质为梯度下降法,它所要优化的目标函数非常复杂,因此会出现“锯齿形现象”,使得BP算法低效;
      • 存在麻痹现象,由于优化的目标函数很复杂,它必然会在神经元输出接近0或1的情况下,出现一些平坦区,在这些区域内,权值误差改变很小,使训练过程几乎停顿;
      • 为了使网络执行BP算法,不能用传统的一维搜索法求每次迭代的步长,而必须把步长的更新规则预先赋予网络,这种方法将引起算法低效。
    • 网络训练失败的可能性较大,其原因有:

      • 从数学角度看,BP算法为一种局部搜索的优化方法,但它要解决的问题为求解复杂非线性函数的全局极值,因此,算法很有可能陷入局部极值,使训练失败;
      • 难以解决应用问题的实例规模和网络规模间的矛盾。这涉及到网络容量的可能性与可行性的关系问题,即学习复杂性问题;
      • 网络结构的选择尚无一种统一而完整的理论指导,一般只能由经验选定,而网络的结构直接影响网络的逼近能力及推广性质;
      • 新加入的样本要影响已学习成功的网络,而且刻画每个输入样本的特征的数目也必须相同;
      • 网络的预测能力(也称泛化能力、推广能力)与训练能力(也称逼近能力、学习能力)的矛盾。一般情况下,训练能力差时,预测能力也差,并且一定程度上,随训练能力地提高,预测能力也提高。但这种趋势有一个极限,当达到此极限时,随训练能力的提高,预测能力反而下降,即出现所谓“过拟合”现象。此时,网络学习了过多的样本细节,而不能反映样本内含的规律


    展开全文
  • 反向传播算法详解

    千次阅读 2020-03-14 19:02:44
    作者:Great Learning Team deephub.ai 翻译组 神经网络 什么是反向传播? 反向传播是如何工作的?... 那就是反向传播算法。 它对以前的模块产生积极影响,以提高准确性和效率。 让我们来深入研究一下...


    作者:Great Learning Team
    deephub.ai 翻译组

    1. 神经网络
    2. 什么是反向传播?
    3. 反向传播是如何工作的?
    4. 损失函数
    5. 为什么我们需要反向传播?
    6. 前馈网络
    7. 反向传播的类型
    8. 案例研究

    在典型的编程中,我们输入数据,执行处理逻辑并接收输出。 如果输出数据可以某种方式影响处理逻辑怎么办? 那就是反向传播算法。 它对以前的模块产生积极影响,以提高准确性和效率。

    让我们来深入研究一下。

    神经网络(Neural network)

    神经网络是连接单元的集合。每个连接都有一个与其相关联的权重。该系统有助于建立基于海量数据集的预测模型。它像人类的神经系统一样工作,有助于理解图像,像人类一样学习,合成语音等等。

    什么是反向传播(What is backpropagation?)

    我们可以将反向传播算法定义为在已知分类的情况下,为给定的输入模式训练某些给定的前馈神经网络的算法。当示例集的每一段都显示给网络时,网络将查看其对示例输入模式的输出反应。之后,测量输出响应与期望输出与误差值的比较。之后,我们根据测量的误差值调整连接权重。

    在深入研究反向传播之前,我们应该知道是谁引入了这个概念以及何时引入。它最早出现在20世纪60年代,30年后由大卫·鲁梅尔哈特、杰弗里·辛顿和罗纳德·威廉姆斯在1986年的著名论文中推广。在这篇论文中,他们谈到了各种神经网络。今天,反向传播做得很好。神经网络训练是通过反向传播实现的。通过这种方法,我们根据前一次运行获得的错误率对神经网络的权值进行微调。正确地采用这种方法可以降低错误率,提高模型的可靠性。利用反向传播训练链式法则的神经网络。简单地说,每次前馈通过网络后,该算法根据权值和偏差进行后向传递,调整模型的参数。典型的监督学习算法试图找到一个将输入数据映射到正确输出的函数。反向传播与多层神经网络一起工作,学习输入到输出映射的内部表示。

    反向传播是如何工作的?(How does backpropagation work?)

    让我们看看反向传播是如何工作的。它有四层:输入层、隐藏层、隐藏层II和最终输出层。

    所以,主要的三层是:

    1.输入层

    2.隐藏层

    3.输出层

    每一层都有自己的工作方式和响应的方式,这样我们就可以获得所需的结果并将这些情况与我们的状况相关联。 让我们讨论有助于总结此算法所需的其他细节。


    这张图总结了反向传播方法的机能。

    1.输入层接收x

    2.使用权重w对输入进行建模

    3.每个隐藏层计算输出,数据在输出层准备就绪

    4.实际输出和期望输出之间的差异称为误差

    5.返回隐藏层并调整权重,以便在以后的运行中减少此错误

    这个过程一直重复,直到我们得到所需的输出。训练阶段在监督下完成。一旦模型稳定下来,就可以用于生产。

    损失函数(Loss function)

    一个或多个变量被映射到实数,这些实数表示与这些变量值相关的某个数值。为了进行反向传播,损失函数计算网络输出与其可能输出之间的差值。

    为什么我们需要反向传播?(Why do we need backpropagation?)

    反向传播有许多优点,下面列出一些重要的优点:

    •反向传播快速、简单且易于实现

    •没有要调整的参数

    •不需要网络的先验知识,因此成为一种灵活的方法

    •这种方法在大多数情况下都很有效

    •模型不需要学习函数的特性

    前馈网络(Feed forward network)

    前馈网络也称为MLN,即多层网络。 之所以称为前馈,是因为数据仅在NN(神经网络)中通过输入节点,隐藏层并最终到达输出节点。 它是最简单的人工神经网络。

    反向传播的类型(Types of backpropagation)

    有两种类型的反向传播网络。

    •静态反向传播(Static backpropagation)

    •循环反向传播(Recurrent backpropagation)

    1. 静态反向传播(Static backpropagation)

    在这个网络中,静态输入的映射生成静态输出。像光学字符识别这样的静态分类问题将是一个适合于静态反向传播的领域。

    1. 循环反向传播(Recurrent backpropagation)

    反复进行反向传播,直到达到某个阈值为止。 在到达阈值之后,将计算误差并向后传播。

    这两种方法的区别在于,静态反向传播与静态映射一样快。

    案例研究(Case Study)

    让我们使用反向传播进行案例研究。 为此,我们将使用Iris数据(鸢尾花卉数据集),该数据包含诸如萼片和花瓣的长度和宽度之类的特征。 在这些帮助下,我们需要确定植物的种类。

    为此,我们将构建一个多层神经网络,并使用sigmoid函数,因为它是一个分类问题。

    让我们看一下所需的库和数据。

    import numpy as np
    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    from sklearn.model_selection import train_test_split
    

    为了忽略警告,我们将导入另一个名为warnings的库。

    import warnings
    warnings.simplefilter(action='ignore', category=FutureWarning)
    

    接着让我们读取数据。

    iris = pd.read_csv("iris.csv")
    iris.head()
    

    现在我们将把类标记为0、1和2。

    iris. replace (, , inplace=True)
    

    我们现在将定义函数,它将执行以下操作。

    1.对输出执行独热编码(one hot encoding)。

    2.执行sigmoid函数

    3.标准化特征

    对于独热编码,我们定义以下函数。

    defto_one_hot(Y):
        n_col = np.amax(Y) + 1
        binarized = np.zeros((len(Y), n_col))
        for i in range(len(Y)):
            binarized ] = 1.return binarized
    

    现在我们来定义一个sigmoid函数

    defsigmoid_func(x):return1/(1+np.exp(-x))
    defsigmoid_derivative(x):return sigmoid_func(x)*(1 – sigmoid_func(x))
    

    现在我们将定义一个用于标准化的函数。

    defnormalize(X, axis=-1, order=2):
        l2 = np. atleast_1d (np.linalg.norm(X, order, axis))
        l2 = 1return X / np.expand_dims(l2, axis)
    

    现在我们将对特征进行规范化,并对输出应用独热编码。

    x = pd.DataFrame(iris, columns=columns)
    x = normalize(x.as_matrix())
    
    y = pd.DataFrame(iris, columns=columns)
    y = y.as_matrix()
    y = y.flatten()
    y = to_one_hot(y)
    

    现在是时候应用反向传播了。为此,我们需要定义权重和学习率。让我们这么做吧。但在那之前,我们需要把数据分开进行训练和测试。

    #Split data to training and validation data(将数据拆分为训练和验证数据)
    X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.33)
    #Weights
    w0 = 2*np.random.random((4, 5)) - 1#forinput - 4 inputs, 3 outputs
    w1 = 2*np.random.random((5, 3)) - 1#for layer 1 - 5 inputs, 3 outputs
    #learning rate
    n = 0.1
    

    我们将为错误设置一个列表,并通过可视化查看训练中的更改如何减少错误。

    errors = []
    

    让我们执行前馈和反向传播网络。对于反向传播,我们将使用梯度下降算法。

    for i in range (100000):
    #Feed forward network
    layer0 = X_train
    layer1 = sigmoid_func(np.dot(layer0, w0))
    layer2 = sigmoid_func(np.dot(layer1, w1))
    Back propagation using gradient descent
    layer2_error = y_train - layer2
    layer2_delta = layer2_error * sigmoid_derivative(layer2)
    layer1_error = layer2_delta.dot (w1.T)
    layer1_delta = layer1_error * sigmoid_derivative(layer1)
    w1 += layer1.T.dot(layer2_delta) * n
    w0 += layer0.T.dot(layer1_delta) * n
    error = np.mean(np.abs(layer2_error))
    errors.append(error)
    

    准确率将通过从训练数据中减去误差来收集和显示

    accuracy_training = (1 - error) * 100
    

    现在让我们直观地看一下如何通过减少误差来提高准确度。(可视化)

    plt.plot(errors)
    plt.xlabel('Training')
    plt.ylabel('Error')
    plt.show()
    


    现在让我们查看一下准确率。

    print ("Training Accuracy of the model " + str (round(accuracy_training,2)) + "%")
    

    Output: Training Accuracy of the model 99.04%

    我们的训练模型表现很好。现在让我们看看验证的准确性。

    #Validate
    layer0 = X_test
    layer1 = sigmoid_func(np.dot(layer0, w0))
    layer2 = sigmoid_func(np.dot(layer1, w1))
    layer2_error = y_test - layer2
    error = np.mean(np.abs(layer2_error))
    accuracy_validation = (1 - error) * 100print ("Validation Accuracy of the model "+ str(round(accuracy_validation,2)) + "%")
    

    Output: Validation Accuracy 92.86%

    这个性能符合预期。

    应遵循的最佳实践准则(Best practices to follow)

    下面讨论一些获得好模型的方法:

    •如果约束非常少,则系统可能不起作用

    •过度训练,过多的约束会导致过程缓慢

    •只关注少数方面会导致偏见

    反向传播的缺点(Disadvantages of backpropagation)

    •输入数据是整体性能的关键

    •有噪声的数据会导致不准确的结果

    •基于矩阵的方法优于小批量方法(mini-batch)

    综上所述,神经网络是具有输入和输出机制的连接单元的集合,每个连接都有相关联的权值。反向传播是"误差的反向传播",对训练神经网络很有用。它快速、易于实现且简单。反向传播对于处理语音或图像识别等易出错项目的深度神经网络非常有益。

    原文链接:https://imba.deephub.ai/p/1c5b5250659911ea90cd05de3860c663

    展开全文
  • 反向传播算法(BP算法)是一种启发式的方法,没有生物学基础 收敛速度缓慢 计算量大 需要大量的带标签数据,对于人来说,识别一个物体只需要1-2张样本数量。
    1. 反向传播算法(BP算法)是一种启发式的方法,没有生物学基础
    2. 收敛速度缓慢
    3. 计算量大
    4. 需要大量的带标签数据,对于人来说,识别一个物体只需要1-2张样本数量。
    展开全文
  • 误差反向传播算法浅解

    万次阅读 2017-09-28 09:24:48
    反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称。由于多层前馈神经网络的训练经常采用误差反向传播算法,人们也常把多层前馈神经网络称为BP网络。

    反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称。由于多层前馈神经网络的训练经常采用误差反向传播算法,人们也常把多层前馈神经网络称为BP网络。


    反向传播算法发明的历史请参考我的前文《神经网络简史》。


    多层前馈神经网络是指通过按某种方式将神经元连接起来,就可构成相关神经网络。下图所示为一个熟知的前馈网络模型,该网络有L层,第1 层为输入层,第L层为网络输出层。在这个网络中,前一层神经元全连接到后一层神经元,同层的神经元之间没有任何连接


    反向传播通常被认为是基于优化理论的一种监督式学习方法,虽然它也用在一些无监督网络(如自动编码器)中。


    本文主要内容:

    • 神经网络应用梯度下降的直观理解

    • 反向传播算法的学习过程

    • 反向传播算法推导

    • 总结探讨

    • 本文灵感来源

    • 参考文献


    直观理解


    考虑一个有两个输入单元、一个输出单元、没有隐藏单元的简单神经网络。每个神经元都使用输入的加权和作为线性输出。


    最初在训练之前,会随机分配权重。之后神经元根据训练实例进行学习,在此情况下包含元组 (x1,x2,t) 的集合,其中 x1与x2是网络的输入,t 为正确输出(在给定相同的输入时网络最终应当产生的输出)。网络在给定x1 和 x2时,会计算一个输出 y,很可能与t 不同(因为权重最初是随机的)。衡量期望输出t 与实际输出  y 之间的差异的一个常见方法是采用平方误差测度:

    其中E为差异或误差。


    为什么采用平方差?其数学背景是最小二乘法,也可以理解为空间两点的距离或者平方误差等。最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。最重要的应用是在曲线拟合上。最小平方所涵义的最佳拟合,即残差(残差为:观测值与模型提供的拟合值之间的差距)平方总和的最小化。


    举例来讲,考虑单一训练实例的网络:(1,1,0),输入x1 与x2均为1,正确输出t 为 0(网络只有一个输出)。现在若将实际输出 y 画在x轴,误差E画在y 轴,得出的是一条抛物线。抛物线的极小值对应输出y,最小化了误差E。对于单一训练实例,极小值还会接触到 x 轴,这意味着误差为零,网络可以产生与期望输出t 完全匹配的输出y。因此,把输入映射到输出的问题就化为了一个找到一个能产生最小误差的函数的最优化问题。

    单一实例的神经网络的误差函数非常容易理解,可以通过解方程,直接找到最小值。这里给一个梯度表示,如下图,便于理解多实例神经网络的梯度表示。



    反向传播算法的目的是找到一组能最大限度地减小误差的权重。寻找抛物线或任意维度中任何函数的极大值的方法有若干种。其中一种方法是通过求解方程组,但这依赖于网络是一个线性系统,而目标也需要可以训练多层非线性网络(因为多层线性网络与单层网络等价)。


    如果考虑两个实例呢(依然是单层神经网络,不考虑非线性变换)?


    考虑一个神经元的输出取决于其所有输入的加权总和:

    其中w1和 w2是从输入单元到输出单元相连的权重。因此,误差取决于输入到该神经元的权重,也是网络要学习最终需要改变的。若每个权重都画在一个水平的轴上,而误差画在垂直轴上,得出的就是一个抛物面(若一个神经元有 k 个权重,则误差曲面的维度就会是k+1,因而就是二维抛物线的k+1维等价)。



    抛物面的最小值需要通过梯度下降法求得。如下图所示。


    如果是多个实例呢?并且是多层神经网络的非线性变换呢?从数学角度看,已经不能通过求解方程组得到最小值,也不能简单的描绘多维权重系数构成的函数所对应的几何形状(比如抛物面)。但是运用抽象推理,大概想象成这样子:


    以上就是神经网络学习和误差函数原理的直观表示。


    结合梯度的概念,这里先给出梯度下降的推导结果(公式所示),下面逐步解释为什么有这个推导结果



    这个公式推导所带出的三个导数非常重要,是影响梯度的三个重要因素。我把上面三个偏导分成三部分来讨论,分别对应于误差函数激活函数神经元模型。假设我们要得到的是第i层到第j层的连接权重w_ij,用于梯度的偏导可以通俗的表达为:


    下面分别从神经元模型误差函数激活函数的角度解释这个公式。


    一个神经元的基本模型如下图所示。



    通向一个神经元的输入net_j是之前神经元的输出o_i 的加权和。若该神经元输出层后的第一层,输入层的输出 o_i就是网络的输入 x_i。该神经元的输入数量是 n。变量 w_ij表示神经元 i 与 j 之间的权重。对于每一个神经元,其对应的输出为:

    从数学的角度来看,神经元模型定义了两层的复合函数:内层是net_k,外层是φ函数。激活函数φ一般是非线性可微函数(反向传播要求人工神经元的激励函数可微)。常用作激活函数的是Sigmoid函数:

    或者写成:

    这个函数也被称为单极性Sigmoid函数。其导数形式很好:

    其图像如何下:

    双极性Sigmoid函数要比较常用。公式如下:

    或者写成(把上式中分子分母同时除以e^z,令x=-2z就得到第二个式子):

    其导数为:

    其图像为:

    从上图可以看出,对于Sigmoid函数,当z的取值越来越大后(饱和区),函数曲线变得越来越平缓,意味着此时的导数也越来越小。同样的,当z的取值越来越小时(饱和区),也有这个问题。仅仅在z取值为0附近时,导数的取值较大。在后文讲到的反向传播算法中,每一层向前递推都要乘以导数,得到梯度变化值。Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的W,b更新到极值的速度较慢,也就是我们的算法收敛速度较慢。


    由于反向传播使用梯度下降法,需要计算平方误差函数对网络权重的导数。假设对于一个输出神经元,平方误差函数为:

    其中

    • E 为平方误差,

    • t 为训练样本的目标输出,

    • y 为输出神经元的实际输出。

    • 加入系数1/2是为了抵消微分出来的指数。之后,该表达式会乘以一个任意的学习速率,因此在这里乘上一个常系数是没有关系的。


    由梯度的定义,与方向导数有关联的一个概念是函数的梯度。多元函数的偏导向量构成了梯度,梯度的方向是函数在这点增长最快的方向,那么函数的偏导在这点的梯度方向也达到最大值。其中,要使用梯度下降法更新 w_ij,必须选择一个学习速率μ。要加在原本的权重上的变化,等于学习速率与梯度的乘积,乘以-1:

    之所以要乘以-1 是因为要更新误差函数极小值而不是极大值的方向。


    从数学的角度看,平方误差函数形成了对输出o_j的复合函数:

    这个式子无论对于输出层的神经元,还是隐藏层的神经元,都是成立的。


    综上所述,误差函数是关于权重的函数,为了在由权重系数构成的多维空间中寻找一个下降最快的梯度方向,我们需要对所有权重系数求偏导。根据复合函数的求导规则,其一般形式为:


    反向传播算法的学习过程


    学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号) 不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络学习训练过程。此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。


    学习过程的伪码描述如下:

    输入:训练集和学习率

    初始化网络权值(通常是小的随机值)

      do

         forEach 训练样本 ex

            prediction = neural-net-output(network, ex)  // 正向传递,得到当前样本的输出

            actual = teacher-output(ex)//从监督老师那里获得真实输出

            计算输出单元的误差 (prediction - actual)//获得残差

            计算    对于所有隐藏层到输出层的权值和阈值          // 反向传递

            计算    对于所有输入层到隐藏层的权值和阈值          // 继续反向传递

            更新网络权值和阈值 // 输入层不会被误差估计改变

      until 所有样本正确分类或满足其他停止条件

      return 权重与阈值确定的多层前馈神经网络


    完整的误差反向传播算法包括前向计算和反向传播两部分。


    反向传播算法推导


    为了最小化误差E,最终归结为优化问题。前面说过,反向传播算法的目的是找到一组能最大限度地减小误差的权重,在反向传播中使用的方法是梯度下降法。这样我们就需要计算误差函数E对权重的偏导。由上文,误差函数对权重w_ij的偏导数是三个偏导数的乘积:


    我们的目标就是分别求得这三个偏导。


    在右边的最后一项中(神经元模型),只有加权和 net_j取决于 w_ij,因此:

    当对一个权重求导时,其他权重就视为常量。这里如有不确定,把加权和展开即可明白。


    对于激活函数部分,神经元j 的输出对其输入的导数就是激活函数的偏导数(这里假定使用Sigmoid函数):

    这就是为什么反向传播需要的激活函数是可微的。同时,前向传播时,很容易求得net_j(各层神经元计算得到的加权和),所以该偏导也容易求得。


    对于误差函数部分的偏导,为了方便理解,分输出层和隐藏层来讨论。


    如果神经元在输出层中,因为此时o_j=y以及

    所以第一项可以直接算出。


    但如果j 是网络中任一内层(隐藏层),就需要用到链式求导法则。


    下面以一个神经网络的局部来说明。神经网络中相邻的两层构成一个计算单元,因此只需要理解第j层和第k(j+1) 层之间的结构和运算,便可以通晓整个网络的结构和运算(前面说过,层与层之间全连接,同层之间没有连接)。


    注意到我们要求的是第i层到第j层的连接权重w_ij,考虑第j层中的某个神经元的输出o_j是第k层所有神经元{u,v,…,w}的输入,把误差(损失)函数E看作是{u,v,…,w}的函数(注意,这里的第k层可能是输出层,也可能是隐藏层;作为输出层时,既可能是多值输出,也可能是单值输出)。可以得到:


    这里应用链式求导法则


    最后一步做了两次替换:


    对于上面推导结果,我们发现:


    因此,若已知所有关于下一层(更接近输出神经元的一层)的输出关于o_k 的导数,则可以计算 o_j的导数。


    现在把上述推导放在一起:

    此时:

    则:


    综上,权重的调整只和以下因素有关:

    • 前向神经元的输出(和所调整权重有关的一个前向神经元的输出作为输入)

    • 当前神经元的激活函数

    • 所有后向神经元(误差函数导数,激活函数导数,并一直递归下去)及其前向传播时的权重(这些权重用来作为误差后向传播的权重)

    • 递归会终结在输出层,从而使用残差(y-t)。注意到递归的层数以及系数作用,这里有一大串连乘,如果连乘的数字小于1,则梯度越乘越小,导致梯度消散;如果连乘的数字大于1,则梯度越乘越大,导致梯度爆炸

    • 对于偏置来说,注意到偏置是没有权重,调整的是偏置本身


    总结探讨


    总结起来,BP的误差反向传播思想可以概括为:利用输出层的误差来估计出其直接前导层的误差,再借助于这个新的误差来计算更前一层的误差,按照这样的方式逐层反传下去便可以得到所有各层的误差估计。


    BP算法的提出在一定程度上解决了多层网络参数训练难的问题,但是其自身也存在如下一些问题。


    首先,误差在反向传播过程中会逐渐衰减/增大,经过多层的传递后将会变得消散/爆炸,这使得BP在深层网络中并不可行。对于梯度爆炸,则一般可以通过调整神经网络模型中的初始化参数得以解决。对于无法完美解决的梯度消失问题,目前有很多研究,一个可能部分解决梯度消失问题的办法是使用ReLU(Rectified Linear Unit)激活函数(σ(z)=max(0,z))。


    其次,BP采用最速梯度下降的优化思想,而实际问题的误差函数通常不是凸的,存在众多局部极小值点,算法很难得到最优解。极小值问题,有多种解决方案,比如从多个不同的初始点开始搜索,模拟退火,随机梯度下降,遗传算法等。但这些都是启发式,理论上尚缺乏保障。


    第三,由于训练过程中依靠于导数信息来进行权值的调整,当权值调节过大时会使大部分神经元的加权和过大,致使传递函数工作于S型函数的饱和区,所以权值的调整会出现停顿的情况。


    第四,隐层神经元的个数设置是个未解决的问题,实际应用中通常靠试错法调整。


    第五,BP神经网络的过拟合,常用的方法是早停和正则化。早停是指:将数据分成训练集和验证集,训练集用来计算梯度,更新连接权和阈值,验证集用来估计误差,如果训练集误差降低但是验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。正则化是指:误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。


    最后,对于一些复杂网络的优化问题,BP算法受到学习速率的限制需要花费几个小时,甚至更长的时间来完成训练任务。累积BP算法和标准BP算法各有优缺点。

    展开全文
  • 一、反向传播算法 定义:反向传播(Backpropagation,缩写为BP)是“误差反向传播”的简称,其与最优化方法(如梯度下降法)的结合使用 是 用来训练人工神经网络的常用方法。 (该部分的讲解主要参考aift博主的原创文章...
  • 一. 反向传播算法 1. BP算法自然语言描述   概念:梯度下降是利用损失函数的梯度,来决定最终的下降方向。反向传播算法是计算复杂梯度的方式。数学原理就是链式法则。   梯度向量中每一项,不光告诉我们每个...
  • 误差与反向传播算法

    千次阅读 2020-06-18 02:49:33
    我们将学习一个能够高效计算权重参数的梯度的方法——误差反向传播法。 5.1 计算图 计算图将计算过程用图形表示出来。这里说的图形是数据结构图,通过多个节点和边表示(连接节点的直线称为“边”)。为了让大家...
  • 1.误差反向传播算法是干什么的? 通过数值微分计算了神经网络的权重参数的梯度,数值微分虽然简单,也容易实现,但缺点是计算上比较费时间。本章我们将学习一个能够高效计算权重参数的梯度的方法——误差反向传播法...
  • 深度学习 --- BP算法详解(误差反向传播算法

    万次阅读 多人点赞 2018-11-11 13:37:42
    本节开始深度学习的第一个算法BP算法,本打算第一个算法为单层感知器,但是感觉太简单了,不懂得找本书看看就会了,这里简要的介绍一下单层感知器: 图中可以看到,单层感知器很简单,其实本质上他就是线性分类器...
  • 神经网络-误差反向传播算法 BP算法

    千次阅读 2020-07-25 20:55:22
    BP算法学习笔记 1 学习基础–神经网络的基本原理和前向过程 ​ 如下图所示,这时一个简单的神经网络模型,通过这样一个模型我们就可以完成一些工作。例如我们输入三个数据,a1表示一个公司的银行存款,a2表示所拥有...
  • 反向传播算法

    2019-10-04 21:07:04
    反向传播算法 上一节的我们已经知道了前向传播是如何计算的了。即给定x如何通过各个节点计算出y。 那么还有一个问题就是我们如何确定各个神经元的权重,或者如何说训练一个神经网络。 在传统机器学习算法中我们会...
  • 在监督学习中,传统的机器学习算法优化过程是采用一个合适的损失函数度量训练样本输出损失,...对DNN的损失函数用梯度下降法进行迭代优化求极小值的过程即为反向传播算法,可以使用多种损失函数和激活函数。 1. 均...
  • 误差反向传播算法  之前,我们使用数值微分计算了神经网络的权重参数的梯度(严格来说,是损失函数关于权重参数的梯度)。数值微分容易实现,但是缺点在于计算上比较耗费时间。所以,在训练神经网络时,一般使用...
  • 首先明确反向传播算法用来做什么:求梯度。 一、前向传播 foward propagation “反向传播算法”,其中反向 两个字顾名思义,先有一个前向的过程,才有反向一说。所以要搞懂反向传播之前,需先把前向传播弄清楚。...
  •  本文旨在描述反向传播算法在多层神经网络训练中的过程,为了直观描述此过程,我们用到了包含两个输入和一个输出的三层神经网络,如下图所示:    每个神经元由两个单元组成。第一单元把权重和输入信号的积相加...
  • 神经网络-反向传播算法神经网络的学习神经网络模型特征和直观理解多类分类神经网络参数的反向传播代价函数反向传播算法反向传播算法的直观理解展开参数梯度检验综合起来(使用神经网络步骤)自主驾驶 神经网络的学习...
  • 误差反向传播算法 误差反向传播算法是Rumelhart等在1986年提出的,即BP(error Back Propagation)算法,影响最为广泛,也称BP算法。直到今天,BP算法仍然是自动控制上最重要、应用最多的有效算法。是用于多层神经网络...
  • 原文:Principles of training multi-layer neural network using backpropagation ... 翻译内容: 本文描述了使用反向传播算法训练多层神经网络的过程。为了更直观的说明该训练过程,使用如下图所示
  • 反向传播算法3. 梯度下降算法与链式求导法则二. pandas是什么?二、使用步骤1.引入库2.读入数据总结 一. 深度学习基础 1. 深度学习 深度学习是统计学的应用,属于机器学习基础之后的内容。它的任务其实与机器学习...
  • 反向传播算法 反向传播算法本质上是一个链式求导法则的应用。 链式法则 反向传播算法 首先对公示拆分为几个基本函数; 线上为函数的值,线下为原函数对其求导后的值。 Sigmoid函数举例 各种优化算法的变式 梯度...
  • 理解dropout,梯度下降,反向传播算法

    千次阅读 2019-06-22 19:04:53
    误差反向传播算法简称反向传播算法(即BP算法)。使用反向传播算法的多层感知器又称为BP神经网络。BP算法是一个迭代算法,它的基本思想为:(1)先计算每一层的状态和激活值,直到最后一层(即信号是前向传播的);...
  • 不得不说幸亏反向传播的部分是《神机》里边人话比较多的部分,看的时候没有消化不良。多层感知机书里前三章的模型的局限都很明显,对于非线性可分问题苦手,甚至简单的异或都弄不了。于是多层感知机(也就是传说中的...
  • pytorch的官网上有一段教程,是使用python的numpy工具实现一个简单的神经网络的bp算法。下面先贴上自己的代码: import numpy as np N,D_in,H,D_out = 4,10,8,5 x = np.random.randn(N,D_in)#4x10 y = np.random...
  • 神经网络训练中的Tricks之高效BP(反向传播算法

    万次阅读 多人点赞 2015-04-26 14:36:46
    神经网络训练中的Tricks之高效BP(反向传播算法)zouxy09@qq.comhttp://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词。对于我们这些所谓的尝试应用机器学习技术解决某些问题的人,更是如此。...
  • 机器学习算法 —— 反向传播

    千次阅读 2019-04-06 00:50:04
      反向传播算法,也叫BP(Backpropagation)算法,是一种在神经网络中用于根据误差更新各层连接权重的算法,其核心为梯度下降。 二、理论  (1)梯度   在二元函数的情形,设函数f(x,y){f(x,y)}f(x,y)在平面...
  • 前言本文基于反向传播算法的原理,实现了一个基于numpy和python的三层全连接神经网络,用于分类任务。其中在实现过程中,将会用代码的形式呈现梯度消失的现象,本文中的符号请参考我的前文《反向传播算法的公式推导...
  • 梯度下降法与反向传播

    万次阅读 2017-11-09 20:16:02
    梯度下降法与反向传播主要内容:梯度下降法 最优化 梯度下降 反向传播 梯度与偏导 链式法则 直观理解 Sigmoid 例子 1. 梯度下降(Gradient descent)初始权重不要都置为0,可用高斯分布。 随机初始化的目的是使对称...
  • 反向传播+梯度消失爆炸 为什么写这个呢,本来是想调研一下激活函数,就在想什么样的激活函数才是好的,Sigmoid在x过大过小的时候梯度消失造成问题,于是发现对梯度消失和梯度爆炸的理解还是不深,既然涉及到梯度了,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,737
精华内容 5,894
关键字:

反向传播算法的缺点