人工神经网络的定义
人工神经网络(英语:Artificial Neural Network,ANN),简称神经网络(Neural Network,NN)或类神经网络,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型,用于对函数进行估计或近似。
ps:和其他机器学习方法一样,神经网络已经被用于解决各种各样的问题,例如机器视觉、自然语言处理 和 多模态。这些问题都是很难被传统基于规则的编程所解决的,也是神经网络大展宏图的地方
神经元的定义
- 在生物神经网络
每个神经元与其他神经元相连,当它"兴奋"时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个阈值”,那么它就会被激活,即“兴奋"起来,向其他神经元发送化学物质。 - 人工神经网络
1943年,McCulloch和Pitts将上述情形抽象为上图所示的简单模型,这就是一直沿用至今的M-P神经元模型。把许多这样的神经元按一定的层次结构连接起来,就得到了人工神经网络。
神经元的功能
输入向量X进来后,与权向量W的转置进行內积操作,得到一个标量,再加上偏置项b,最后经过一个非线性的激活函数f,得到一个输出标量y。
用公式表示为:
y
=
f
(
W
T
X
+
b
)
y=f(W^TX+b)
y=f(WTX+b)
ps:其中
W
T
X
W^TX
WTX(W转置后与X做矩阵乘法) 也可以写成
W
⋅
X
W·X
W⋅X(W与X做內积/点积),但不要写成
W
X
WX
WX
用图表示为:
感知机
- 单个神经元也可以称作感知机
- 感知机是二分类的线性模型,其输入是实例的特征向量,输出的是事例的类别,分别是+1和-1,属于判别模型。
- 假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练数据集正实例点和负实例点完全正确分开的分离超平面。如果是非线性可分的数据,则最后无法获得超平面。
ps:
- 感知机是一个有监督的学习算法
- 感知机是1957年,由Rosenblatt提出会,是神经网络和支持向量机的基础
- 感知机无法解决异或(非线性)问题,所有的线性模型都无法解决异或问题
- 超平面:超平面可以分割高维空间,三维空间由一个个平面组成,多维空间由一个个的超平面组成
单层神经网络
是最基本的神经元网络形式,由有限个神经元构成,所有神经元的输入向量都是同一个向量。由于每一个神经元都会产生一个标量结果,所以单层神经元的输出是一个向量,向量的维数等于神经元的数目。
ps:单层神经网络相当于一排感知机
多层神经网络(多层感知机MLP)
多层神经网络就是由单层神经网络进行叠加之后得到的,所以就形成了层的概念,常见的多层神经网络有如下结构:
- 输入层(Input layer),众多神经元(Neuron)接受大量输入消息。输入的消息称为输入向量。
- 隐藏层(Hidden layer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。隐层可以有一层或多层。隐层的节点(神经元)数目不定,但数目越多神经网络的非线性越显著,从而神经网络的稳健性(robustness)更显著。
- 输出层(Output layer),消息在神经元链接中传输、分析、权衡,形成输出结果。输出的消息称为输出向量。
ps:
- 由于当前一层的神经元与上一层的神经元每个都相互连接,因此也称为全连接神经网络,这一层叫全连接层
- 网络层数越深,逼近效果越好,训练成本越高,但是很多问题不需要特别复杂的网络,因此网络深度和宽度可以视情况而定(玄学)
- 每层传递时实际上是经过了一个矩阵乘法,因此速度很快(宽 m 层的神经元向宽 n 层的神经元传递时会经过一个mxn 的 W 权重矩阵)
激活函数
虽然多层神经网络可以处理异或(非线性)问题,但是却不是因为层数多的缘故,而是因为每个神经元后接的那个非线性的激活函数,可以想象,如果不使用激活函数,那么无论网络有多少层,每一层节点的输入都是上层输出的线性函数,最终输出都是输入的线性组合,网络的逼近能力就相当有限了。而引入非线性激活函数后网络几乎可以逼近任意函数
同时,增加激活函数还有三个好处:
- 提高模型鲁棒性(稳健性)
- 缓解梯度消失问题(缓解但不能解决)
- 加速模型收敛
常见的激活函数如下
其中最常见的是 ReLU 和 Sigmoid
但是 Sigmoid 现在已经不怎么用了,因为这个激活函数 运算 速度慢 并且 会造成 梯度消失和梯度爆炸
ps:
- Sigmoid 将负无穷到正无穷之间的数映射到 0-1 之间(越接近无穷值变化越缓慢,二值化,运算速度慢)
- ReLU 将负无穷到 0 之间的数映射为 0,0 到正无穷之间的数映射为原值(丢弃部分噪声,运算速度快)
线性函数与非线性函数的界定
线性函数不是 y = ax+b 这么简单,需要满足两点:
- f ( x 1 + x 2 ) = y 1 + y 2 f(x_1+x_2) = y_1+y_2 f(x1+x2)=y1+y2
- f ( k x ) = k y f(kx)=ky f(kx)=ky
满足这两点即为线性函数,否则为非线性函数
张量(Tensor)
- 零阶张量:常数(scaler)
- 一阶张量:向量(vector)
- 二阶张量:矩阵(matrix)
- 三阶及以上张量统称为 N阶张量