深度学习之基础知识
1 感知机与神经网络
1.1 感知机(Perceptron)
感知机接受多个信号,输出一个信号。比如x1、x2是输入信号,y是输出信号,w1、w2是权重。图中的圆圈被称为"神经元"或者"节点"。输入信号被送往神经元时,会被分别乘以固定的权重。神经元会计算传送过来的信号总和。当总和超过一定的界限时,就会输出。这个界限被称为"阈值"。

感知机会计算输入信号与权重的乘积之和,然后加上偏置,如果这个值大于0则输出1,否则输出0。把阈值b写到权重同一边,深度学习中一般称为偏置,即上图用公式表达如下:
偏置和权重的作用是不一样的,权重是控制输入信号的重要性的参数,偏置是调整整个神经元被激活的容易程度的参数。感知机的局限性就在于它只能表示由一条直线分割的空间,无法实现异或门(需要使用非线性的方法)。感知机主要用于处理二分类问题,如垃圾邮件检测、图像识别等
1.2 多层感知机(Multi Layer Perceptron)
单层感知机只能表示线性空间,而多层可以表示非线性空间,以此可实现异或门。异或门是一种多层结构的神经网络。最左边一层称为第0层,中间层为第1层,最右边称为第2层。**MLP 的每个神经元都使用一个非线性激活函数,如 Sigmoid 或 ReLU。**这使得 MLP 能够学习并表示非线性函数,从而处理更复杂的任务。

多层感知机 (MLP) 就是一种前馈神经网络(FNN),它包含一个输入层、一个或多个隐藏层和一个输出层。MLP 可以处理更复杂的问题,如图像识别、语音识别和自然语言处理等。
2 激活函数
激活函数(Activation Function)是一种添加到神经网络中的函数,类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。**神经网络的激活函数必须使用非线性函数。**线性函数的问题在于,不管如何加深层数,总是存在与之等效的"无隐藏层的神经网络"。

2.1 阶跃函数
阶跃函数是一种特殊的连续时间函数,是一个从0跳变到1的过程,属于奇异函数。
2.2 sigmoid函数(Logistics函数)
Sigmoid 函数的输出范围是 0 到 1,因此它对每个神经元的输出进行了归一化;用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适。Sigmoid 函数执行指数运算,计算较慢,倾向于梯度消失,输出不是以 0 为中心的,这会降低权重更新的效率。
2.3 tanh双曲正切函数
tanh 的输出间隔为 1,并且整个函数以 0 为中心,比 sigmoid 函数更好;在 tanh 中负输入将被强映射为负,而零输入被映射为接近零。注意:在一般的二元分类问题中,tanh 函数用于隐藏层,而 sigmoid 函数用于输出层。
2.4 ReLU
ReLU 函数是深度学习中较为流行的一种激活函数,它具有如下优点:当输入为正时,不存在梯度饱和问题,计算速度快得多。ReLU 函数中只存在线性关系,因此它的计算速度比 sigmoid 和 tanh 更快。缺点是输入负数,则梯度将完全为零,sigmoid 函数和 tanh 函数也具有相同的问题。
2.5 Softplus
Softplus 的导数为(也称为 logistic / sigmoid 函数):
2.6 Softmax
Softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,Softmax 可以将其压缩为长度为 K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量。
3 损失函数与梯度下降
3.1 均方误差MSE
计算 output 和 target 之差的均方差。
3.2 交叉熵
在多分类任务中,经常采用 softmax 激活函数+交叉熵损失函数,因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,并不是概率分布的形式。所以需要 softmax激活函数将一个向量进行"归一化"成概率分布的形式,再采用交叉熵损失函数计算 loss。
3.3 梯度下降
深度学习/机器学习中通常通过损失函数来评价模型的效果(量化模型预测值和真实值之间的差异),而损失函数通常可以采用梯度下降的方式进行优化迭代。 那么,问题又来了,为什么损失函数通常用梯度下降的方式进行优化迭代? 因为梯度方向代表了损失函数变化最快的方向(类似于函数导数变化率最大的方向)。如果我们需要增加loss损失函数,则只需要使损失函数朝着梯度上升的方向优化;但是深度学习中我们希望loss不断变小下降,所以我们需要的是梯度下降,我们需要将损失函数向梯度下降的方向来优化。
3.4 反向传播
在深度网络中,包含的参数了过大(百万级),如果对这些参数强行用梯度法优化,效率会很低。反向传播是为了提高梯度下降效率的一种方法。反向传播算法是用来更新权重和偏置的,它通过计算损失函数对权重和偏置的梯度来更新权重和偏置。
4 卷积神经网络(CNN)
神经网络可以模拟任何函数,不管它是多么的复杂。卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),其本质是一个多层感知机(MLP)。经典的CNN网络有LeNet-5、AlexNet、VGG、GoogleNet、ResNet、DenseNet等。
CNN的结构主要由四种类型的层组成:卷积层、池化层,激活层和全连接层。

