CNN 的两个弊端

2024-02-05 02:59
文章标签 cnn 两个 弊端

本文主要是介绍CNN 的两个弊端,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CNN 的两个弊端

原文 - What is wrong with Convolutional neural networks ?

自从Alex Krizhevsky 等论文 ImageNet Classification with Deep Convolutional Networks 在 NIPS2012 发表开始,CNN 已经成为很多领域十分重要的工具,深度学习已很普遍. 基于 CNN 的方法已经在计算机视觉的诸多任务中取得了卓越的成绩. 但,CNN 是完美的吗?是能选择的最佳方案吗?当然不是.

2014年12月4日, Geoffrey Hinton 在 MIT 进行了关于他的胶囊网络(Capsule Networks) 的演讲. 期间,他对 CNN 存在的问题进行了讨论,包括对 pooling 层糟糕表现的原因. 实际上,pooling 层表现是可以用灾难性来形容的.

if you are familiar with CNN’s you can skip to what’s wrong?

这里对 CNN 的两个弊端分析说明.

1. 卷积层

卷积层通过一组矩阵与前一层网络神经元的输出矩阵相乘,即卷积计算,来得到某些特征. 如基本特征(如 边缘edge, 颜色color grade, 或模式pattern);或者复杂特征(如形状shape, 鼻子nose, 或嘴mouse)等等,这组矩阵称为过滤器(filters)或核(kernel).

1.1 卷积 Convolution

数学上,以图像为例,2D 数据的离散卷积, f f 和一个 2D kernel g ,有:

(fg)(x,y)=y+hv=yhx+wu=xwf(u,v)g(xu,yv) ( f ∗ g ) ( x , y ) = ∑ v = y − h y + h ∑ u = x − w x + w f ( u , v ) g ( x − u , y − v )

其中, 2w+1 2 w + 1 为 kernel 的宽(width), 2h+1 2 h + 1 为 kernel 的高(height).

以 kernel 3×3 3 × 3 和 stride 1 为例,如图:
这里写图片描述

1.2 参数减少 Reduced Parameters

卷积层,每一个输出值(Convolved Feature)是不需要与前一层的每个神经单元(Image)相连的. 相连的区域称为接受野(receptive fields),即卷积 kernel 当前的操作. 卷积层的这种特点称为局部连接(Local Connectivity) ,可以有效的减少参数量.

卷积 kernel 的当前权重是固定的,且卷积中权重相同,直到下次参数更新,权重值才会发生变化. 卷积层的这种特点成为 参数共享(Parameter Sharing),其也有利于减少参数量.

如果想要应用更多的权重集,只需增加 kernels 数量即可.

1.3 平移不变 Shift Invariant

由于 卷积层的参数共享及 pooling 层的局部效应,可以发现 CNNs 的另一个重要特征是,平移不变(Shift Invariant).

平移不变意味着,输入的平移发生平移,输出也发生平移,但结果不变. 具体来讲,如果训练时在某些位置的特征是有用的,那么在测试时,这些特征在所有位置的检测结果都应是可用的. 如:
这里写图片描述

如果检测器(或 filter) 学习到 CAT 的特征,那么在测试时,不管 CAT 在图像的任何位置,检测器都能够捕捉到 CAT.

2. Pooling 层

池化(Pooling) 层有很多类型,如 Max Pooling,Avg Pooling 等. Max Pooling 是最常用的.

Max Pooling 能够给出一定的平移不变性,足够应对某些任务. 而且,能够以很小的代价减少网络维度(不需要新的参数学习). 即,减少了传递到下一层特征提取的输入数量.

Max Pooling 层是很简单的,只需预定义一个 filter (一个窗口window) ,并在输入上滑动该窗口,取窗口内区域的最大值,即可得到输出.

如,filter 为 2×2 2 × 2 的 Max Pooling:
这里写图片描述
这里写图片描述

3. 弊端所在

3.1 卷积层弊端

  • 反向传播 Backpropagation, BP

    反向传播算法是一种寻找在处理完一批数据后每个权重对 error 的贡献的方法.

    很多好的优化算法(如SGD,ADAM等) 利用 BP 算法来计算梯度.

    虽然,BP 已经取得了很好的效果,但其不是一种十分高效的学习方法,因为BP 算法需要大规模数据集的支持.

  • 平移不变性 Translation invariance

    当提到平移不变时,往往意味着,同一 object 发生轻微朝向或位置变化时,可能并不会激活那些识别该 object 的神经元.

    正如 1.3 中的图示,如果假设只有一个神经元来识别 cats,那么其值会随着 cat 的朝向和位置的变化而发生改变. 虽然数据增广能够部分解决该问题,但仍不能彻底根除.

