前言:
人工神经网络是受到人类大脑 结构的启发而创造出来的:数以万计的神经元细胞通过某种连接构成了一个神经网络;
人工神经网络正是模仿了上面的网络结构。下面是一个人工神经网络的构造图。每一个圆代表着一个神经元,他们层次连接起来,构成了一个网络。
人类大脑神经元细胞的树突接收来自外部的多个强度不同的刺激,并在神经元细胞体内进行处理,然后将其转化为一个输出结果。如下图所示。
人工神经元也有相似的工作原理。如下图所示。
上面的
x
x
x是神经元的输入,相当于树突接收的多个外部刺激。
w
w
w是每个输入对应的权重,它影响着每个输入
x
x
x的刺激强度。
大脑的结构越简单,那么智商就越低。单细胞生物是智商最低的了。人工神经网络也是一样的,网络越复杂它就越强大,所以我们需要深度神经网络。这里的深度是指层数多,层数越多那么构造的神经网络就越复杂。
1.1 神经网络
1.1神经网络是如何进行预测的?
这个预测的过程其实只是基于一个简单的公式:
z
=
d
o
t
(
w
,
x
)
+
b
z = dot(w,x) + b
z=dot(w,x)+b。
上述公式中的
x
x
x代表输入特征向量,假设有三个特征,那莫
x
x
x就可以用(
x
1
,
x
2
,
x
3
x_{1},x_{2},x_{3}
x1,x2,x3)来表示,如下图:
w
w
w表示权重,它对应每个特征的重要程度,
b
b
b代表阈值,用来影响结果.
z
z
z就是预测结果,
公式中的
d
o
t
(
)
dot()
dot()函数表示将
w
w
w和
x
x
x进行相乘。
所以
z
=
(
x
1
∗
w
1
+
x
2
∗
w
2
+
x
3
∗
w
3
+
b
)
z=(x_{1}*w_{1}+x_{2}*w_{2}+x_{3}*w_{3}+b)
z=(x1∗w1+x2∗w2+x3∗w3+b)其中"非线性函数“我在下文用的是signmoid激活函数;
1.2 .1输入层
神经网络中的第一层。它需要输入信号(值)并将它们传递到下一层。它不对输入信号(值)做任何操作,并且没有关联的权重和偏置值。在我们的网络中,我们有2个输入信号 i 1 , i 2 i_{1},i_{2} i1,i2。
1.2 .2 隐藏层
隐藏层具有对输入数据应用不同变换的神经元(节点)。一个隐藏层是垂直排列的神经元的集合
1.2.3 输出层
是网络的最后一层,它接收来自最后一个隐藏层的输入。通过这个层,我们可以知道期望的值和期望的范围,在这个网络中,输出层有2个神经元,输出 o 1 , o 2 o_{1},o_{2} o1,o2。
1.2.4 权重
权重表示单元之间连接的强度。如果从节点1到节点2的权重比较大,意味着神经元1对神经元2的影响比较大。权重降低了输入值的重要性。当权重接近零时意味着更改此输入将不会更改输出。负权重意味着增加此输入会降低输出。权重决定了输入对输出的影响程度。
1.2.5 前向传播(FP)
前向传播过程是向神经网络输入值并得到预测输出值的过程;
1.2.6 反向传播 (BP)
前向传播后,我们得到了一个预测的输出值,为了计算误差我们将预测值与实际输出值进行比较,如果误差较大那莫就进行反向传播过程。
1.2.7 激活函数
在实际的神经网络中,我们不能直接用逻辑回归。必须要在逻辑回归外面再套上一个函数。这个函数我们就称它为激活函数。激活函数非常非常重要,如果没有它,那么神经网络的智商永远高不起来。而且激活函数又分好多种。后面我会花好几篇文章来给大家介绍激活函数。在这里我只给大家简单介绍一种叫做sigmoid的激活函数。它的公式和图像如下:
公式:
δ
(
z
)
=
1
1
+
e
−
z
\delta(z)=\frac{1}{1+e^{-z}}
δ(z)=1+e−z1
图像:
sigmoid激活函数的用途——把
z
z
z映射到[0,1]之间,上图的横坐标是
z
z
z,纵坐标我们用
y
y
y’来表示,
y
y
y'就代表了我们最终的预测结果。从图像可以看出,
z
z
z越大那么
y
y
y’就越靠近1,
z
z
z越小那么
y
y
y’就越靠近0。那为什么要把预测结果映射到[0,1]之间呢?因为这样不仅便于神经网络进行计算,也便于我们人类进行理解。其中得到的
z
z
z代表的是锲合度。
1.2.8 loss函数
神经网络计算误差时可以用loss函数进行计算
E
=
1
2
∑
i
=
1
n
(
f
(
x
i
)
−
y
i
)
2
E=\frac{1}{2}\sum_{i=1}^{n}({f(x_{i})}-y_{i})^{2}
E=21∑i=1n(f(xi)−yi)2
1.3 举例分析
如图是(输入层—>隐含层—>输出层)
设初始权重值
w
1
−
w
12
w_{1}-w_{12}
w1−w12和偏置值
b
1
,
b
2
b_{1},b_{2}
b1,b2为:
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 = (0.35,0.65)
1.3.1 正向传播
1.从输入层到隐藏层
h
1
=
w
1
∗
l
1
+
w
2
∗
l
2
+
b
1
∗
1
=
0.1
∗
5
+
0.15
∗
10
+
0.35
∗
1
h_{1}= w_{1}*l_1 + w_{2}*l_{2}+b_{1}*1 = 0.1*5+0.15*10+0.35*1
h1=w1∗l1+w2∗l2+b1∗1=0.1∗5+0.15∗10+0.35∗1=2.35
h
2
=
w
3
∗
l
1
+
w
4
∗
l
2
+
b
1
∗
1
=
0.2
∗
5
+
0.25
∗
10
+
0.35
∗
1
h_{2}=w_{3}*l_{1}+w_{4}*l_{2}+b_{1}*1=0.2*5+0.25*10+0.35*1
h2=w3∗l1+w4∗l2+b1∗1=0.2∗5+0.25∗10+0.35∗1=3.85
h
3
=
w
5
∗
l
1
+
w
6
∗
l
2
+
b
1
∗
1
=
0.3
∗
5
+
0.35
∗
10
+
0.35
∗
1
h_{3}=w_{5}*l_{1}+w_{6}*l_{2}+b_{1}*1=0.3*5+0.35*10+0.35*1
h3=w5∗l1+w6∗l2+b1∗1=0.3∗5+0.35∗10+0.35∗1=5.35
则经过激活函数(sigmoid(z)=
1
1
+
e
−
z
\frac{1}{1+e^{-z}}
1+e−z1)变换后的值为:
o
u
t
h
1
=
1
1
+
e
−
h
1
=
1
e
−
2.35
=
0.9129342
out_{h1}=\frac{1}{1+e^{-h_{1}}}=\frac{1}{e^{-2.35}}=0.9129342
outh1=1+e−h11=e−2.351=0.9129342
o
u
t
h
1
=
1
1
+
e
−
h
2
=
1
e
−
385
=
0.9791637
out_{h1}=\frac{1}{1+e^{-h_{2}}}=\frac{1}{e^{-385}}=0.9791637
outh1=1+e−h21=e−3851=0.9791637
o
u
t
h
1
=
1
1
+
e
−
h
3
=
1
e
−
5.35
=
0.99552743
out_{h1}=\frac{1}{1+e^{-h_{3}}}=\frac{1} {e^{-5.35}}=0.99552743
outh1=1+e−h31=e−5.351=0.99552743
2.从隐藏层到输出层
n
e
t
o
1
=
o
u
t
h
1
∗
w
7
+
o
u
t
h
2
∗
w
9
+
o
u
t
h
3
∗
w
11
+
b
2
∗
1
net_{o1}=outh_{1}*w_{7}+outh_{2}*w_{9}+outh_{3}*w_{11}+b_{2}*1
neto1=outh1∗w7+outh2∗w9+outh3∗w11+b2∗1=2.10192
n
e
t
o
2
=
o
u
t
h
1
∗
w
8
+
o
u
t
h
2
∗
w
10
+
o
u
t
h
3
∗
w
12
+
b
2
∗
1
net_{o2}=outh_{1}*w_{8}+outh_{2}*w_{10}+outh_{3}*w_{12}+b_{2}*1
neto2=outh1∗w8+outh2∗w10+outh3∗w12+b2∗1=2.24629
经过激活函数变换后得:
o
u
t
o
1
=
0.89109
out_{o1}=0.89109
outo1=0.89109(真实值为0.01)
o
u
t
o
2
=
0.90433
out_{o2}=0.90433
outo2=0.90433(真实值为0.99)
经过loss函数的值为:
E
t
o
t
a
l
=
E
o
1
+
E
o
2
=
1
2
(
0.01
−
0.89109
)
2
+
1
2
(
0.99
−
0.90433
)
2
=
0.391829
E_{total}=E_{o1}+E_{o2}=\frac{1}{2}(0.01-0.89109)^2+\frac{1}{2}(0.99-0.90433)^2=0.391829
Etotal=Eo1+Eo2=21(0.01−0.89109)2+21(0.99−0.90433)2=0.391829与真实值不符,需要进行BP反馈计算
1.3.2 反向传播(BP)
1.参数w的更新
这里用梯度下降法求解w的值
例如求解
w
7
w_{7}
w7的值:
E
t
o
t
a
l
=
E
o
1
+
E
o
2
E_{total}=E_{o1}+E_{o2}
Etotal=Eo1+Eo2,而求解
w
7
w_{7}
w7只与
E
o
1
E_{o1}
Eo1有关
又有
n
e
t
o
1
=
o
u
t
h
1
∗
w
7
+
o
u
t
h
2
∗
w
9
+
o
u
t
h
3
∗
w
11
+
b
2
∗
1
net_{o1}=outh_{1}*w_{7}+outh_{2}*w_{9}+outh_{3}*w_{11}+b_{2}*1
neto1=outh1∗w7+outh2∗w9+outh3∗w11+b2∗1,
o
u
t
o
1
=
1
1
+
e
−
n
e
t
o
1
out_{o1}=\frac{1}{1+e^{-net_{o1}}}
outo1=1+e−neto11
所以
BP:
α
E
t
o
t
a
l
α
w
7
=
α
E
o
1
α
o
u
t
o
1
∗
α
o
u
t
o
1
α
n
e
t
o
1
∗
α
n
e
t
o
1
α
w
7
\frac{\alpha E_{total}}{\alpha w_{7}}=\frac{\alpha E_{o1}}{\alpha out_{o1}}*\frac{\alpha out_{o1}}{\alpha net_{o1}}*\frac{\alpha net_{o1}}{\alpha w_{7}}
αw7αEtotal=αouto1αEo1∗αneto1αouto1∗αw7αneto1
w
n
e
w
=
w
o
l
d
−
η
α
E
t
o
t
a
l
α
w
o
l
d
w_{new}=w_{old}-\eta\frac{ \alpha E_{total}}{ \alpha w_{old}}
wnew=wold−ηαwoldαEtotal
带入求解:
w
7
∗
=
w
7
−
η
α
E
t
o
t
a
l
α
w
7
=
0.4
−
0.5
∗
0.078064
=
0.360968
w_{7}^{*}=w_{7}-\eta\frac{ \alpha E_{total}}{ \alpha w_{7}}=0.4-0.5*0.078064=0.360968
w7∗=w7−ηαw7αEtotal=0.4−0.5∗0.078064=0.360968
同理可求得其它值
小结:
1.正向传播,根据已知值求解
E
t
a
t
a
l
E_{tatal}
Etatal并代入到loss函数中求取误差值,当误差过大,进行第二步。
2.反向传播,根据已知结果更新正向传播中的w和b的值,更新完毕后再次进行第一步。
3.当求取误差适中,迭代结束,算法结束,输出w和b的值。
参考:
1、添加链接描述
2、https://blog.csdn.net/qq_24753293/article/details/78788844