前言:从感知器开始引出神经元,感知器中的激活函数进行改进,引入全连接神经网络,只要并且重点介绍一下BP神经网络
感知器神经网络
也就01分类器,给定阈值,解决二分类问题。类似于前面提到的二值化,例如:对分数就行排名的时候通常让大于60分的认定为“及格”。至于添加大于八十分为“优秀”只需要在添加一个感知器即可,由于神经网络模拟的是人的思考过程,既给定一个输入,会产生一个输出,人的决策过程是众多神经元的结果,下面就来分析简单的感知器神经网络对分类产生的结果。人脑分布如下下图:
-
神经元
前面已经提到过,现在简单附属一下。既,输入、输出、激活函数。
-
感知器
就是当激活函数返回值为两个值时候为感知器
缺点:
由于输出结果为固定的两个值,当就行参数优化的时候,要么输出不变,要么输出突然变化,参数优化不容易实现,所以通常用sigmoid函数作为激活函数
线性神经网络
可以做多分类问题
添加少量隐层的神经网络就叫做浅层神经网络;也叫作传统神经网络, 一般为2隐层的神经网络。
用sigmoid的缺点是同城隐层只能是两层,由于激活函数特殊的限制,通常在迭代求导的过程中,sigmoid函数的导数会向零方向逼近,造成“死神经元”
tanh函数效果好一点,可任然解决不了隐层多的问题,引入relu函数
BP神经网络
神经网络的一种求解W的算法,分为信号“正向传播(FP)”求损失,“反向 传播(BP)”回传误差;根据误差值修改每层的权重,继续迭代
分别求出
输出层误差
隐层的误差
输入层误差
用代码来实现BP算法的过程如下:
import numpy as np
w = [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65]
# 偏置项b不进行更新
b = [0.35, 0.65]
l = [-5, 10]
def sigmoid(z):
return 1.0 / (1 + np.exp(-z))
def f1(w, b, l):
# 前向传播,计算结果值
h1 = sigmoid(w[0] * l[0] + w[1] * l[1] + b[0])
h2 = sigmoid(w[2] * l[0] + w[3] * l[1] + b[0])
h3 = sigmoid(w[4] * l[0] + w[5] * l[1] + b[0])
o1 = sigmoid(w[6] * h1 + w[8] * h2 + w[10] * h3 + b[1])
o2 = sigmoid(w[7] * h1 + w[9] * h2 + w[11] * h3 + b[1])
# 后向传播,更新w
t1 = -(0.1 - o1) * o1 * (1 - o1)
t2 = -(0.99 - o2) * o2 * (1 - o2)
w[6] = w[6] - 0.5 * (t1 * h1)
w[8] = w[8] - 0.5 * (t1 * h2)
w[10] = w[10] - 0.5 * (t1 * h3)
w[7] = w[7] - 0.5 * (t2 * h1)
w[9] = w[9] - 0.5 * (t2 * h2)
w[11] = w[11] - 0.5 * (t2 * h3)
w[0] = w[0] - 0.5 * (t1 * w[6] + t2 * w[7]) * h1 * (1 - h1) * l[0]
w[1] = w[1] - 0.5 * (t1 * w[6] + t2 * w[7]) * h1 * (1 - h1) * l[1]
w[2] = w[2] - 0.5 * (t1 * w[8] + t2 * w[9]) * h2 * (1 - h2) * l[0]
w[3] = w[3] - 0.5 * (t1 * w[8] + t2 * w[9]) * h2 * (1 - h2) * l[1]
w[4] = w[4] - 0.5 * (t1 * w[10] + t2 * w[11]) * h3 * (1 - h3) * l[0]
w[5] = w[5] - 0.5 * (t1 * w[10] + t2 * w[11]) * h3 * (1 - h3) * l[1]
return o1, o2, w
for i in range(1001):
r1, r2, w = f1(w, b, l)
print("第{}次迭代后,结果值为:({},{}),权重更新为:{}".format(i, r1, r2, w))
输出结果:
第1000次迭代后,结果值为:(0.09996083954832574,0.9778184034399262),权重更新为:[-0.030672263069416547, 0.41134452613883266, 0.09476393030400698, 0.4604721393919862, 0.20319883709854172, 0.5436023258029161, -0.9980730809431909, 0.9438220932399313, -0.8629482660589612, 1.0419668423034139, -1.0146000749780355, 1.181504874794456]
网友评论