3.2 Pooling 层弊端

Pooling 层会丢失大量的有价值信息,以及忽略局部与整体之间的关联性.

例如,如果描述一个面部检测,需要结合某些特征,如嘴巴mouth,2只眼睛eyes,脸轮廓face oval 和鼻子 nose,才能说其是人脸. 但只要这 5 种特征出现,CNN 就很可能会判断为是人脸. 如:
这里写图片描述

这两张图片的 CNN 输出可能很相似,但却是很不好的.

经过多个 pooling 层之后,将丢失 object 的准确位置信息. 对于某些识别任务,如需要 high-level 局部的精确位置信息,是影响很大的.

3. 总结

CNN 是很好很有效果的,但其仍有 2 个非常糟糕的弊端——平移不变(translation invariance) 和 pooling 层. 幸运的是,可以通过数据增广等方法来避免风险. 有些即将来临的技术,如胶囊网络,需要做好准备,并接受改变.

Reference

[1] - Convolutional Neural Networks

这篇关于CNN 的两个弊端的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679582

相关文章

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

深度学习实战:如何利用CNN实现人脸识别考勤系统

1. 何为CNN及其在人脸识别中的应用 卷积神经网络(CNN)是深度学习中的核心技术之一,擅长处理图像数据。CNN通过卷积层提取图像的局部特征,在人脸识别领域尤其适用。CNN的多个层次可以逐步提取面部的特征,最终实现精确的身份识别。对于考勤系统而言,CNN可以自动从摄像头捕捉的视频流中检测并识别出员工的面部。 我们在该项目中采用了 RetinaFace 模型,它基于CNN的结构实现高效、精准的

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

两个长数字相加

1.编程题目 题目:要实现两个百位长的数字直接相加 分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位) 2.编程实现 package com.sino.daily.code_2019_6_29;import org.apache.commons.lang3.StringUtils;/*** create by 2019-06-29 19:03** @autho

创建一个大的DIV,里面的包含两个DIV是可以自由移动

创建一个大的DIV,里面的包含两个DIV是可以自由移动 <body>         <div style="position: relative; background:#DDF8CF;line-height: 50px"> <div style="text-align: center; width: 100%;padding-top: 0px;"><h3>定&nbsp;位&nbsp;

在二叉树中找到两个节点的最近公共祖先(基于Java)

如题  题解 public int lowestCommonAncestor(TreeNode root, int o1, int o2) {//记录遍历到的每个节点的父节点。Map<Integer, Integer> parent = new HashMap<>();Queue<TreeNode> queue = new LinkedList<>();parent.put(roo

Java中计算两个日期间隔多少天

String dbtime1 = "2017-02-23";  //第二个日期 String dbtime2 = "2017-02-22";  //第一个日期 //算两个日期间隔多少天 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = format.parse(dbtime1); Date dat

Java利用正则表达式获取指定两个字符串之间的内容

package com.starit.analyse.util;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;public class DealSt

如何将卷积神经网络(CNN)应用于医学图像分析:从分类到分割和检测的实用指南

引言 在现代医疗领域,医学图像已经成为疾病诊断和治疗规划的重要工具。医学图像的类型繁多,包括但不限于X射线、CT(计算机断层扫描)、MRI(磁共振成像)和超声图像。这些图像提供了对身体内部结构的详细视图,有助于医生在进行准确诊断和制定个性化治疗方案时获取关键的信息。 1. 医学图像分析的挑战 医学图像分析面临诸多挑战,其中包括: 图像数据的复杂性:医学图像通常具有高维度和复杂的结构

git如何灵活切换本地账号对应远程github的两个账号

git如何灵活切换本地账号对应远程github的两个账号 问题: 有时候我们会同时维护两个github的账号里面的仓库内容,这时候本地git需要频繁的切换ssh,以方便灵活的与两个账号的仓库可以通信。这篇日记将阐述我是怎么解决这个问题的。1. 第一个账户 生成本地SSH2. 注意 我们要设置第二个账户的 本地 SSH 时3. 两个账号来回切换 问题: 有时候我们会同时维护两个git