2017年11月,在多伦多的google大脑实验室的AI大神Hinton发表了一篇只有11页的短小论文 - 胶囊之间的动态路由,又称胶囊神经网络。 - 原文连接:https://arxiv.org/pdf/1710.09829v2.pdf
根据该论文描述和试验,对于部分经典图片分类算法有了一定提升。近期我也花了些时间玩了一下这个算法,并把该算法用于12306图片验证码的文字部分的识别,并将新算法部署到了 http://littlebigluo.qicp.net:47720/
经测试,同样数据集的情况下,跟之前普通的卷积神经网络相比,胶囊神经网咯的识别率确实有较大幅度的提升(文字识别率近100%),实测登陆成功率超过了98%.
新算法将识别文字的算法换成了胶囊神经网络,除识别率提升,还发现几个有趣的现象:
1.胶囊神经网络神经网络通过学习,居然能识别出部分手工输入的文字,如下图:
2.胶囊神经网络的抗干扰能力较强(普通卷积也有一定的抗干扰能力),如下图所示,文字部分加干扰或抹掉一半还能识别出来
3.在识别率有提高的同时,胶囊神经网络学习完成以后的权重只有卷积+全连接权重的 1/8,部署web大大节省了内存。训练时间大大缩短,只需要11个epoch acc就超过了99%。
胶囊神经网络与普通卷积神经网络到底有啥不同?具体算法可参见论文,以下仅仅从代码实现角度来做个入门级描述:
普通神经网络(卷积+全连接)训练或预测过程:
输入 一张图片
输出 一个N维的向量. 其中N是图片类别的个数.N维向量中,每个元素则表示该图片属于第几类的概率.比如第一个元素为0.3,则表示该图片属于第一类的概率为30%,以此类推。
胶囊神经网络(卷积+胶囊)训练或预测过程:
输入 一张图片
输出 一个N X M维的矩阵. 其中N是图片类别的个数,M是胶囊的维数 - 这个M值根据自己的胶囊模型来定义和选择.在文字识别的网络中,我选择了16.
N X M 的矩阵的意义 : 每一行(共N行,每行是个M维的向量)的模或者叫范数或长度,表示该图片属于第几类的概率.
比如[1,0.9,0.3,..........],计算一下该向量的平方和再开根号,得到该向量的模,则这个值就是该图片属于第N类的概率。
但这个M维的向量有何意义???这个向量正是胶囊神经网络的精髓:这个向量代表的该图片的方向和位置、旋转角度
比如图片1算出来的第i个向量为[1,0,0,0,0,0,0,.......],而图片2算出来的第i个向量为[-1,0,0,0,........],这2个向量的模相等,都等于 1,说明这2张图都属于第i个分类。
但注意到图片1和2第一个值符号相反,说明这2张图片是相互左右翻转或上下颠倒或位置有移动。
-- 普通的神经网络理论上也可以达到这个效果,训练时需要运用数据扩增(data augment),但data augment相当于人为增加了训练数据量,训练非常耗时,而且收敛很慢,
实测了一下,效果还是比胶囊差很多。
那为何只用胶囊识别文字,而不将胶囊神经网络用于图片部分呢??这正是我以下要说的,胶囊神经网络的缺点:
实验将胶囊神经网络用于12306图片部分的预测发现,其效果还行,但总体还不如普通的卷积+全连接网络。 -- 可能是我参数调测的不够好???
个人分析认为原因在于:12306图片部分比较变态,比如红枣,一个红枣、一堆红枣、甚至红枣装在盘子里都是红枣类别,但这三者图片差别太大,而且红枣缩小后跟红豆很难区别
不像文字部分轮廓基本类似,容易通过旋转、平移等变换来区分???
如果后续有新的发现,再跟大家分享。。。