• CMSC5707-高级人工智能之卷积神经网络CNN



    卷积神经网络的概念在本科就已经有了解,笔者这篇文章主要是涉及一些CNN的细节,包括卷积核大小的计算,各层参数个数计算等等。

    Correlation 与Convolution

    Correlation就是在a上移动b,将对应位置的元素两两相乘加起来,得到最后的结果,下面的计算包括了a和b non-overlap的情况,且默认step size=1,因此a输入为 3 × 3 3 \times 3 3×3,最后得到 4 × 4 4\times4 4×4
    请添加图片描述
    但Convolution的计算,则需要先flip,可以看作是根据左对角线整体交换了元素,然后再用correlation计算。
    请添加图片描述
    请添加图片描述
    但通常我们直接将Convolution和Correlation看作相同的计算了,在这种情况下,要么就是默认相乘的矩阵kernel已经被flip过了,要么就是说明Convolution is implemented by Correlation. 实际上这两者的计算确实可以相同,主要取决于我们如何给kernel编号了。

    典型网络参数

    一种典型的卷积神经网络模型如下:
    请添加图片描述

    Softmax

    最后一层会引入Softmax进行概率计算
    请添加图片描述

    Kernel

    kernel又称作mask, correlation mask, filter,一个kernel所代表的weights就是本身的格子数目,并且在图像的不同区域进行卷积,这些参数是共享的,每个kernel还带有一个bias,一个kernel输出一个feature map,当有多个kernel的时候可以输出多个feature map. 这里的weight个数为kernel长度*kernel宽度* kernel数量(feature map数量),bias个数为一个kernel对应一个,计算总参数个数就是weight+bias。

    在不指定的情况下,这里的kernel在计算feature map的时候,kernel对应的元素全和input image重叠,并且step size=1
    请添加图片描述
    每一次卷积的结果还需要通过activation function进行输出,不过我们通常在手算的时候就直接忽略掉了激励函数处理,直接输出了累加和看结果。
    在这里插入图片描述

    Zero padding

    zero padding用在kernel计算中,将没法整分的input image进行补全,最后能够得到完整的feature map. Output_feature_map_width的计算公式如下:
    D = ( N − m + 2 ∗ p ) / s ) + 1 D=(N-m+2*p)/s)+1 D=(Nm+2p)/s)+1
    请添加图片描述

    Subsampling

    Subsampling输出大小如下,这一层没有weight和bias。
    请添加图片描述
    当卷积网络中进行convolution,输入为多个feature map的时候(也称为多个通道),也可以进行处理。
    请添加图片描述
    filter个数决定了这次输出的feature map个数。如下图所示,这里的每个Filter就需要有对应input feature map个数的权重矩阵,并且每个filter带有一个bias,如下图所示,将一个filter内所有权重矩阵算出来的correlation result求和,算出一个结果,放在和input volume对应的位置上。最后整体的weights个数为 kernel中的格子数量*input feature map数量* output filter数量,bias个数为filter个数,total parameter= (kernel中的格子数量*input feature map数量+1)* output filter数量
    请添加图片描述

    过拟合

    随着epoch的增加,训练数据的loss一直在下降,而测试数据的loss却在下降的过程中陡然变高,就是出现过拟合了,这时候就应该停止训练。

    能改进的地方就是使用validation data调整模型参数,让它在early stopping处的test error尽可能小。
    请添加图片描述

  • 相关阅读:
    java毕业设计演出购票系统Mybatis+系统+数据库+调试部署
    【ARC机制和Java中C#中垃圾回收机制的区别 构造方法里面必须用setter方法赋值 Objective-C语言】
    Java贪心算法
    2024上海CDIE 参展预告 | 一站式云原生数字化平台已成趋势
    决策树案例分析
    vue3使用element-plus 树组件(el-tree)数据回显
    Nand Flash基本认识
    驱动开发:内核封装WFP防火墙入门
    高并发下的缓存击穿、雪崩、穿透和分布式锁(三)
    Matlab创建类
  • 原文地址:https://blog.csdn.net/qq_44036439/article/details/127532981