您的位置:首页 > 其它

Deep Learning by Andrew Ng --- Sparse coding

2015-04-18 16:41 387 查看

稀疏编码介绍

稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据。稀疏编码算法的目的就是找到一组基向量 ϕi\begin{align}\mathbf{\phi}_i\end{align} ,使得我们能将输入向量 x 表示为这些基向量的线性组合:

x=∑i=1kaiϕi\begin{align}
\mathbf{x} = \sum_{i=1}^k a_i \mathbf{\phi}_{i}
\end{align}

不同于PCA,sparse coding目的是寻找一组“超完备”基向量而非“完备”基向量。也就是说sparse coding中k要大于n。

含了限制条件的稀疏编码代价函数的完整形式如下(参考UFLDL):

minimizea(j)i,ϕisubject to∑j=1m∣∣∣∣∣∣∣∣x(j)−∑i=1ka(j)iϕi∣∣∣∣∣∣∣∣2+λ∑i=1kS(a(j)i)||ϕi||2≤C,∀i=1,...,k\begin{array}{rc}
\text{minimize}_{a^{(j)}_i,\mathbf{\phi}_{i}} & \sum_{j=1}^{m} \left|\left| \mathbf{x}^{(j)} - \sum_{i=1}^k a^{(j)}_i \mathbf{\phi}_{i}\right|\right|^{2} + \lambda \sum_{i=1}^{k}S(a^{(j)}_i)
\\
\text{subject to} & \left|\left|\mathbf{\phi}_i\right|\right|^2 \leq C, \forall i = 1,...,k
\\
\end{array}

学习算法

使用稀疏编码算法学习基向量集的方法,是由两个独立的优化过程组合起来的。第一个是逐个使用训练样本 x 来优化系数 ai ,第二个是一次性处理多个样本对基向量ϕ\begin{align}\mathbf{\phi}\end{align} 进行优化。

可以使用 L1 范式 :S(ai)=|ai|1\begin{align}S(a_i)=\left|a_i\right|_1\end{align} 或L2 范式作为稀疏惩罚函数。(具体参考UFLDL)

根据前面的的描述,稀疏编码是有一个明显的局限性的,这就是即使已经学习得到一组基向量,如果为了对新的数据样本进行“编码”,我们必须再次执行优化过程来得到所需的系数。这个显著的“实时”消耗意味着,即使是在测试中,实现稀疏编码也需要高昂的计算成本,尤其是与典型的前馈结构算法相比。

目标函数

J(A,s)=∥As−x∥22+λs2+ϵ−−−−−√+γ∥A∥22\begin{align}J(A, s) = \lVert As - x \rVert_2^2 + \lambda \sqrt{s^2 + \epsilon} + \gamma \lVert A \rVert_2^2\end{align} s2+ϵ−−−−−√是∑ks2k+ϵ−−−−−√\begin{align}\sqrt{s^2 + \epsilon} 是 \sum_k{\sqrt{s_k^2 + \epsilon}}\end{align} 的简写。在给定 A 的情况下,最小化 J(A,s) 求解 s 是凸的。同理,给定 s 最小化 J(A,s) 求解 A 也是凸的。这表明,可以通过交替固定 s和 A 分别求解 A和s。其中包括weight decay还有smoothing parameter(sparsity parameter)。

该目标函数可以通过以下过程迭代优化(注意一种矩阵微积分的求法):

随机初始化A

重复以下步骤直至收敛:

根据上一步给定的A,求解能够最小化J(A,s)的s

根据上一步得到的s,,求解能够最小化J(A,s)的A

梯度下降方法求解目标函数也略需技巧,另外使用矩阵演算或反向传播算法则有助于解决此类问题

拓扑稀疏编码

我们拓扑希望稀疏编码能学习得到一组有某种“秩序”的特征集。

J(A,s)=∥As−x∥22+λ∑VssT+ϵ−−−−−−−√+γ∥A∥22\begin{align}J(A, s) = \lVert As - x \rVert_2^2 + \lambda \sum{ \sqrt{Vss^T + \epsilon} } + \gamma \lVert A \rVert_2^2\end{align}

稀疏编码实践(技巧)

两种更快更优化的收敛技巧:

将样本分批为“迷你块”

良好的s初始值:令s←WTx(x是迷你块中patches的矩阵表示)。\begin{align}s \leftarrow W^Tx (x 是迷你块中patches的矩阵表示)。\end{align} 或者

s中的每个特征(s的每一列),除以其在A中对应基向量的范数。即,如果sr,c表示第c个样本的第r个特征,则Ac表示A中的第c个基向量,则令sr,c←sr,c∥Ac∥.\begin{align}s中的每个特征(s的每一列),除以其在A中对应基向量的范数。即,如果sr,c表示第c个样本的第r个特征,则Ac表示A中的第c个基向量,则令 s_{r, c} \leftarrow \frac{ s_{r, c} } { \lVert A_c \rVert }.\end{align}

稀疏编码算法修改如下:

随机初始化A。

重复以下步骤直至收敛:

随机选取一个有2000个patches的迷你块

如上所述,初始化s

根据上一步给定的A,求解能够最小化J(A,s)的s

根据上一步得到的s,求解能够最小化J(A,s)的A

作业题

该作业需要我们自己对costfunction求导:






以后补充,未完待续。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: