学习时间:2022.04.08~2022.04.09
文章目录
1. 神经网络基础概念
1.1 什么是神经网络
人工神经网络(Artificial Neural Networks,ANN)也简称为神经网络,是一种模仿生物神经网络行为特征,进行分布式并行信息处理的数学模型。
这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
生物神经网络中,单个神经元的结构:
1.2 从神经元模型到感知机模型
1.2.1 M-P神经元模型
1943年,心理学家Warren McCulloch和数学家Walter Pitts合作提出 基于生物神经网络的麦卡洛克-皮茨神经元模型(McCulloch-Pitts′ neuron model)。其基本思想是抽象和简化生物神经元的特征性成分。
- 每个神经元都是一个多输入单输出的信息处理单元;
- 神经元输入分兴奋性输入和抑制性输入两种类型;
- 神经元具有空间整合特性和阈值特性;
- 神经元输入与输出间有固定的时滞,主要取决于突触延搁;
- 忽略时间整合作用和不应期;
- 神经元本身是非时变的,即其突触时延和突触强度均为常数。
McCulloch-Pitts模型公式如下:
O j ( t + 1 ) = f { [ ∑ i = 1 n ω i j χ i ( t ) ] − T j } O_j(t+1) = f\{[\sum^n_{i=1}ω_{ij}χ_i(t)]-T_j\} Oj(t+1)=f{
[i=1∑nωijχi(t)]−Tj}
O j O_j Oj为输出信号;
χ i χ_{i} χi为加于输入端(突触)上的输入信号, ( i = 1 , 2 , … , n ) (i=1, 2, …, n) (i=1,2,…,n);
ω i j ω_{ij} ωij为相应的突触连接权重系数,它是模拟突触传递强度的一个比例系数;
∑ i = 1 n \sum^n_{i=1} ∑i=1n表示突触后信号的空间累加;
T j T_j Tj表示神经元的阈值;
f f f表示神经元的响应函数。作用:①控制输入对输出的激活作用;②对输入输出进行函数转换;③对可能是无限域的输入进行变换。
运作规则:时间离散,时刻 t ( t = 0 , 1 , 2 , … … ) t(t=0, 1, 2, ……) t(t=0,1,2,……)得到兴奋型输入 χ i χ_{i} χi,如果膜电位( ∑ i = 1 n ω i j χ i ( t ) \sum^n_{i=1}ω_{ij}χ_i(t) ∑i=1nωijχi(t))等于或大于阈值( T j T_j Tj)以及抑制型输入为0,则在时刻 t + 1 t+1 t+1,神经元细胞输出( O j ( t + 1 ) O_j(t+1) Oj(t+1))为1,否则为0。

1.2.2 感知机(Perceptron)模型
但是M-P模型缺乏一个对人工智能而言至关重要的学习机制——“赫布法则”(1949年-Donald Hebb-《行为的组织》)。通俗来讲就是两个神经细胞交流越多,它们连接的效率就越高,反之就越低。
在美国康奈尔大学航天实验室工作的心理学家弗兰克·罗森布拉特(Frank Rosenblatt)受到赫布基础性工作的启发,于1957年提出了"感知机" (Perceptron)模型。

这是第一个用算法来精确定义神经网络的模型,感知机由两层神经元组成,输入层接收外界信号,输出层是M-P神经元,即阈值逻辑单元,也称为神经网络的一个处理单元(PE,Processing Element)。
罗森布拉特给出感知机一个简单直观的学习方案:给定一个有输入输出实例的训练集,感知机「学习」一个函数:对每个例子,若感知机的输出值比实例低太多,则增加它的权重,否则若比实例高太多,则减少它的权重。该算法如下:
-
给权重系数置初值;
-
对于训练集中一个实例的输入值,计算感知机的输出值;
-
如若感知机的输出值和实例中默认正确的输出值不同:
(1)若输出值应该为0但实际为1,减少输入值是1的例子的权重;
(2)若输出值应该为1但实际为0,增加输入值是1的例子的权重;
-
对于训练集中下一个例子做同样的事,重复步骤2~3,直到感知机不再出错为止;
-
通过将计算结果馈送到激活函数(or传递函数),把计算结果变成输出信号。
引入激活函数的目的是在模型中引入非线性因素。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。

感知器本质上就是一个通过加权计算函数进行决策的工具。
单层感知机、多层感知机、包含一个隐层的多层感知机,如下图:
1.3 激活函数
1.3.1 激活函数的定义
激活函数(Activation Function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数/传递函数)。

1.3.2 为什么要使用激活函数?
使用非线性激活函数,能够从输入输出之间生成非线性映射。
因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。
1.3.3 激活函数的作用
-
增加模型的非线性分割能力;
-
提高模型鲁棒性:可以拟合各种不同情形中的数据;
-
缓解梯度消失(Vanishing Gradients)问题;
假设神经元输入Sigmoid的值特别大或特别小,对应的梯度约等于0,即使从上一步传导来的梯度较大,该神经元权重(w)和偏置(bias)的梯度也会趋近于0,导致参数无法得到有效更新。
梯度爆炸:梯度误差是在神经网络训练期间计算的方向和梯度,神经网络以正确的方向和数值更新网络权重。在深度网络或递归神经网络中,梯度误差可能在更新过程中累积,造成非常大的梯度。这反过来会导致网络权重的大量更新,进而导致网络不稳定。在极端情况下,权重值可能变得太大,以至于溢出并导致NaN值现成梯度爆炸现象。
-
加速模型收敛等。
神经元死亡:ReLU函数尽管可以提升计算高效性,但同样也可能阻碍训练过程。通常,激活函数的输入值有一偏置项(bias),假设bias变得太小,以至于输入激活函数的值总是负的,那么反向传播过程经过该处的梯度恒为0,对应的权重和偏置参数此次无法得到更新。如果对于所有的样本输入,该激活函数的输入都是负的,那么该神经元再也无法学习,称为神经元”死亡“问题。
1.3.4 激活函数的分类
激活函数主要分为饱和激活函数(Saturated)和非饱和函数(One-sided / Non-Saturated)。
-
假设 h ( x ) h(x) h(x)是一个激活函数:
-
当 n n n趋近于负无穷时,激活函数的导数趋近于0( l i m n → − ∞ h ′ ( x ) = 0 lim_{n→-∞} h'(x) = 0 limn→−∞h′</
-