我正在尝试使用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上,我发现这个快速修复的前向/后向传播非常非常慢 .