《深度学习》李宏毅 -- task6卷积神经网络

简介: CNN常常被用在影像处理上,比如说你想要做影像的分类,就是training一个neural network,input一张图片,然后把这张图片表示成里面的像素(pixel),也就是很长很长的矢量(vector)。output就是(假如你有1000个类别,output就是1000个dimension)dimension。

一、为什么要使用卷积神经网络(CNN)


image.png

CNN常常被用在影像处理上,比如说你想要做影像的分类,就是training一个neural network,input一张图片,然后把这张图片表示成里面的像素(pixel),也就是很长很长的矢量(vector)。output就是(假如你有1000个类别,output就是1000个dimension)dimension。

通常会遇到一些问题:


1.在training neural network时,我们希望在network的structure里面,每一个neural就是代表了一个最基本的classifier,事实是在文件上根据训练的结果,你有可能会得到很多这样的结论。


2.直接用fully connect feedforward network来做影像处理的时候,需要太多参数。


CNN能简化neural network的架构,处理影像时,某些weight用不上,我们一开始就把它滤掉。不是用fully connect feedforward network,而是用比较少的参数来做影像处理这件事。现在从下面3个方面进行阐述。



1.1 小区域(Small region )

image.png

处理影像时,对于第一层的 hidden layer,neural的作用是侦测某一种pattern,看它是否出现?大部分的pattern其实比整张的image还要小,对一个neural来说,假设它要知道一个image里面有没有出现某一个pattern,它不需要看整张image,只要看image的一小部分。


举例:假设我们现在有一张图片,第一个hidden layer的某一种neural的工作就是要侦测有没有鸟嘴的存在(有一些neural侦测有没有爪子的存在,有一些neural侦测有没有翅膀的存在,有没有尾巴的存在,合起来就可以侦测图片中某一只鸟)。其实它并不需要看整张图,只需要给neural看一小红色方框的区域(鸟嘴),它就可以知道它是不是一个鸟嘴。对人来说也是一样,看这一小块区域这是鸟嘴,不需要去看整张图才知道这件事情。所以,每一个neural连接到每一个小块的区域就好了,不需要连接到整张完整的图。



1.2 相同的图案(Same Patterns)

image.png

观察上图,同样的pattern在image里面,可能会出现在image不同的部分,但是代表的是同样的含义,它们有同样的形状,可以用同样的neural,同样的参数就可以把patter侦测出来。

在这张图里面,有一张在左上角的鸟嘴,有一个在中央的鸟嘴,但是你并不需要说:我们不需要去训练两个不同的探测器(detector),一个专门去侦测左上角的鸟嘴,一个去侦测中央有没有鸟嘴。如果这样做的话,这样就太冗了。我们不需要太多的冗源,这个nerual侦测左上角的鸟嘴跟侦测中央有没有鸟嘴做的事情是一样的。我们并不需要两个neural去做两组参数,我们就要求这两个neural用同一组参数,就样就可以减少需要参数的量。




1.3 二次抽样(Subsampling)

image.png

一个image,你可以做subsampling,把一个image的奇数行,偶数列的pixel拿掉,变成原来十分之一的大小,它其实不会影响人对这张image的理解。我们会觉得这两张image看起来可能没有太大的差别。所以我们就可以用这样的概念把image变小,这样就可以减少需要的参数。


二、CNN架构


image.png

CNN的架构如下:


1.输入一张图片后通过卷积层(convolution layer);

2.然后做max pooling;

3.再做卷积(convolution);

4.2-3步重复多次;(反复多少次是事先决定的,即network的架构)

5.压平(flatten);

6.最后把flatten的output丢到一般全连接前馈网络(fully connected feedforward network),就可以得到影像辨识的结果。

image.png

基于前面三个影像处理的观察,得出:


第一,要生成一个pattern,不要看整张的image,只需要看image的一小部分。

第二,通用的pattern会出现在一张图片的不同的区域。

第三,可以subsampling。

前面的两个property可以用convolution来处理掉,最后的property可以用Max Pooling这件事来处理。


三、卷积(Convolution)


image.png


3.1 属性1(Property1)


假设现在network的输入是一张6*6的Image,如果是黑白的,一个pixel就只需要用一个value去描述它,1就代表有涂墨水,0就代表没有涂到墨水。那在convolution layer里面,它由一组过滤(filter),(其中每一个filter其实就等同于是fully connect layer里面的一个neuron),每一个filter其实就是一个矩阵——matrix(3 *3),这每个filter里面的参数(matrix里面每一个element值)就是network的参数(parameter,这些parameter是要学习出来,不需要人去设计)


