重要的人工神经元–感知器和Sigmod神经元
什么是神经元
首先先来解释一下什么是神经元,他有什么用。
人工神经网络是受到人类大脑的结构的启发而创造出来的,如下图所示,在我们的大脑中,有数十亿个称为神经元的细胞,它们互相链接形成了一个神经网络。
神经网络算法正是模仿了上面的网络结构,下面是一个人工神经网络的构造图,每一个圆都代表着一个神经元,它们连接起来构成了一个网络。
那么为什么会需要这么多的神经元呐?其实在神经元的数目多了之后相当于是一种简化。如果我们把整个神经网络要完成的工作想象成一个黑盒,那么在其需要完成的功能总量不变时,我们将其分解成很多份的话,每一份需要完成的任务就很少,每一份就代表着我们上图中的每一层也就是每一列的神经元。对于每一列神经元来说,他只需要完成固定的任务,然后将它的输出传递给后面一层的神经元即可。
在了解到这些之后,我们的任务就从设计一整个神经网络转变到了设计每一层神经网络要完成的工作。而对于每层中的单个神经元来说,他需要完成的任务就是接受一系列的输入,然后经过一定的处理得到一个输出,仅此而已。
接下来介绍一下最简单的两种神经元模型。
第一种是感知器神经元模型,第二种是Sigmod
神经元模型。在当前的很多神经网络工作中,主要使用的S型神经元模型。但在了解S型神经元模型之前先来了解一下感知器神经元模型是怎么工作的。
感知器(Perceptrons)
感知器是如何工作的呢?一个感知器接受几个二进制输入, x 1 , x 2 , . . . x_1,x_2,... x1,x2,...,并产生一个二进制的输出,其模型如下图:
示例中的感知器有三个输入, x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3。通常可以有更多或更少的输出。Rosenblatt提议一个简单的规则来计算输出。他引入权重, w 1 , w 2 , . . . w_1,w_2,... w1,w2,...,表示相应输出对于输出重要性的实数。神经元的输出,0或1,则由分配权重后的总和 ∑ j w j x j \sum_j w_jx_j ∑jwjxj小于或大于一些阈值决定。和权重一样,阈值是一个实数,一个神经元的参数,可以用更精确的代数形式表示:
o u t p u t = { 0 i f ∑ j w j x j ≤ t h r e s h o l d 1 i f ∑ j w j x j > t h r e s h o l d output= \begin{cases} 0\ \ \ \ if \sum_j w_jx_j \le threshold \\ 1\ \ \ \ if \sum_j w_jx_j \gt threshold \end{cases} output={0 if∑jwjxj≤threshold1 if∑jwjxj>threshold
也就是说对于将输入按照一定的权重加权起来之后,当其大于一定的阈值之后,该感知器神经元会输出1,否则则会输出0。
将上式进行一点简单的变形,第一个变动是把
∑
j
w
j
x
j
\sum_j w_jx_j
∑jwjxj改写成点乘,即
w
⋅
x
=
∑
j
w
j
x
j
w · x =\sum_j w_jx_j
w⋅x=∑jwjxj,这里的
w
w
w和
x
x
x对应权重和输入的向量;第二个变动是把阈值一道不等式的另一边,并且用感知器的偏置
b
=
−
t
h
r
e
s
h
o
l
d
b=-threshold
b=−threshold 代替。则可以将上式改写为如下形式:
o
u
t
p
u
t
=
{
0
,
w
⋅
x
+
b
≤
0
1
,
w
⋅
x
+
b
>
0
output= \begin{cases} 0\ \ \ \ ,\ w · x +b \le 0 \\ 1\ \ \ \ ,\ w · x +b \gt 0 \end{cases}
output={0 , w⋅x+b≤01 , w⋅x+b>0
这就是一个感知器所要做的所有事情。这也是一个最基本的数学模型,可以将感知器看做依据权重来做决定的设备。
其函数图像如下图所示,即阶跃函数,其中 z = w ⋅ x + b z=w\cdot x+b z=w⋅x+b
对于如下神经网络第⼀列感知器——是我们称其为第⼀层感知器 —— 通过权衡输⼊依据做出三个非常简单的决定。那第⼆层的感知器呢?每⼀个都在权衡第⼀层的决策结果并做出决定。以这种⽅式,⼀个第⼆层中的感知器可以⽐第⼀层中的做出更复杂和抽象的决策。在第三层中的感知器甚⾄能进⾏更复杂的决策。以这种⽅式,⼀个多层的感知器网络可以从事复杂巧妙的决策。
S
型神经元
对于我们给神经网络设计的算法,我们希望的是当我们的模型发现实际输出值与预期输出值之间有偏差时,模型会自动调整我们的权重或偏置,从而使得实际输出向预期输出靠近,但是对于感知器来说,当我们调整 w w w或者 b b b使得 z z z值在0附近发生了偏动的话,就会导致输出值发生非常大的变化, 0 → 1 0\rightarrow1 0→1或 1 → 0 1\rightarrow 0 1→0。
这并不是我们期望的,我们想要的是对于权重或者偏置的微小改动仅仅会引起输出微小的变化,那么我们可以利用这一事实来修改权重和偏置,让我们的网络能够表现得像我们想要的那样。
这时候就可以引入一种称为S型神经元
的新人工神经元来克服这个问题。S行神经元和感知器类似。但是被修改为权重和偏置的微小改动只引起输出的微小改变。
S型神经元与感知器在某些方面是相似的,也是获取一系列的输入,对于每个输入经过一个权重同时加入偏置的作用得到一个输出,可以表示成与感知器类似的样子:
S型神经元与感知器不同的方面在于:在感知器中,其输入与输出仅能为 0 0 0或者 1 1 1,但是在S型神经元中,这些输入可以取0和1之间的任意值,而不仅仅是0或者1。并且S型神经元的输出也不再是0或1。相反,其值为 σ ( w ⋅ x + b ) \sigma(w\cdot x+b) σ(w⋅x+b),这里的 σ \sigma σ称为S型函数,其定义为:
S型函数,全称为
Sigmoid function
,有时也被称为逻辑函数
σ ( z ) ≡ 1 1 + e − z \sigma(z) \equiv \frac 1 {1+e^{-z}} σ(z)≡1+e−z1
将
z
=
w
⋅
x
+
b
z=w\cdot x+b
z=w⋅x+b展开为如下形式:
1
1
+
e
x
p
(
−
∑
j
w
j
x
j
−
b
)
\frac 1 {1+exp(-\sum_j w_jx_j-b)}
1+exp(−∑jwjxj−b)1
其函数图像如下:
通过图像我们可以发现
σ
\sigma
σ的图像是连续的,也就是说当z的值发生微小改变时,
σ
(
z
)
\sigma(z)
σ(z)的值也只会发生很小的改动,可以表示成如下形式:
Δ
o
u
t
p
u
t
≈
∑
j
∂
o
u
t
p
u
t
∂
w
j
Δ
w
j
+
∂
o
u
t
p
u
t
∂
b
Δ
b
\Delta output \approx \sum_j \frac{\partial output} {\partial w_j} \Delta w_j+\frac{\partial output}{\partial b}\Delta b
Δoutput≈j∑∂wj∂outputΔwj+∂b∂outputΔb
其中求和是在所有权重
w
j
w_j
wj上进行的,虽然它的形式非常复杂,但是他表示的含义非常简单:
Δ
o
u
t
p
u
t
\Delta output
Δoutput是一个反映权重和偏置的变化,并且其为
Δ
w
j
\Delta w_j
Δwj和
Δ
b
\Delta b
Δb的线性函数。这一线性使得选择权重和偏置的微小变化来达到输出的微小变化的运算变得容易