稀疏编码自编码表达
From Ufldl
(→[良好的s初始值]) |
|||
Line 121: | Line 121: | ||
无疑,这样的初始化有助于算法的改进,因为上述的第一步希望找到满足<math>Ws \approx x</math>的矩阵<math>s</math>;第二步对<math>s</math>作规范化处理是为了保持较小的稀疏惩罚值。这也表明,只采用上述步骤的某一步而不是两步对<math>s</math>做初始化处理将严重影响算法性能。 (TODO:此链接将会对为什么这样的初始化能改进算法作出更详细的解释) | 无疑,这样的初始化有助于算法的改进,因为上述的第一步希望找到满足<math>Ws \approx x</math>的矩阵<math>s</math>;第二步对<math>s</math>作规范化处理是为了保持较小的稀疏惩罚值。这也表明,只采用上述步骤的某一步而不是两步对<math>s</math>做初始化处理将严重影响算法性能。 (TODO:此链接将会对为什么这样的初始化能改进算法作出更详细的解释) | ||
- | === | + | === [可运行算法] === |
- | + | 有了以上两种技巧,稀疏编码算法修改如下: | |
<ol> | <ol> | ||
- | <li> | + | <li>随机初始化<math>A</math> |
- | <li> | + | <li>重复以下步骤直至收敛 |
<ol> | <ol> | ||
- | <li> | + | <li>随机选取一个有2000个patches的迷你块 |
- | <li> | + | <li>如上所述,初始化<math>s</math> |
- | + | <li>根据上一步给定的<math>A</math>,求解能够最小化<math>J(A, s)</math>的<math>s</math> | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | <li>根据上一步给定的<math>A</math>,求解能够最小化<math>J(A, s)</math>的<math>s</math> | + | |
<li>根据上一步得到的<math>s</math>,求解能够最小化<math>J(A, s)</math>的<math>A</math> | <li>根据上一步得到的<math>s</math>,求解能够最小化<math>J(A, s)</math>的<math>A</math> | ||
</ol> | </ol> |