每个filter如果是3* 3的检测(detects)意味着它就是再侦测一个3 *3的pattern(看3 *3的一个范围)。在侦测pattern的时候不看整张image,只看一个3 *3的范围内就可以决定有没有某一个pattern的出现。这个就是我们考虑的第一个属性(Property)。



3.2 属性2(Propetry2)

image.png

filter跟image怎么运作?

首先第一个filter是一个3* 3的matrix,把这个filter放在image的左上角,把filter的9个值和image的9个值做内积,两边都是1,1,1(斜对角),内积的结果就得到3。(移动多少是事先决定的),移动的距离叫做步长(stride——stride等于多少,自己设计)。


四、卷积和全连接之间的关系


image.png

convolution就是fully connected layer把一些weight拿掉了。经过convolution的output其实就是一个hidden layer的neural的output。如果把这两个link在一起的话,convolution就是fully connected拿掉一些weight的结果。


五、Max pooling


image.png

如上图,根据filter 1得到4*4的maxtrix,根据filter2得到另一个4 *4的matrix,输出,4个一组。每一组里面可以选择它们的平均或者选最大的,把四个value合成一个value,让image缩小。

image.png

如果选择四个里面的max vlaue都保留下来,这样可能会有个问题,把这个放到neuron里面,这样就不能够微分了,但是可以用微分的办法来处理。

image.png

做完一个convolution和一次max pooling,就将原来6 * 6的image变成了一个2 *2的image。这个2 *2的pixel的深度depend你有几个filter,得到的结果就是一个new image but smaller,一个filter就代表了一个channel。

image.png

这件事可以重复多次,通过一个convolution + max pooling就得到新的 image。它是一个比较小的image,可以把这个小的image,做同样的事情,再次通过convolution + max pooling,将得到一个更小的image。


这边有一个问题:第一次有25个filter,得到25个feature map,第二个也是由25个filter,那将其做完是不是要得到2 5 2 25^2252的feature map。其实不是这样的!


假设第一层filter有2个,第二层的filter在考虑这个imput时是会考虑深度的,并不是每个channel分开考虑,而是一次考虑所有的channel。所以convolution有多少个filter,output就有多少个filter(convolution有25个filter,output就有25个filter。只不过,这25个filter都是一个立方体)


六、压平(Flatten)


image.png

flatten就是特征图(feature map)拉直,拉直之后就可以丢到fully connected feedforward netwwork,然后就结束了。


目录
相关文章
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
20 7
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
本文旨在通过深入浅出的方式,为读者揭示卷积神经网络(CNN)的神秘面纱,并展示其在图像识别领域的实际应用。我们将从CNN的基本概念出发,逐步深入到网络结构、工作原理以及训练过程,最后通过一个实际的代码示例,带领读者体验CNN的强大功能。无论你是深度学习的初学者,还是希望进一步了解CNN的专业人士,这篇文章都将为你提供有价值的信息和启发。
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习中的卷积神经网络(CNN)及其在现代应用中的革新
探索深度学习中的卷积神经网络(CNN)及其在现代应用中的革新
|
7天前
|
机器学习/深度学习 人工智能 网络架构
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
25 1
|
9天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
14天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
12天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
43 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
15天前
|
机器学习/深度学习 人工智能 自动驾驶
深入解析深度学习中的卷积神经网络(CNN)
深入解析深度学习中的卷积神经网络(CNN)
32 0
|
1月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第7天】本文将深入探讨卷积神经网络(CNN)的基本原理,以及它如何在图像识别领域中大放异彩。我们将从CNN的核心组件出发,逐步解析其工作原理,并通过一个实际的代码示例,展示如何利用Python和深度学习框架实现一个简单的图像分类模型。文章旨在为初学者提供一个清晰的入门路径,同时为有经验的开发者提供一些深入理解的视角。
|
15天前
|
机器学习/深度学习 计算机视觉 网络架构
为什么卷积现在不火了:CNN研究热度降温的深层原因分析
纵观近年的顶会论文和研究热点,我们不得不承认一个现实:CNN相关的研究论文正在减少,曾经的"主角"似乎正逐渐淡出研究者的视野。
50 11
为什么卷积现在不火了:CNN研究热度降温的深层原因分析
下一篇
无影云桌面