机器学习(四) 卷积神经网络

文章目录

  • 一、卷积神经网络(CNN)
    • 1.1 Image Classification
      • 1.1.1 CNN 的第一种解释
      • 1.1.2CNN 的第二种解释
      • 1.1.3 两种方法的比较
    • 1.2 池化层(pooling)
  • 二、self-attention
  • 三、结语

一、卷积神经网络(CNN)

CNN 是专门被设计在影像上的,如图像分类

1.1 Image Classification

当我们对图像进行分类的时候,图像的大小可能是不一样的,所以我们把他们的形状变得一样再丢尽=进网络中进行训练。而对图像的表示方法,我们可以用独热向量(One-Hat-vector)表示:[0 0 0 0 0 0 1 0 0 0 …]向量的长度取决于图像种类的数量,最终结果经过softmax后变成概率分布,概率最大为最终结果。
对于一张彩色图片,有三个通道(channels),我们可以把他看成由一个三维的Tensor组成,而当图像输入时,我们常常是将tensor拉直直接作为网络的输入:
机器学习(四) 卷积神经网络_第1张图片
上面可以简单计算输入一共有100 * 100 * 3个,当是进入全连接网络是,因为每一个神经元与每一个输入都要有一个weight,假如第一层有1000个神经元,那么第一层总共需要1000 * 100 * 100 * 3个权重参数,数量十分具大!机器学习(四) 卷积神经网络_第2张图片
参数越多,虽然会使网络的弹性越大,但也可能会导致过拟合,影响预测结果。我们可以看出全连接网络并不是很适合做影片识别,因为他每一个神经元都将图片的全部点都看过一遍,存在大量的重合部分,对于图片而言,其实他是有某一部分就能决定这张图片的种类,所以很多神经元是多余的。机器学习(四) 卷积神经网络_第3张图片

1.1.1 CNN的第一种解释

