文章目录

  • BP神经网络原理介绍
  • 一、BP神经网络算法原理是什么?
  • 二、激活函数
  • 1.激活函数作用
  • 三、BP神经网络异或实例分析
  • 1.问题:
  • 2.分析:
  • 3.代码
  • 总结



BP神经网络原理介绍


BP神经网络算法(Back-Propagation Neural Network)

一、BP神经网络算法原理是什么?

人类大脑是有多个相互链接的神经元组成,通过视觉、触觉、嗅觉等输入信号,经过人类大脑神经元的多次处理,我们人类可以做出某种判定(或反应),受人类大脑神经元的启发,我们提出了神经网络算法模型。
如下图所示:
输入层x(x1~xn)相当于我们的感知信号(视觉、嗅觉、触觉等)。
隐含层就是神经元的处理。
经过神经元的处理得到某种判定(反应)就是结果输出层。

BP 算法应用于前馈神经网络 bp网络神经算法例题_BP 算法应用于前馈神经网络


在介绍BP神经网络实例之前,理解一下神经网络得灵魂_激活函数。

二、激活函数

1.激活函数作用

激活函数作用:在于如何来激活输入信号得总和,对于下图感知机来说:

BP 算法应用于前馈神经网络 bp网络神经算法例题_权值_02


如上图感知机,输入x1,x2,偏置值b,来计算信号总和a通过阈值计算预测值。

a=w1+w2+b

y=h(a)

感知机的激活函数**(阶跃函数)**:以阈值为界,一旦输入超出阈值,就切换输出。

在神经网络中,激活函数都是非线性函数(如果激活函数是线性函数,无论如何加深层数,效果都将等同“无隐含层的神经网路”),最常用的非线性激活函数有:sigmoid函数,如果不懂激活该函数作用请参考:深度学习之魂之神经网络激活函数。

三、BP神经网络异或实例分析

1.问题:

相同为0不同为1。
例如:
输入:【0,0】、【0,1】、【1,0】、【1,1】经过异或判定,输出0或1;

2.分析:

通过BP神经网络实现首先明确输入参数2个。偏置值参数1个。则输入层参数共3个,假设隐藏层有4个,输出层只有一个,输入层与隐藏层权值为V【V0-V3】,隐藏层与输出层权值W[W0-W3]。通过权值可以计算y0-y3,如下图所示:

BP 算法应用于前馈神经网络 bp网络神经算法例题_权值_03


如上图所示,每个输入层和隐藏层都有一个权重,则共有12个权重值V,和4和权重值W。则输出O可表示为:

BP 算法应用于前馈神经网络 bp网络神经算法例题_BP 算法应用于前馈神经网络_04

3.代码

import numpy as np

# import matplotlib.pyplot as plt

# 导入数据
X = np.array([[1, 0, 0],
              [1, 0, 1],
              [1, 1, 0],
              [1, 1, 1]
              ])
# 标签
Y = np.array([[0, 1, 1, 0]])
# 输入层和隐藏层权值V、隐藏层和输出层之间的权值W初始化,取值范围-1到1
V = np.random.random((3, 4)) * 2 - 1
W = np.random.random((4, 1)) * 2 - 1
print(V, W)
# 学习率设置
lr = 0.11

# 定义sigmoid激活函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

#定义sigmoid函数导数
def dsigmoid(x):
    return x * (1 - x)

#设置更新权值,更新权值理论推导可参照《神经网络导论》
def update():
    global X, Y, W, V, lr
    L1 = sigmoid(np.dot(X, V))  # 隐藏层的输出(4,4)
    L2 = sigmoid(np.dot(L1, W))  # 输出层输出(4,1)

    L2_delta = (Y.T - L2) * dsigmoid(L2)
    L1_delta = L2_delta.dot(W.T) * dsigmoid(L1)

    W_C = lr * L1.dot(L2_delta)
    V_C = lr * X.T.dot(L1_delta)

    W = W + W_C
    V = V + V_C


for i in range(20000):
    update()  # 更新权值
    if i % 500 == 0:
        L1 = sigmoid(np.dot(X, V))  # 隐藏层输出(4,4)
        L2 = sigmoid(np.dot(L1, W))  # 输出层输出(4,1)
        print('Error:', np.mean(np.abs(Y.T - L2)))

L1 = sigmoid(np.dot(X, V))  # 隐藏层输出(4,4)
L2 = sigmoid(np.dot(L1, W))  # 输出层输出(4,1)
print(L2)

运行结果:

BP 算法应用于前馈神经网络 bp网络神经算法例题_深度学习_05


BP 算法应用于前馈神经网络 bp网络神经算法例题_BP 算法应用于前馈神经网络_06

该处使用的url网络请求的数据。


总结

学习了BP神经网络的后向反馈机制,通过实例更加清晰神经网络使用,神经网络推导还需进一步了解。