美文网首页
残差网络RseNet

残差网络RseNet

作者: 斐硕人 | 来源:发表于2021-09-24 17:11 被阅读0次

    残差网络解决了什么问题

    残差网络 是为了解决深度神经网络(DNN)隐藏层过多时的网络退化问题而提出。退化(degradation)问题是指:当网络隐藏层变多时,网络的准确度达到饱和然后急剧退化,而且这个退化不是由于过拟合引起的。
    假设在浅层网络上叠加与其相同,称之为恒等映射的层,那么即使网络深度增加,其训练误差应该不高于原来的浅层网络。因为直接让一些叠加层去拟合一个潜在的恒等映射函数 H (x) = x 会比较困难,所以采用一些非线性层,让它们去拟合另一种残差映射 F (x) := H (x)-x ,而原来的映射则变成 H (x) = F (x) + x。
    Resnet 学习的是残差函数 F (x) = H (x) - x,优化这种残差映射要比优化原始的映射容易

    直观理解
    直观理解
    如图,左边来了一辆装满了“梯度”商品的货车,来领商品的客人一般都要排队一个个拿才可以,如果排队的人太多,后面的人就没有了。于是这时候派了一个人走了“快捷通道”,到货车上领了一部分“梯度”,直接送给后面的人,这样后面排队的客人就能拿到更多的“梯度”。详细请看参考文章 3

    残差网络定义

    残差网络 是由一系列 残差块 组成的。
    一个残差块可以用表示为:

    残差块公式

    残差块分成两部分 直接映射部分 h(x1)残差部分 F(x1,W)

    • 直接映射,在图1中是左边的直线;
    • 残差部分,一般由两个或者三个卷积操作构成,即图1中右侧包含卷积的部分。
    残差块图示
    图1中的 Weight 在卷积网络中是指卷积操作,addition 是指单位加操作。

    在统计学中,残差和误差是非常容易混淆的两个概念。误差是衡量观测值和真实值之间的差距,残差是指预测值和观测值之间的差距。对于残差网络的命名原因,作者给出的解释是,网络的一层通常可以看做 y = H(x) , 而残差网络的一个残差块可以表示为 H(x) = F(x) + x ,也就是 F(x) = H(x) - x ,在单位映射中, y = x 便是观测值,而 H(x) 是预测值,所以 F(x) 便对应着残差,因此叫做残差网络

    残差块通用表示形式
    h(·) 是直接映射,f(·) 是激活函数,一般使用 ReLU
    h(·)f(·) 都是直接映射时,通用残差块转化为:
    残差块公式
    残差块的实现
    1*1残差块
    # 1*1残差块
    def res_block_v1(x, input_filter, output_filter):
        res_x = Conv2D(kernel_size=(3,3), filters=output_filter, strides=1, padding='same')(x)
        res_x = BatchNormalization()(res_x)
        res_x = Activation('relu')(res_x)
        res_x = Conv2D(kernel_size=(3,3), filters=output_filter, strides=1, padding='same')(res_x)
        res_x = BatchNormalization()(res_x)
        if input_filter == output_filter:
            identity = x
        else: #需要升维或者降维
            identity = Conv2D(kernel_size=(1,1), filters=output_filter, strides=1, padding='same')(x)
        x = keras.layers.add([identity, res_x])
        output = Activation('relu')(x)
        return output
    

    参考文章

    1. 详解残差网络
    2. 深度学习之16——残差网络(ResNet)
    3. 为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题。

    相关文章

      网友评论

          本文标题:残差网络RseNet

          本文链接:https://www.haomeiwen.com/subject/poyfgltx.html