CNN 卷积神经网络-- 残差计算

本文详细解析了卷积神经网络(CNN)中的卷积层和子采样层的残差计算,包括卷积计算公式、残差公式,并通过实例展示了卷积层与子采样层之间的残差传递过程,对于理解CNN的内部工作机制非常有帮助。
摘要由CSDN通过智能技术生成

前言

本文主要是解析论文Notes onConvolutional Neural Networks的公式,参考了http://blog.csdn.net/lu597203933/article/details/46575871的公式推导,借用https://github.com/BigPeng/JavaCNN代码

CNN

cnn每一层会输出多个feature map, 每个feature map由多个神经元组成,假如某个feature map的shape是m*n, 则该feature map有m*n个神经元

卷积层

卷积计算

设当前层l为卷积层,下一层l+1为子采样层subsampling.
则卷积层l的输出feature map为:
Xlj=f(iMjXl1iklij+blj)
为卷积符号

残差计算

设当前层l为卷积层,下一层l+1为子采样层subsampling.
第l层的第j个feature map的残差公式为:

δlj=βl+1j(f(μlj)up(δl+1j))(1)

其中
f(x)=11+ex(2) ,
其导数

f(x)=f(x)(1f(x))(3)

为了之后的推导,先提前讲讲subsample过程,比较简单,假设采样层是对卷积层的均值处理,如卷积层的输出feature map( f(μlj) )是
卷积层的feature map
则经过subsample的结果是:
子抽样层的feature map
subsample过程如下:

import java.util.Arrays;

/**
 * Created by keliz on 7/7/16.
 */

public class test
{
   
    /**
     * 卷积核或者采样层scale的大小,长与宽可以不等.
     */
    public static class Size
    {
   

        public final int x;
        public final int y;

        public Size(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

    }

    /**
     * 对矩阵进行均值缩小
     *
     * @param matrix
     * @param scale
     * @return
     */
    public static double[][] scaleMatrix(final double[][] matrix, final Size scale)
    {
        int m = matrix.length;
        int n = matrix[0].length;
        final int sm = m / scale.x;
        final int sn = n / scale.y;
        final double[][] outMatrix = new double[sm][sn];
        if (sm * scale.x != m || sn * scale.y != n)
            throw new RuntimeException("scale不能整除matrix");
        final int size = scale.x * scale.y;
        for (int i = 0; i < sm; i++)
        {
            for (int j = 0; j < sn; j++)
            {
                double sum = 0.0;
                for (int si = i * scale.x; si < (i + 1) * scale.x; si++)
                {
                    for (int sj = j * scale.y; sj < (j + 1) * scale.y; sj++)
                    {
                        sum += matrix[si][sj];
                    }
                }
                outMatrix[i][j] = sum / size;
            }
        }
        return outMatrix;
    }

    public static void main(String args[])
    {
        int row = 4;
        int column = 4;
        int k = 0;
        double[][] matrix = new double[row][column];
        Size s = new Size(2, 2);
        for (int i = 0; i < row; ++i)
            for (int j = 0; j < column; ++j)
                matrix[i][j] = ++k;
        double[][] result = scaleMatrix(matrix, s);
        System.out.println(Arrays.deepToString(matrix).replaceAll("],", "]," + System.getProperty("line.separator")));

        System.out.println(Arrays.deepToString(result).replaceAll("],", "]," + System.getProperty("line.separator")));
    }
}

其中3.5=(1+2+5+6)/(2*2); 5.5=(3+4+7+8)/(2*2)
由此可知,卷积层输出的feature map中的值为1的节点,值为2的节点,值为5的节点,值为6的节点(神经元)与subsample层的值为3.5的节点相连接,值为3,值为4,值为7,值为8节点与subsample层的值为5.5节点相连接。由BP算法章节的推导结论可知

卷积层第j个节点的残差等于子采样层与其相连接的所有节点的权值乘以相应的残差的加权和再乘以该节点的导数

对着公式看比较容易理解这句话。
假设子采样层的对应文中的卷积层的残差 δl+1j 是,
子采样层的delta
按照公式(1),节点1值为0.5的残差是

βl+1j(f(1)δl+1j(3.5))(4)

因为这是计算单个神经元的残差,所以需要把 换成 , 这个运算符代表矩阵的点乘即对应元素相乘,而且 节点(神经元)1的对应子采样层的值为3.5的节点, 由 公式(3),可知节点1的残差是
f(1)(1f(1))δl+1j(3.5)


11+e1e11+e10.5

同理,对于节点2,
残差为
f(2)(1f(2))δl+1j(3.5)

对于节点5,
残差为
f(5)(1f(5))δl+1j(3.5)

对于节点6,
残差为
f(6)(1f(6))δl+1j(3.5)

因为节点3对应的子采样层的残差是0.6,所以节点3的残差为
f(3)(1f(3))δl+1j(5.5)


11+e5e5
卷积神经网络CNN)和深度残差卷积神经网络都是深度学习中的重要概念,它们在图像处理和模式识别等领域有着广泛的应用。下面将详细介绍这两种网络的**定义、结构、特点以及应用场景等**,并探讨它们之间的联系和区别。 ### 卷积神经网络CNN) 1. **定义**:卷积神经网络是一种专门用于处理网格状数据的深度学习算法,尤其擅长处理图像和视频数据。 2. **结构**:CNN由卷积层、池化层和全连接层组成。卷积层负责提取图像中的局部特征,池化层负责降低特征的维度并增加模型的不变性,全连接层则将前面学到的特征表示用于分类或回归任务。 3. **特点**:CNN具有平移不变性,即能够对输入图像的平移变化保持不变的识别能力。这种特性使得CNN在图像识别、目标检测和图像分割等任务中表现出色。 4. **应用场景**:CNN广泛应用于计算机视觉领域,如面部识别、自动驾驶车辆的视觉系统、医学图像分析等。 5. **优势**:CNN可以自动学习图像的特征,减少了手工设计特征的复杂性。此外,CNN的层次结构使其能够从低级到高级逐步学习图像的抽象表示。 6. **局限性**:尽管CNN非常强大,但它需要大量的标记数据进行训练,并且对于一些特定的任务,如小样本学习和强化学习,可能不是最优选择。 ### 深度残差卷积神经网络 1. **定义**:深度残差卷积神经网络,简称残差网络(ResNet),是通过引入残差学习概念来解决深度神经网络训练中梯度消失问题的一种新型网络结构。 2. **结构**:ResNet的主要创新是残差块,它通过跳跃连接(skip connection)允许信号直接从一个层传输到另外一些层,从而解决了深层网络训练的难题。 3. **特点**:残差块的设计使得ResNet可以轻易地增加网络的深度,从而提高模型的性能。这种结构也减轻了训练过程中的梯度消失问题。 4. **应用场景**:ResNet在各种图像识别和分类任务中都取得了显著的成绩,特别是在ILSVRC 2015中赢得了冠军,展示了其卓越的性能。 5. **优势**:ResNet通过简单的添加层数就能提高准确率,这使得构建更深的网络成为可能,同时也提高了训练过程的稳定性和效率。 6. **局限性**:虽然ResNet在很多方面都很优秀,但它仍然需要大量的计算资源和数据来训练,这可能限制了在某些资源受限环境下的应用。 总之,卷积神经网络和深度残差卷积神经网络都是深度学习领域的重要工具,它们各自有着独特的结构和优势。CNN以其强大的图像处理能力被广泛应用于多个领域,而ResNet通过解决深度网络训练的难题,推动了深度学习技术的进一步发展。这两种网络结构的研究和优化,不仅促进了人工智能技术的进步,也为未来的应用开辟了新的可能性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值