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