本来是阅读周志华在“2018京东人工智能创新峰会”的演讲和知乎上相关文章的一些心得和总结。
1 深度学习的兴起
深度学习是机器学习中使用深度神经网络的的子领域。机器学习是一门老手艺,神经网络更是热度几经起伏的传统技术。目前在文本、声音、图形(视频)处理领域应用越来越热,效果越来越好的深度学习技术,核心在于多层神经网络。
有多深呢?在 2012 年深度学习刚刚开始受到大家重视的时候,Hinton老爷子团队在ImageNet首次使用深度学习完胜其它团队时, 用了8层的神经网络。2014年的时候,Google做了22层成为冠军;2015时年微软是用了152层ResNet。
到了 2016 年是中国AI界的新型贵族商汤科技玩到了1207层。有必要那么深吗,还是商汤的噱头?当然,我们承认这是个非常庞大非常巨大的系统,把这么一个系统训练出来,难度是非常大的。
好消息是神经网络里面的基本计算单元(激活函数)虽然不一定是凸函数,但是一定连续、可微的,如sigmoid或relu。这样就可以很方便计算梯度,用经典BP算法进行训练,找到类似全局的最优解。
我们必须承认的是,目前的深度学习基础理论尚不明确,这也很多机器学习领域的老科学家不怎么care它的原因。深度学习更多的是展现训练机器,所有有那么多的深度学习实验室(工作室)。听上去高大上,不就是改改网络结构,调调参数吗,说白了也是体力活。
你从来没听说过SVM实验室吧?因为人家理论完备,参数空间没那么大,不需要这么折腾。所以从这一点上来说,传统机器学习方法的度量容纳不了现在的大数据。“抓到老鼠了”,深度学习就是好猫。
“体力活?nice,nice!”代码狗开心了,这是我砖长呀!
深度学习是如此的理论联实际。吴恩达采访祖师爷Geoffery Hinton都说::少看论文,绝对不要停止编程!
2 深度学习为什么这么深
一个直观的解释,从模型复杂度角度。如果我们能够增强一个学习模型的复杂度,那么它的学习能力能够提升。
如何增加神经网络的复杂度呢?要么变宽,即增加隐层网络神经元的个数;要么变深,即增加隐层的层数。
哪一种更有效?显然是后者。因为后者是用分布式表示的方法探究数据背后更本质的特征。
2.1 分布式表示
我们假设输入的数据,如图片、声音,是可以拆分为更为细粒度的因素的;更进一步的,拆分的因素更进一步的拆分,可以迭代变换。
聪明的你已经明白,这不就是多层神经网络吗?每一个隐层就是一次拆分呀。
是的。多层神经网络其实是加了两个先验知识:输入的原始特征是可以拆分(为更底层的factors)的,且可以迭代拆分。
这个迭代拆分可厉害了,可以自动学习特征底层factors之间的共享关系。
现在,可以把深度学习的先验总结为两点:factors可拆分和factors可共享。
这就是分布式表示的了,这里的分布式,也即分散的表示。
2.2 深度学习vs基于树的模型,此深非彼深
无论是randomForest还是XGboost,都可以产生非常复杂的模型,如果把一颗颗树的级联也看做“层”,也算是深度模型。但为什么效果不如深度(神经网络)学习模型呢?
- 原因1:深度不够。与动辄几百层的神经网络模型不同,决策树的深度有限,如果仅考虑离散特征的话,它最深的深度不会超过特征的个数。
这个理由有些牵强,深度不够,广度凑呀。我可以建立上千棵树的森林呀?重点还是在于下面原因。
- 原因2:基于前面的假设(或者说先验),深度神经网络模型不仅可以分层学习factors,可以学习factors间的共享关系。这种共享关系的学习,在原有的特征空间是学不出来的,需要引入特征变换。而基于树的模型都在原始特征空间折腾,没有进行任何特征背后factor的探索。
深度神经网络模型进行了哪些特征变化呢?
- 升维/降维
- 放大/缩小
- 旋转
- 平移
- 弯曲
有线性的,也有非线性变化。
3 再论深度学习模型的适用性
前面提到,为什么效果不如深度(神经网络)学习模型呢?这其实是不严谨的。
深度学习在什么数据上更适用?答:在具有深层特征表示的数据上有用。即前文说的两个先验假设能够适用的数据。
在浅层特征数据,如iris等表格数据,深度学习的先验不存在,也就没有特别的优势了。