人工神经网络(ANN)
人工神经网络(ANN)
概念
人工神经网络(ANN,Artificial Neural Networks)是在人类对大脑神经网络认识理解的基础上,人工构造的能够实现某种功能的神经网络。
它是理论化的人脑神经网络的数学模型,是基于模仿大脑神经网络结构和功能而建立起来的一种信息处理系统。
神经网络结构和工作机理基本上是以人脑的组织结构和活动规律为背景的,它反映了脑的某些基本特征,但并不是要对人脑部分的真正实现,可以说它是某种抽象、简化或模仿。
如果将大量功能简单的形式神经元通过一定的拓扑结构组织起来,构成群体并行分布式处理的计算结构,那么这种结构就是人工神经网络,在不引起混淆的情况下,统称为神经网络。
ANN有三大要素如下:
- 神经元的激活规则:主要是指神经元输入到输出之间的映射关系,一般为非线性函数
- 网络的拓扑结构:不同神经元之间的连接关系
- 学习算法:通过训练数据来学习神经网络的参数
激活函数
三种形式:阈值型,S型,伪线性型
典型的S型函数可取为连续光滑可导的Sigmoid函数:$f(x)=\frac{1}{1+e^{-x}}$
它有一个良好的性质:$f’\left(x\right)=f\left(x\right)\left(1-f\left(x\right)\right)$
M-P神经元模型
我们将其抽象为多输入单输出得非线性阈值器件,传递函数如下:
$$
y=f\left(\sum_{i=1}^nw_ix_i-\theta\right)
$$
第$i$个突触连接强度为$\omega_i$,$\theta$为神经元阈值,$f$为激活函数
多层感知机(Multi-layer Perceptron, MLP)(前馈神经网络,Feedforward Neural Network, FNN)
设置学习率$\eta$,将阈值看作固定输入-1的dummy node;
将对权重和阈值的学习统一看成权重的调整,迭代过程为:$\omega_i \gets \omega_i+ \eta(y-\hat y)x_i$;
学习率$\eta \in (0,1)$控制着算法每一轮迭代中的更新步长,若太大则容易振荡,太小则收敛速度又会过慢.
但是要解决复杂问题,单层神经网络是不够用的,因此引入隐层和多层前反馈神经网络:其中输入层神经元接收外界输入,隐层与输出层神经元对信号进行
加工,最终结果由输出层神经元输出;
各神经元分别属于不同的层,层内无连接
相邻两层之间的神经元全部两两连接
整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示
根据通用近似定理,对于具有线性输出层和至少一个使用“挤压”性质的激活函数的隐藏层组成的前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何从一个定义在实数空间中的有界闭集函数。因此神经网络经常被当作一个万能函数使用,进行复杂的特征转换,或者逼近一个复杂的条件分布;
前馈神经网络如何学习分类器?
- 若$g$为Logistic回归,那么Logistic回归分类器可以看成神经网络的最后一层;
- 如果使用softmax回归分类器,相当于网络最后一层设置 C 个神经元,其输出经过softmax函数进行归一化后可以作为每个类的后验概率,$$\hat{\mathbf{y}}=\mathrm{softmax}(\mathbf{z}^{(L)})$$
- 采用交叉熵损失函数,对于样本(x, y),其损失函数为$\mathcal{L}(\mathbf{y},\hat{\mathbf{y}})=-\mathbf{y}^\mathrm{T}\log\hat{\mathbf{y}}$
神经网络能够通过训练,改变其内部表示,使输入-输出变换朝好的方向发展。训练实质是用同一个训练集的样本反复作用于网络,网络按照一定的训练规则(学习规则或学习算法),自动调节神经元之间的连接强度或拓扑结构,当网络的实际输出满足期望的要求,或者趋于稳定,这认为训练圆满结束。神经网络的学习成果蕴含在权值和阈值当中;
BP(误差反向传播)算法
对于一个BP网络(BP算法训练的多层前反馈神经网络),参数属性如下:
连续不断地在相对于误差函数斜率下降的方向上计算网络权值和偏差的变化而逐渐逼近目标的。每一次权值和偏差的变化都与网络误差的影响成正比,并以反向传播的方式传递到每一层的。
对于训练样例$(\mathbf x_k,\mathbf y_k)$,ANN的预测结果为$\hat{\mathbf y}_j^k=(\hat{y}_1^k,\hat{y}_2^k,..,\hat{y}_l^k)$
BP算法的目标是最小化均方误差:
$$
E_k=\frac12\sum_{j=1}^l(\hat{y}j^k-y_j^k)^2
$$
BP算法的策略是基于梯度下降的,也即,以目标的负梯度方向对参数进行调整:
$$
\Delta w{hj}=-\eta\frac{\partial E_k}{\partial w_{hj}}
$$
数学上:$g_i=-\frac{\partial E_k}{\partial\hat{y}j^k}\cdot\frac{\partial\hat{y}j^k}{\partial\beta_j}=\hat{y}{j}^{k}(1-\hat{y}{j}^{k})(y_{j}^{k}-\hat{y}_{j}^{k}) $
得到BP算法的迭代方程:
$$
\begin{aligned}
\Delta w_{hj}=&\quad\eta g_jb_h\
\Delta\theta_{j} =&-\eta g_j\
\Delta v_{ih} =&\quad\eta e_hx_i\
\Delta\gamma_{h} =&-\eta e_h
\end{aligned}
$$
如果取损失函数为结构化风险函数:
$$
\begin{aligned}\mathcal{R}(W,\mathbf{b})=\frac{1}{N}\sum_{n=1}^{N}\mathcal{L}(\mathbf{y}^{(n)},\hat{\mathbf{y}}^{(n)})+\frac{1}{2}\lambda|W|_F^2\end{aligned}
$$
那么梯度下降策略可表示为:
$$
W^{(l)}\leftarrow W^{(l)}-\alpha\frac{\partial\mathcal{R}(W,\mathbf{b})}{\partial W^{(l)}}\
\mathbf{b}^{(l)}\leftarrow\mathbf{b}^{(l)}-\alpha\frac{\partial\mathcal{R}(W,\mathbf{b})}{\partial\mathbf{b}^{(l)}}
$$
前馈神经网络信息向前(单向)传递,层内节点之间并不连接,适合于处理静态数据分析,如回归、分类等任务;
对于全连接前馈神经网络来说,有不少缺点:
- 容易过拟合;
- 训练比较慢,可解释性差;
- 权重矩阵参数非常多,不满足局部不变性特征;
卷积神经网络(Convolutional Neural Network, CNN)
卷积神经网络是受生物学上感受野(Receptive Field)的机制而提出的,在视觉神经系统中,一个神经元的感受野是指视网膜上的特定区域,只有这个区域内的刺激才能够激活该神经元;
二维卷积:对于输入矩阵$A_{m\times m}$,核矩阵$B_{n\times n}$,步幅为$s$,卷积结果$R=A*B$是一个阶为$(m-n)/s+1$的方阵
二维卷积有两种不同的方式:
- 有效卷积:没有padding
- 相同卷积:输入和输出相同
通常没有零填充的最优数量处于有效卷积和相同卷积中间的某个位置;
以下是一个图像中的二维卷积的例子:
卷积神经网络是针对图像处理设计的特殊的网络结构,相对于前馈神经网络有以下特点:
- 参数过多,计算效率低;
- 忽略了图像的二维结构;
- 依赖于空间上下文;
- 不够鲁棒;
因为卷积神经网络具有平移不变性,因此在图像处理上有独特的优势;
卷积神经网络包括卷积层,池化层,和全连接层;
卷积层:平移核计算内积;
池化层:池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出
最大池化(Max Pooling)函数给出相邻矩形区域内的最大值
其他常用的池化函数包括相邻矩形区域内的平均值、L2范数以及基于据中心像素距离的加权平均函数
递归神经网络(Recurrent Neural Network,RNN)
反馈神经网络全部或者部分神经元可以接受来自其它神经元或自身信号的神经网络结构,其拓扑结构可以是网状的,也可以是具有一定层级的,反馈神经网络通常被视为一个动态系统,主要关心其随时间变化的动态过程
RNN至少包含一个反馈链接的神经网络结构,特别适合处理时序数据,其基本结构如下所示:
RNN主要模拟的是人脑的记忆,来进行一个反馈的过程;
按时间顺序展开:
按时间顺序全节点展开:
按时间顺序展开(带延迟)
计算机视觉
计算机视觉主要研究的是给机器以“看”的能力,眼睛是人类最重要的传感器,超过一半的大脑都会参与视觉功能
从数字化信息中提取信息、识别理解
计算机成像学:图像处理等底层视觉,如图像去噪、图像超分辨、图像增强、风格变换
图像理解:语义理解等高层视觉,如图像分类、目标检测、人脸识别、语义分割
三维视觉
视频理解
计算机视觉三大会议:CVPR、ICCV、ECCV
图像表征说的是把图像用数学和信息的方式进行表达,有助于我们进行统一处理,于机器学习而言,我们需要构建一个映射函数(模型),以实现基于图像的各种计算机视觉应用;
图像分析:
图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类在很多领域有广泛应用,包括安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等。
图像分类的基本流程为:图像数据-特征提取-分类器;
什么是特征提取?
从原始的输入的数据中提取有效的、非冗余的、具有代表性的特征。它通常是原始特征的重新组合,以减少数据的维度,提取或整理出有效的特征以提升后续模型的表示能力
什么是好的特征?
视觉数据复杂多变,同一类物体可能存在不同的形态
同一个物体在不同的角度和环境下数据差别也可能很大
可重复性,可区分性,准确性,有效性,鲁棒性(稳定性、不变性)
图像学习有多种办法,比如Bag-of-Words,End-to-end learning
目标检测主要任务是在给定的图片中精确找到物体所在位置,并标注出物体的类别。其模型可以识别一张图片的多个物体,并可以定位出不同物体(给出边界框)
物体检测有多种办法:Sliding window
目前主流的目标检测算法主要是基于深度学习模型,可以分成两大类:
- Two-stage检测算法,其将检测问题划分为两个阶段,首先产生候选区域(region proposals),然后对候选区域分类(一般还需要对位置精修),这类算法的典型代表是基于region proposal的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等
- One-stage检测算法,其不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,比较典型的算法如YOLO、SSD等
在目标检测中,进行分类和坐标回归之前,需要进行候选区域提取,selective search方法即是一种常用的提取候选区域的方法;
R-CNN是基于region proposal方法的目标检测算法系列开山之作,其先进行区域搜索,然后再对候选区域进行分类
候选区域(Region Proposal):基于Selective Search,利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口(几千甚至几百)的情况下保持较高的召回率(Recall)
总体来看,R-CNN是非常直观的,就是把检测问题转化为了分类问题,并且采用了CNN模型进行分类,但是效果却很好
R-CNN缺点:
- 训练分为多个阶段,微调网络+训练SVM+训练边框回归器
- 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件
- 速度慢: 使用GPU, VGG16模型处理一张图像需要47s
- 测试速度慢:每个候选区域需要运行整个前向CNN计算
- SVM和bounding box回归是事后操作:在SVM和回归过程中CNN特征没有被学习更新
- 输入图片的大小必须要固定(224x224、227x227等)
R-CNN、Fast R-CNN、Faster R-CNN都是two-stage方法,这种方法都有一个共同的特征,即第一个阶段都要产生候选区域(region proposal),之后再对候选区域进行分类和坐标回归等操作。虽然不同算法产生后选取区域的方法不尽相同,但是其目的都是一致的。
但是two-stage方法有其固有缺点,即是第一阶段都要进行候选区域提取会消耗很多时间,使目标检测的耗时增加,效率降低。
因此在此基础上,研究人员对目标检测方法进行了改进,提出了one-stage方法,可以直接对物体的坐标和类别进行回归而不需要进行显式的提取候选区域的过程。
YOLO(You Only Look Once)是2016年提出一个全新的方法,一次性把一整张图片用到一个神经网络中去。网络把图片分成不同的区域,然后给出每个区域的边框预测和概率,并依据概率大小对所有边框分配权重。最后,设置阈值,只输出得分(概率值)超过阈值的检测结果
YOLO的目标检测的流程:
- 给个一个输入图像,resize图像到448x448,将图像划分成7x7的网格
- 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
- 根据上一步可以预测出772个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可
对于每一个cell
- 预测B个bounding boxes,每个bounding box有一个confidence score (objectness)
- 只预测一个物体
- 假设有C个类别,预测分别属于每个类别的概率
- 对于PASCAL VOC 2007,有7x7 grid cells, 2 bounding boxes, 以及20个类别
YOLO网络结构如右图。主要采用了AlexNet。卷积层主要用来提取特征,全连接层主要用来预测类别概率和坐标卷积层之后接了一个4096维的全连接层,然后后边又全连接到一个7730维的张量上。7*7就是划分的网格数,在每个网格上预测目标两个可能的位置以及这个位置的目标置信度和类别,也就是每个网格预测两个目标,每个目标的信息有4维坐标信息(中心点坐标+长宽),1个是目标的置信度,还有类别数20(VOC上20个类别),总共就是(4+1)*2+20 = 30维的向量
总的来看,YOLO具有较强的泛化能力