手撕BP

BackPropagation

BP

Error BackPropagation」反向传播算法是一种误差修正学习算法,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经最常用的算法,由正向和反向传播组成。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。

01

图解一

为了说明此过程,利用反向传播算法的多层神经网络来介绍,使用具有两个输入和一个输出的三层神经网络,如下图所示:

每个神经元由两个单元组成。第一单元将权重系数与输入信号的乘积相加。第二单元实现非线性函数,称为神经元激活函数。信号e是加法器输出信号,y = f(e)是非线性元件的输出信号,也是神经元的输出信号。

训练集由目标(期望输出)z的输入信号x1 和 x2 组成,符号w(xm)n表示网络输入层中的xm和神经元n之间的连接权重。符号yn代表神经元n的输出信号。

信号通过隐藏层传播。符号wmn表示神经元m的输出与下一层神经元n的输入之间的连接权重 。

信号通过输出层传播。

将网络y的输出信号与在训练数据集中找到的期望输出值(目标)进行比较。将该差称为输出层神经元的误差信号d。

直接计算内部神经元的误差信号是不可行的,因为这些神经元的输出值是未知的。

用于向后传播误差的权重系数wmn等于计算输出值时使用的权重系数。仅改变数据流的方向(信号从输出到输入一个接一个地传播)。此技术适用于所有网络层。

当计算每个神经元的误差信号时,可以修改每个神经元输入节点的权重系数。在以下公式中, df(e)/de表示神经元激活函数的导数(权重已修改)。

隐藏层权重更新。

输出层权重更新。

参数η 影响网络教学速度。

小结01

所谓神经网络的训练或者是学习,其主要目的在于通过学习算法得到神经网络解决指定问题所需的参数,这里的参数包括各层神经元之间的连接权重以及偏置等。

02

公式推导

BP-计算第L层对残差的梯度

BP-计算第L-1层对残差的梯度

BP-计算b的梯度

BP-计算w的梯度

BP-算法流程

03

python实现

import random
import math
class Neuron:
def __init__(self, bias):
self.bias = bias
self.weights = []


def calculate_output(self, inputs):
self.inputs = inputs
self.output = self.activator(self.calculate_total_net_input())
return self.output


def calculate_total_net_input(self):
        total = 0
for i in range(len(self.inputs)):
            total += self.inputs[i] * self.weights[i]
        total += self.bias
return total


# 激活函数sigmoid
def activator(self, total_net_input):
return 1 / (1 + math.exp(-total_net_input))


def calculate_pd_errtotal_mul_pd_out(self, target_output):
# (∂Etotal/∂Out_o) * (∂Out_o/∂Net_o)
        pd_errtotal = self.calculate_pd_error_total(target_output)
        pd_out      = self.calculate_pd_out_net()
return pd_errtotal * pd_out


# 每一个神经元的误差是由平方差公式计算的
def calculate_error(self, target_output):
return 0.5 * (target_output - self.output) ** 2


def calculate_pd_error_total(self, target_output):
return -(target_output - self.output)


def calculate_pd_out_net(self):
return self.output * (1 - self.output)


def calculate_net_formula_pd_weight(self, index):
return self.inputs[index]


请关注“Python技术博文"后回复"bp实现“获得完整代码。

参考

[1] http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

[2] https://www.cnblogs.com/maybe2030/p/5597716.html

END

contact way:⏫

Date:2020.11.20

Author:Anneword

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值