西西河

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

共:💬41 🌺131 新:
全看树展主题 · 分页 上页 下页
家园 谢谢支持

顺便推敲几个细节

1、十几层神经网络不是简单就是十几个滤波器,一层神经网络一般有几十或者几百个滤波器(一个核就是一个滤波器),十几层网络可能有几千上万个滤波器。不同层的滤波器干不同层次的任务,比如第一层,目前比较一致的观点是在做边缘提取,再上一层大概是在做类似于角点、交叉点检测的任务

2、不是很清楚你说的DCNN中图片模糊一下是什么意思,是数据增强吗?除此之外好像很少看到有这样先模糊一下的。其实现在深度学习对于参数已经越来越不敏感了,参数一般会对收敛速度有所影响,对训练的结果现在影响不大。黑科技trick应该存在,但可能不是在参数选择上面

3、关于机器到底知不知道猫是啥,这个问题很有意思。类似于“色盲悖论”,如果机器知道一个毛绒绒的动物长成这个样子,叫起来是喵喵的,喜欢吃鱼,能捉老鼠,我们称呼它为“猫”,发音叫做mao,英文是“cat”,那机器应该算是知道还是不知道猫是啥呢?这才是深度学习被当作“人工智能新未来”的原因,等有一天网络规模足够大,各种各样的学习任务都在这个神经网络上并行地运行,我们拭目以待“人工智能”会不会自动涌现出来

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

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

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

家园 有人敲门?我去看看是不是你O(∩_∩)O哈哈~

你说的很直白,同时也证明团队里一定要有个逼格比较高的文艺青年负责写paper,只有这样才能将简要明了的东西弄得很有“范”这样资金就到手了。\(^o^)/~

滤波器工作方式是根据设定好的算法参数对图片上的特征值进行筛选,然后生成hash值。滤波器种类肯定有很多,既包含生物分析又包括灰阶扫描。其实这都是很成熟的应用。

不过我觉得真正核心的东西应该是关联性的建立,例如一幅图,和图里东西的名字算一对,另一幅图,和另一个名词算一对。如何实现,且有效运作,这个算法很头疼。因为这是机器逻辑性的建立。拥有逻辑才能有智力。

家园 如果把关联性本身看成是目标函数

那就简单粗暴地去拟合这个目标函数就好了,深度学习就是这么干的,给一幅猫的图,机器就应该输出一个值“猫”,给一幅狗的图就应该输出“狗”,至于怎样才能这样输出,机器自己学习去吧

现在给机器看一幅图片,甚至是一段电影,机器已经能够用一句或者几句话(自然语言)把图片或者电影的内容描述出来了,这其实也是几种“关联性”的整合

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

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

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

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

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

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

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

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

家园 多谢回复

首先感谢你和敲门童鞋热诚的回复,另外也感谢积吉,陈王,乔治童鞋热情参入。要是其他河友能踊跃参入讨论就更好了^_^

简单去拟合目标函数其结果注定是粗暴的。从实质上来分析,是成功模拟出神经/生物本能反应的关联性。这些项目的演进路线很明确,希望不断地学习/进化出现类似人类进化史上某种决定性的突变。但是 这些项目能否突变演化出逻辑上的自洽能力呢?

家园 深度学习本来就是工程问题

这一行纯理科生可是瞧不上的。

知乎上有个题目把这个话题说到尽了,看看吧。https://www.zhihu.com/question/41168257

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

这其实就是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,红茶冰,乔治·奥威尔,
家园 不看好

人类神经元的扇入扇出系数在5000-10000,CMOS在32-64。要实现巨大的扇入扇出就要用专门的驱动门,事实上是用面积换连接,而面积可直接兑换为计算能力。而巨大的扇入扇出也要求有巨大的神经元数量,太小的芯片面积没有意义。

因此来说,CMOS工艺下,专用ANN芯片和GP-CPU以及GP-GPU哪个运行大规模的神经网络模型哪个好,真的不一定。

家园 多谢回复

首先既然是专用芯片,那么芯片设计上可以专门为此做优化,比方说pipeline 以及把fanout分散在多个周期。因为算法是固化到芯片里的,事实上解算用到的流程和周期远低于通用型芯片。其实你可以将GPU也视作某种程度的专用芯片,因为GPU适用的计算模型范围远低于X86(尽管N家和A家为了扩大应用范围不断加大编译力度与工具,试图扩展市场。但是这与我所说的事实并不矛盾)

专用芯片追求的并不是应用范围与功耗,而是效率。这一点可以参考bitcoin矿机。更何况现在神经元芯片应用的设计理念很超前,以True North为例,它的内存、CPU和通信部件是完全集成在一起。因此信息的处理完全在本地进行,而且由于本地处理的数据量并不大,传统计算机内存与CPU之间的瓶颈不复存在了。同时神经元之间可以方便快捷地相互沟通,只要接收到其他神经元发过来的脉冲,这些神经元就会同时做动作。

就我个人猜测而言,陈云霁所开发的寒武纪或许还是常规类的电路设计?没有true north没么酷炫。不过这样也可以用来测试算法各种实际性能,毕竟 算法也是很重要的核心技术。从演进路线来说也是稳妥,无可厚非的。做个暂时的AI“矿机”我想也是可以接受的。

家园 大规模神经网络的瓶颈在内存带宽

神经网络节点运算极小,绝大多数资源花费在连接上。看大脑灰质与白质体积比例就知道了。而连接,在技术上的实现是数据传送。数据传送,在芯片内部是连线和驱动门,在芯片级别是内存带宽,在主机级别是网络。显然连线和驱动门是最快的,但是除非芯片规模可以达到无需多芯片并行的程度(对简单的任务是可能的,但是对“灵魂”这样的任务基本上没有希望),主要的数据传送手段必然不可能是连线和驱动门。只要存在片间通信,那么内存带宽就是瓶颈。现在的GP-CPU和GP-GPU,在各种cache架构的支持下,基本上可以保证运行大型神经网络时可以充分利用内存带宽了。在这种情况下,专用芯片有多少优势很值得怀疑。

不是说专用芯片不会提速,它甚至可能有数量级的提速,但是,通用芯片低廉的价格、完善的配套体系支持下,相同的成本,可能通用芯片的总性能会更高。单纯比面积,专用芯片可能会赢,但是工业化大生产的特性决定了通用芯片的成本会大大降低而专用芯片的成本会非常高。

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

不管是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,
家园 兄弟是搞软件的的吧?

因为你的思路完全是从软件角度来分析的。想让ASIC内存带宽利用效率好于CPU是个很艰难的目标,但是要比CPU低很多,只能说这个设计师的能力很一般了。

传统的冯诺伊曼结构的cpu,计算和存储是分开的。做传统硬件设计很大的力量都花在在两者之间搬移数据,要真的做ASIC,不能做成两者分开,如果分开就会永远卡在内存瓶颈,要做成计算和储存紧密结合的。

更何况ASIC不会受某些指令集的桎梏,不会因时钟周期使数据”排队等候“对内存利用率远好于CPU。如果CPU高效那么天河2号怎么会专门设计前端处理器对数据预处理呢?

至于价格只能说仁者见仁,智者见智了。目前确实专用硬件综合成本高。但未来这个成本会逐渐降低,生态,服务,软件都会跟上。

家园 现在的技术水平下,存储和计算要是能够做在一起,CPU早就

CPU早就做在一起了。何必要等到这个专用芯片呢?

CPU和存储的工艺根本就不通用,没法大规模的做在一起。

全看树展主题 · 分页 上页 下页


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

Copyright © cchere 西西河