西西河

主题:【讨论】中国首枚智能芯片问世 -- 红茶冰

共:💬41 🌺131 新:
全看分页树展 · 主题 跟帖
家园 送花,你说得没错,我说的也没错

这其实就是shallow和deep的区别,说说我个人的浅见吧,欢迎狠狠地拍砖

半路出家,没搞过ANN,就从SVM的角度来说吧,目前我们基本上可以认为,不管是ANN也好,SVM也好,Boosting也好,都是传统的shallow方法,具体做法可能不一样,但是效果都差不多

我们的目的,都是要拟合一个从输入到输出的映射函数y=f(x),shallow也好,deep也好,都是要干这件事情

最简单的情况是“线性可分”,也就是y=f(x)=<w,x>+b,但是现实中的问题往往没有这么简单,最常见的复杂性就是非线性。我们在SVM里是用kernel trick来解决非线性的问题,理论依据是假设有一个非线性一次函数y=f(x)(在二维坐标系中的一条任意波浪线),那么这个函数可以用无穷多个核函数的线性加权来拟合,y=\sum(<w,k(x)>+b)【注】,其实什么傅里叶变换、小波变换之类的,都是走的这个路子。现实中不可能用无穷多个函数来拟合,有限个核函数来拟合一条任意曲线,在限定核函数个数的情况下,拟合必然会有好有坏,怎样的核函数能够拟合得更好,这个问题就是流形manifold。你说的神经元大致可以用指数函数来表示,其实就是说ANN挖掘的结果是用指数函数来作为核函数,其实用任意非线性函数作为核函数都可以进行拟合,只是在有限核函数限定下拟合的好坏的区别

好了,在这样的条件下,我们认为\sum的数量、w、k(.)、b都是已知的了,于是y=f(x)这个函数就给定了,但是前辈们发现这样的映射函数虽然比线性的y=<w,x>+b表现更好,但是还是不完美,显而易见,这是因为k(.)函数太简单了,表达性不够,于是我们一般用k(g(x))来代替k(x),这里的g(x)就是特征提取,用人类的经验和智慧来手动增强核函数。到这里为止,就是传统的shallow方法在干的事情

g(x)的设计是一件很难的事情,耗费大量的人类时间精力,深度学习的提出就是说能不能用机器来自动学习g(x)函数呢?现实证明是可行的,虽然我们现在都不知道为什么可行,这就像原始人用石锤砸开了坚果,我们掌握了工具,但是并不清楚工具为什么work。回到g(x)上来,目前的事实说明一个好的g(x)是一个超出了我们理解的函数,但是这个g(x)也可以表达成类似于“核函数”的复合函数形式,g(x)=a(b(c(d(...(x))))),这里的a、b、c、d等就是我说的非常简单的函数比如y=<w,x>+b、y=max{x,0}等。一个非常有意思的现象,在这整个的复杂非线性函数g(x)里,非线性的部分其实只有y=max{x,0}这一个异常简单的函数而已,也就是说其实深度学习挖掘非线性核函数的策略非常简单,就是分段线性而已!对此目前没有科学的解释,但是有论文说从脑科学的研究上发现,人脑的非线性处理很可能也就是这么简单的y=max{x,0}。在此之前,我们也尝试过很多非线性函数比如sigmoid、tanh等,事实的表现上,用复杂非线性函数的效果,也并不比y=max{x,0}的效果更好,但是学习的收敛速度会更慢,至于为什么会这样,我们不知道。。。

这就是我理解的深度学习,以及为什么深度学习现在更像是一个工程而不是科学问题,因为里面有太多我们目前理解不了的原理,但这并不妨碍我们做出和使用这样的工具,因为工具里的组件像螺丝、钉子这些其实并不复杂

【注】这个加和的式子不是很严谨,但是懒得推导和修改了,不是太影响理解。另外,我们经常是用两个样本之间的函数K(a,b)=<k(a),k(b)>来定义核函数,这种情况下,k(.)虽然仍然存在,但是不一定有显式的表达,这里仍然用k(.)来表示,是因为相比K(.)来说要容易理解得多。这里也可以看出,对于计算机来说,一个虽然可以理解,但是无法表达的函数比如k(.)是实现不出来的,但是虽然无法理解,但是可以表达的函数比如g(.)却是能够实现的

通宝推:桥上,鲤鱼奶奶,shinji,红茶冰,乔治·奥威尔,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河