前言
本文主要记录关于李宏毅机器学习2021中HW3和HW4的卷积神经网络和自注意力机制网络部分的笔记,主要介绍了CNN在图像领域的作用及如何处理图像数据,Self-Attention在NLP(自然语言处理)领域的作用和处理词之间的关系。
一、CNN卷积神经网络
前面介绍的FCN全连接神经网络是通过把一维的向量不断通过中间的隐藏层的multi和bias最后输出指定列数的vector,而图像这个多维向量是经过一个卷积神经网络最后再经过flatten展开成一维再通过FCN输出对应类别数的一个vector,而中间的CNN处理部分由Kernel——pooling——activation组成,当然CNN的提出是为了解决FCN解决不了多维向量大数据量输入的问题,FCN同样也可以解决图像但是前提是把这个多维的图像数据flatten展开后再输入,可想而知其数据量之大,如下图可表示为CNN大致的处理过程 如下图展现了使用FCN进行图像处理的数据量大的问题
Observation 1:第一个特别表现之处在于其处理数据的局部性,可以明显和FCN作比较,FCN对于输入的数据是把每个数据之间都进行了关联型处理,这样做的结果不仅数据量大计算量大而且冗余量大,因此CNN中使用filter这样一个卷积核实现局部相关性,不需要隐藏层中每一个神经节点都去负责全部的部分,只需要负责其中一小块部分就可以了,最后的时候,每个神经节点负责的部分再综合考虑起来就可以做到效益最大化,如图所示:
Observation 2:第二个特别表现的地方在于它的位置无关性,比如检测鸟嘴,但是鸟嘴在图片中的位置并不是统一的,这时候不需要去训练多个CNN网络去检测这个位置的鸟嘴还是那个位置的鸟嘴,CNN中只要鸟嘴存在图片中,不论哪个位置,可能当前神经元检测不出来,但是另外一个神经元就可以马上检测出来,这也和CNN的权值共享有关,虽然位置不同但是内容一样表示的含义一样,经过相同的权值就得到类似的结果检测出鸟嘴。
Observation 3:第三个特别表现的地方就是它特有的pooling池化,池化的主要目的就是减少数据量,多次的池化将要处理的数据不断减小,当然是把次要的特征砍掉,只保留主要重要的特征,池化有很多种,最大池化,平均池化等等,其实池化也是卷积的一种特殊操作而已。
通过上述说到的几个CNN相比较FCN特别处理之处就可以整理出CNN卷积神经网络处理图像数据的流程图了,如图所示图像经过多次的卷积池化卷积池化再Flatten展开成一维向量最后经过FCN输出类别。
CNN和FCN相比较起来,简化了许多流程,CNN也可以看成FCN的简单化,FCN看作是CNN的复杂化,CNN相比较于FCN引入了很多新的方法:卷积核,池化,权值共享,步长等等,CNN可以调整较多的超参数来获得更好的结果,比如调整卷积核大小,卷积核步长等等,CNN不再需要看整个image而仅仅需要看卷积核覆盖住那个区域的image,并且CNN更好地诠释了如何将图像特征一层一层的提取出来,当然这里就要说到feature map即特征图,特征图就是隐藏层中输出或提取出来的抽象图像。
可能看到围棋没办法让人联想到图像,但是AlphaGo将围棋整个19x19棋面作为image,而channel使用48,主要是围棋面上每个点可能可以走的路数各种可能性作为channel,因此ALphaGO总的来说输入19x19x48的一个围棋数据,然后将要接下去要走的棋子作为分类目标,哪个分类目标可能性大就走哪一步,但值得一提的是在AlphaGo中没有使用到Pooling操作,更多是在做padding,其实可想而知,在围棋这个场景下需要更精细的目标因此不适合将数据量缩小。
二、Self-Attention自注意力机制
语音和词语不同于图像等数据有直接的数字意义,通常也需要将语音转换成向量表达,最经典的就是one-hot编码,这样的编码方式固然简单但是会产生大量数据,因此又有了词嵌入式,相比于独热编码,一个词表示一个向量,词嵌入通过分类等形式将词向量表示的维度降低。
每个词代表一个向量那么对应的输出的label可以有多种,比如一个词对应一个label,一堆词组成一起对应一个label等等,那么这些词之间是互相关联的如果仅仅用FCN完全做不到进行词之间的互关,比如一个词可能有多个意思,但是在FCN中相同词相同向量必定是相同输出,但是在真实情况下并不是我们所希望的这样,因此需要引入词相关的概念,即在输入向量进入网络处理的时候需要参考上下文context
自注意力机制的具体计算形式主要是通过q,k,v三个参数,来生成attention score,生成的score是经过和其他的词向量进行关联相乘相加,值得注意的是自注意力机制的输入是一整个句子,而不是单个词向量输入,即自注意力机制处理的时候可以很好地把上下文进行关联。 对于不同的场景可能还会遇到一个词向量拥有多个head即一个词向量拥有多个参数
自注意力机制和CNN相比较其实两者很相似,自注意力机制不一定要用在语音领域也可以用在图像领域,其经过特殊的调参发挥的作用和CNN是一模一样的,简单来说,CNN是简化的self-attention,对于一幅图像而言,CNN只需要局部关联处理就行,而自注意力机制需要全部输入然后互关。
自注意力机制和循环神经网络共同的特点都是主要用于NLP自然语言处理,并且他们对于词上下文都进行了处理,主要不同之处在于RNN对于词输入仅局限于前文,对于后文照顾较少,而自注意力机制直接将上下文都关联照顾到,而且自注意力机制的处理是并行处理,词向量同时进入同时输出,因此整体来说自注意力机制更具有优势。
|