神经网络的结构
- 感知机
感知机接收多个输入信号,返回一个输出信号。如图, x 1 x_1 x1, x 2 x_2 x2是输入信号, w 1 w_1 w1, w 2 w_2 w2是权重, y y y是输出信号。输入信号被送往神经元时,会被分别乘以固定的权重,神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出 1 1 1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号 θ \theta θ表示
用数学公式表示为
y
=
{
0
(
b
+
w
1
x
1
+
w
2
x
2
⩽
0
)
1
(
b
+
w
1
x
1
+
w
2
x
2
>
0
)
y=\left\{\begin{array}{ll}0&(b+w_1x_1+w_2x_2\leqslant0)\\[1ex]1&(b+w_1x_1+w_2x_2>0)\end{array}\right.
y={01(b+w1x1+w2x2⩽0)(b+w1x1+w2x2>0)
其中,
b
b
b是偏置,用于控制神经元被激活的难易程度。
- 神经网络
用图来表示神经网络的话,如图3-1所示。我们把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层(图中省略偏置)
使用
h
(
x
)
=
{
0
(
x
⩽
0
)
1
(
x
>
0
)
h(x)=\begin{cases} 0&(x\leqslant0)\\[0.3em] 1&(x>0)\end{cases}
h(x)={01(x⩽0)(x>0)
令自变量为
y
y
y,表示神经元受输入信号激发后的反应(判断是否激活)。
简化为
y = h ( b + w 1 x 1 + w 2 x 2 ) y=h(b+w_1x_1+w_2x_2) y=h(b+w1x1+w2x2)
- 激活函数
上述 h ( x ) h(x) h(x)将输入信号的综合转化为输出信号,执行此功能的函数称为激活函数。在神经网络图中可以绘制如下图形可以明确表示激活函数的作用过程
- 阶跃函数作为激活函数
- sigmoid函数作为激活函数
- ReLU(Rectified Linear Unit)函数
以阈值为界,一旦输入超过阈值,就切换输出。这样的函数称为“阶跃函数”。即上式的 h ( x ) h(x) h(x)。
sigmoid函数:
h
(
x
)
=
1
1
+
exp
(
−
x
)
h(x)=\frac{1}{1+\exp(-x)}
h(x)=1+exp(−x)1
是神经网络常用的激活函数。
sigmoid函数的图像如下
sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0为界,输出发生急剧性的变化。sigmoid函数的平滑性对神经网络的学习具有重要意义。
在神经网络发展的历史上,sigmoid函数很早就开始被使用了,而最近则主要使用ReLU(Rectified Linear Unit)函数,它可以表示为。
h ( x ) = { x ( x > 0 ) 0 ( x ⩽ 0 ) h(x)=\begin{cases} x&(x>0)\\ 0&(x\leqslant0)\end{cases} h(x)={x0(x>0)(x⩽0)
- 输出层的设计
神经网络可以用在分类问题和回归问题上,不过需要根据情况改变输出层的激活函数。一般而言,回归问题用恒等函数,分类问题用softmax函数。
softmax函数:
y
k
=
exp
(
a
k
)
∑
i
=
1
n
exp
(
a
i
)
y_k=\frac{\exp(a_k)}{\sum\limits_{i=1}^n\exp(a_i)}
yk=i=1∑nexp(ai)exp(ak)
为避免数值计算时的溢出问题
根据softmax函数的性质做如下调整
y k = exp ( a k ) ∑ i = 1 n exp ( a i ) = C exp ( a k ) C ∑ i = 1 n exp ( a i ) = exp ( a k + log C ) ∑ i = 1 n exp ( a i + log C ) = exp ( a k + C ′ ) ∑ i = 1 n exp ( a i + C ′ ) \begin{aligned}y_{k}=\frac{\exp(a_{k})}{\sum_{i=1}^{n}\exp(a_{i})}&=\frac{\mathrm{C}\exp(a_k)}{\mathrm{C}\sum_{i=1}^n\exp(a_i)}\\&=\frac{\exp(a_k+\log\mathrm{C})}{\sum_{i=1}^n\exp(a_i+\log\mathrm{C})}\\&=\frac{\exp(a_k+\mathrm{C'})}{\sum_{i=1}^n\exp(a_i+\mathrm{C'})}\end{aligned} yk=∑i=1nexp(ai)exp(ak)=C∑i=1nexp(ai)Cexp(ak)=∑i=1nexp(ai+logC)exp(ak+logC)=∑i=1nexp(ai+C′)exp(ak+C′)
可以看出,在括号内同时加减某个数,函数值不变,为防止数值溢出,一般 C ′ C' C′取输入信号中的最大值
所以以一个3层深度学习神经网络为例,其具体结构可以展示为