4.1 卷积层
卷积层涉及卷积核、填充、步长、特征图谱等。操作过程:卷积运算又被称为互相关运算,将图像矩阵中,从左到右,从上到下,取与卷积核同等大小的一部分,每一部分中的值与卷积核中的值对应相乘后求和,最后的结果组成一个矩阵。作用:提取输入的不同特征,通过滑动窗口得到特征图像。

卷积层引入填充Padding与步幅Stride:
- 填充:在输入特征图的每一边添加一定数目的行列。
- 步幅:卷积核经过输入特征图的采样间隔。
- 设置填充的目的:希望每个输入像素都能作为卷积窗口的中心。
- 设置步幅的目的:希望减小输入参数的数目,减少计算量。
4.2 池化层
池化层降低数据规模,防止过拟合。池化层的操作是将一个窗口内的像素按照平均值加权或选择最大值来作为输出,一个窗口内仅有一个输出数据。因此,当经过池化层后,图像的尺寸会变小,计算量也会变小,相比于在池化前使用卷积,池化后同样的卷积大小具有更大的感受野。池化的目的:保持特征不变性、特征维度下降。特征维度下降:一个图像包含的信息很大,特征很多,有些信息在执行图像任务时很少使用,或是有重复。池化可以去掉这些冗余的信息,提取最重要的特征。 但是特征越多,模型就会拟合这些特征,导致模型泛化能力下降,因此进行多层池化后,以前的特征维数减少,训练参数减少,泛化能力提高,进而防止过拟合。

