【深度学习基础】VGG与ResNet-Note

引言

VGG模型于2014年由牛津大学的Simonyan和Zisserman提出,在当时取得了ImageNet竞赛的冠军。VGG模型的结构非常简单,由一系列卷积层、池化层和全连接层组成。VGG模型的卷积层使用3x3的小卷积核,步长为1,填充为1,卷积核的数量随着层数的增加而增加。VGG模型的池化层使用2x2的最大池化,步长为2。VGG模型的全连接层使用ReLU激活函数。

ResNet模型于2015年由微软研究院的何恺明、张祥雨、任少卿和孙剑提出,在当时也取得了ImageNet竞赛的冠军。ResNet模型的结构与VGG模型类似,但ResNet模型在VGG模型的基础上添加了残差连接。残差连接是一种将前一层的输出直接与后一层的输出相加的操作。残差连接可以缓解深度卷积神经网络的梯度消失问题,提高模型的性能。

VGG模型的结构

VGG模型的结构非常简单,由一系列卷积层、池化层和全连接层组成。VGG模型的卷积层使用3x3的小卷积核,步长为1,填充为1,卷积核的数量随着层数的增加而增加。VGG模型的池化层使用2x2的最大池化,步长为2。VGG模型的全连接层使用ReLU激活函数。
VGG网络结构图

卷积层

VGG模型的卷积层使用3x3的小卷积核,步长为1,填充为1,卷积核的数量随着层数的增加而增加。

  • 3x3的小卷积核可以提取到更细粒度的特征。
  • 步长为1可以保证特征图的大小不变。
  • 填充为1可以防止边缘像素丢失。
  • 卷积核的数量随着层数的增加而增加,可以提取到更高级别的特征。
    卷积计算公式为
    f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)
    其中,x 是输入图像,W 是卷积核,b 是偏置,f 是激活函数。
    卷积层的作用
    卷积层是深度学习中的一种基本层,它可以提取图像中的特征。卷积层的工作原理是将一个卷积核与输入数据进行卷积运算,从而得到一个新的特征图。卷积核是一个权重矩阵,它的大小通常为3x3或5x5。卷积运算的过程如下:
  1. 将卷积核放在输入数据上。
  2. 计算卷积核与输入数据对应元素的乘积。
  3. 将乘积之和作为输出值。
  4. 将卷积核移动到输入数据的下一个位置,重复步骤1-3。
    卷积的过程
    卷积层可以提取图像中的各种特征,例如边缘、角点、纹理等。卷积层的堆叠可以提取出越来越高级别的特征。

为什么需要卷积层

卷积层对于深度学习非常重要,主要原因有以下几点:

  • 局部性:卷积层只与输入数据中的局部区域进行运算,这可以减少计算量。
  • 共享权重:卷积层中的卷积核是共享的,这意味着同一个卷积核可以应用于输入数据的不同位置。这可以减少模型的参数数量,降低过拟合的风险。
  • 平移不变性:卷积层对输入数据的平移是保持不变的,这意味着卷积层可以检测到图像中的物体,无论它们位于图像的哪个位置。

卷积层是深度学习中非常重要的一层,它可以提取图像中的特征,并具有局部性、共享权重和平移不变性等优点。

在实际应用中我们不会只是用一层卷积层,而是使用多层卷积,以得到图像更深层的信息。
卷积后的特征图大小计算公式如图:
卷积结果
值得注意的一点是,我们在卷积时用了几个卷积核进行卷积,就会得到几张特征图。

池化层

VGG模型的池化层使用2x2的最大池化,步长为2。

  • 2x2的最大池化可以减少特征图的大小,降低计算量。
  • 步长为2可以使特征图的大小减半。
    最大池化层
    最大池化就是取一定范围内特征的最大值作为下一次的输出。如2x2最大池化就是在2x2的范围内取最大的一个特征值组成新的特征图。

全连接层

VGG模型的全连接层使用ReLU激活函数。

  • ReLU激活函数可以提高模型的非线性。

ReLU激活函数

ReLU(Rectified Linear Unit)激活函数是一种简单高效的激活函数,它将输入的负值全部置零,正值保持不变。ReLU激活函数的数学表达式如下:

f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)

其中,x是输入值,f(x)是输出值。
relu

