人工神经网络ANN
本文用于解释最基础的神经网络-感知机的原理,它是后续 CNN、RNN 的基础,CNN 只是在感知机的概念加入“局部连接”的思想,每个局部执行的还是加权和;RNN 只是给每个隐藏层加一个隐状态
本文按照:感知机->多层感知机->全连接层->人工神经网络的步骤去理解 Linear 层
什么是感知机 (Perceptron)?
- 一种用于单类别分类监督学习的算法,输入一组特征向量,然后通过一组等长权重计算线性加权和,最后通过判别函数输出结果。如果使用以下判别函数,则是一个二元分类器
- 感知机模拟的是人的神经细胞,单个神经细胞有 2 种状态,激活与不激活,当信号总量超过某个阈值时,该神经细胞处于激活状态,否则不激活,激活时向其他连接的神经元传递信息
一个感知机包含等于输入数据长度的权重 w 和 1 个偏置 b(因为输出是 1),所谓感知,就是利用权重对所有输入进行加权和操作。接下来同时使用多个感知机去感知输入,就构成“单层感知机 (SLP)”
什么是单层感知机 (SLP)?
- 所谓单层感知机,就是由感知机组成的一层网络,没有多层感知机的 hidden layer,每个感知机连接都连接所有输入,注意:感知机本身可以理解为只有 1 个节点的单层感知机
除了在单层使用多个感知机外,还可以使用多层感知机,每层感知机的输入是前一层前一层感知机的输出,由此出现“多层感知机 (MLP)”
什么是多层感知机 (MLP)?
将多个单层感知机堆叠起来,其中每个感知机机与所有输入或者所有感知机输出连接,输入层与输出层之间的所有层是隐藏层
MLP 至少由 3 层感知机组成,即输入层、隐藏层、输出层
感知机、单层感知机、多层感知机的区别?
- 感知机 (Perceptron):左图是一个 2 输入的感知机模型,经过参数加权累加和后,其值在一个平面上
- 单层感知机 (SLP):中图是一个 2 输入、包含 3 个输出节点的单层感知机,经过参数加权累加和后输出,输出是超平面
- 多层感知机 (MLP):多个单层感知机组成,至少包括 1 层隐藏层,输出结果是多个多个超平面的组合
- 感知机无论叠加多少层,只要没使用非线性激活函数,其结果都是线性可分的,无法处理非线性问题
但是使用任意个、任意层感知机都是线性函数 的线性叠加,其处理的问题都是线性可分的,但是对于线性不可分问题无法解决
什么是线性可分?
- 线性可分:计算所有样本的凸包,如果凸包内值包含 1 个类别,就是线性可分,本质就是数据可以被有限个超平面区分,在 2D 数据上就是被有限个直线做划分
- 线性不可分:计算所有样本的凸包,如果凸包内值包含 2 个类别以上,则是非线性可分
日常构建网络时,都是使用 torch.Linear
去构建全连接层,它和感知机是什么关系呢,实际上它是确定输入维度、输出维度的单层感知机
什么是全连接层 (Fully Connected Layer)?
- 其实就是单层的感知机,任意一个感知机都与所有输入连接形成,定义时需要指定输入数据维度和感知机数量,其中感知机的数量等于输出的维度
- 参数量:每个感知机都与输入一一相连,加上偏置,共用参数
- 计算量:全连接层的每个输出需要经过 的乘法和加法运算,没考虑 bias 需要减1,
- Pytorch 可以使用接口快速定义该层
1
2
3x=torch.randn([1,2])
fc = torch.nn.Linear(in_features = 2, out_features = 3)
y=fc(x) // y=[1,3]
单层感知机加上激活函数,就可以构建人工神经网络 (ANN)
什么是人工神经网络 (ANN) ?
- ANN 其实就是在多层感知器的基础上引入"非线性"激活函数,使得 ANN 可以模拟函数逼近器的作用,用于学习数据特征
- 缺点:1)随着图像大小的增加,可训练参数增多;2)会丢失图像的空间特征;3)处理序列数据无法记忆历史信息
- Pytorch 可以堆叠多层的"FC+relu"层实现
1
2
3
4x=torch.randn([1,2])
fc = torch.nn.Linear(in_features = 2, out_features = 3)
y=fc(x) // y=[1,3]
y=torch.nn.functional.relu(y)
参考: