0
点赞
收藏
分享

微信扫一扫

李宏毅2021机器学习笔记(八)

是她丫 2022-04-06 阅读 138
机器学习

CNN卷积神经网络——图像处理

输入给定相同大小的图片,

输出一个向量,n维向量可以辨识n种动物,但是我们输出的可能不是膜长为1的向量哦

那就需要分类的方法Cross entropy 去构造Loss

计算机世界中图像是什么?

张量tensor

可以理解为PS里面的通道层数

把三色通道写到一维数组就是右边这个        

其实是矩阵拼接起来的啦:100*100的矩阵竖着拼

但其实我们不需要去看所有的细节,我们只需要看:鸟嘴、鸟眼睛等区域就可以

那么我们就可以进行简化

那么这么选择一小块区域??

在CNN我们有如下做法

 

把这一块3*3*3的receptive field,变成一个27维列向量,传入Neural 

当然,不同的Neural可以守卫任意receptive field

receptive field也可以只包含一个channel,但是CNN一般不这样搞。

当然receptive field也不一定非要正方形

下面给出一个经典的receptive field

①会看所有的channel

②每一层的大小叫做kernel size。一般是3*3

 一个receptive field一般会有多个Neural守备

④新的receptive field 是上一个平移一个stride。如下

我们是希望两个receptive field是有重叠的 

 ⑤如果stride后超过边界了怎么办?做padding,也就是补零

实际上鸟嘴可能在图片任意部位出现,我们不同部位的Neural都有可能会负责监控鸟嘴,那么真的有这个必要吗?会不会造成功能的重复??        

 

 答案是肯定的。

只需parameter sharing

这样不同的Neural就可以通过parameter sharing,实现不同receptive field 的同一功能 

 每一个receptive field有很多(如64个Neural)每一个Neural就存在一组参数,我们的Parameter sharing就是Neural的共享,

记得之前说过,CNN限制了模型的弹性,具体如下,越内部就越限制弹性

这里说的限制弹性是参数削减 

CNN的model bias比较大,也就是CNN容易欠拟合,但是没有关系,因为图像识别中不希望过拟合,这样识别率太差了

如果监视整张图片,很容易过拟合啊,稍微改一点预测结果就很差了,所以我们更倾向于CNN的欠拟合model bias

另一种解释CNN

黑白图片channel是1,彩色的是3

那么我们先给 定不同的Filter,每一个filter都会抓图片里面的pattern(3*3*channel)

HOW???怎么抓

以黑白图片为例子

首先规定步长,试着匹配第一个receptive field,不行就增加一个stride。

其中匹配的步骤就是inner product(内积)         

每一次都会得到一个内积如下图

 上述例子中inner product=3的情况是完美匹配的,loss为0

然后在生成其他的filter

 

可以看到只有一个3是匹配的

这些矩阵也有个名字

 

如果说我们设置64个filter,那就会得到一个channel为64的 Image,每一个矩阵就是相应的feature map

我们再根据Image-1进行Convolution,构造3*3*64的filter

 

那么3*3是否太小了??

其实根本不会,在第二层3*3我们看见的其实在第一次是5*5,根据网络的不断叠加,我们会越看越大。

其实以上两个CNN解释就是一个东西

第一个版本的parameter sharing就是第二个版本的二层filter

注意!!!你看第一层的filter在遍历生成feature map 的过程中,会产生同样的数值,这就说明两个区域可以用同一个filter,就是parameter sharing!!

那么Convolution就是filter扫过整张图片的过程

 

 

pooling池化

CNN的另外一个技术

可以理解为裁剪

这里讲Max Pooling 

HOW?

比如说我们2*2分组,每一组选一个最大值这个就叫做Max Pooling,我们也可以进行平均池化or最小池化

 

 

一般我们做完Convolution之后得到一张很多channel的图片,然后做一次Pooling。主要是因为这样能够减少运算量,因为我们把图片变小了,等于是相当于降维处理。

一般来说不pooling效果好一些,现在很多人就直接full convolution

 

一般来说就是做几次Convolution做一次Pooling,降维。最后Flatten拉直,生成一个列向量 ,丢进Fully Connected Layers里面。最后根据Softmax得到分类

CNN下围棋

 

虽然Fully-connected network可以做,但是CNN更好。因为我们关注的是下一步,是个局部范围的变化第二点是,同一 pattern可以在不同位置

 

注意啊,围棋你可不能用Pooling,降维了就不是同一局,甚至不是一句围棋了

而且CNN是不能处理影像的放大缩小,因为在CNN看来就是不同的矩阵

 

举报

相关推荐

0 条评论