tags
type
status
date
slug
summary
category
password
icon
An example of Bipolar HDC (MNIST)
- 基础算法
在MNIST数据集上,每一张图片28*28=784,每个位置0~255灰度值
position HVs: 784个,代表位置
value HVs: 255个,代表灰度值
pixel HV: 假设该像素位置为i,灰度值为
Image HV:
(1)这种编码方式没有充分利用位置信息,应该有某种编码方式满足平移不变性
(2)灰度值需要这么多不同的HV吗?是不是减少一些HV会有更好的表现?(因为相近的灰度值并不是表达截然不同的信息)
但考虑到经过加减之后,Im不再是正负1取值的,所以我们重新bipolarize:(但作者github代码似乎并没有实现这一步)
训练过程:依次处理每一张图片,把其Im加到对应类别的(associative memory)上。最后再用同样的公式再次把变成二值的
Note:在hdc中,AM就是模型的全部
重训练retrain:把所有图片都重新过一遍。如果当前模型预测结果不正确(假设正确的是y,当前预测结果是y_pred),那么把这张图片的Im从AM[y_pred]中减掉,并把Im加到AM[y]上
(1)这一步似乎只有之前没有二值化才能进行
(2)但从另一个方面想,其实就是利用了“反样本”去训练。那其实可以在一开始就把所有的“正样本”和“反样本”训练完
(3)这里的推理是基于原来的am进行,还是基于当前最新的更新过的am_进行?如果是后者,会不会收敛的更快?
测试过程:先把输入的图片用同样的方法encode成,计算其与所有之间的cos_sim,最大的就是预测结果
(1)计算两两之间的cos,因为各个HV模长不尽相同,需要大量计算量
(2)如果我们能保证取值都是正负1,那么各个HV的模长就是相等的,可以直接算矩阵乘法然后求最大值
- 实验结果
- 维度
每组超参数跑训练3次;如果测试集不是全部,则重复抽取测试集,测试10次。取这30次的极值和平均
1.1 不考虑二值化,没有retraining情况下,训练集随机抽取1500个,测试集随机抽取300个
dim=1024:75.0%~85.3%, mean=79.86%
dim=2048:75.3%~84.3%, mean=80.57%
dim=4096:77.0%~85.3%, mean=80.76%
dim=8192:73.6%~87.6%, mean=80.63%
1.2 不考虑二值化,没有retraining情况下,训练集仍然是1500个,但把测试集放到10000(这里每组超参数跑了5次)
dim=1024:78.89%~80.21%, mean=79.73%
dim=2048:79.40%~81.29%, mean=80.13%
dim=4096:80.37%~81.36%, mean=80.73%
dim=8192:80.54%~82.20%, mean=81.25%
测试集只有300个随机性太大了,规律不明显。后续就用全部测试集来测试了。
用了全部测试集之后规律还是很明显的:准确率的极值和平均值都随维度增加在稳定上升。
- retrain
retrain 0次、3次、5次、10次对比。维度取1024和4096作为代表
2.1 单次retrain中,基于更新前的am进行预测
ㅤ | dim=1024 | dim=4096 |
retrain-0 | 78.89%~80.21%, mean=79.73% | 80.37%~81.36%, mean=80.73% |
retrain-3 | 82.77%~84.19%, mean=83.66% | 85.03%~85.84%, mean=85.45% |
retrain-5 | 83.38%~84.01%, mean=83.62% | 84.60%~85.92%, mean=85.40% |
retrain-10 | 82.65%~84.23%, mean=83.60% | 84.84%~85.72%, mean=85.37% |
retrain次数太多有小程度的性能下降。但总的来说有比没有好。在相同retrain次数的情况下,依然是维度越高表现越好
2.2 基于am_进行预测,实时更新
ㅤ | dim=1024 | dim=4096 |
retrain-0 | 78.89%~80.21%, mean=79.73% | 80.37%~81.36%, mean=80.73% |
retrain-3 | 83.40%~84.02%, mean=83.74% | 84.32%~84.80%, mean=84.61% |
retrain-5 | 83.17%~83.98%, mean=83.61% | 84.63%~85.22%, mean=84.87% |
retrain-10 | 83.16%~84.01%, mean=83.59% | 84.46%~85.43%, mean=84.86% |
总的来看,实时更新效果不如2.1
- encoding
3.1 position HV应该互相正交,但value HV相邻的之间应该有很强的关联(每次翻转个来生成)
基于am
retrain-3 | dim=4096 |
old | 85.03%~85.84%, mean=85.45% |
new | 85.66%~86.91%,
mean=86.29% |
基于am_
retrain-3 | dim=4096 |
old | 84.32%~84.80%, mean=84.61% |
new | 85.34%~86.61%, mean=85.88% |
无论何种retrain方式,均有可信的提升!
- 作者:Tianyao Xiao
- 链接:https://www.xty27.top/article/hdc
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。