话不多说,直接开始。
想要改进卷积神经网络的话,首先得知道卷积神经网络的原理。而卷积神经网络可以看成是对全连接神经网络(MLP)的一种改进。所以归根到底还得看最开始最简单的神经网络是什么样的。
一、全连接神经网络(MLP)
全连接神经网络也称之为多层感知机,此处借鉴这位大佬的笔记,来丰富这个文章。原文链接深度神经网络(DNN) - 知乎 (zhihu.com)
一个神经元的示意图和相应的公式如下所示:
可以看到本质上这是一个线性变换,为了让模型更贴切实际问题,我们需要引入一些非线性的因素,模型采用的是激活函数。激活函数常用的有sigmod,relu等,这些函数的图像大概是这样的(图来自于:ReLU激活函数 - 知乎 (zhihu.com)):
这时候全连接神经网络正向传播过程已经做完了,接下来就是反向传播进行参数更新。这一步的公式如下所示:
其中最关键的是这个学习率,学习率的选取也是优化网络的一个方向,这方向做的人也很多。
接下来就是重复上述的工作,不断的更新参数,从而使这些参数更符合我们的使用。全连接是最简单的神经网络,但是它也有很多缺点,卷积神经网络(CNN)是一个非常出色的模型,在原来全连接的基础上做了改进,接下来我们来看看CNN的整个逻辑。
二、卷积神经网络(CNN)
卷积神经网络相比全连接神经网络有很多优化的地方,CNN一开始出来的工作是做图像识别的,所以很多特性也和图片有点关系。
它的优势大概可以这么总结一下(说的不是很全,挑重点说):
-
连接方式:全连接神经网络的每个神经元都与前一层的所有神经元连接,而卷积神经网络的神经元仅与局部区域的神经元连接。
-
权值共享:在卷积神经网络中,卷积层的权值是共享的,即多个神经元使用相同的权值进行卷积运算。这样可以大大减少参数数量。而在全连接神经网络中,每个连接都有独立的权值。
-
参数数量:由于权值共享和稀疏连接的特性,卷积神经网络的参数数量相对较少,可以更有效地处理大规模输入数据。而全连接神经网络的参数数量较多,容易导致模型过拟合。
-
空间结构的处理:卷积神经网络通过卷积操作和池化层等操作,可以有效地处理具有空间结构的数据(如图像)。而全连接神经网络无法利用输入数据的空间结构信息。
我收藏过一个讲CNN非常好的一个网站,和大家分享。CNN Explainer (poloclub.github.io)
如果你去网上搜卷积的公式,会得到各种五花八门的结果,有时候公式没那么好看,反而有时候看视频听人嘴说更好理解,我就在这里贴一个视频,视频是小视频风格的,几分钟一个,不会很枯燥大家放心。
“卷积”在计算机中是如何进行计算的?_哔哩哔哩_bilibili
2分钟让你清楚卷积神经网络 “卷积 ”过程~_哔哩哔哩_bilibili
简单来说,卷积的过程还是做了线性变换,也就是说,改进了原有模型的线性变换才得到了现在CNN。那么这一步如果从数学公式的角度来看的话,简化一下大概是这样子的:
那还能不能再简化一下呢,简化成更通俗易懂的样子,那肯定是可以的。我们可以看到,其实就是两个矩阵对应位置相乘再求和,其中一个是卷积核另外一个是输入的矩阵,卷积核我们称之为参数w,输入我们称之为a,那么上面的这个公式是不是就变成了下面这个:
是不是有点那个感觉了,当然,卷积神经网络也是需要偏置的,那么上面这个式子,和我们之前这个图片的东西,就差不多了。
所以说卷积其实也是在做线性变换,不过这个线性变换做的十分巧妙,能够达到以前没有的效果。以上就是卷积的大概思路。
下面就是进行池化,引入非线性因素,让模型效果更好,更贴合实际问题。这点和之前一样。ok,现在做完了非线性变换,下一步的操作是进行池化, 这一步的目的是减少参数。池化有很多池化,有的是取平均值,有的是取最大值,好的那么为什么不取最小值呢。
这就要谈到整个网络的逻辑了,经过前面的步骤加权求和之后的结果,我们称之为特征图,特征图里面的元素就是对应的输入图上位置的特征值,这个值越大,越代表这个特征是我们想要的特征。所以一般不取最小池化。当然也不是没有,在一些特定情况下也可以用最小池化,感兴趣的话可以去自己搜一下。
然后就是我们所熟知的反向传播更新参数:
三、总结
卷积神经网络的过程大概是这样的:
线性变换(卷积)非线性变换(激活函数)
减少参数(池化)
更新线性变换中用到的参数(反向传播)
反向传播我看的比较少,以后看了的话再补充。CNN通过模型进行特征提取,提取的方法就是更新参数,通过BP(正向和反向传播)更新参数,如果这个地方重要,那么参数就大点,如果不重要,参数就小点,甚至取0。本质上也算一种特征选择方法,然后将选择出来的特征拿去分类。所以可以看出来神经网络里面,参数是最重要的一个东西。
改进卷积神经网络有这么几个方向:
1.向前传播相关
1.1优化权重的选择(怎样找到更好的卷积核,或者如何更快的找到合适的卷积核)
1.2优化池化层
这里贴一个帖子深度神经网络中的池化方法:全面调研(1989-2020) - 知乎 (zhihu.com)
1.3优化激活函数(每种激活函数都有它的优点和缺点)
1.4尝试找新的线性变换方法(例如Attention就是采用了一种新的线性变换方法)
2.向后传播相关
2.1优化学习率的取值
2.2群智能方法确定参数(本质上都是求最优解)
欢迎大家批评指正。