修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Graph V4

Standalone

Please complete this required field.

Please complete this required field.

服务器的MAC地址

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
申请天数
审批时间
过期时间
MAC地址
申请理由
审核信息
关闭
基础信息
  • 用户昵称:
  • 手机号:
  • 公司名称:
  • 公司邮箱:
  • 地区:
  • 语言:
修改密码
申请证书

当前未申请证书.

申请证书
Certificate Issued at Valid until Serial No. File
Serial No. Valid until File

Not having one? Apply now! >>>

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

No Invoice

搜索
    中文

      反向传播算法

      什么是反向传播算法

      反向传播算法(Backpropagation)的全称是误差反向传播(Error Backward Propagation)算法(以下简称 BP 算法)。BP 算法主要由前向传播过程和反向传播两个过程组成:

      • 前向传播时:输入信息从神经网络的输入层进入,通过一个或多个隐藏层,再由输出层输出。
      • 反向传播时:将输出值与实际值进行比较,将误差反向由输出层隐藏层输入层进行传播;在这个过程中,利用梯度下降法对神经元权重值进行调整。

      权重值不断调整的过程就是训练神经网络或神经网络学习的过程。

      构造神经网络

      神经网络结构

      神经网络一般依次由一个输入层、一个或多个隐藏层和一个输出层构成。我们构造如下简单的神经网络为例进行说明,在输出层应用 Sigmoid 激活函数:

      激活函数

      激活函数能给网络提供非线性建模能力。如果没有激活函数,那么网络仅能够表达线性映射。激活函数有很多种,这里使用的 Sigmoid 函数的公式和图像如下:

      初始权重

      初始权重在算法开始时随机生成,假设生成的初始权重如下:

      训练样本

      假设获得如下的三组训练样本,上标表示样本次序:

      • 输入值:x(1) = (2,3,1),x(2) = (1,0,2),x(3) = (3,1,1)
      • 输出值:t(1) = 0.64,t(2) = 0.52,t(3) = 0.36

      训练目标是给定输入值 x 时,模型的输出值 y 尽可能接近实际输出值 t。

      前向传播过程

      输入层 → 隐藏层

      神经元 h1 和 h2 的计算公式如下:

      隐藏层 → 输出层

      输出值 y 的计算公式如下:

      计算

      根据上述公式,分别对三个样本进行计算:

      x
      h1 h2 s y t
      x(1) = (2,3,1) 2.4 1.8 2.28 0.907 0.64
      x(2) = (1,0,2) 0.75 1.2 0.84 0.698 0.52
      x(3) = (3,1,1) 1.35 1.4 1.36 0.796 0.36

      上表也在最后列出了样本实际的输出值。可以看出,此时三个样本的输出值都与期望值很不一样。

      损失函数

      损失函数(Loss Function)用来计算模型输出值与期望值之间的误差,损失函数也称为目标函数(Objective Function)或成本函数(Cost Function)。一个常用的损失函数是均方误差(Mean-Square Error, MSE):

      其中 m 为样本数量。由公式计算本次前向传播的误差为:

      E = [(0.64-0.907)2 + (0.52-0.698)2 + (0.36-0.796)2] / (2*3) = 0.234

      损失函数衡量模型的精确度,损失函数值越小,模型精确度就越高,模型学习的目的就是尽可能降低损失函数值。将输入值和输出值看成常数,损失函数可看成是以各权重为自变量的函数。要找到使得损失函数值最小的权重,常用方法就是梯度下降法。

      反向传播过程

      以下将使用批量梯度下降法(BGD)更新权重,即所有样本都参与梯度计算。设定学习率 η = 0.5。

      如果读者不熟悉梯度下降法,请先阅读文档——梯度下降法

      输出层 → 隐藏层

      从输出层到隐藏层有两个权重 w1 和 w2,分别对这两个权重值进行调整。

      调整 w1 时,要计算 w1 对误差 E 产生了多少影响,使用链式法则对 w1 求偏导:

      分别求解每个梯度:

      带入数值计算:

      ∂E/∂y = [(0.907-0.64) + (0.698-0.52) + (0.796-0.36)] / 3 = 0.294
      ∂y/∂s = [0.907*(1-0.907) + 0.698*(1-0.698) + 0.796*(1-0.796)] / 3 = 0.152
      ∂s/∂w1 = (2.4 + 0.75 + 1.35) / 3 = 1.5

      最终得到 ∂E/∂w1 = 0.294*0.152*1.5 = 0.067

      由于全部三个样本均参与计算,因此在计算 ∂y/∂s 和 ∂s/∂w1 时,对三个样本的结果求和再求平均。

      调整后的 w1 := w1 - η ⋅ ∂E/∂w1 = 0.8 - 0.5*0.067 = 0.766

      调整 w2 的方法与调整 w1 类似,这里直接给出结果,w2 从 0.2 调整为 0.167。

      隐藏层 → 输入层

      从隐藏层到输入层有六个权重 v11、v12、v21、v22、v31 和 v32,分别对这六个权重值进行调整。

      调整 v11 时,要计算 v11 对误差 E 产生了多少影响,使用链式法则对 v11 求偏导:

      前两个梯度在调整 w1 和 w2 时已经求过了,只需求解后两个梯度:

      带入数值计算:

      ∂E/∂y = 0.294
      ∂y/∂s = 0.152
      ∂s/∂h1 = 0.8
      ∂h1/∂v11 = (2 + 1 + 3) / 3 = 2

      最终得到 ∂E/∂v11 = 0.294*0.152*0.8*2 = 0.072

      调整后的 v11 := v11 - η ⋅ ∂E/∂v11 = 0.15 - 0.5*0.072 = 0.114

      调整其他五个权重的方法与调整 v11 类似,这里直接给出结果:

      • v12 从 0.2 调整为 0.191
      • v21 从 0.6 调整为 0.576
      • v22 从 0.3 调整为 0.294
      • v31 从 0.3 调整为 0.282
      • v32 从 0.5 调整为 0.496

      模型训练

      将上述调整后的权重值带入模型并使用相同的三个样本重新进行一次前向传播,得到的误差 E = 0.192,相比于第一次前向传播的误差 E = 0.234,有了明显提升。

      BP 算法重复上述前向传播和反向传播过程对模型进行迭代训练,直至达到预设的训练次数或时间,或误差小于某个阈值。

      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写