深度学习笔记之CNN(卷积神经网络)基础

简介:

 卷积神经网络(ConvolutionalNeural Networks,简称CNN)提出于20世纪60年代,由Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现。

      CNN是目前深度学习最大的一个流派,其应用优点在于避免了对图像的复杂前期预处理,可以直接处理原始图像。CNN核心在于“卷积”,传统机器学习中LBP、HOG等特征都可以看作是卷积的一种特殊形式,“卷积”以不同的参数来描述不同的抽象程度特征,更接近于原始图像的“特征抽象”。

                

 

        如上图所示,利用一个滑动窗口(卷积核)对原始图像区域进行“筛选”,将对应像素相乘,再累加( I*K),就得到了一个像素的卷积结果。可以说卷积就像一个筛子,按照一定规则(借助卷积核“乘累加”)对原始图像再加工(实际是一个积分),公式可以描述为:

              

     

    来看一个典型的CNN实例,对于分辨率为28*28的图片处理过程:

        

        其中Conv为卷积层(采用5*5的卷积核,Step为1),实现数据特征提取;Pool为池化层,也称为降采样(Sample),实现数据降维;FC为全连接层,通过一定规则的计算(也可能为卷积计算)得到结果。

 

 

        我们把卷积层、池化层等中间层统一称为隐层。接下来深入了解每个层的含义来加深对CNN的理解。

 

            

 

 

 

 

•   卷积层与权值共享

        按照生物学神经元数据处理机制,每个神经元需要与前一层连接,用于特征提取,如下图所示,假设神经元数量为100万,那么对于100万像素的图像将建立1012个连接,这里面的权值的数量是非常大的。

              
 

 

        那么如何解决大量的权值计算(参数爆炸)问题呢?大开一下脑洞,我们做两个假设:

        1)减少每个神经元(对应隐层像素)的作用范围,比如设为10*10,仅和局部的100个像素建立局部连接;

              参数简化: 100(连接权值)*1M(神经元个数)

        2)所有神经元采用同一组权值进行计算,对应CNN就是用同一个卷积核去卷积图像,这就是权值共享

              参数简化: 100(权值)

        没错,我们只需要100个参数就建立了两层之间的连接,这靠谱吗?相信第一点很好理解,每个神经元是独立工作的,问题在于第二点,权值共享 这个玩笑开的确实有点大。

        事实上从生物学上解释,神经元确实是分类的,有的对边缘敏感,有的对亮度敏感,还有的感应颜色,每一类神经元的参数是近似一致的。

        想通了吗?关键就在于“分类”,每一类神经元对应一组权值,怕种类不够?

        那就用100个卷积核来描述100种神经元

        对于上面的例子,不同的卷积核如右图所示,我们得到最终的参数个数:

        参数简化: 100(权值)*100(卷积核)

        我们用1万个权值的卷积计算,近似模拟了神经元的处理过程,这个数量级的参数对于计算机来讲并不算多,特别是对于卷积这种已经能够做GPU并行计算的方法,这就是卷积的魅力。

 

 

 

•   池化

        池化(降采样)较为容易理解,获取一个区域内的典型特征,比如n*n像素范围的像素最大值或平均值,其意义在于能够对输入进行抽象描述,对特征进行降维。

          

 

        一般来讲,对于输入的池化区域都是分块处理的,与卷积的区别在于块之间一般不重叠,这样就保证了信息能够更快的抽象,抽象的价值在于提取里面的“显著特征”,而忽略“细节特征”。

常用的两种池化方法:

        1)最大值池化,应用最多,能够有效减少卷积层带来的均值偏差,对纹理特征的适应较好;

        2)平均值池化,对卷积结果进一步平滑,纹理和边缘特征容易丢失,但能有效避免噪声。

 

 

 

•   激活层

        神经网络真正的代表作出场了,在第一节已做过专题讲解,激活层 真正反映了神经元的工作机制,可以说是神经网络的精髓。

        在CNN中被广泛采用的ReLU函数有效解决了梯度扩散问题,你可以不必太在意“稀疏”,你可以忘掉“逐层预训练”,总结一句话那就是“激活函数的一小步,深度学习的一大步”。

        激活层一般添加在卷积层或者池化层之后,没有明确的位置定义,一般对于简单的网络来讲,激活层通常可以不添加。

 

 

 

 

•   Dropout层

        这个问题的提出源于神经网络的另一个大缺陷-“过拟合”,对应于前面导致“梯度扩散”问题的欠拟合。

常规解决“过拟合”问题的方法是模型平均,通过训练多个网络进行加权组合来进行规避,这样带来的问题是更大的计算量。

        Dropout方法最早由Hinton大神提出,针对一次训练过程,网络中的神经元节点按照一定的概率进行权值更新,也就是说,神经元有可能仅保留权值参数,下一个训练过程再更新。

        按照一定的随机策略,使每一次训练的神经元并不相同,也就是说神经元节点轮流工作,这种随机过程又向人脑前进了一步。

            

 

        每一次的Dropout相当于对网络做了一次简化(如上图所示),仅简化后的网络节点参与权值更新,整个训练过程中多次Dropout,每个节点都参与了训练和学习,当然偶尔也“翘个班”,过程很简单,为什么能得到好的效果呢?我们来分析一下:

        1)“天天大鱼大肉,顿顿鲍鱼龙虾”,偶尔吃个方便面吧,想想都嘚瑟,这个小调剂的效果出奇的好;

        2)班上一共20个学生,老师每次选择回答问题的都是那几个优秀的学生,Dropout避免了训练结果对某些节点的强依赖(权重过大);

      作者倾向于从遗传学的角度来进行解释,不同的基因组合方式能提高对于环境的适应能力,“优胜劣汰”的进化概率更高。

