神经网络学习
人工神经网络
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
神经元的概念
神经元是神经网络中最基本的结构,也可以说是神经网络的基本单元,它的设计灵感完全来源于生物学上神经元的信息传播机制。我们学过生物的同学都知道,神经元有两种状态:兴奋和抑制。一般情况下,大多数的神经元是处于抑制状态,但是一旦某个神经元收到刺激,导致它的电位超过一个阈值,那么这个神经元就会被激活,处于“兴奋”状态,进而向其他的神经元传播化学物质(其实就是信息)。
数学公式:
o
u
t
p
u
t
=
f
(
W
∗
A
+
b
)
output=f(W*A+b)
output=f(W∗A+b)
其中:
1、x1、x2、x3…xm作为输入特征分量
2、w1、w2、w3…wm是输入各分量对应的权重参数
3、b是偏置参数
4、f(x)是激活函数,常见的有:tanh、sigmoid、relu等
5、output是神经元的输出
由此可见,神经元的作用是将输入向量与权重向量做内积,加上偏执参数,通过一个非线性传递函数输出一个标量的结果。
单层神经网络
单层神经网络是最基本的神经网络形式,由有限个神经元构成,所有神经元的输入向量都是同一个向量,由于一个神经元会产生一个标量的输出,所以单层神经网络的输出是一个向量,向量的维度即神经元的个数。
感知机
感知机(perceptron)是由两层神经元组成的结构:
- 输入层:用于接受外界输入信号
- 输出层(也被称为是感知机的功能层):即M-P神经元
下图表示了一个输入层具有三个神经元(分别表示为x0、x1、x2)的感知机结构:
数学公式:
o
u
t
p
u
t
=
f
(
W
∗
A
+
b
)
output=f(W*A+b)
output=f(W∗A+b)
由此可知,感知机的作用是用一个超平面将n维空间划分成两部分,给定一个输入向量,感知机可以判断出这个向量位于超平面的哪一边,解决与、或、非这样的简单的线性可分(linearly separable)问题。
多层神经网络
多层神经网络是由单层神经网络叠加而成的,所以形成了成的概念,常见的多层神经网络由如下结构:
- 输入层(Input Layer):由众多神经元(Neuron)组成,用来接收输入信息,输入的信息成为输入向量
- 输出层(Output Layer):信息通过神经元链接传输、分析、权衡,形成输出结果,输出的信息称为输出向量
- 隐藏层(Hidden Layer):简称:“隐层”,是输入层和输出层之间众多神经元和链接组成的各层,隐层可以有一层或者多层,隐层的结点(神经元)数目不定,数目越多神经网络的非线性越显著,从而神经网络的强健性(robustness)越显著
多层神经网络结构图:
全连接层
概念:当前层和前一层每一个神经元之间都相互链接,我们成当前层为全连接层。全连接层是在前一层的输出基础上进行一次
Y
=
W
Z
+
b
Y=WZ+b
Y=WZ+b变化。
激活函数
激活函数是神经网络的重要组成部分,主要作用有:(1) 增加模型的非线性能力,(2)提高模型的鲁棒性,(3) 缓解梯度消失问题,(4) 加速模型收敛度,常见的激活函数有:
- 线性函数
(1) 线性函数 ( Liner Function )
f ( x ) = k ∗ x + c f(x) = k*x+c f(x)=k∗x+c
(2) 斜面函数 ( Ramp Function )
f ( x ) = T ( x > c ) , k ∗ x ( ∣ x ∣ < c ) , − T ( x < − c ) f(x) = T (x>c),k*x (\lvert x\rvert<c),-T(x<-c) f(x)=T(x>c),k∗x(∣x∣<c),−T(x<−c)
(3) 阈值函数 ( Threshold Function )
f ( x ) = 1 ( x > = c ) , 0 ( x < c ) f(x) = 1(x>=c),0(x<c) f(x)=1(x>=c),0(x<c) - 非线性函数
(1) S形函数 ( Sigmoid Function )
f ( x ) = 1 1 + e − a x ( 0 < f ( x ) < 1 ) f(x) = \frac{1}{1+e^{-ax}} (0<f(x)<1) f(x)=1+e−ax1(0<f(x)<1)
(2) 双极S形函数
f ( x ) = 2 1 + e − a x − 1 ( − 1 < f ( x ) < 1 ) f(x) = \frac{2}{1+e^{-ax}} -1(-1<f(x)<1) f(x)=1+e−ax2−1(−1<f(x)<1)
(3) Sigmoid函数(tf.nn.sigmoid())
f ( x ) = 1 1 + e − x ( 0 < f ( x ) < 1 ) f(x) = \frac{1}{1+e^{-x}} (0<f(x)<1) f(x)=1+e−x1(0<f(x)<1)
特点:
( a ) 易造成梯度消失
( b ) 函数输出非0均值,收敛慢
( c ) 幂运算复杂,训练时间长
(4) Tanh函数(tf.nn.tanh())
f ( x ) = 2 1 + e − 2 x − 1 ( 0 < f ( x ) < 1 ) f(x) = \frac{2}{1+e^{-2x}} -1(0<f(x)<1) f(x)=1+e−2x2−1(0<f(x)<1)
特点:
( a ) 易造成梯度消失
( b ) 函数输出是0均值
( c ) 幂运算复杂,训练时间长
(5) ReLu函数(tf.nn.relu())
f ( x ) = 0 ( x < 0 ) , x ( x > = 0 ) f(x) = 0(x<0),x(x>=0) f(x)=0(x<0),x(x>=0)
优点:
( a ) 解决了梯度消失问题(正区间)
( b ) 只需要判断输入是否大于0,计算速度快
( c ) 收敛速度远快于sigmoid和tanh
缺点:
( a ) 函数输出非0均值,收敛慢
( b ) 某些神经元(<0)无法被激活,导致相应参数不能被更新
总之,如果使用伸进网络做二元分类时,使用Sigmoid函数作为输出层的激活函数,使用ReLU作为隐藏层的激活函数,使输出的范围在0到1之间。
后续
深度学习网络学习记录
参考视频:https://www.bilibili.com/video/BV1Zf4y157i9
部分图片来源:https://blog.csdn.net/chiu1991/article/details/74357828