声明:

本博客是通过观看李宏毅老师的youtu机器学习视频然后结合自己理解归纳出来的,后面的内容我可能也有说得不对的地方,还望指正,其中会用到老师视频里面的图片,如果大家想详细了解可以去下面链接去观看李宏毅老师的课(要科学上网)。

【機器學習2021】卷積神經網路 (Convolutional Neural Networks, CNN)

起(如何识别一张图片是猫):

我们如何辨识一只猫呢?答案是:我们通过观察猫所特有的部位,尾巴,眼镜,耳朵等等,这就是猫所拥有的特征(pattern),假设我们想要做影像识别,放入一张图片,然后让模型识别这是猫还是狗,同样的,也是跟人类一样,通过某一个或几个特征来辩识的这是猫还是狗,只不过我们给模型输入的一个向量,对于一张100*100图片来说,就是把图片分成rgb3个通道。每一个通道都有一个100*100的二维矩阵。而拥有3个100*100矩阵的东西呢,我们就叫做张量,所以张量简单理解就是一个超过2维的矩阵,我们就叫做张量(tensor),把这个张量拉长,就变成了一个向量,然后就可以作为输入丢进类神经网络去处理了,最终得到输出。

注意:我个人有时候会把输入和参数搞混,参数是不可知的,不要把输入叫做参数,参数有另外一个大家熟悉的叫法,也就是权重。

承(为什么会用到cnn呢)

假设我们现在把整张100*100*3的图片丢进类神经网络,在第一层网络的时候,有1000个函式每一个数值都会与一个函式相乘,每一次得到一个权重(basic),那么将会有100*100*1000=10^7的权重,权重越多就代表着这个模型的弹性(复杂度)越大,弹性越大就代表着这个模型越容易overfitting(过度拟合),往往可能会识别错误。所以,如果我们通过每次只提取一部分来作为输入,那么权重就会大大降低,我们要用到的操作就是卷积(convolutional layer),而用到卷积(convolutional layer)的network就叫做Convolutional Neural Network,也就是CNN

转(卷积雏形):

我们假设一个3*3*3的张量作为一个输入传给一个neurons(函式),每一个neurons都只负责自己的区域就好了,那么就会只有3*3*3只有27个权重,然后右边移一下,也是传给另外一个neurons,以此类推,当然一个3*3*3的张量可以有多个neurons,那么问题来了,比如说有2张图片,一个鸟嘴在上面,一个鸟嘴在中间,我们难道需要在上面放一个用来检测鸟嘴的neurons,中间也放一个检测鸟嘴的neurons吗,那不就是用不同的neurons做着重复的事情吗,这样就会增加权重,所以我们下面引入共享参数来解释

转(共享参数):

上面我们说如果每一个范围都放一个侦测鸟嘴的neurons,那么权重就会增加,那么我们就让他们共享参数,也就是权重一样,每一个张量都乘上一个neurons。

合(卷积操作):

所以假设有64个neurons,那么每一个3*3*3的张量其实都是乘上同一组的neurons,那么其实变成我们最普遍的说法,就是拿许多个个3*3的矩阵,当然也可以4*4 , 5*5,然后把每一个张量都扫一遍。然后可以拿出一部分拉直变成向量,然后丢进类神经网络,得到输出,或者是继续卷积都可以。

总结:

其实我们最做卷积的过程中就是一步一步的减少权重,避免过度拟合,从最开始的fully connected layer,就是每一个参数乘上每一个neurons,到receptive field,变成3*3*3的张量,再乘上各自的neurons,到最后共享参数,每一个3*3*3乘上同一个neurons,完成了卷积操作。

小记:

我也是尽量用通俗一点的话讲,中间可能讲的不太好,我自己知道但是不知道怎么形容,我建议大家先看一遍李宏毅老师的讲解会更好一点的,为什么不直接说啊啊啊卷积就是把一个3*3的矩阵扫一遍像素呢,一句话搞定,而是解释的这么麻烦,就像标题一样,我们要学会深入理解,一步一步的知道卷积背后的原理,感谢大家的观看,有什么不好的请指正。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