【人工神经网络 Artificial Neural Network】
本文介绍人工神经网络的发展
1、 生物模型&数学模型
这是生物学上的神经元模型图,它的作用机理可以简单描述为:树突接受身体上的电信号,传入神经元的细胞体中,神经元细胞会经过复杂的电信号处理,再由轴突、突触传递给对应的肌群或者其他组织,然后他们会根据神经元传递的响应的信号,做出对应的反应。
1943年,心理学家W.S.McCulloch和数理逻辑学家W.Pitts在观察到生物神经元的结构后,有了一个idea,他们想用数学模型来表征生物神经元的工作方式,基于神经元的生理特征,他们建立了单个神经元的数学模型(MP模型)。

这里可以试着理解为,输入
x
1
−
x
m
x_1 - x_m
x1−xm为生物神经元的不同电信号输入,
w
k
1
−
w
k
m
w_{k1} - w_{km}
wk1−wkm为神经元内部对不同电信号的响应程度,偏置可大致理解为神经元所处的酸碱性状态,求和以及激活函数是神经元对信号的整合处理,最终输出到各个部分,我们可以试着这样去理解这个MP模型的仿生原理,但实际上生物神经元的机制远远不止这么简单,但是对于当时来说,这样的一种模型思想是非常超前的。
上面的图像展示的是MP模型的结构示意图,而他的数学表达式为:
y
k
=
φ
(
∑
i
=
1
m
ω
k
i
x
i
+
b
k
)
=
φ
(
W
k
T
X
+
b
k
)
\mathbf{y}_k = \boldsymbol{\varphi} \left( \sum_{i=1}^m \omega_{ki} \mathbf{x}_i + b_k \right) = \boldsymbol{\varphi} \big( \mathbf{W}^T_k \mathbf{X} + \mathbf{b}_k \big)
yk=φ(i=1∑mωkixi+bk)=φ(WkTX+bk)
其中:
- y ∈ R n × d \mathbf{y} \in \mathbb{R}^{n \times d} y∈Rn×d: 输出矩阵( n n n个样本, d d d个神经元)
- X ∈ R n × m \mathbf{X} \in \mathbb{R}^{n \times m} X∈Rn×m: 输入矩阵( n n n个样本, m m m个特征)
- W ∈ R m × d \mathbf{W} \in \mathbb{R}^{m \times d} W∈Rm×d: 权重矩阵
- b ∈ R 1 × d \mathbf{b} \in \mathbb{R}^{1 \times d} b∈R1×d: 偏置向量
- φ \varphi φ: 激活函数(按元素作用)
2、 感知器
W.S.McCulloch和W.Pitts提出来的是单个的神经元模型,在十多年后,1957年,Frank Rosenblatt从纯数学的度重新考察这一模型,指出能够从一些输入输出对
(
X
,
y
)
(X, y)
(X,y)中通过学习算法获得权重
w
w
w和
b
b
b 。感知机所考虑的问题是:给定一些输入输出对
(
X
,
y
)
(X, y)
(X,y),其中
y
=
±
1
y = \pm1
y=±1,求一个函数,使
f
(
x
)
=
y
f(x) = y
f(x)=y。
感知器算法理解:设定
f
(
x
)
=
s
i
g
n
(
W
T
X
+
b
)
f(x) = sign(W^TX + b)
f(x)=sign(WTX+b),从一堆输入输出中自动学习,获得
W
W
W和
b
b
b。
感知器算法(Perceptron Algorithm)步骤:
对于给定输入 ( x i , y i ) i = 1 ∼ N {(x_i,y_i)} \space\space i=1\sim N (xi,yi) i=1∼N
① 随机选取 w w w, b b b
② 挑选一个 x i x_i xi
- 若 W T x i + b ≥ 0 W^Tx_i + b \geq 0 WTxi+b≥0, 且 y = − 1 y=-1 y=−1,则:
W = W − x W=W-x W=W−x, b = b − 1 b=b-1 b=b−1- 若 W T x i + b < 0 W^Tx_i + b < 0 WTxi+b<0, 且 y = 1 y=1 y=1,则:
W = W + x W=W+x W=W+x, b = b + 1 b=b+1 b=b+1③ 回到②,直到对所有 x i x_i xi,②中的条件都不成立时退出。
从公式中我们可以看出,感知器是通过不断地调整
W
W
W和
b
b
b,让输出满足真正的
y
=
1
o
r
−
1
y=1 or -1
y=1or−1,也即假如算出来的值大于0了就对
W
T
+
b
W^T+b
WT+b减去一个值,假如算出来的值大于0了就加上一个值,那么会不会在一加一减中不断地来回震荡呢?
Frank Rosenblatt给出了收敛性的证明,他指出:假如数据线性可分,那么在有限的步骤之内,感知器算法就能够算出结果并退出。
3、 多层神经网络(Mutiple Layer Neural Networks)
单个的感知器,没有办法很好的处理非线性可分的情况,多层神经网络的思想是,使用非线性的函数集合去分开非线性的样本。
两层神经网络例子:

数学表达式:
a
1
=
ω
11
x
1
+
ω
12
x
2
+
b
1
a_1 = \omega_{11}x_1 + \omega_{12}x_2 + b_1
a1=ω11x1+ω12x2+b1
a
2
=
ω
21
x
1
+
ω
22
x
2
+
b
2
a_2 = \omega_{21}x_1 + \omega_{22}x_2 + b_2
a2=ω21x1+ω22x2+b2
z
1
=
φ
(
a
1
)
z_1 = \varphi(a_1)
z1=φ(a1)
z
2
=
φ
(
a
2
)
z_2 = \varphi(a_2)
z2=φ(a2)
y
=
ω
1
z
1
+
ω
2
z
2
+
b
3
y = \omega_1z_1 + \omega_2z_2 + b_3
y=ω1z1+ω2z2+b3
其中 φ ( ∗ ) \varphi(*) φ(∗) 为非线性函数
4、 非线性 φ ( ∗ ) \varphi(*) φ(∗)
非线性函数在现在通常被称为激活函数,一般的每个神经元的输出都是要经过非线性激活的,激活函数用于对每层的输出数据进行变换, 进而为整个网络注入了非线性因素。此时, 神经网络就可以拟合各种曲线。
最早人们考虑的是阶跃函数作为激活用,它的数学表达式为:
φ
(
x
)
=
{
0
,
x
≤
0
1
,
x
>
0
\varphi(x)= \begin{cases} 0,\quad x\leq 0\\ 1, \quad x>0 \end{cases}
φ(x)={0,x≤01,x>0
函数图像表示为:

现在常用的激活函数有很多,这里先罗列出常用的一部分:
-
Sigmoid
数学表达式:
φ ( x ) = 1 1 + e − x φ ′ ( x ) = φ ( x ) [ 1 − φ ( x ) ] \begin{aligned} \varphi(x) &= \frac{1}{1 + e^{-x}} \\ \varphi'(x) &= \varphi(x)[1 - \varphi(x)] \end{aligned} φ(x)φ′(x)=1+e−x1=φ(x)[1−φ(x)]
函数图像:

-
tanh
数学表达式:
φ ( x ) = e x − e − x e x + e − x φ ′ ( x ) = 1 − [ φ ( x ) ] 2 \begin{aligned} \varphi(x) &= \frac{e^x - e^{-x}}{e^x + e^{-x}} \\ \varphi'(x) &= 1 - [\varphi(x)]^2 \end{aligned} φ(x)φ′(x)=ex+e−xex−e−x=1−[φ(x)]2
函数图像:

-
ReLU
数学表达式:
φ ( x ) = max ( 0 , x ) = { x if x > 0 0 if x ≤ 0 \varphi(x) = \max(0, x) = \begin{cases} x & \text{if } x > 0 \\ 0 & \text{if } x \leq 0 \end{cases} φ(x)=max(0,x)={x0if x>0if x≤0
函数图像:

-
Leak ReLU
函数表达式:
LReLU ( x ) = { x x > 0 α x x ≤ 0 , α ∈ ( 0 , 1 ) \text{LReLU}(x) = \begin{cases} x & x > 0 \\ \alpha x & x \leq 0 \end{cases}, \quad \alpha \in (0, 1) LReLU(x)={xαxx>0x≤0,α∈(0,1)
LReLU ′ ( x ) = { 1 x > 0 α x ≤ 0 \text{LReLU}'(x) = \begin{cases} 1 & x > 0 \\ \alpha & x \leq 0 \end{cases} LReLU′(x)={1αx>0x≤0
函数图像:

-
Softmax
函数表达式:
Softmax ( z ) i = e z i ∑ j = 1 K e z j for i = 1 , … , K \text{Softmax}(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}} \quad \text{for } i = 1, \dots, K Softmax(z)i=∑j=1Kezjezifor i=1,…,K
函数图像:

关于激活函数的详细知识,详见另一篇博客:常见激活函数、逻辑回归&激活函数,这里给出了比较详细的函数讲解。

5718

被折叠的 条评论
为什么被折叠?