**对于一张图,在识别或者处理的时候,如果需要的是背景,或者说是整幅图的一个相对平均的情况那么用平均池化比较好。如果需要将图像中的一些物体特征提取出来,那么用最大池化。**池化的作用:特征降维、压缩数据和参数的数量,减小过拟合。池化的结果:特征减少、参数减少。
4.3 激活层
激活层的提出主要是为了解决神经网络的线性不可分问题。如果没有激活层,无论神经网络有多少层,输出都是输入的线性组合,网络的逼近能力十分有限,因此需要在每一个隐藏层后加一个激活层,引入非线性因素。常见激活函数如上介绍。
4.4 全连接层
全连接层是一个列向量,用于深度神经网络的后面几层,是将每一个节点都与上一层的所有节点相连,把前面提取到的特征综合起来。全连接层就是相当于一个超平面,将各个类别在特征空间将它们分开。全连接层的作用:对数据进行分类。
4.5 其他说明
与常规神经网络不同,卷积神经网络的各层中的神经元是3维排列的:宽度、高度和深度。对于输入层来说,宽度和高度指的是输入图像的宽度和高度,深度代表输入图像的通道数,例如,对于RGB图像有R、G、B三个通道,深度为3;而对于灰度图像只有一个通道,深度为1。对于中间层来说,宽度和高度指的是特征图(feature map)的宽和高,通常由卷积运算和池化操作的相关参数决定;深度指的是特征图的通道数,通常由卷积核的个数决定。全连接神经网络中的主要运算为矩阵相乘,而卷积神经网络中主要为卷积计算。
在卷积神经网络中,对于输入的图像,需要多个不同的卷积核对其进行卷积,来提取这张图像不同的特征(多核卷积);同时也需要多个卷积层进行卷积,来提取深层次的特征(深度卷积)。
卷积运算用于降维处理和提取特征,输入特征图到输出特征图尺寸的计算公式(其中n_in为输入size,p为padding填充大小,f为卷积核size,s为卷积步长,n_out为输出特征图尺寸)
分辨率指的是输入模型的图像尺寸,即长宽大小。通常情况会根据模型下采样次数n和最后一次下采样后feature map的分辨率k×k来决定输入分辨率的大小,即:
从输入r×r到最后一个卷积特征feature map的k×k,整个过程是一个信息逐渐抽象化的过程,即网络学习到的信息逐渐由低级的几何信息转变为高级的语义信息,这个feature map的大小k×k可以是3×3,5×5,7×7,9×9等等,k太大会增加后续的计算量且信息抽象层次不够高,影响网络性能,k太小会造成非常严重的信息丢失,如原始分辨率映射到最后一层的feature map有效区域可能不到一个像素点,使得训练无法收敛。
在ImageNet分类任务中,通常设置5次下采样,并且考虑到其原始图像大多数在300分辨率左右,所以把最后一个卷积特征大小设定为7×7,将输入尺寸固定为224×224×3。在目标检测任务中,很多采用的是416×416×3的输入尺寸,当然由于很多目标检测模型是全卷积的结构,通常可以使用多尺寸训练的方式,即每次输入只需要保证是32×n的图像尺寸大小就行,不固定具体数值。但这种多尺度训练的方式在图像分类当中是不通用的,因为分类模型最后一层是全连接结构,即矩阵乘法,需要固定输入数据的维度。
4.6 各种网络总结
- 感知机 (Perceptron):感知机是最早的神经网络模型之一,它是许多更复杂的神经网络模型的基础。
- 前馈神经网络 (Feedforward Neural Networks):前馈神经网络是一种基本的神经网络结构,它的信息流只能向前,不能形成闭环。MLP 就是一种前馈神经网络。
- 多层感知机 (Multi-Layer Perceptron, MLP):MLP 是一种前馈神经网络,它包含至少三层(输入层、隐藏层和输出层)的节点。MLP 是许多深度学习模型的基础。
- 卷积神经网络 (Convolutional Neural Networks, CNN):CNN 是一种专门处理具有类似网格结构的数据的神经网络,如图像。著名的深度学习模型如 LeNet、AlexNet、VGG、ResNet 都是基于 CNN 的。
- 循环神经网络 (Recurrent Neural Networks, RNN):RNN 是一种处理序列数据的神经网络,它具有记忆性。著名的深度学习模型如 LSTM 和 GRU 都是基于 RNN 的。
- 长短期记忆网络 (Long Short-Term Memory, LSTM):LSTM 是一种特殊的 RNN,它解决了传统 RNN 在处理长序列时的梯度消失问题。
- 自编码器 (Autoencoders):自编码器是一种无监督的神经网络,它被用来学习数据的有效表示。变分自编码器 (Variational Autoencoders) 就是基于自编码器的。
- 生成对抗网络 (Generative Adversarial Networks, GAN):GAN 是一种生成模型,它由两个神经网络(生成器和判别器)组成,这两个网络相互竞争以提高其性能。
- 强化学习网络 (Reinforcement Learning Networks):强化学习网络是一种神经网络,它通过与环境交互来学习策略。著名的深度学习模型如 DeepMind 的 AlphaGo 就是基于强化学习的。
- 图神经网络(Graph Neural Network,GNN):图神经网络可以直接处理图结构数据,这使得它在社交网络分析、生物信息学、推荐系统等领域有着广泛的应用。
- 注意力机制 (Attention Mechanism):注意力机制是一种能够改善神经网络对输入信息重要性判断的技术,它在各种神经网络结构中都有应用,包括 RNN、CNN 和 Transformer。
- Transformer 网络:Transformer 是一种处理序列数据的神经网络,它通过自注意力机制来捕捉序列中的长距离依赖关系。BERT 就是基于 Transformer 的。
- BERT 网络:BERT 是一种基于 Transformer 的自然语言处理模型,它通过双向的 Transformer 编码器来理解上下文中的词语。
- 序列到序列模型 (Sequence-to-Sequence model, Seq2Seq):Seq2Seq 是一种处理如机器翻译、语音识别等序列生成任务的模型。著名的深度学习模型如 Google 的 Neural Machine Translation (NMT) 就是基于 Seq2Seq 的。