1人工神经网络
1.1神经元
神经网络由大量的神经元相互连接而成。每个神经元接受线性组合的输入后,最开始只是简单的线性加权,后来给每个神经元加上了非线性的激活函数,从而进行非线性变换后输出。每两个神经元之间的连接代表加权值,称之为权重(weight)。不同的权重和激活函数,则会导致神经网络不同的输出。
dropout 防止过拟合,提高泛化能力
数据扩充/ 数据增强:防止过拟合
激活函数
输入层
隐藏层(输入层和输出层之间可能有单个或数个隐藏层)
输出层
层和层之间是全连接的结构,同一层的神经元之间没有连接
y=wx+b
sigmoid的函数表达式
![](https://i-blog.csdnimg.cn/blog_migrate/5cd893fdd15646a7492cbbbdeacb14d5.png)
中间是
conv:卷积计算层,线性乘积求和
relu:激励层,ReLU是激活函数的一种
pool:池化层,取区域平均或最大
最右边是
FC:全连接层
这几个部分中,卷积计算层是CNN的核心
1.2CNN怎么进行识别
未知图案的局部和标准图案的局部一个一个比对时的计算过程,便是卷积操作
1.3什么是卷积
对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘在求和)的操作就是所谓的“卷积”操作,也是卷积神经网络的名字来源。
下图是卷积做池化的一个过程
![](https://i-blog.csdnimg.cn/blog_migrate/201444979679b51f23eb7ffbfc0a2e43.png)
1.4什么是滤波器
即带着一组固定权重的神经元,多个滤波器叠加便成了卷积层。
1.5动态卷积图
在CNN中,滤波器filter(带着一组固定权重的神经元)对局部输入数据进行卷积计算。每计算完一个窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据。这个过程中,有几个参数:
a. 深度depth:神经元个数,决定输出的depth厚度。同时代表滤波器个数。
b. 步长stride:决定滑动多少步可以到边缘。
c. 填充值zero-padding:在外围边缘补充若干圈,方便从初始位置以步长为单位可以刚好滑到末尾位置,通俗讲就是总长能被步长整除。
1.6CNN之激励层和池化层
1.6.1ReLU激励层
激活函数sigmoid,但实际梯度下降中,sigmoid容易饱和、造成终止梯度传递,且没有0中心化。尝试另外一个激活函数:ReLU。 ReLU的优点是收敛快,求梯度简单。
1.6.2池化pool层
即取区域平均或最大
全连接层在CNN 中起到分类器的作用,前面的卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间,全连接层是将学到的特征映射映射到样本标记空间,就是矩阵乘法,再加上激活函数的非线性映射,多层全连接层理论上可以模拟任何非线性变换。但缺点也很明显: 无法保持空间结构。
全连接的一个作用是维度变换,尤其是可以把高维变到低维,同时把有用的信息保留下来。全连接另一个作用是隐含语义的表达(embedding),把原始特征映射到各个隐语义节点 (hidden node)。对于最后一层全连接而言,就是分类的显示表达。不同 channel 同一位置上的全连接等价与 1x1 的卷积。N 个节点的全连接可近似为 N 个模板卷积后的均值池化 (GAP)。
1.7 relu:
卷积神经网络使用relu 非线性函数来保证输出的 feature map总是为正数。在反卷积的时候,也需要保证每一层的 feature map 都是正值,所以这里还是使用 relu 作为非线性激活函数。
1.8 Faster R-CNN 方法
Faster R-CNN方法,一个超级加速版 R-CNN 方法。它的速度达到了每秒七帧,即一秒钟可以处理七张图片。技巧在于,不是用图像块来判断是物体还是背景,而把整张图像一起扔进深度网络里,让深度网络自行判断哪里有物体,物体的方块在哪里,种类是什么?
经过深度网络运算的次数从原来的 2000 次降到一次,速度大大提高了。
Faster R-CNN 提出了让深度学习自己生成可能的物体块,再用同样深度网络来判断物体块是否是背景?同时进行分类,还要把边界和给估计出来。
Faster R-CNN 可以做到又快又好,在 VOC2007 上检测 AP 达到 73.2 ,速度也提高了两三百倍。
1.9 YOLO
YOLO 网络,也是进行物体检测,最快达到每秒钟 155 帧,达到了完全实时。它让一整张图像进入到神经网络,让神经网络自己判断这物体可能在哪里,可能是什么。但它缩减了可能图像块的个数,从原来 Faster R-CNN 的 2000 多个缩减缩减到了 98 个。
同时取消了 Faster R-CNN 里面的 RPN 结构,代替 Selective Search 结构。YOLO 里面没有 RPN 这一步,而是直接预测物体的种类和位置。
YOLO 的代价就是精度下降,在 155 帧的速度下精度只有 52.7,45 帧每秒时的精度是 63.4。
1.10 SSD
它是 YOLO 的超级改进版,吸取了 YOLO 的精度下降的教训,同时保留速度快的特点。它能达到58帧每秒,精度有 72.1。速度超过 Faster R-CNN 有 8 倍,但达到类似的精度。
SourceURL:file:///home/sxj/桌面/怎么提高图片卷积神经网络的精度.docx
深度学习常见名词
2 机器学习:残差学习、RNN、GAN、迁移学习、知识蒸馏
2.1 残差学习
网络的深度对模型的性能至关重要,增加网络层数网络可以进行复杂的特征模式的提取,但是神经网络层也是有瓶颈的,
2.2 GAN(生成式对抗网络)
模型通过框架中两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。
2.3 迁移学习
把已经训练好的网络的权重参数拿来,当作你的网络的初始化,然后拿你的数据,在此基础上进行训练学习。
直接把别人训练好的权重参数拿来,当作你的权重参数。后面的全连接层自己来写,完成你的任务。
知识蒸馏指的是将复杂模型(teacher)中学到的知识迁移到简单模型(student)中去
从而用更少的复杂度来获得类似的预测效果,实现模型的压缩和量化。
2.4 end-to-end(端到端)
端到端指的是输入是原始数据,输出是最后的结果
非端到端就是说:输入端不是直接的原始数据,而是在原始数据中提取的特征。
3 如何防止梯度消失?
sigmoid容易发生,更换激活函数为 ReLU即可。
权重初始化用高斯初始化
4 如何防止梯度爆炸?
1 设置梯度剪切阈值,如果超过了该阈值,直接将梯度置为该值。
2 使用ReLU,maxout等替代sigmoid
区别:
1. sigmoid函数值在[0,1],ReLU函数值在[0,+无穷],所以sigmoid函数可以描述概率,ReLU适合用来描述实数;
2. sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。
3. Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生
sigmoid导数最大为1/4
a的数值变化范围很小,若x数值仅在[-4,4]窄范围内会出现梯度消失,若大于4则梯度爆炸。
对于sigmoid更容易出现梯度消失。
5 残差网络
我的理解是,ResNet就是单纯的让深层网络初始就很容易做到identity mapping(恒等映射);原始网络是因为深层梯度消失,导致学习能力大幅降低,所以identity mapping都很难做到,反而降低模型表现。 所以skip connection(跳跃连接)的本质就是一个兜底,在此基础上深层能学多少就是赚到,最差就是不进行学习,起码做到不退化。
原文:
CNN笔记:通俗理解卷积神经网络