稀疏性(sparse)
定义:Sparse表示为模型内的参数中,只用很少的几个非零元素或只有很少的几个远大于零的元素。
WHY:
为什么模型中要包含稀疏性的特征呢?
例子:考研学霸有10000的词汇量,考试使用的词汇量,是10000个词汇积累库中的一小部分。
Example:
Test Number:123.456
第一组数字基底:
[100,10,1] ⇒\Rightarrow⇒ 123.456 ≈\approx≈ 100 ×\times× 1 + 10 ×\times× 2 + 1 ×\times× 3 (error=0.456)
第二组数字基底:
[100,50,10,1,0.5,0.1,0.03,0.01,0.001]
123.456=100 ×\times× 1 + 50 ×\times× 0 + 10 ×\times× 2 + 1 ×\times× 3 + 0.5 ×\times× 0 + 0.1 ×\times× 4 + 0.03 ×\times× 0 + 0.01 ×\times× 5 + 0.001 ×\times× 6(error=0)
其中 Sparse Feature(有备无患): 有50,0.5,0.03这三个数。
compared with PCA(Principal Component Analysis)
PCA(a complete set of basis vectors:完备字典)
通过这组完备字典中的向量基底,对原始数据进行还原。
Sparse Represnetation(an over-complete set of basis vectors:超完备字典,与稀疏性背道而驰。)
基向量的数量远远大于输入向量的维度
如何保证稀疏性呢?
机器学习模型⇒\Rightarrow⇒ 基于训练集优化参数(比如降低Loss) ⇒\Rightarrow⇒ Loss中加入正则项,惩罚模型参数数值使其趋近于0
常见的操作:
Loss = Training Loss + λ\lambdaλ ∣∣W∣∣0{||W||_0}∣∣W∣∣0 (L0{L_0}L0范式)
Loss = Training Loss + λ\lambdaλ ∣∣W∣∣1{||W||_1}∣∣W∣∣1 (L1{L_1}L1范式)
Sparce Coding(稀疏编码LOSS)
Loss = ∑j=1m∣∣x(j)−∑i=1kai(j)ϕi∣∣2+λ∑i=1k∣∣ai∣∣1\sum_{j=1}^m||x^{(j)}-\sum_{i=1}^k a_i^{(j)}\phi_i||^2 + \lambda\sum_{i=1}^k||a_i||_1∑j=1m∣∣x(j)−∑i=1kai(j)ϕi∣∣2+λ∑i=1k∣∣ai∣∣1
其中,∑i=1kai(j)\sum_{i=1}^k a_i^{(j)}∑i=1kai(j)是重构误差,λ∑i=1k∣∣ai∣∣1\lambda\sum_{i=1}^k||a_i||_1λ∑i=1k∣∣ai∣∣1为稀疏惩罚(L1L_1L1 Norm)
同样在卷积网络大行其道的时代,我们会在卷积层中加入L1L_1L1 范数,以确保其稀疏性。
增加模型的深度和宽度,以确保超完备字典更多。
无脑稀疏到底好还是坏?
超完备字典⇒\Rightarrow⇒ 大量的高质量数据。
过多的非激活参数 ⇒\Rightarrow⇒ 训练过程非常漫长
L1L_1L1范式在Loss中的某些位置不可导 ⇒\Rightarrow⇒ 导数在零处,导数不唯一,因而致使模型难以收敛
总之,在大规模深度学习的模型中,通常倾向使用L2L_2L2范式来防止过拟合。