3)Dropout也可以理解为一种平均模型,区别在于,通过在多Step之间进行平均代替多个模型的组合。

        不管从哪个角度进行理解,Dropout本身都是直观有效的,这里面虽然没有严谨的数学公式推导,但源于生物学的直观理解,以及大量的实验足以证明。

        就好像有人问我深度学习为什么会有这么好的效果,为什么就能有效收敛?什么理论避免陷入局部最大值?我们对于某些问题的认知仅仅在这个层面上而已,有时候不需要纠结,能解决问题就可以了,至于其背后隐晦的林林种种,So What?

 

 

 

•   全连接层

        全连接层直观理解为简化的数据计算,其意义在于求解,对于网络本身的贡献值是比较低的,大多数情况下,全连接层放在网络最后面,有时也会被省略,这里不做过多解释,大家看到的时候能知道干什么的就行了。

 

 

•   回归层

        回归层理论上不属于CNN的一部分,当然也有人将其合并到网络,或者说也可以看作是全连接层的一部分,anyway,我们只是在这里将过程穿起来而已。

        回归是个比较熟悉的概念,前面讲过的逻辑回归、高斯回归等都属于回归,说白了回归就是对特征进行分类,可以分两类,也可以分多类。

        回归的作用也只是分类而已,你可以用最简单的SVM分类器进行分类,也可以采用复杂的多类划分,比如Softmax。Softmax是逻辑回归模型在多分类问题上的推广,本质上是将一个P维向量映射成另一个K维向量,其公式描述为:

                        

        得到对应的类别代表的概率,这个概率正是我们要的分类结果。



本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/6972966.html,如需转载请自行联系原作者

相关文章
|
5天前
|
机器学习/深度学习 人工智能 算法
深入理解卷积神经网络:从理论到实践
【9月更文挑战第31天】在深度学习的众多模型之中,卷积神经网络(CNN)以其在图像处理领域的出色表现而闻名。本文将通过浅显易懂的语言和直观的比喻,带领读者了解CNN的核心原理和结构,并通过一个简化的代码示例,展示如何实现一个简单的CNN模型。我们将从CNN的基本组成出发,逐步深入到其在现实世界中的应用,最后探讨其未来的可能性。文章旨在为初学者提供一个清晰的CNN入门指南,同时为有经验的开发者提供一些深入思考的视角。
|
5天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第31天】本文旨在通过浅显易懂的语言和直观的比喻,为初学者揭开深度学习中卷积神经网络(CNN)的神秘面纱。我们将从CNN的基本原理出发,逐步深入到其在图像识别领域的实际应用,并通过一个简单的代码示例,展示如何利用CNN进行图像分类。无论你是编程新手还是深度学习的初学者,这篇文章都将为你打开一扇通往人工智能世界的大门。
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的奥秘:探索神经网络背后的原理与实践
【9月更文挑战第29天】本文将带你深入理解深度学习的核心概念,从基础理论到实际应用,逐步揭示其神秘面纱。我们将探讨神经网络的工作原理,并通过实际代码示例,展示如何构建和训练一个简单的深度学习模型。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技能。
16 2
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其应用
【9月更文挑战第24天】本文将深入探讨深度学习中的一种重要模型——卷积神经网络(CNN)。我们将通过简单的代码示例,了解CNN的工作原理和应用场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息。
37 1
|
17天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第19天】在人工智能的浩瀚星海中,卷积神经网络(CNN)如同一颗璀璨的星辰,照亮了图像处理的天空。本文将深入CNN的核心,揭示其在图像识别领域的强大力量。通过浅显易懂的语言和直观的比喻,我们将一同探索CNN的奥秘,并见证它如何在现实世界中大放异彩。
|
17天前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。
|
16天前
|
机器学习/深度学习 自动驾驶 TensorFlow
深入理解卷积神经网络(CNN)在图像识别中的应用
【9月更文挑战第20天】本文旨在通过直观的解释和代码示例,向初学者介绍卷积神经网络(CNN)的基本概念及其在图像识别领域的应用。文章将首先解释什么是CNN以及它如何工作,然后通过一个简单的Python代码示例展示如何构建一个基本的CNN模型。最后,我们将讨论CNN在现实世界问题中的潜在应用,并探讨其面临的挑战和发展方向。
36 2
|
16天前
|
机器学习/深度学习 人工智能 算法
深入浅出卷积神经网络(CNN)
【9月更文挑战第20天】在人工智能的璀璨星河中,卷积神经网络(CNN)如同一颗耀眼的星辰,以其独特的魅力照亮了图像处理的天空。本文将带你遨游CNN的宇宙,从其诞生之初的微弱光芒,到成为深度学习领域的超级巨星,我们将一同探索它的结构奥秘、工作原理以及在实际场景中的惊艳应用。你将发现,CNN不仅仅是一段段代码和算法的堆砌,它更是一种让机器“看”懂世界的强大工具。让我们扣好安全带,一起深入CNN的世界,体验技术与创新交织的精彩旅程。
|
17天前
|
机器学习/深度学习 人工智能 TensorFlow
深入探索深度学习中的卷积神经网络(CNN)
【9月更文挑战第19天】本文将深入浅出地介绍卷积神经网络(CNN)在深度学习领域的应用和原理,旨在为初学者提供一个清晰的理解框架。通过实例演示,我们将展示如何利用Python和TensorFlow库构建一个简单的CNN模型,用于图像分类任务。此外,文章还将探讨CNN在不同应用场景下的优化策略和挑战。
下一篇
无影云桌面