ReLU激活函数的优点

  • 简单高效:ReLU激活函数的计算非常简单,只需要一个比较操作和一个取最大值操作。
  • 非线性:ReLU激活函数是非线性的,这意味着它可以学习复杂的关系。
  • 稀疏性:ReLU激活函数会将输入的负值全部置零,这使得输出向量更加稀疏。稀疏性可以减少模型的参数数量,降低计算量。

ReLU激活函数的缺点

  • 死亡神经元问题:ReLU激活函数可能导致神经元死亡。当输入值小于0时,ReLU激活函数将输出0,这使得神经元无法学习到任何信息。
  • 梯度消失问题:ReLU激活函数的梯度在输入值小于0时为0,这使得梯度消失问题更加严重。

SGD优化器

随机梯度下降 (SGD) 是一种迭代优化算法,用于找到使损失函数最小的参数值。它是基于这样一个事实,即一个函数在任意一点的梯度向量是指向该点处的下降最快的方向。因此,通过多次迭代,SGD 可以逐步朝着最小值的方向调整参数值。

SGD 的基本步骤如下:

  1. 初始化参数值,例如随机值或给定值。
  2. 计算当前参数值处的梯度向量。
  3. 使用梯度向量来更新参数值,朝向下降最快的方向。
  4. 重复步骤 2 和 3,直到满足某些终止条件,例如达到最大迭代次数或损失函数不再减小。

SGD 是一个简单而高效的优化算法,广泛用于机器学习和深度学习领域。它具有以下优点:

  • 简单易懂,易于实现。
  • 适用于大规模数据集,因为可以并行化计算。
  • 对噪声和异常值不敏感。

然而,SGD 也有以下缺点:

  • 可能收敛到局部最小值,而不是全局最小值。
  • 可能在鞍点处停滞不前。
  • 学习率的选择对收敛速度和稳定性有很大影响。

为了克服 SGD 的缺点,研究人员提出了许多改进算法,例如带动量的 SGD (SGD with Momentum)、RMSProp 和 Adam。这些算法通过引入动量项或自适应学习率来加速收敛并提高稳定性。
详细SGD内容可以参考随机梯度下降法

VGG模型的实现原理

VGG模型的实现原理与其他深度卷积神经网络模型类似,通过堆叠卷积层、池化层和全连接层来学习图像的特征。
VGG实现过程
我们常见的VGG模型结构是VGG16和VGG19,图下图中的D和E。
VGG网络结构
VGG16包含了16个隐藏层(13个卷积层和3个全连接层)
VGG19包含了19个隐藏层(16个卷积层和3个全连接层)
值得注意的是,一般特征图经过2x2的maxpool之后大小会变为原来的1/4,这就会造成一定程度上的损失一部分信息,而VGG为了弥补这些损失的信息,会在下一次卷积前将特征图翻倍,相当于用特征图的个数来弥补长宽的损失。

ResNet模型

深层网络遇到的问题

按照深度学习字面意思来说,应该是网络结构越深越好,我们只需要不断地添加卷积层个数就可以得到更好的训练结果。但我们在实验中发现网络在20层以前,网络越深越好,但是在20层以后,并不是网络越深越好,如下图,20层的error要比56层error要低(当然,我们需求是error越低越好),这意味着只有20层卷积层的模型要比拥有56层卷积层的模型要好很多。这是因为在特征提取时,我们每次提取的特征是在上一次提取特征的基础上去提取的,但我们不能保证每次特征提取的结果一定比上一次特征提取的结果要好。基于这个现象,我们提出了ResNet(残差网络)来解决这一问题。
深层网络遇到的问题

ResNet模型的结构

  • ResNet模型的结构与VGG模型类似,但ResNet模型在VGG模型的基础上添加了残差连接。
  • 残差连接是一种将前一层的输出直接与后一层的输出相加的操作。
  • 残差连接可以缓解深度卷积神经网络的梯度消失问题,提高模型的性能。

深层网络问题的解决

其实出现问题的根本原因,就是每次在特征提取时可能提取到的特征结果不如上一次提取的特征结果,从而导致最终的网络效果不好。所以ResNet做的就是一个选拔的工作,即如果学习结果好就保留,结果不好就丢掉,用之前的卷积结果。
ResNet网络
当然,具体的操作流程如上图所示,输入为x输出为H(x) =F(x) + x,即给输出增加一项输入的x值,如果F(x)的loss值上升,那么就令新学习到的卷积层的权重为0,这样相当于删除了效果不好的卷积结果,只保留了有进步的卷积结果。
这样做的目的就在于保证了在添加网络深度的同时,还提高了模型更好的可能性。

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值