神经网络
欢迎访问本人blog网站:www.xuanworld.top
神经网络就是构建一种数学模型,模仿人脑神经系统,这就称为人工神经网络,简称神经网络。在机器学习领域,神经网络是指由很多人工神经元构成的网络结构模型,这些人工神经元之间的连接强度是可学习的参数。
神经网络的初衷是为了能够模拟人类的大脑,在1980s和1990s之间应用的十分广泛。后来神经网络技术逐渐被冷落,主要原因就是神经网络所需的计算量较大。最近芯片技术的突飞猛进,导致神经网络技术又重新被人们所重视。
神奇的题外话
以前我们认为人的大脑由不同的组织组成,比如负责听觉的大脑部分只能处理听觉信息,负责视觉的大脑部分只能处理视觉信息,但是后来的实验却证明事实可能并非如此,如图所示,我们将大脑负责听觉的部分进行处理,使其无法接受到来自听觉的信号。同时,我们将传递视觉信号的神经给接到这个地方。结果我们发现,处理听觉的大脑部分学会了处理视觉!!!,这些实验被称为神经重接实验。所以我们可以假设所有的大脑部分其实都是由同一种组织构成,存在某种机制能够使相同的组织进行学习从而完成不同的任务。
这就是神经算法的一种简单原理,或者说最终目的,顶尖的科学家希望通过模拟大脑的运行方法实现真正的人工智能。
1 神经元
神经元是神经网络进行信息处理的基本单元,其主要是模拟生物神经元的结构和 特性,接收输入信号并产生输出。
生物上神经元的原理
生物神经元通常具有一个轴突和多个树突,树突可以用来接受信息。当输入的神经信号超过一定的阙值之后,他就会处于兴奋状态,产生电脉冲,轴突尾部的许多末梢可以与其他神经元的树突连接,将脉冲信号传给其他的神经元。
1.1 MP神经元
MP神经元是心理学家McCulloch和数学家Pitts根据生物神经元结构提出的一种非常简单的神经元模型。
一个基本的神经元包括三个基本的组成部分:输入信号、线性组合和非线性激活函数。
(a1,a2,a3是输入信号,w1,w2,w3是输入信号的权值。)
2 多层感知器
2.1 单隐层感知器
首先我们来看一下它的结构图形
由于小废物Rytter不喜欢书本上那总难以理解的公式化炫技解释,所以我将以人话进行解释:这种结构的输入会首先经过输入层映射到隐藏层,然后再通过隐藏层映射到输出层,其实就是对输入的信息进行变换。这两种映射叫做激活函数。
2.2 感知器的信息传递
信息通过多次传递,传递到最后一层
向前传播:指的就是信号从输入到输出的一层层传播。这种传播可以很好的用向量进行表示。
3 激活函数
激活函数是神经网络中十分重要的概念,他的非线性使神经网络更加复杂,能够去表示更多的东西。
激活函数有多种多样,一个基本要求是他们要连续可导,常用的有S型激活函数和ReLU变种。
3.1 S型激活函数
S型激活函数中比较典型的是Sigmoid和Tanh,这种激活函数的特点是有界,并且输入的绝对值越大,对应的梯度就越小,越趋近于0.
Sigma函数的定义是: σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1,值域在0到1之间
将任意输入全部压缩到0到1之间,在神经网络中经常作为二分类器最后一层激活函数,可将任意实数值转化为概率。而且还可以作为类似开关的调节器,对其他信息进行调节。
另一种函数是Tanh函数,定义式为: t a n h ( x ) = e x − e − x e x + e − x tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} tanh(x)=ex+e−xex−e−x
相较于sigma函数,tanh函数的范围更大一些,为(-1,1),也可以作为开关调节信息。
3.2 ReLU及其变种
3.2.1 ReLU
ReLU是目前深度学习中经常使用的激活函数。
ReLU函数的表达式为:
R e L U ( x ) = { x , i f x ≥ 0 0 , i f x < 0 ReLU(x)=\begin{cases}{x, \ if \ x\ge 0}\\ {0, \ if \ x<0}\end{cases} ReLU(x)={x, if x≥00, if x<0
可以看出,ReLU对正负值的处理方式完全不同,当输入为负时全部置零,而输入为正时保持不变,这种特性叫做单侧抑制。单侧抑制会导致某个神经元死亡,原因是如果某个神经元输出一直为负,则进行传播的时候就会一直输出为0,导致无法进行有效的更新。
为避免以上情况,所以ReLU函数还会有许多变种。
3.2.2 LeakyReLU
LeakyReLU表达式为
L e a k y R e L U ( x ) = { x , i f x > 0 λ x , i f x ≤ 0 LeakyReLU(x)=\begin{cases}{x, \ if \ x>0}\\{\lambda x,if \ x \le 0} \end{cases} LeakyReLU(x)={x, if x>0λx,if x≤0
λ \lambda λ取值一般取0.2
3.2.3 PReLU
它将LeakyReLU中的 λ \lambda λ改进为可以训练的参数,并且每个神经元可以使用不同的参数。
P R e L U ( x ) = { x , i f x > 0 a x , i f x ≤ 0 PReLU(x)=\begin{cases}{x, \ if \ x>0}\\{ax,if \ x \le 0} \end{cases} PReLU(x)={x, if x>0ax,if x≤0
3.2.4 ELU
输入为负时,进行非线性压缩变换。
E L U ( x ) = { x , i f x ≥ 0 α ( e x − 1 ) , i f x < 0 ELU(x)=\begin{cases}{x, \ if \ x \ge 0}\\{\alpha(e^x-1),if \ x < 0} \end{cases} ELU(x)={x, if x≥0α(ex−1),if x<0