我正在尝试使用TensorFlow从Karol Gregor和Yann Lecun实现this paper的学习坐标下降算法(LCoD)。该算法显示了如何使用小批量大小= 1执行正向传递(和向后传播)。我想将其扩展到更大的小批量尺寸。
在每个步骤中,(贪婪)坐标下降选择|Z - h(Z)|
的最大组件的索引,其中Z
是稀疏代码(N x C
)和h()
是近端算子,例如软阈值函数。 C
是字典中的组件/原子数。在论文N = 1
中,我想将其概括为N >= 1
。
在算法5的更新步骤中:
for all j in [1, C]: B_j = B_j + S_jk e(t)
k
是上面最大组件的索引。此步骤不容易执行,因为索引k
对于小批量中的每个示例都不同(同样,N = 1
不是问题,但N > 1
有问题。)
快速修复方法是将小批量分成N
行,将每行独立地输入到LCoD算法中,然后将所有N
行连接回一个完整大小的矩阵。但是,我想知道是否有更优雅的解决方案。在CPU / GPU上,我发现这个快速修复的前向/后向传播非常非常慢。