CNN与为什么要做DNN(Deep neural network)(李弘毅 机器学习)

CNN整体过程

1.整体架构
在这里插入图片描述

  1. 卷积操作(convolution):可以进行卷积操作是因为对于图像而言,有些部分区域要比整个图像更加重要。并且相同的部分会出现在不同的区域,我们使用卷积操作可以降低成本。比如,我们识别鸟,鸟嘴部分的信息很重要,通过这个鸟嘴,我们就可以识别出这个是一只鸟。鸟不止一种类型,用很多种类,但鸟嘴都是大同小异的,所以对于鸟嘴的这个特征,我们就可以使用相同的函数进行识别,从而降低了成本。
  2. Max Pooling操作。可以进行池化操作的原因是我们对图像进行subsampling处理,不影响整个图像的处理。比如,我们对像素进行子取样。比如只取原来图像奇数位置的像素,从而得到了一张更小的图片,但是这种处理对描述整个图像是没有什么大影响的,但是却可以大大的减少了参数。
  3. Flatten.这个平坦化的处理就是将我们经过卷积和池化的最终进行进行处理,也就是把矩阵形式拉直变成一个向量进行处理,然后将这个向量作为输入,输入到全连接的网络中去。

卷积

1.首先定义一个卷积核,也就是过滤矩阵。这个卷积核里的值不是人为设定的,是机器学习出来的。我们根据卷积核的大小与输入矩阵对应大小位置进行点乘操作,根据步长移动卷积核,一次进行点乘,得到feature map。
在feature map中,值比较大并且相同的我们认为在原始图像中他们表示的是同一个特征。以下图为例:
在这里插入图片描述
这个我们的输入矩阵是66的。卷积核是33的,步长为1。有两个卷积核。
两个卷积核所以feature map是两层。可以看出,现在的feature map比原来的图像矩阵要小(44<66).我们上面的例子是对于灰度图像。下面我们看一个对于彩色图像的。
在这里插入图片描述
彩色图像有RGB三个通道。所以原始输入图像有三层,每个通道一层。而对应的卷积核也是三层,相当于一个立方体。

Max pooling

Max pool的思路很简单,就是对feature map进行分组,然后在每组中选出一个最大的值作为代表。
在这里插入图片描述
在这里插入图片描述
根据第一幅图用红色方框圈出的最大值,可以对应的第二幅的矩阵的每个元素。比如第一组在filter2下最大值为-1.这样一来,原来6 * 6 的矩阵变成了2 * 2的矩阵。

Flatten

我们将矩阵拉直,输入到全连接网络。
在这里插入图片描述

CNN 与全连接网络

在这里插入图片描述
其实就是输入矩阵拉直成向量,然后filter矩阵的元素作为相应连接到的边的权重。也就是只连接部分边的全连接网络。
在这里插入图片描述
我们可以发现,由于filter是共同的,所以权重是共享的,这样一来,计算参数就会少很多。

CNN学习的过程(存在疑问)

对于输入的图像,经过卷积操作,得到feature map。
对于第k个卷积核、11*11大小的feature map而言,我们首先可以求解
a k a^{k} = i = 1 11 \sum_{i=1}^{11} i = 1 11 \sum_{i=1}^{11} a i j k a_{ij}^{k} 然后求解
x x^{*} =arg max a k a^{k} 求解使得 a k a^{k} 最大的时候的x。这时候我们就可以考虑到使用梯度下降的办法: a k x i j \frac{\partial a^{k}}{\partial x_{ij}}

why Deep Neural Network

我们在保持参数相近的情况下,比较更宽和更高哪个更好。
在这里插入图片描述
事实上我们可以发现,更深的网络应用了一种模组化(Modularization)的思路。什么是模组化呢,我们拿写程序来举例。我们不会把所有程序都写在main函数中,我们会写很多函数,互相调用。这样一来,我们有一一些函数就可以共用提高效率。在更深的网络中,也是这样的道理。我们首先用第一层网络抽取很多的重要特征,第一层的输出是第二层的输入,这样一来,我们就相当于是共用了第一层抽取的结果。再比如说逻辑电路,我们本来用两个逻辑门可以实现任何布尔计算,但是实际上我们往往会采用多个门组合在一起,但当我们使用多个门的时候电路往往会更加简单和高效。DNN也是这样的道理,越深意味着每层的参数更少更加简单,这样也可以避免过拟合,用更少的数据完成相同的任务。因为采用DNN,可以更加有效的使用数据,我们可以对数据进行处理成我们想要的样子,比如像对折窗花那样将分散的数据简单分组。

端对端End to End

端对端意味着只要求输入与输出,不在乎中间过程如何处理。

猜你喜欢

转载自blog.csdn.net/BRAVE_NO1/article/details/83686280