课程:吴恩达深度学习
计算机视觉(p108-p150)
卷积网络
- 补充:超参数
- 机器学习模型中一般有两类参数:一类需要从数据中学习和估计得到,称为模型参数(Parameter)—即模型本身的参数。比如,线性回归直线的加权系数(斜率)及其偏差项(截距)都是模型参数。还有一类则是机器学习算法中的调优参数(tuning parameters),需要人为设定,称为超参数(Hyperparameter)。比如,正则化系数λ,决策树模型中树的深度。
- 参数和超参数的区别:模型参数是模型内部的配置变量,需要用数据估计模型参数的值;模型超参数是模型外部的配置,需要手动设置超参数的值。机器学习中一直说的“调参”,实际上不是调“参数”,而是调“超参数”。
- 哪些属于超参数?
梯度下降法中的学习速率α,迭代次数epoch,批量大小batch-size,k近邻法中的k(最相近的点的个数),决策树模型中树的深度,等等。 - 超参数的优化:
有四种主要的策略可用于搜索最佳配置:
- 照看(babysitting,又叫试错)
- 网格搜索
- 随机搜索
- 贝叶斯优化
- 边缘检测示例:
- 注意所采用filter的样式,如垂直边缘检测一般采用的数字组合
[
1
0
?
1
1
0
?
1
1
0
?
1
]
\begin{bmatrix} 1& 0& -1 \\1& 0& -1 \\1& 0& -1 \end{bmatrix}
???111?000??1?1?1????; Sobel过滤器
[
1
0
?
1
2
0
?
2
1
0
?
1
]
\begin{bmatrix} 1& 0& -1 \\2& 0& -2 \\1& 0& -1 \end{bmatrix}
???121?000??1?2?1????,它的优点在于增加了中间一行元素的权重,这使得结果的鲁棒性会更高一些; Scharr过滤器
[
3
0
?
3
10
0
?
10
3
0
?
3
]
\begin{bmatrix} 3& 0& -3 \\10& 0& -10 \\3& 0& -3 \end{bmatrix}
???3103?000??3?10?3????。
- 一种思想:9个数字当成参数,使用反向传播去让神经网络学习这9个数字。
- 卷积操作——padding:
- 如果我们有一个
n
×
n
n \times n
n×n的图像,用
f
×
f
f \times f
f×f 的过滤器做卷积,那么输出的维度就是
(
n
?
f
+
1
)
×
(
n
?
f
+
1
)
( n ? f + 1 ) \times ( n ? f + 1 )
(n?f+1)×(n?f+1)。
- padding解决每一步输出缩小和图像边缘的大部分信息丢失问题
- padding:卷积操作之前对图像进行像素值为p的填充,则输出为
(
n
+
2
p
?
f
+
1
)
×
(
n
+
2
p
?
f
+
1
)
( n + 2 p ? f + 1 ) \times ( n + 2 p ? f + 1 )
(n+2p?f+1)×(n+2p?f+1)。
- 选择填充多少像素,通常有两个选择,分别叫做Valid卷积和Same卷积:Valid卷积意味着不填充,Same卷积意味着填充后,输出大小和输入大小相同。
- 卷积步长 (Strided Convolutions):
- 再加入卷积步长s后,输出维度计算式为:
?
n
+
2
p
?
f
s
+
1
?
×
?
n
+
2
p
?
f
s
+
1
?
\left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times \left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor
?sn+2p?f?+1?×?sn+2p?f?+1?
- 注意:关于互相关和卷积的技术上理解,取决于数学教材or信号处理教材数学教科书,数学教科书上卷积的定义是过滤器镜像翻转(沿矩阵右上斜线),再元素乘积求和;按照机器学习的惯例,通常不进行翻转操作。从技术上说,这个操作可能叫做互相关更合适,但在深度学习文献中,按照惯例,我们将这(不进行翻转操作)也叫做卷积操作。
- 三维卷积 (Convolutions Over Volumes):
- 原图像:
n
×
n
×
c
h
a
n
n
e
l
s
n \times n \times channels
n×n×channels
- filter:
f
×
f
×
c
h
a
n
n
e
l
s
f \times f \times channels
f×f×channels(这两个通道数完全一样)
- output:
?
n
+
2
p
?
f
s
+
1
?
×
?
n
+
2
p
?
f
s
+
1
?
×
1
\left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times \left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times 1
?sn+2p?f?+1?×?sn+2p?f?+1?×1
- 单层卷积网络 (One Layer of a Convolutional Network):
- 原图像-> 多个不同的filter进行卷积得到多个输出-> 不同输出层增加各自的bias,再应用非线性激活函数得到输出结果-> (对应同一阶段的)输出层堆叠起来-> 最终得到
?
n
+
2
p
?
f
s
+
1
?
×
?
n
+
2
p
?
f
s
+
1
?
×
n
f
i
l
t
e
r
\left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times \left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times n_{filter}
?sn+2p?f?+1?×?sn+2p?f?+1?×nfilter?的矩阵
- 过滤器用
W
[
?
]
{W}^{[?]}
W[?]表示,原始输入为
a
[
0
]
{a}^{[0]}
a[0]。(表示法完全类似于之前logistic逻辑回归内容所讲)
- 应用偏差和非线性函数之后,这一层的输出等于它的激活值
a
[
l
]
{a}^{[l]}
a[l](即
n
H
[
l
]
×
n
W
[
l
]
×
n
c
[
l
]
{n}_{H}^{[l]} \times {n}_{W}^{[l]} \times {n}_{c}^{[l]}
nH[l]?×nW[l]?×nc[l]?)当你执行批量梯度下降或小批量梯度下降时,如果有 m 个例子,就是有 m 个激活值的集合,那么输出
A
[
l
]
=
m
×
n
H
[
l
]
×
n
W
[
l
]
×
n
c
[
l
]
{A}^{[l]} = m \times {n}_{H}^{[l]} \times {n}_{W}^{[l]} \times {n}_{c}^{[l]}
A[l]=m×nH[l]?×nW[l]?×nc[l]?。
- 参数W为所有过滤器的集合再乘以过滤器的总数量:
f
[
l
]
×
f
[
l
]
×
n
c
[
l
?
1
]
×
n
c
[
l
]
{f}^{[l]} \times {f}^{[l]} \times {n}_{c}^{[l - 1]} \times {n}_{c}^{[l]}
f[l]×f[l]×nc[l?1]?×nc[l]?。
- 池化层 (Pooling Layers):除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性
- max pooling
- average pooling
- 使用卷积的优点:和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接
- 参数共享:观察发现,特征检测如垂直边缘检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域
- 稀疏连接:输出的某个像素值只取决于与filter相同大小的输入区域的像素值情况,其它像素值都不会对输出产生任影响。
经典网络
- 几个经典的神经网络结构:
??详见:https://blog.csdn.net/weixin_36815313/article/details/105778993
- LeNet-5:valid卷积-平均池化-valid卷积-平均池化-全连接层-全连接层-softmax输出
(此中使用的是sigmod函数和tanh函数,这种网络结构的特别之处在于各网络层之间有关联) - AlexNet:valid卷积-最大池化-same卷积-最大池化-再连续三次same卷积-最大池化-连续两个全连接层-softmax输出
(AlexNet比LeNet表现更为出色的另一个原因是它使用了ReLu激活函数) - VGGNet:
(VGG-16的这个数字16,就是指在这个网络中包含16个卷积层和全连接层。确实是个很大的网络,总共包含约1.38亿个参数,即便以现在的标准来看都算是非常大的网络。但VGG-16的结构并不复杂,而且这种网络结构很规整,都是几个卷积层后面跟着可以压缩图像大小的池化层,池化层缩小图像的高度和宽度。同时,卷积层的过滤器数量变化存在一定的规律,由64翻倍变成128,再到256和512。作者可能认为512已经足够大了,所以后面的层就不再翻倍了。无论如何,每一步都进行翻倍,或者说在每一组卷积层进行过滤器翻倍操作,正是设计此种网络结构的另一个简单原则。这种相对一致的网络结构对研究者很有吸引力,而它的主要缺点是需要训练的特征数量非常巨大。)
- 残差网络 (Residual Networks (ResNets)):
- 非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。跳跃连接(Skip connection)可以从某一层网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层。可以利用跳跃连接构建能够训练深度网络的ResNets。
如果我们使用标准优化算法训练一个普通网络,比如说梯度下降法,或者其它热门的优化算法。如果没有残差,没有这些捷径或者跳跃连接,凭经验你会发现随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练,随着网络深度的加深,训练错误会越来越多。 但有了ResNets就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少。这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能。也许从另外一个角度来看,随着网络越来深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。 - 残差块(Residual block)
- 残差块插入的时机是在线性激活之后,ReLU激活之前。
- “跳跃连接”,就是指
a
[
l
]
{a}^{[l]}
a[l]跳过一层或者好几层,从而将信息传递到神经网络的更深层(之所以能实现跳跃连接是因为same卷积保留了维度)。
- 不太理解resnets不影响网络表现的原因:https://blog.csdn.net/weixin_36815313/article/details/105779620
- 残差网络起作用的主要原因是这些残差块学习恒等函数非常容易
- 普通网络和ResNets网络常用的结构是:卷积层-卷积层-卷积层-池化层-卷积层-卷积层-卷积层-池化层……依此重复。直到最后,有一个通过softmax进行预测的全连接层。
- 网络中的卷积及1x1卷积 (Network in Network and 1x1 Convolutions):
- 1×1卷积可以压缩通道数量(当然也可保持或增加)并减少计算
- 谷歌 Inception 网络简介 (Google Inception Network Motivation):
- Inception模块:使输出与输入长宽维度相同的,多种不同的过滤器(
1
?
1
,
3
?
3
,
5
?
5
1*1,3*3,5*5
1?1,3?3,5?5,max pooling)进行计算后,将各自的输出堆叠起来形成该模块。
- Inception网络不需要人为决定使用哪个过滤器或者是否需要池化,而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。
- 如果你在构建神经网络层的时候,不想决定池化层是使用1×1,3×3还是5×5的过滤器,那么Inception模块就是最好的选择。我们可以应用各种类型的过滤器,只需要把输出连接起来。
- 计算成本问题:通过使用1×1卷积来构建瓶颈层,从而大大降低计算成本(先利用1*1卷积缩小网络,再用其它filter扩大网络,只要合理构建瓶颈层,既可以显著缩小表示层规模,又不会降低网络性能,从而节省了计算)。
- 以上内容结合构建inception网络详见:https://blog.csdn.net/weixin_36815313/article/details/105780151
- Inception网络的一个细节,它确保了即便是隐藏单元和中间层也参与了特征计算,它们也能预测图片的分类,在Inception网络中,起到一种调整的效果,并且能防止网络发生过拟合。
|