天天看点

《 Learning and Memorization 》之 LUT -- lookup table

我在网上没找到《 Learning and Memorization 》这篇paper的详解,所以下面基本都是我个人的理解,不对的地方请多多指教。

Memorization: Ability to remember training data, poor classification on testing data.

Generation: Ability to remember training data, good classification on testing data.

1 摘要

首先,摘要部分提出三个观点:

(1)增加网络深度可以提高网络性能

(2)随机数据可以被 memorized,而真实数据可以被 generalized

(3)一般来说,对于随机数据的 memorization 是要难于真实数据的

2 一个简单的 lookup table

《 Learning and Memorization 》之 LUT -- lookup table

左图:B={0,1} 对应的 Bk ( k=3 ) 时有7种模式;

中间图:lookup table。y0 与 y1 分别代表 output 为 0 和为 1 ,下面的值为 pattern p输出为 0 或 1 的次数;

右图:经过函数后生成的 truth table,具体函数如下图所示。“*”表示在 0 ~ 1 间随机选取的数。

结果表明,左图中只有第一个和第六个的值是对应不上的。

《 Learning and Memorization 》之 LUT -- lookup table

cp1 表示对应该 pattern p,output 为 1 出现的次数。

cp0 表示对应该 pattern p,output 为 0 出现的次数。

简单的 LUT 示意图( k=2 ):

《 Learning and Memorization 》之 LUT -- lookup table

3 网络型 LUT

数据集:MNIST

“0” 分类:数字 “0~4” ; “1” 分类:数字“5~9”

函数f:B28*28–> B

网络具体架构:

输入层:228*28

网络共有 d 层,前 d-1 为隐藏层,最后一层为输出层,每层都有 k 个输入。

在 1 <= l <= d 层,每层都有 nl 个lookup table,nd = 1

令 k=2,d=2,即 n1=2,n2=1,示意图如下。

《 Learning and Memorization 》之 LUT -- lookup table

在 n1 层,经过函数 f,分别得到 f10 和 f11 .

《 Learning and Memorization 》之 LUT -- lookup table

在 n2 层,经过函数 f,得到 f20 .

《 Learning and Memorization 》之 LUT -- lookup table

结果表明,左图中只有第一个和第七个值与网络预测的值是对应不上的。

该网络的优点:

(1)效率高,只需要计数和对 LUT 的查找,且不涉及浮点型数字。

(2)所有的 LUT 都是独立且并行的。

4 Experiment

4.1 Experiment 1

网络结构:

k=8,nd=1

隐藏层:d-1=5,nl=1024

《 Learning and Memorization 》之 LUT -- lookup table

第 0 层不对应 luts,对应的是输入:28*28

结论:

(1)随着网络层数的加深,accuracy 也随之增加

(2)隐藏层每一层的输入都是前一层的输出,输出的 accuracy 高于输入

对于网络的具体设计,作者有备注说:

在第 5 层,只需要 8 个 luts;在第 4 层,只需要 64 个 luts,但作者还未对其进行优化。

4.2 Experiment 2 & Experiment 3

网络结构:

k是变量,nd=1

隐藏层:d-1=5,nl=1024

《 Learning and Memorization 》之 LUT -- lookup table

有人提出 k=28*28 ,但其实 k 不用那么大,模型就已经训练得很好了。

真实数据(前三列):

在 k=2 时,模型的 accuracy 较低,memorization效果差。

随着 k 值的增加,模型的 accuracy 越来越高,且训练数据与测试数据间 accuracy 的差值也越来越小。

当 k>12时,测试数据的 accuracy越来越低,差值也越来越大,说明 k=12 时,模型效果最优。

k不是越大越好,而且 12 << 28*28。

随机数据(后两列):

随着 k 值不断地增大,训练数据的 accuracy 越来越大。

不管 k 值如何改变,测试数据的 accuracy 始终维持在 0.5 附近徘徊,偏差 < 0.05.

真实数据与随机数据的比较:

accuracy :真实数据( k=4 ) ≈ 随机数据( k=12 )

当 k=12 时,网络可以很好地 memorize 随机数据( 0.82 ),也可以很好地 generalize 真实数据( 0.99 )。

4.3 Experiment 4

与其它流行的算法进行比较。

《 Learning and Memorization 》之 LUT -- lookup table

从上述图中可以观察到,LENET卷积网络( 2 Convs, max-pooling, 3 FCs, 6 epochs, SGD )的性能最好。但 memorization 比其它算法,其 accuracy 是高出不少的。

4.4 Experiment 5

这个 experiment 用到了 Pairwise,我在网上找了个例子来解释 :

有一个数组 [7,9,11,13,15],按照最佳组合值为 20 来计算,只有 7+13 和 9+11 两种组合。而 7 在数组的索引为 0,13 在数组的索引为 3,9 在数组的索引为 1,11 在数组的索引为 2。

所以我们说函数:pairwise([7,9,11,13,15],20) 的返回值应该是 0+3+1+2 的和,即 6。

对于一个 10 分类的数据集,对其进行两两分类,可得到 ( 10 * 9 ) / 2 = 45 个分类。

《 Learning and Memorization 》之 LUT -- lookup table

在 experiment 2 中,当训练数据的 accuracy = 1 时,其测试数据的 accuracy 是减小的。

而在本实验中,当训练数据的 accuracy = 1 时,45 个分类中有 31 个 accuracy 达到 0.98 ,而最差的(难以区分 ”4“ 跟 ”9”)的 accuracy 也达到了 0.95。

此时, k=6 and k=8.

4.5 Experiment 6

改变网络深度。

《 Learning and Memorization 》之 LUT -- lookup table

在 experiment 5中,当 k=2 时,网络的区分度很低。为了加强网络性能,可以适当增加网络深度。

保持 k=2, 增加隐藏层个数从 20 --> 25。从图中可以观察到当 隐藏层个数 = 16 或 32 时,网络已具有良好的性能。

此时,luts 的结构非常的小,其训练数据和测试数据间 accuracy 的差值也越来越小。

4.6 Experiment 7

改变数据集。

数据集:CIFAR-10, 5000张

“0” 分类:数字 “0~4” ; “1” 分类:数字“5~9”

函数f:B3*32*32–> B

网络结构:

k=8,nd=1

隐藏层:d-1=5,nl=1024

《 Learning and Memorization 》之 LUT -- lookup table

对于这个数据集,memorization也保持良好的稳定性( train:0.79, test:0.63 )。

对于其它算法,表现得却不太稳定。在 MNIST 数据集性能好的,在 CIFAR-10 数据集性能变差;或在MNIST 数据集性能不好的,在CIFAR-10 数据集性能变好。

LENET网络性能一如既往得好,但是在 CIFAR-10 数据集需要 40 epochs。

4.7 Experiment 8

用到了 “Pairwise"。

《 Learning and Memorization 》之 LUT -- lookup table

得到最高的分类 accuracy ( CAT v/s DOG) 为 0.95,最低的分类 accuracy ( FROG v/s SHIP ) 为0.61,平均分类 accuracy 为 0.76。

4.8 Experiment 9

设置区域 [−2, 2] × [−2, 2] ∈ R2,以 x2 + y2≤ 1.6 为边界把数据分成两类。

用 10 位定点数来表示每一个点,所以函数 f :B20 --> B

隐藏层:d-1=32, nl =2048

《 Learning and Memorization 》之 LUT -- lookup table

当 k = 6 时,网络的性能表现得最好。

5 Conclusion

(1)在对 MNIST 与 CIFAR-10 这两个数据集进行分类时,Memorize的性能已不弱于一些传统算法。

(2)该网络的性能随深度的提升而提升。

(3)该网络可以 memorize 随机数据,而不能 generalize 随机数据。

(4)memorize 随机数据难于 memorize 真实数据。

继续阅读