我们让一个神经元只看图片的一部分特征
机器学习(四) 卷积神经网络_第4张图片
如上述图片的神经元只看3 * 3 * 3部分的特征,而这个区域叫做Receptive field(感受野),而这样的话神经元只需要3 * 3 * 3个weight参数,参数量减少很多。而Receptive field是可以重叠的机器学习(四) 卷积神经网络_第5张图片
因为图片的所有调整我们都会看,所以只要关心感受野的高和宽进行,深度不用理,我们一般用kernel size(卷积核)去表示感受野,且我们是有一组的神经元去关照这个感受野的机器学习(四) 卷积神经网络_第6张图片
看完这个范围之后,我们要移动到下一个范围,但要移动多少呢,这由stride参数决定,一般来说取1,2机器学习(四) 卷积神经网络_第7张图片
当我们继续移动使,到后面就会遇到一个问题,就是感受野超过了图像的范围,我们会用padding的补值方法,以此下去,在看完横向之后,又会继续往垂直方向看机器学习(四) 卷积神经网络_第8张图片
补充:虽然笔记做得是理论知识的记录,但也要回到操作上,卷积神经网络的方法是
nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)
in_channels表示输入通道
out_channels表示输出通道
kernel_size表示卷积核大小,用f表示
stride表示步长,用s表示
padding表示填充的数目,注意一般填充时是整一个图片周围的填充,而不是某一维的填充,大小用p表示
首先做实验我们知道当padding为零的时候,图像在经过卷积神经网络之后是变小的,而如果我们能使padding的值合适,图像的大小是不变的。这就涉及到p的计算和输出图像维度n的计算,如以下公式:
p = (f - 1) // 2
n’ = [(n + 2p - f) // s] + 1
接下来再看看参数共享问题,我们知道感受野是由一系列的神经元来控制的,但也有一个问题是,因为生物是有共性的,比如说鸟都有嘴,如果我们在找每一张图片的鸟嘴时,都要一组不同的参数,那这样参数太多了,因为机器是在做着相同的事情,所以我们可以使在特定感受野不同的神经元的weight参数是一样的机器学习(四) 卷积神经网络_第9张图片
因为输入不一样,所以他们的输出自然也不一样。CNN的第一种解释可以这样简单的描述机器学习(四) 卷积神经网络_第10张图片

1.1.2CNN的第二种解释

对于卷积神经网络,就是按照卷积核的大小在图像中抓取部分的图案然后进行分析机器学习(四) 卷积神经网络_第11张图片
那又是如何抓取,首先卷积核是一个个的tensor,而他的数值是通过学习而来的,然后放到图像上,与对应的值做内积得到一个值机器学习(四) 卷积神经网络_第12张图片
然后卷积核会按照stride的长度往左右上下移动,全部做内积,最终得到一个新的图像Tensor,最后再用每一个卷积核做相同的过程,得到一个特征图机器学习(四) 卷积神经网络_第13张图片
我们可以得到的特征图看作一张新的图片,假如说有64个卷积核,那么新图片就有64个通道。我们用卷积核扫过整张图片的过程就是卷积(Convolution),对应的层叫做卷积层

1.1.3 两种方法的比较

机器学习(四) 卷积神经网络_第14张图片

1.2 池化层(pooling)

当我们把一张大的图片缩小,但是不会影响图片的性质,这就是pooling所能做的事情pooling中没有参数,他的行为是固定好的,类似激活函数,破零有许多种如:Min pooling、Mean pooling、Max poolingd等,这里记录Maxpooling
我们前面说过当经过卷积之后会产生新的tensor,我们再把得到的tensor分成分成许多的组机器学习(四) 卷积神经网络_第15张图片
Max pooling做的事情就是取出最大值,然后由这些值组成新的tensor,这样就可以达到缩小图片的效果
机器学习(四) 卷积神经网络_第16张图片
我们一般在做完卷积之后通常会搭配pooling,或者说我们一般会交替使用convolution和pooling
机器学习(四) 卷积神经网络_第17张图片
对于整个的CNN神经网络结果大概是下面这样,同时,在昨晚做完卷积之后,我们会加上几层的全连接层,经过softmax得到最终结果机器学习(四) 卷积神经网络_第18张图片

二、self-attention

哈哈,我搞懂了一点self-attention机制,所以来补充一下自己的笔记。
self-attention翻译过来就是自我注意力,注意嘛,不难推出其框架里面用到专注的概念,self-attention主要是用在NLP,下面我们来看一下机器翻译的例子:
英文句子:Tom chase Jerry 翻译:汤姆追逐杰瑞。
在分心模型中每个英语单词对翻译目标杰瑞的贡献相等,显然是不合理的,因为jerry对翻译出杰瑞的贡献更大,所以我们应该提高jerry贡献比例,这就是self-attention在做的事情。下面举例来说明self-attention的计算过程。
假如有两个词语需要被翻译,首先我们先将词语做Embedding进行初始化
在这里插入图片描述

随即我们需要对x1和x2进行编码,编码的过程就是计算上下文对当前单词的贡献,此时计算需要设计三个通过学习得到的矩阵,分别是:
Queries:表示需要带着他去寻找别人对我的贡献程度
Keys:表示等待着别人来寻找我与别人的关系深浅
Values:表示当前词语的特征
机器学习(四) 卷积神经网络_第19张图片
三个举证通过权值值来计算
机器学习(四) 卷积神经网络_第20张图片
第二步我们让当前的q1去与全部的单词的k矩阵做内积计算,得到全部词语对当前的词语翻译的贡献值。因为我们知道当内积为0时,表示两向量无关,因此内积值越大,则相关性越强
在这里插入图片描述
假设我们得到的向量是[5, 15],我们一般会用softmax将结果进行归一化,得到[0.25, 0.75],这样我们就得到了全部词语对当前词语的贡献程度,也就是相关性
第三步,将第二步得到的相关性举证与每一个v做内积求和,得到最终的特征贡献
机器学习(四) 卷积神经网络_第21张图片

三、结语

本来本期的学习笔记应该要从 CNN 记录到自注意力机制(self-attention),但是在学习后者过程中对其背后的原理没能彻底理解,所以在此并没有记录。日后等钻研明白之后再过来补充完整(已补充),哈哈,偷懒。学习笔记中定有许多错误之处,还望指教,共勉!

你可能感兴趣的:(笔记,深度学习,深度学习,pytorch,神经网络)