深度学习第四周--第二课理论
经典网络
LeNet-5
针对灰度图片训练,例如输入一个32x32x1的图片:
图片与一个5x5x6的过滤器做卷积,步伐s=1,padding=0,得到28x28x6的矩阵,再与一个14x14x6的过滤器做均值池化,过滤器宽度为2,步幅为2,图形的尺寸,高度和宽度均缩小2倍,得到一个14x14x6的图像,再与一个5x5x16的过滤器做卷积,步伐s=1,padding=0,得到10x10x16的图像,再与一个5x5x16的过滤器做均值池化,过滤器宽度为2,步幅为2,图形高度和宽度均缩小2倍,输出一个5x5x16的图形。将所有数字相乘,乘积是400。
下一层是全连接层,在全连接层中,有400个节点,每个节点有120个神经元,再从这400个节点中抽取一部分节点构建另一个全连接层。
最后一步就是利用这84个特征得到最后的输出,还可以再这里再加一个节点用来预测的值,有10个可能的值,对应识别0-9这10个数字,用softmax函数输出十种分类结果。
AlexNet
AlexNet首先用一张227x227x3的图片作为输入,第一层使用11x11x96的过滤器,s=4,得到55x55x96的图像,用一个3x3的过滤器构建最大池化层,f=3,s=2,得到27x27x96的图像,接着再执行一个5x5的卷积,padding之后,得到27x27x276的图像,再进行最大池化,尺寸缩小到13x13,再执行一次same卷积,相同的padding,得到的结果是13x13x384,再做一次same卷积。再做一次同样的操作,最后再进行一次最大池化,尺寸缩小到6x6x256。最后将所有数字相乘,得到9216个单元,然后是一些全连接层,最后使用softmax函数输出识别的结果。
VGGNet
VGG-16网络没有那么多超参数,这是一种只需要专注于构建卷积层的简单网络,首先用3x3,步幅为1的过滤器构建卷积层,padding参数为same卷积中的参数,然后用一个2x2,步幅为2的过滤器构建最大池化层,因此VGG网络的一大优点是它确实简化了神经网络结构。输入一个224x224x3的图像,在最开始的两层用64个3x3的过滤器对输入图像进行卷积,输出结果是224x224x64,因为使用了same卷积,通道数量也一样,VGG-16其实是一个很深的网络,这里并没有把所有卷积层都画出来。假设这个小图是输入图像,尺寸是224x224x3,进行第一个卷积之后得到224x224x64的特征图,接着还有一层224x224x64,得到这样2个厚度为64的卷积层,意味着用64个过滤器进行两次卷积,这里采用的都是大小为3x3,步幅为1的过滤器,并且采用same卷积。
接下来创建一个池化层,池化层将输入图像进行压缩,从224x224x64缩小到112x112x64。使用129个过滤器,以及一些same卷积,输出112x112x128然后进行池化,可以推导出池化后的结果是56x56x128,然后又是若干个卷积层,使用129个过滤器,以及一些same卷积,输出112x112x128,然后进行池化,可以推导出池化后的结果是56x56x128,接着再用256个相同的过滤器做三次卷积操作,然后再池化,然后再卷积三次,再池化。如此进行几轮操作后,得到7x7x512的特征图进行全连接操作,得到4096个单元,然后进行softmax**,输出从1000个对象中识别的结果。
VGG-16的这个数字16,就是指在这个网络中包含16个卷积层和全连接层,网络结构规整,主要缺点是需要训练的特征数量非常巨大。
残差网络(ResNet)
situation:非常非常深的神经网络是很难训练的。
why:存在梯度消失和梯度爆炸问题。
solution:跳跃连接skip connection,它可以从某一层网络层获取**,然后迅速反馈给另外一层,甚至是神经网络的更深层,可以利用跳跃连接构建能够训练深度网络的ResNets,有时深度能够超过100层。
注:skip connection:指跳过一层或者好几层,从而将信息传递到神经网络的更深层。
这是一个两层神经网络,在L层进行**,得到,再次进行**,两层之后得到。计算过程是从开始,首先进行线性**,根据这个公式:,通过算出,即乘以权重矩阵,再加上偏差因子。然后通过ReLU非线性**函数得到,计算得出,接着再次进行线性**,依据等式,最后根据这个等式再次进行ReLU非线性**,即,这里的g是指ReLU非线性函数,得到的结果就是。信息流从到需要经过以上所有步骤,即这组网络层的主路径。
在残差网络中有一点变化,我们将直接向后,拷贝到神经网络的深层,在ReLU非线性**函数前加上,这是一条捷径。的信息直接到达神经网络的深层,不再沿着主路径传递,这意味着最后这个等式()去掉了,取而代之的是另一个ReLU非线性函数,仍然对进行g函数处理,但这次要加上,即:,也就是加上的这个产生了一个残差块。
如图所示,5个残差块连接在一起构成一个残差网络。如果使用标准优化算法训练一个普通网络,比如梯度下降法,或者其它热门的优化算法,如果没有残差,没有这些捷径或者跳跃连接,凭经验会发现随着网络深度加深,训练错误会减少,然后增多,理论上,随着网络深度的加深,应该训练得越来越好才对,但实际上如果没有残差网络,对于一个普通网络来说,深度越深意味着优化算法越难训练,训练错误会越来越多。
但残差网络不同,即使网络再深,训练的表现却不错。
1x1卷积
1x1卷积:用于减少或保持或增加通道数()
谷歌Inception网络
作用
代替人工来确定卷积层中的过滤器类型,大小究竟是1x1,3x3,还是5x5,或者是否需要创建卷积层或池化层。
**思想:**不需要人为决定使用哪个过滤器或者是否需要池化,而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。
**瓶颈层:**假设有一个玻璃瓶,瓶颈是这个瓶子最小的部分。同理,瓶颈层是网络中最小的部分,先缩小网络,再扩大它。只要合理构建瓶颈层,既可以显著缩小表示层规模,又不会降低网络性能,从而节省了计算。
inception网络
输入一个28x28x192的图片,先通过1x1的过滤器,再通过5x5的过滤器,1x1的层可能有16个通道,而5x5的层输出为28x28x32,共32个通道。
输入一个28x28x192的图片,先通过1x1的过滤器,再通过3x3的过滤器,1x1的层可能有96个通道,而3x3的层输出为28x28x128,共128个通道。
也可以输入一个28x28x192的图片,将其直接通过一个1x1的卷积层,这时就不比在后面再跟一个1x1的层,输出28x28x64。
使用same类型的padding来池化,使得输出的高和宽依然是28x28,再加上一个1x1的卷积层,将通道的数量缩小,缩小到28x28x32。
最后将这些矩阵全连接起来,在这过程中,把得到的各个层的通道都加起来,最后得到一个28x28x256的输出。
迁移学习
使用别人已经训练好网络结构的权重参数,把它当作一个很好的初始化用在你自己的神经网络上,用迁移学习把公共的数据集的知识迁移到你自己的问题上,然后转换到你感兴趣的任务上,