Auto-encoder做的自表达

再来补充点心得:


在auto-encoder中,先定义下形式,输入数据是x,encoder的激活函数式f,decoder的是h。cost function只是单纯的输出和输入的函数的话(不加任何的约束项、正则项)


如果隐藏层的节点数大于或者等于输入层的节点数,此时学到的往往是一个无用的表达,也就是不管你换什么输入数据,表达出来的都一样。想想也能理解,因为一个Y=AX 如果A的行数大于列数,其实找的是Y的一个比较近似的投影解。但是如果此时给X增加点sparse正则项,那么就有意思了。


如果隐藏层的节点数小于输入层,那么同时使用SGD来优化,也是可以的,因为效果等同于增加了L2的正则项。但是具体我还没分析过。


所以我们训练的时候,尽量就让隐藏层节点数小于输入层的。


如果输入数据时连续的话,不要让weight太大,因为太大的话,使用了激活函数,那么数据可能都是在线性区域,也就是出现的值没咋离散,不能用来很好刻画真实的情况。

如果是分类问题的话,就用大的weight这样让激活函数的值,区分性更加明显一点。


如果使用了L2的约束,其实得到的weight的值,本身也就不会很大。

你可能感兴趣的:(Auto-encoder做的自表达)