西西河

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

共:💬41 🌺131 新:
分页树展主题 · 全看首页 上页
/ 3
下页 末页
      • 家园 应该说不仅仅是FPGA

        FPGA仅仅是实现现在架构的一个方法,将来去流片更加经济。

        陈云霁、陈天石课题组在国际上提出了首个深度学习处理器架构寒武纪。而DianNaoYu则是寒武纪的指令集。DianNaoYu指令直接面对大规模神经元和突触的处理,一条指令即可完成一组神经元的处理,并对神经元和突触数据在芯片上的传输提供了一系列专门的支持。

        有模拟实验表明,采用DianNaoYu指令集的深度学习处理器相对于x86指令集的CPU有两个数量级的性能提升。

        走指令集--专用架构--硬件系统--软件系统这样的分层体系,有助于降低DeepLearning发展的门槛,提升经济可行性, 如果建成一个庞大的开放系统,中国可以成为DeepLearning的最大受益国。

        • 家园 好处主要还是在应用上

          做到产品里,功耗低,模型固定,价格也有希望降下来,嵌入起来应用广泛。这个也是intel收购那个谁的目的。IBM的那个是未来科技,与这个不挨边。好像百度上次作弊后出走的徐凯后来自己也在做这个。

          不过GPU也在发展,功耗也在降低,关键是机器学习现在对计算量的要求与日俱增,新的训练算法此起彼伏,甚至在GPU里也只有nVidia的体系被广泛接受,连AMD的都不成,否则也不会nVidia一家物美居奇了。上次提到的intel的Phi,这里好多人都是一通骂。其它的芯片当然应该鼓励,但是除非性耗比上有天壤之别的提高。

      • 家园 多谢回复

        首先 FPGA不管用哪家都仅仅是开发工具,实现功能化硬件的手段。

        要做FPGA必须有良好的政府背景才行,比方说京微雅阁。

        能流片了,肯定是对产品本身很有信心的,或许陈云霁已经拿到某方面的背书啦?

        直接希望出现一个开天辟地似的算法与架构还不如现针对某特定范围内的应用。比方说自定义网络(SDN)芯片之类。如果成功的话,既锻炼培养了队伍,又能明确了发展方向,同时还能挣些小钱钱~

        • 家园 呃。。。这个还真不好说

          对产品很有信心那是一定的,我也很有信心,因为深度学习里的计算太简单了,80%甚至90%以上的计算,就是一个y=<w,x>+b,做个算这个的专用硬件出来,找个学这专业的本科生都能干,何况别人还有研究员挂帅

          但是怎样把这些这么基本的运算组合起来,达到智能的效果,这个目前固定不下来,几个月就变了,硬件编程最怕这个。。。看看Altera这些是怎么做的吧,其实主要进步在于现在他们开发出支持openCL的编译器了,所以能够加快硬件编程的需求变更响应速度了,但这根本就跟硬件无关啊。。。

          当然针对特定应用是一个路子,但这不就是个横向项目么,跟“引领世界”有半毛钱关系啊?

          • 家园 所谓深度计算就是指多层次的神经网络系统

            其运算过程及其复杂,并非是什么加减运算。这么说吧:现有数学都无法用完整的公式把它描述出来。有些人用指数公式简单描述,更多的人干脆把它形容成“黑箱”。

            • 家园 深度计算极其复杂却又极其简单

              深度计算的整体公式是各层计算的复合函数,这个函数极其复杂,甚至已经超出了人类目前的理解能力

              但是各层的计算公式,也就是组成复合函数的各个子函数却又极其简单,比如我说的y=<w,x>+b,再比如y=max{x,0}

              我们要实现深度计算,不管是通过软件实现,还是通过硬件实现,其实都是实现这样简单的子函数而已,不可能也不需要去直接实现那个极其复杂的复合函数的

              • 家园 你懂神经网络吗?

                写过有关神经网络的code吗?

                不懂就不要瞎说。

                • 家园 CNN既简单又复杂

                  jahcoo说的没啥问题啊,通俗一点说,识别猫的过程就是给机器喂一堆猫的照片,卷积核通俗理解就是滤波器,比如将图片去噪,完全模糊等等,你可以认为是和美图秀秀反着干的,对机器来说越不清楚,特征就会浮现,每个滤波器只处理一种,所谓十几层神经网络就是十几个滤波器,后面就是分类器的训练了,上各种花招都是为了降低运算量,其实在算法确定的情况下,上FPGA就是最好选择了,mxNet项目为了玩这个GPU都要榨干。

                  然后给机器从未看过的猫的照片,机器“眼”中看到的是一个概率分布的图片,概率高的区域就是猫了,其实机器连猫是个啥都不知道。

                  目前DCNN(深度卷积神经网络)最为搞笑的地方是,需要人工去调节各种参数,比如上面提到的图片模糊一下,到底模糊0.1还是0.11,训练的结果是不同的,干这个活的又讲不清为什么,只好扯这都是黑箱了,这个trick是各家的秘密,打死也不能外传。

                  无论如何,这是一个巨大的进步,阿尔法狗一折腾,估计各种资源都会扑过去了,我是做工程的,但是我真的很期待搞理论的能把这个捋清楚了。

                  • 家园 你这是从工程应用方面去理解ANNs

                    我就从理论方面来解释ANNs的工作原理吧。

                    首先从网上下载一个人工神经网络的原理图。

                    最基本的结果是输入层,中间隐藏层,和最后的输出层。输入层对应多个输入因子,同时输出层对应多个输出因子。然后是对ANNs进行训练:给予大量已知的输入输出数值,中间的隐藏层就可以拟合出输入输出对应关系的模型。有了这个模型, 我们就可以算出对应新的输入的输出值。

                    举个例子吧:如果输入输出各对应一个因子,用x和y表示,那么我们就直接可以用regression方法去拟合一个xy的对应公式,最常用的是最小二乘法。如果这个xy关系是高度非线性,我们要用分段拟合和分步回归的数学方法去拟合。

                    好了,这是单输入单输出的情况,如果是多输入多输出的情况,用纯数学的方法就会及其困难。现在有了ANNs,它的每个中间隐藏层会有n个神经元,每个神经元粗略的可以用数学的指数函数来表示,我们可以认为每个隐藏层就是一个优化系统,你可以可用最小二乘法的理论去想象它的工作原理。这有可能是简单的加减逻辑运算吗!

                    现实的运用中,ANNs是多隐藏层,这样可以拟合出更好的模型。每个隐藏层的神经元的数量的多少也极大的影响模型的精度,这就是所谓参数调整:隐藏层的数量和每个隐藏层的神经元的数量。但现在更多的结合Fuzzy set 和Rough set去提高ANNs的精度和速度。同时可以用Monte Carlo 等等方法去辅佐优化,就像阿发狗一样。

                    够了吧!喔重要的一点是:在通用芯片上运行ANNs是费时费力的,所以智能芯片是个很好的发展方向。

                    • 家园 送花,你说得没错,我说的也没错

                      这其实就是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,红茶冰,乔治·奥威尔,
                      • 家园 这楼里只能看懂你在说啥

                        或许点的科技树比较接近吧

                      • 家园 唉,看着你的数学表达式真是着急,接砖头吧

                        不管是ANN也好,SVM也好,Boosting也好,都是传统的shallow方法,具体做法可能不一样,但是效果都差不多

                        我就知道ANNs,其余的名字不写全称我真不知道。那个shallow是指单隐藏层吧,deep是指多层隐藏层是吧。

                        我们的目的,都是要拟合一个从输入到输出的映射函数y=f(x)

                        这个函数没有任何问题。

                        最简单的情况是“线性可分”,也就是y=f(x)=<w,x>+b

                        这个表达式是定义x和y的边界范围吧,你确定x可以是无限大的变量,而y可以是无限小的变量?

                        那么这个函数可以用无穷多个核函数的线性加权来拟合,y=\sum(<w,k(x)>+b)

                        我思索了很长时间,终于明白你要表达的是一个分段函数,但你却用了一个多自变量线性加权函数。“sum”是summation的意思,是一个加法运算符号。给你个分段函数的表达式作为参考吧:yi=k(xi), where i=1, 2,3,。。。,n;这里的n表示分了n段。

                        “线性加权”这个词是用在多自变量的情况。公式可以是:y=sum(wig(xi)),where i=1, 2,3,。。。,n;这里的n表示有n个自变量, wi 是指加权系数。

                        ,目前的事实说明一个好的g(x)是一个超出了我们理解的函数,但是这个g(x)也可以表达成类似于“核函数”的复合函数形式,g(x)=a(b(c(d(...(x)))))

                        这个很好理解,比如我们有abcd四层隐藏层,那么第一层函数公式是y=a(x);第二层函数公式是y=b(a(x));第三层函数公式是y=c(b(a(x)));第四层函数公式是y=g(x)=d(c(b(a(x))))。

                        一个非常有意思的现象,在这整个的复杂非线性函数g(x)里,非线性的部分其实只有y=max{x,0}这一个异常简单的函数而已

                        y=max{x,0}是什么意思?比如x=100,根据你这个等式y=100.你认为对吗?

                        其实利用最小二乘法就能解释清楚,公式是 min(sum(sq(y-f(x))),就是最小化预测值和测量值之间的差距的平方。

                        在此之前,我们也尝试过很多非线性函数比如sigmoid、tanh等,事实的表现上,用复杂非线性函数的效果,也并不比y=max{x,0}的效果更好,但是学习的收敛速度会更慢,至于为什么会这样,我们不知道。。。

                        现实运用中,很多情况都是非线性函数比进行函数好用,不然还要这些非线性函数干什么?再者,线性函数关系并非加减运算,用线性函数运算当然比非线性函数速度快得多,这有什么不好理解的。

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

                        只问你一个问题:发明改进提高ANNs是工程师的工作还是科学家的工作?工程师的主要工作是应用,发现问题,解决实际应用问题。阿发狗的研发人员基本上都有doctor的头衔吧,有没有工程师的头衔呢?

                        通宝推:刹那芳华,
                        • 家园 您不是从事机器学习工作的吧

                          我就知道ANNs,其余的名字不写全称我真不知道。

                          您不是从事机器学习工作的吧,可能是工作中要用到ANN相关的工具,挑几个我觉得比较有价值的问题说吧

                          SVM全称是Support Vector Machines,支持向量机,理论依据是large-margin或者叫max-margin,这个在shallow方法里面可以说是理论基础最扎实的了

                          Boosting这就是全称,最常用的是AdaBoost,是用弱分类器组合构建强分类器的一种机器学习方式

                          那个shallow是指单隐藏层吧,deep是指多层隐藏层是吧。

                          这么理解可以算对,但也不全对

                          不是说多隐藏层就是deep learning了,不然的话深度学习早在90年代末就该搞出来了,不会等到现在

                          按照目前深度学习的理论,在90年代末及21世纪初的所有增加网络深度的尝试中,虽然增多了隐藏层,但是这些隐藏层会退化,就有点像多个线性函数相互嵌套,f(x)=a(b(c...(x))),如果a、b、c等都是线性函数,那f仍然是一个线性函数一样(这意味着对于n维的x来说,虽然每个子函数a、b、c都有n+1个参数,但真正有效参数仍然只有n+1个,参数可以大致等价于隐藏层的神经元;另外我只是说像这种样子,不是说ANN里面每一层都是线性函数哈),因此虽然隐藏层多了,但是因为会退化,所以深度仍然是1,特征提取的f(g(x))模型深度是2

                          深度学习是找到了一种隐藏层的叠加方式,使得网络在增加隐藏层时不会发生退化,所以在增多隐藏层时才能实质增加网络深度

                          我思索了很长时间,终于明白你要表达的是一个分段函数,但你却用了一个多自变量线性加权函数。

                          我承认我这个公式写得不严谨,但我要表达的肯定不是一个分段函数

                          我偷懒不推导了,参考一下深入浅出的讲解傅里叶变换吧,就是里面正弦波的叠加方式,或者说傅里叶变换就是以正弦函数作为核函数的函数拟合

                          现实运用中,很多情况都是非线性函数比进行函数好用,不然还要这些非线性函数干什么?再者,线性函数关系并非加减运算,用线性函数运算当然比非线性函数速度快得多,这有什么不好理解的。

                          我说的是收敛速度快很多,不是说运算速度快很多

                          收敛速度快按照梯度下降法,就是说梯度的方向选择好,前进的步长设定准确,而方向选择和步长设定都是机器按照规则设计自动完成的,为什么用y=max{x,0}能更好更准,反正我是理解不能

                          通宝推:shinji,
                          • 家园 不是主业,但也做过这方面的研究,发表过这方面的文章

                            从你的答复中可以明显看出你对神经网络的理论理解很弱,尤其是数学方面。你在上一帖中说

                            f(x)=a(b(c...(x))),如果a、b、c等都是线性函数,那f仍然是一个线性函数一样(这意味着对于n维的x来说,虽然每个子函数a、b、c都有n+1个参数,但真正有效参数仍然只有n+1个,参数可以大致等价于隐藏层的神经元;另外我只是说像这种样子,不是说ANN里面每一层都是线性函数哈)
                            就是明显错误的。即使ANN里面每一层都是线性函数,只要每层的神经元多于1个,那么复合函数f(x)=a(b(c...(x)))就是高度非线性的。

                            再有,关于收敛速度的问题,现今神经网络的工作机理无法用数学模型来表示,又如何计算收敛性收敛速度。

                            通宝推:刹那芳华,
分页树展主题 · 全看首页 上页
/ 3
下页 末页


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

Copyright © cchere 西西河