深入理解CNN原理——改造后的全连接层

在李沐《动手学深度学习》视频中,对CNN原理做了讲解,从一个比较新的角度解读卷积神经网络,给人启发式的思考。本文是对该视频的笔记和总结,想要了解原著请见 :https://www.bilibili.com/video/BV1L64y1m7Nh/?spm_id_from=333.788.recommend_more_video.0

前言

如果您之前了解过卷积的原理,或者看过一些科普视频,请先把它忘掉,跟随本文的思路去探索卷积的形成,因为本文的描述角度和你在别的地方看到的可能是不一样的。

为什么要有卷积?

这一部分我们要从全连接层入手,去解读卷积的由来。
我们知道,一个单隐藏层的MLP的输入是一个一维向量。但因此当我们去解决图像分类问题时,必须先将一个二维图像矩阵去展开成一个一维向量,如此才能够作为MLP的输入。但是,这会产生两个问题:

  1. 图像的空间信息丢失。
  2. 模型参数爆炸。

空间信息丢失是二维矩阵展开到一维造成的,参数爆炸是因为,假设一张照片有12M像素(这是常见的),那么一张RGB图片就有36M个像素,即36M大小的一维向量。当这个巨长的向量的每一个分量,都有若干个权重与隐藏层神经元连接。假设隐藏层只有100个神经元,那也会产生3.6B个参数,这需要14GB的内存才能存储。

于是我们开始思考,能否通过改造MLP,从而解决MLP的这两个问题。
下面,我们就要开始动手去改造MLP。我们姑且把我们改造后的层,叫做卷积层。(如果你愿意,也可以叫阿猫层)
好了,让我们开始通过修改MLP,来产生我们的卷积层吧!

改造全连接层

深入理解CNN原理——改造后的全连接层_第1张图片
图一:MLP的结构

在传统MLP隐藏层中,假设输入个数为n,第j个神经元的输出应该是这样的
h j = ∑ i n w i j x i h_j = \sum_{i}^{n}w_{ij} x_{i} hj=inwijxi(忽略激活函数)

我们知道,这样的网络是不行的,我们改造后的网络应该是矩阵进矩阵出,而不是传统MLP的向量进向量出。

我们不妨运用一下类比的思想。

在MLP中,隐藏层神经元的形状是一维的,那么对应的,在我们卷积层中,隐藏层神经元应该是二维的,因为我们需要让输入矩阵中的每一个元素都有一个权重与之相连接,就如同在MLP中一样。

在MLP中,权重 w i j w_{ij} wij是一个二维张量,表示与第i个输入相连的第j个隐层神经元的权重。(a)

那么,在卷积层中,我们需要将权重变形为一个四维张量 w i , j , k , l w_{i,j,k,l} wi,j,k,l
那么在卷积层中,我们的(i,j)号隐藏层神经元输出为
h i , j = ∑ k , l w i , j , k , l   x k , l ( 公 式 一 ) h_{i,j} = \sum_{k,l}w_{i,j,k,l}\ x_{k,l}(公式一) hi,

你可能感兴趣的:(cnn,深度学习,计算机视觉,卷积神经网络)