什么是神经网络
神经网络的发现可以说是将人工智能又拔高了一个度,现今很多了不起的成果都是在此之上完成的,那它是如何被发现的呢?既然 是“神经”,自然可以联想到人体里面的的神经,及生物神经。
那么他们之间是真的有联系还是只是简单的巧合呢?
不巧,他们是真的有联系,因为机器学习中的神经网络就是受到人体生物神经的启发才被创造出来。
模仿人体构造而工作的机制(neural network)称得上是人工智能,这不牵强吧哈哈。
那进入正题,先介绍一下人体生物神经是如何工作的。
生物神经网络与Nerual network(神经网络)
首先强调我不是生物专业的学生,做出的任何解释只是有助于理解神经网络,不要纠结专业性哈哈。
那么下面就从人体生物神经网络慢慢过渡到机器学习中是nerual network
信号如何传递-神经元之间的连接
人体中的信息传导都是通过神经元来完成的,所以每个神经元都和其他多个神经元进行连接,信号就这样通过一个神经元接着一个神经元的往下传递,如下图所示,标着红色的箭头的表示三个信号传递进来,可以看作是3个神经元,3个神经元的信号传递到4号神经元,4号再传递到5号和6号。
为了便于泛化,先分析单个神经元是如何工作的,所以后续都只讨论红色框下的。
深度学习中,为了便于表示,将神经元用一个圆圈来表示。
神经元如何被激活
激活阈值-偏置bias
那是不是所有的信号都能被一直传递下去呢,显然不是,不然这样神经元就太敏感了,你可以想象,如果任何信息都能激活神经元进行往下的信息传到,那你随时都会很兴奋。无时无刻的兴奋,所以每个神经元都会有一个阈值,超过阈值了,才会把信息往下传递,这也就是我们现在所说的“激活”。
你想想,大自然每时每刻都会传递一些信息给我们,并不是所有信息人体都会做出反馈,所以这些信息就会被当作噪声被我们挡住,这个阈值就起到过滤噪声的功能。
下面做一个小总结:
- 单个神经元的输入为连接它的多个神经元的输入某种加和
- 神经元要被激活,输入值必须超过其自身设定的阈值
神经元数学量化
接下来用数学的方式对神经结构做一个简单的量化,描述nerual 4是如何被激活的,数学描述如下
x
1
+
x
2
+
x
3
<
b
无
信
号
输
出
\ x_{1} + x_{2} + x_{3} < b 无信号输出
x1+x2+x3<b无信号输出
x
1
+
x
2
+
x
3
>
b
有
信
号
输
出
\ x_{1} + x_{2} + x_{3} > b 有信号输出
x1+x2+x3>b有信号输出
x 1 , x 2 , x 3 x_{1},x_{2},x_{3} x1,x2,x3表示三个输入的神经元nerual 1,nerual 2,nerual 3,b则表示神经元的阈值。只有最终的输入超过这个神经元的阈值,才会有信号输出。
激活函数与输出信号
上一步说了输入超过了神经元的阈值,这个神经元就会有信号输出,至于输出什么信号?在我们人体内的神经元中,根据科学家的研究,其实输出的信号就是0和1,神经元被激活时,输出信号为1,否则输出0。所以自然会想到阶跃函数
下面做一个小总结:
- 神经元的激活函数为单位阶跃函数
- 单个神经元输出信号要么是0要么是1,输入信号之和超过阈值b时,输出1,否则输出0
我们先简单的对数学公式移一个项。
x
1
+
x
2
+
x
3
−
b
<
0
输
出
0
\ x_{1} + x_{2} + x_{3} - b < 0 输出0
x1+x2+x3−b<0输出0
x
1
+
x
2
+
x
3
−
b
>
0
输
出
1
\ x_{1} + x_{2} + x_{3} - b > 0 输出1
x1+x2+x3−b>0输出1
但是对于人工神经网络来说,不是说说出0,1不合适,而是利用单位阶跃函数作为激活函数有点问题,因为它不是处处可求导的,这是很重要的,因为在神经网络进行学习优化中,会有一个反向bp的学习,这就要求激活函数要处处可以求导。所以考虑用sigmoid函数。这样输入信号的加和经过了sigmoid函数之后,输出的信号就不止是0和1了。
先看一下sigmoid函数长啥样
f
(
x
)
=
1
1
+
e
−
x
f\left ( x \right ) = \frac{1}{1 + e^{-x}}
f(x)=1+e−x1
所以我们只需要将输入信号放到一个sigmoid函数中就ok了,优化有的数学表达为
f
(
x
)
=
1
1
+
e
−
(
x
1
+
x
2
+
x
3
−
b
)
f\left ( x \right ) = \frac{1}{1 + e^{-(\ x_{1} + x_{2} + x_{3} - b)}}
f(x)=1+e−( x1+x2+x3−b)1
为了看着好看,我们可以把-b变成+b,神经网络会自己去学习正负的,所以这里的加和减其实没所谓的。那最后就变成。
f
(
x
)
=
1
1
+
e
−
(
x
1
+
x
2
+
x
3
+
b
)
f\left ( x \right ) = \frac{1}{1 + e^{-(\ x_{1} + x_{2} + x_{3} + b)}}
f(x)=1+e−( x1+x2+x3+b)1
神经网络的权重参数
从上面看到,所有的输入信号都是简单的加和之后就输入到下一个神经元了,这种简单的加和是对的吗?当然是不对的,假设一个现实的场景,你走在幽静的深山中,突然响了一声,这时候你接收到的信号有:声音信号和看到的图像信号,这些信号都会被转化为电信号在神经元之间传递,这些信号传递到一个神经元时,要去激活它时,他们的重要性是不一样的,这时的眼睛捕获到的图像信号的重要性是要比耳朵收到的声音信号要小很多的,所以这些信号不应该是简单加和,而是应该带有权重的加和,重要的信号,权值要大一些,那么优化一下就如下:
f
(
x
)
=
1
1
+
e
ω
1
x
1
+
ω
2
x
2
+
ω
2
x
2
+
b
f\left ( x \right ) = \frac{1}{1 + e^{\omega _{1} x_{1} +\omega _{2} x_{2} +\omega _{2} x_{2} +b}}
f(x)=1+eω1x1+ω2x2+ω2x2+b1
ω 1 , ω 2 , ω 3 \omega _{1},\omega _{2},\omega _{3} ω1,ω2,ω3就表示三个神经元的权重,及他们的重要程度。
至此生物神经网络就过渡到人工神经网络了,将单个神远扩展到多个,就组成了神经网络
- 最外层的神经元叫输入层
- 中间的神经元组成的层叫隐藏层
- 最右边的神经元叫输出层