摘要
本周学习了空间变换层(Spatial Transformer Layer)和self-attention(自注意力机制),Spatial Transformer Layer(空间变换层)是一种在卷积神经网络中引入空间变换的机制。它允许网络自动学习输入图像的几何变换,以提高网络的鲁棒性和性能。它可以通过学习如何对输入进行旋转、缩放、平移等变换,使得网络可以更好地适应不同的输入数据。空间变换层可以应用于许多计算机视觉任务,如图像分类、目标检测和图像分割等。Self-Attention 是 Attention 的一种变体,它允许模型在输入序列中的不同位置之间进行关联。自注意力机制可以多个输入,任意输出。对于Self-attention的整个运行过程来说,只需要从训练资料中获取k,q,v三个未知参数即可。Self-attention不仅广泛应用与NLP(自然语言处理),还可以运用于语音识别,图等。
Abstract
This week you learned about the Spatial Transformer Layer, a mechanism for introducing Spatial transformations in convolutional neural networks, and self-attention. It allows the network to automatically learn the geometric transformation of the input image to improve the robustness and performance of the network. It can learn how to rotate, scale and translate the input, so that the network can better adapt to different input data. The spatial transformation layer can be applied to many computer vision tasks, such as image classification, object detection and image segmentation. Self-Attention is a variant of Attention that allows the model to make associations between different positions in the input sequence. Self-attention mechanisms can have multiple inputs and arbitrary outputs. For the entire operation process of Self-attention, only three unknown parameters k,q and v need to be obtained from the training data. Self-attention is not only widely used with NLP (natural language processing), but also can be used in speech recognition, graphics, etc.
一.Spatial Transformer Layer
1.什么是Spatial Transformer Layer
Spatial Transformer Layer(空间变换层)是一种在卷积神经网络中引入空间变换的机制。它允许网络自动学习输入图像的几何变换,以提高网络的鲁棒性和性能。通过空间变换层,卷积神经网络可以自适应地对输入图像进行旋转、平移、缩放和扭曲等几何变换,从而使网络具备对输入图像的空间变化具有一定的不变性和鲁棒性。这对于处理不同尺度、不同角度和不同姿态的图像非常有用,能够提高网络在复杂场景下的性能和泛化能力。当我们把图像放大、缩小、平移、翻转的时候,如果训练数据中没有相关的图像数据(原始图像的变换数据),CNN的识别能力会大幅下降。这个时候,空间转换层 Spatial Transfer Layer 就派上用场。
2.How to transform an image/feature map
原始图数据进行旋转后,接入CNN前的最后一层,就是空间转换层。他是怎么做到的呢?
我们总结出公式:其中l是图片的层,i,j 是像素的index,n是行、m是列
所以,如果需要实现图形的平移操作,只需要修改 w n , m , i , j l − 1 w^{l-1}_{n,m,i,j} wn,m,i,jl−1的值即可。如下图,如果需要向下平移一行,那么当i = n − 1时,将w的值设置为1,其他情况下设置为0。
所以,图片的平移、翻转,都可以理解为通过一个NN进行实现:
2.Image Transformation
图片转换的方法,主要有放大、缩小,旋转。下图中首先把图片像素化,只需要进行一系列的坐标变化就可以实现图像的平移和旋转。如果我们需要放大图片,只需要将坐标乘2E后即可。缩小也同理。
在下图中,是把图片向左进行旋转,旋转多少度由自己决定,然后在原来的图像上乘上一个矩阵即可。
根据以上的例子可以看出,实现图像的平移、缩放和旋转等转换操作需要改变六个参数。这里的x,y是每一层输出的下标。通过矩阵的计算,就可以得到不同层的对应关系。但在实际计算中,当a、b、c、d、e、f的值为小数时,这个时候是不能进行Gradient Descent的,因为Gradient是一直为0的。
3.Interpolation
对于如果参数给的是小数的情况,我们不能进行Grandient descent,我们可以用Interpolation来解决这个问题。Interpolation(插值)是一种数值计算方法,用于在给定数据点之间推断或估计其他位置的数值。插值方法通过利用已知数据点之间的趋势或模式来填补数据点之间的空缺或缺失。
4.Spatial Transfer Layer 模型
图中的localisation net 就是产生Spatial Transfer 的6个参数,Grid generator 是产生图片转换的图形
二.Self-attention
1.input and output
到目前为止,我们network的input是一个向量,output是一个数值或者类别。或者输入是一组向量,而且这组向量的大小可以变,不一定都是同样大小的向量,output是一个数值或者类别。
文字处理,输入是一个句子,然后把句子中的每一个词汇用向量表示。一种方法是用One-hot Encoding把词汇表示成向量,但是这个方法存在严重问题,它假设每个词汇之间没有关系。另一种方法是用Word Embedding,在图中我们可以发现所有动物聚在一起,所有植物聚在一起,所有动词聚在一起。
声音讯号,其实是堆向量,取其中一个范围window,把里面的资讯描述成一个向量frame
此外例如:分子研究,Graph(图)都可以作为向量表示。
输出有三种情况:Each vector has a label(输入和输出数量一致),The whole sequence has a label(多个输入只有一个输出),Model decides the number of labels itself(机器自己决定输出的数量)
2.Sequence Labeling
我们用Fully-connected对输入进行处理,得到正确的输出。但是现在存在一个问题,当输入的词汇有两个saw时,,输出一个是动词,另一个是名词,但实际上是不可能有同一个输入有两个不同的输出。
改进: 联系上下文(window)或者考虑整个sequence
3.Self-attention引入
如果我们联系上下文无法解决,需要考虑整个sequence,这时如果使用原方法将会开出过大的空间,这时就需要引入Self-attention。
self-attention是一种在深度学习模型中捕捉输入序列中长距离依赖关系的机制。自注意力的核心思想是计算输入序列元素之间的相互关系,从而使模型能够关注到与当前元素有关的其他相关元素。Self-attention就是把整个sequence作为输入,输入多少个向量,输出也就多少个向量。然后把输出放入Fully-connected,得到最后的结果,现在的Fully-connected考虑了整个sequence。
Self-attention不是只能一次,可以叠加使用
Self-attention的input是一串vector,vector可能是整个network的input,也可能是某个hidden layer的output。如下图所示,图中的b都是考虑了所有a得出的结果。
要想得到b,首先考虑a2、a3、a4与a1的关联度α。
计算α的方法有Dot-product,Additive等,这里使用Dot-product:
如果我们需要计算α,将输入的两个向量分别乘上两个不同的矩阵 w q w^q wq和 w k w^k wk,得到q和k,q和k相乘并求和后得到相关性α。我们可以不使用Soft-max而使用ReLU,不过Soft-max比较常用。计算b只需要相关性α和v。
4.Self-attention过程
如下图所示,b1-b4不需要依照顺序产生,而是一次同时计算出来的。
计算b2的方式跟计算b1的方式相同,首先也是用q2乘k1,k2,k3,k4得到a,然后把a经过sotfmax处理得到,然后分别乘上对应的v再相加,就能得到b2。
如果要用矩阵运算表示的话,如下图所示,图中每一个a都会产生q、k、v,其中的q等于a乘上矩阵w,将a1-a4排列起来看作矩阵I,然后矩阵I乘上矩阵w,就得到矩阵Q(q1、q2、q3、q4),k与v的操作与之类似。
上图我们求出了q,k,v。计算 α \alpha α只需要k的转置和q矩阵相乘即可,然后用softmax得出相应的 α ‘ {\alpha}^` α‘。整个attention的表示形式可以用以下形式表示:
对于Self-attention的整个运行过程来说,需要学习的参数只有Wq、Wk、Wv,只有这3个参数是未知的,需要从训练资料中学习得到。
5.Multi-head Self-attention
相关这件事情我们用q去找相关的k,但是相关有很多不同形式,所有也许需要有不同的q,来做相应的操作。如下图所示,举例两个head的情况,当然有时候可能head用到1,我们会把q、k、v分别乘上两个不同的矩阵,然后分成两个不同的q、k、v,现在的操作和Self-attention的操作差不多,只是产生的q、k、v只与下标一样的一起计算attention分数,然后就会得到bi,1和bi,2,把它们组成矩阵乘上一个矩阵,得到bi。
6.Positional Encoding
因为Self-attention的输入没有次序的说法,当序列位置比较重要,可使用positional encoding,为每一个位置设置一个特殊的vector。每一列就是一个ei。,用ei来标记每个位置,有很多种方法来实现。
7.Many applications
Self-attention广泛应用与NLP(自然语言处理)
当然,他不止用在NLP上,它还用在其他很多方面,比如语音辨识,不过我们需要对Self-attention进行一些改动,因为我们要把声音讯号表示成向量的话,向量的长度会特别长。当我们要描述一段声音讯号时,它的vector sequence是非常可观的,这会导致计算Attention Matrix时,我们要计算L*L,如果L太大,就会大到无法训练。我们可以Truncated Self-attention解决上述问题,他可以只看部分,不看全部句子:
8.Self-attention for Image
CNN将image当成一个vectoe,也可以将image当成vector set.我们可以将它划分为一个个三维向量
CNN可以看作简化版的Self-attention,Self-attention可以看作复杂版的CNN,因为Self-attention考虑整个图片,CNN只考虑一小部分。在Self-attention中,receptive field不再是人工划定,而是可学习的。
9.Self-attention vs RNN
RNN要考虑输入序列的顺序,无法平行化,self-attention效率更高,且可以平行化,正逐渐取代很多RNN的应用。
10.Self-attention for graph
当Self-attention应用在Graph上,我们可以知道哪些向量间是有关联的,因此在计算Attention Matrix时,我们只需要计算与edge相连的node。
三.总结
这周我学到了空间变换层的概念和应用,只需要将图片像素化,只需要进行一系列的坐标变化就可以实现图像的平移和旋转,提高CNN的辨识能力。自注意力机制Self-attention是Transformer最核心的思想。自注意力机制的b不需要依照顺序产生,而是一次同时计算出来的。他能解决输入多个向量,且不知道输出结果的问题。对于Self-attention的整个运行过程来说,只需要从训练资料中获取k,q,v三个未知参数即可。