8.NN特殊结构(1)——Spatial Transformer Layer

这里介绍三种特殊的结构:spatial transformer layer,highway network & grid LSTM,还有recursive network。
本节介绍:spatial transformer layer.

如下图所示,输入5和6,你把他直接放大或者旋转,对于CNN来说,他认为是不一样的。那怎么办呢?那中间加一个Layer,旋转缩放层,即spatial transformer layer,也是一个NN layer。它不仅可以transform输入图像,也可以transform feature map。

那么我们要怎么对一个image/feature map做transform呢?我们假设以下图左边这个image是transform前的结果layer l-1,右边这个image是transform后的结果layer l,很明显,这次转换是把image由上往下做了平移。

一般而言,一个全连接层的式子我们可以写成:a_{nm}^l = \sum\limits_{i = 1}^3 {\sum\limits_{j = 1}^3 {w_{nm,ij}^la_{ij}^{l - 1}} },第l层里面的每一个神经元的输出是a_{nm}^l。如果我们想做到以上的这个平移的转换,我们只要适当的调整权重w_{nm,ij}^l。那么什么样的weight可以让我们做到平移这件事呢?即:a_{nm}^l = a_{(n - 1)m}^{l - 1},如果i=n-1,j=m的话,w_{nm,ij}^l = 1,否则,w_{nm,ij}^l = 0,这样子就可以做到平移。

接下来,我们来做放缩:

下图上面是 将图像放大两倍的做法;下面是 将图像缩小,移到右上角的做法:

接下来,我们来做image的旋转:比如,逆时针旋转120度:

如果我们想要控制两张image之间的关系,我们要怎么做呢?如果只是旋转平移缩放的话,即\varphi tranform,我们其实只需要6个参数,也就是abcdef这6个参数,我们就可以把一张image变成另外一张image。即:神经网络的输入是一整张image,输出是一个六维的vector:[\begin{array}{*{20}{c}} a&b\\ c&d \end{array}][\begin{array}{*{20}{c}} e\\ f \end{array}]

那我们现在举一个实际的例子:


那么如果参数是小数的情况呢?如下图所示,我们计算出来结果是
1.6,2.4
,我们找个最相近的位置,如下图箭头所示:

上面这个近似有没有问题呢?
实际上,我们在做这个的时候,我们需要做interpolation。
1.6,2.4
是介于四个点中间的,如图所示:

我们不要把对应的值直接设成离它距离最近的那个点,如果直接设成,可能导致没有办法微分。所以,我们的做法应该是,
取那四个点做插值,如下图所示做法:

现在我们就可以用梯度下降解了,为什么呢?因为我们发现,当
6
个参数有细微的变化的时候,计算得到的左边的结果也会有细微的变化。第
l
层的
a_{22}^l
也会有细微的变化。

动画演示

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。