自学人工智能辛德拉大招需要铺垫哪些知识做铺垫?如果有推荐书的话求推荐

16419人阅读
/question/#answer-100293
反对,不会显示你的姓名
计算机专业概念有点大。我本人毕业于国防科技大学计算机科学与技术专业,个人觉得就计算机科学与技术(CS)专业而言,以下这些是必修的:
1、计算机组成原理(包括先修课程“数字逻辑与数字系统”,简称“数电”):这是一门硬件基础课,学完后你能清楚的知道如何从用最简单的数字元件,像搭积木一样构成整个计算机系统,那就算及格了。&一门名为计算机体系结构是本课程的扩充包,对于了解近代计算机结构体系当然是必要的,但由于这里讨论的是Top 5,因此我认为计算机组成原理更为基础。
:在评论里有人让我推荐书目,我个人比较喜欢这本 Computer Systems - A Programer's Perspective (2rd Edition)。中文译本是《深入理解计算机系统》。在之前写的,本文最后的补充阅读中我也提过这本书。
2、线性代数,概率论和离散数学:要知道,凡是能称之为“科学”的专业,就必须有一定的数学功底,否则难以称作“科学”。这三门课我觉得是本科时期最重要的三门数学课,比高等数学重要。如果你想在计算机科学的道路上走远点,那这三门可是必修的。
3、MIT开设的《Introduction To algorithm》,中文版叫《算法导论》:我觉得应该学习它而不是国内习惯开设的《数据结构》。数据结构仅仅是算法的一部分,国内的数据结构课程回避了很多本质的东西,仅仅是对一些常见的数据结构的罗列,学起来总有些不痛不痒的感觉。《Introduction To algorithm》虽然有些章节夹杂着很多很让人讨厌的“数学”,但却能从本质上带你领略这门十分必要而且有趣儿的课。
4、操作系统与编译原理:操作系统可以说是《算法导论》的实验课,最好能在学习期间自己实现一个小型的操作系统,或者操作系统各分系统的Demo。编译原理可能是普遍本科生觉得难的一门课,但是作为CS本科生或者未来的软件科学家,这是基础中的基础,学完之后所有的语言在你看来应该没有太大的区别,这门课应该是离散数学+算法导论的实验课。最好能在学习期间自己实现一个小型的编译器,语言最好能自创,或者是某个已有的你喜欢的语言的基本子集。
5、掌握一门常用的编程语言和编程技术:能了解你用过的所有的程序内部大致是怎样的,能用你熟悉的语言编写大部分的程序,至少不能是对任何一个程序满头雾水。
以上这些不难做到,我觉得是基础中的基础,我固执地以为,不能掌握他们就不应该获得CS学士学位。&
补充阅读:
在评论中有位朋友这么说道:
一看就是典型科班好学生。人生很短,学自己要用到的就好。多花时间在2、3、5是对的,甚至任选其二就能让你受益良多、乐在其中。 1和4所起到的作用,比起它们的意义,更多的是让一部分学生从一开始就对计算机产生失望和绝望,是抹杀学生本来的兴趣的凶手。回到问题本身,既然是“应该学习”,1、4不该放在里面,即使不学它们,我想在计算机专业的大多数领域是做得下去的。
我想对此做个回应:
首先,我自认为不是典型的中国式的“典型科班好学生”。这里列出的Top 5不是为了成为“典型科班好学生”,因为光学好这5门绝不够“好”;更不是为了“在计算机领域做得下去”,我相信在某个计算机领域,比如作为Microsoft Office的金牌培训讲师,只要精通Office就能干得很棒。
这里列出的Top 5是作为一个计算机科学与技术专业毕业生该有的知识储备,是这个专业的根基。如果你对这个专业真正有兴趣,并且热爱它,那我认为学习这里列出的Top 5会是个不错的选择。
当然,对于一个计算机世界的从业人员,学好它们也会收益良多。比如对于程序员来说,操作系统与编译原理这门课能够让你对你的程序如何在计算机里出生,运行,死亡有个好的认识,在我的编程经验中,我觉得这种认识让我收益良多。很多朋友也许知道有一本经典的书籍叫“Computer Systems:A Programer's Perspective”,里面的基础就是来源于操作系统与编译原理。
还是那句话,如果你喜欢CS,这5门课是必须的,要是在这5门课上感到失望或者绝望,我想你该考虑换个专业了。
反对,不会显示你的姓名
直接学编程。
然后,在实际运用中慢慢补充各种知识。
“学习”没有“应不应该”之分,
让兴趣当自己的导师 ~
当他发现他自己写的排序怎么这么慢的时候,他自然会去学“数据结构和算法”;
当他想做一个自动抓取网页信息的robot的时候,他自然会去学“计算机网络”里数据包里有些什么;
当他对谷歌街景里的方向识别技术感到神奇的时候,他自然会去学“计算机图形学”和“线性代数”;
当他真的想知道CPU是怎么工作的,他自然回去学“计算机组成原理”;
如果用不到,没必要折磨自己。
在你感兴趣的方面,按我说的这样学习,我不信你成不了牛人。
同意的顶!
反对,不会显示你的姓名
1. 数学课 (概率,统计,微积分等等)
2. 语言课(java,c++)
3. 数据结构和算法
4. 计算机网络
5. 操作系统和编译原理
其实只要算法和数学牛,可以吃遍硅谷大多数的IT公司。
取消赞同156
反对,不会显示你的姓名
上面的回答都太理论,EE/BME背景的非计算机专业的小生认为实践乃是第一必修课,参考&和&&的现有网上课程(包括很多计算机相关的基础课、中级乃至高级课程),推荐毕业后不以科学研究(读博士,当教授)为目的的计算机前5门课程分别为:
1.计算机基础(推荐&)每周1天,大概6周就够了,了解下计算机基本原理,懂点简单的编程,并具体实践操作,从实践中体验计算机的魅力。
2.简单具体的编程实践(项目)课(推荐&建个搜索引擎),每周1天,大概7周就够了。学计算机专业的人不懂搜索那简直就是个大笑话,计算机专业有那么酷应用,活生生的摆在现实生活中,自己若能独立或几个人合作做个小项目,比如建个学校bbs上面可以用的小小搜索引擎,那比读一堆似懂非懂的理论然后n年后再来实践有效多了。
3.数据结构或算法导论(乃至概率统计、线性代数、离散数学),有了之前2门课程基础,再学数据结构和算法相关的,就没那么抽象了,边学边实践,继续以项目实践为方法,从数学理论的角度比较系统的学习相关的经典理论,站在理论的高度上去理解计算机科学,并加于实践、深入。(暂时没有学过的好的网上课程,不过估计这门课会不错&)学这门课程同时结合c、java或c++等语言来做项目,理论联系实践,只要功夫身,估计就可以毕业,并找到不错的工作了。
4.计算机网络或操作系统。信息时代,互联网、移动互联网时代,学计算机的不懂操作系统,不懂网络之间的通讯、协议,那会被别人笑话的,以实践为第一方法,通过项目实践来学习。(找不到合适的网上课程,推荐稍微有点点相关的实践课&&)
5.机器学习、人工智能。推荐&这机器学习课程是我学过的最牛逼相对通俗易懂,通过实践能收获很大的网上课程。另外推荐&跟世界上最牛逼的人工智能专家之一学点机器人应用估计再也不会觉得学计算机没用了,好好学正常前途无量,不管是在工业界还是学术界混。这应该算中高级课程了,能体现计算机与非计算机专业实力区别的好地方,继续强调实践动手(编程)能力,通过实践深入理解并掌握相关的理论知识。
最后多废话点,推荐1门以读博为目的高级课程,课程水平应该是属于研究生阶段的,但学好前面4门课程并掌握好本科概率统计基础课程的也可以开始学了,课程非常难、非常棒、也非常有用:
6.Probabilistic Graphical Models(&)。学了这门科,不管你是做图像分割、语言识别、还是搞生物信息学的,都大大有益。当然,这门课程绝对不是浮躁的人能学得来的,课程作业保证你累死累活的,不过若能努力坚持并完成里面的编程、测试作业,那成就感不用说,学完后,你的计算机科学水平估计超过国内99%以上的学生,甚至超过许多国内计算机系的教授水平。走工业界的话,在大数据(海量数据)分析时代,你应该很容易、有很多机会大展身手。
反对,不会显示你的姓名
1.&Concrete Mathematics&具体数学,绝对是计算机科学的数学基础“之一”,国内的计算机科学跟不上国外的一大原因,我始终认为是数学上的差距。
2.&Introduction to Algorithms&算法导论,所有的程序都需要算法作为基础,所以算法是不得不学的。
3.&Introduction to Computer Science and Programming&整体的介绍了计算机,同时也让学生了解CS能干嘛,自己该干嘛。
4.&Operating System Engineering&操作系统的重要性不言而喻,同时也介绍了编译器。
5.&Network&网络编程,中国 大学的本科生们有多少能熟练于网络编程。当今又有多少程序不需要考虑到网络。
just my opinion
其实还有很多需要计算机科学学生了解的~如 @苏衡 所说的写作,交流。
反对,不会显示你的姓名
业界所有从基础到前沿的文档,全是英语,英语不合格的人,或者不能流畅阅读英文技术文档的人根本不适合在该专业学习。所以我把它表明为 No. 1
2。编译原理与操作系统。
上面两个是你在实际工作中基本没多少机会去学,但是又非常有用的基础知识。另外,把编译原理学通要求你至少精通一种语言,因此我就不再单独列出需要学习什么编程语言了。
3。逻辑与数学建模。
如果有这样的课的话,应学,这本是国人比较缺乏的东西,但是作为程序员来说,又是必须要有的东西,用计算机的思想去思考现实中的事物与流程。
4。测试与用户交互。
如果有这样的课的话,应学,现实中,对很多产品,测试员成为最了解这个产品的人,他也最了解这个产品在用户手中看起来是什么样子,用起来是什么样子。也最能够理解下一款产品我们可能需要什么功能。不需要什么功能。
由于多了三个“与”字,我已经超五个了,就不说了。
取消赞同83
反对,不会显示你的姓名
本人现在是计算机专业大三的学生。结合自己学院课程的设置和个人的理解,想谈谈自己的看法,括号中是本校相关课程的教材和开设时间,毕竟学院这么多年教学,是有它开课的道理的。这里感谢张小兵同学的精彩答案。
1. 数学类的课程:离散数学(《离散数学教程》,北大出版社)
其实个人觉得图论是最有用的部分,无论是算法设计还是工程应用,而群论,组合学,数理逻辑部分却始终不知道具体如何应用,还得继续学习。至于线性代数和概率统计,同样重要,特别是线性代数体现了很多计算机的思维方式,不过相比于图论,个人觉得离散数学更重要。当然先修课程高等数学是必不可少的,甚至我觉得概率统计应该在高数学完后立刻学,不该拖到大三。
(高等数学:大一上下;线性代数:大一上;离散数学:大二上下,大三上;概率统计:大三上)
2. 硬件类课程:计算机体系结构(《计算机组成与设计》,David Patterson;John Hennessy著,机械工业出版社)
这门课是理解计算机内部的构造,指令体系的设计(基本是都是学MIPS的),流水线以及硬软件借口,学完该课程应该能自己模拟一个CPU或者Cache,其中的成就感是无法描述的。这门课在UC Berkeley是大一学的,从理解课程的角度,大一学生完全没有问题的,前提是改变学习的方式。
重点无疑是理解,上课时老师讲的一个例子是,我们统计数据的时候,平均数大多用算术平均数,在他博士时有一次发现算术平均数不对,需要用几何平均数才符合计算结果。虽然几何平均数我们初中就学会了,但是当时除了做不等式,我们基本从来没想过它有什么用,那次实验让他真正理解了几何平均数,也值得我们反思国内的教学。
事实上,目前从我们学院看来先修课程有数字逻辑设计和微机原理,其实内容很多重复,包括DRAM,SRAM讲了三遍等等。
(数字逻辑设计:大二上;数字逻辑设计实验:大二下;微机原理,微机实验:大二下;计算机体系结构:大三上)
3. 软件类课程:数据结构与算法(《数据结构与算法》,高等教育出版社)
事实上,如果大一开始学习的是C++语言的话,要想真正理解面向对象的部分,包括STL,容器等等,需要学习数据结构与算法。算法的学习确实很重要,也很有趣,但是对于大多数将来在企业工作的普通人来说,对于算法的追求绝不是ACM大赛上那种情形,更多的是基本知识,基本算法的掌握和应用。而学好了数据结构与算法这门基础课,对你理解C++大有裨益,最大化地发挥了C++的特点。这里补充一点,这门课和图论同时学习效果会更好。其实学好了C++之后对于其它语言的学习也会很有帮助。
(计算概论:大一上;程序设计实习:大一下;数据结构与算法:大二上;数据结构与算法实习,大二上;算法设计与方法:大二下)
PS:我们算法设计与方法课用的教材是:《算法导论》(应该是MIT那本教材),同时正好也是室友和他导师翻译的最新一版,推荐阅读。
4.编译原理(《编译原理》,北大出版社;推荐使用:龙书,虎书)
编译原理看上去很枯燥难懂,特别是对词法,语法的分析等。虽然将来只有一少部分人会从事这方面工作,但是对于你理解各种编程语言会获益匪浅,训练的是基本的素质和能力,一般学完这课之后,能够自己实现编译器,比如我们专业编译实习课做的是一个基于Android平台的mini java编译器。
(编译原理:大二下;编译实习:大三上)
5.操作系统(《现代操作系统》,Andrew S. Tanenbaum著,机械工业出版社)
实话说,我在上课的时候,更多的是觉得这课有点像一门科普课,但是每次的实习作业却和上课完全不同,需要自己去查API,寻找算法,一般是Windows和Linux两个平台作业。个人觉得作为一个学习计算机的人,对操作系统的理解是必须的,将来的用处也会很多。个人最大的感受就是学会查找API,并且使用,完成大量的数据处理,这和之后一系列的开发都很有关,同时增加对Linux的熟悉。学完该课应该能自己实现一个小型操作系统,比如我们专业操作系统实习要求做的是一个小型Windows。
(操作系统原理:大三上;操作系统实习:大三下)
当然,除了这些,最好还能掌握JAVA语言,其实作为一种入门语言,我一直觉得可能JAVA比起C++更有优势,毕竟漂亮的图形界面比起黑框显然更能引人入胜,当然有了C++的基础,学习JAVA相对是会轻松的,JAVA学习前期不推荐使用IDE。至于其他的语言,国外那套经典的动物书是最好的选择了,自学应该没有问题,可以考虑一下LISP这门函数语言。除此以外,像网络,汇编,数据库类的课程都是根据个人的兴趣爱好而定了,并非基础课程。
(JAVA,大二下,推荐书籍:疯狂JAVA讲义,虽然名字很俗,但是确实900页的书说的非常详细,深入浅出,很到位;程序设计技术与方法,大三上,计算机程序的构造和解释,俗称SICP)
总之,计算机专业的学习还是需要一个循序渐进的过程,追求系统的学习,对某些知识一定要理解深,挖得透,用我们体系结构老师的话,你要做一个沉在水底的人,而不是浮在水面上。你用一个月学习的东西,也许只够你用一个月,你用三个月学习的东西,可能够你用一年,但是你用十年学习的东西,一定够你用一辈子。
反对,不会显示你的姓名
0.学会使用搜索引擎的正确姿势
1.眼保健操
3.怎样才能减少熬夜
4.怎么找女朋友
英语,汇编,c,Linux,任意一种脚本语言。
英语不多说了,国内想获取点信息,你会发现链接很多但翻来覆去都是那一篇,而英文资料众多。特别推荐stackoverflow,上面提问的响应速度简直让我惊呆了,而且人普遍nice。
推荐汇编并不是要求汇编写的多好没事就抓起一段代码优化,而是快速了解计算机体系结构和组成原理。是的,快速了解,我觉得大学体系结构和组成原理明显是架在云彩上的课程,很少有机会实践,而汇编是实践的绝佳途径。学明白汇编,好多问题就想明白了,最有名的例子就是c里的指针。
c语言是高级语言里最基础的,一切都是遵照计算机的本质来实现语句。解释一下,比如好多人抱怨,为什么c在使用数组之前必须声明好大小,有些语言都可以动态分配?其实动态分配的也是先声明大小,只是不够用了就在开辟一块内存。因为是最朴素的,所以执行效率最高,高阶的编程人员都会用c来编写一些对性能有严苛要求的模块。
Linux看似不好用,但其实对程序员十分友好,而且可以高度定制,谁用谁知道。对于命令好不方便的地方,一般发行版都会有图形界面,二者互补。
学一门脚本语言的原因是脚本语言能轻松完成各种功能,任何功能都有库支持,我记的Python的发明者对初学者的建议是:“你要会做轮子,但千万别自己做轮子。”懂你熟练运用库加上正则表达式,你会发现生活如此美好。
题主问的是前五位,并不是仅五个,这里之所以没提算法,数据结构等经典科目是因为我觉得要先用得到,才会对知识有获取的欲望,当你写的东西效率低的时候,你自然就会去找算法去看了,内碎片化严重,自然就去找数据结构看了,其他经典科目同理。
以上是我个人理解。
反对,不会显示你的姓名
想到的第一个是:表达能力训练课
俺见过不会表达(语言、文字)的计算机工程师,太多了
反对,不会显示你的姓名
计算机组成原理:了解计算机硬件是怎么跑起来,怎么让软件怎么工作的。
操作系统:了解一下整个系统是怎么管理的。
计算机网络:互联网时代,怎么也要知道网络是什么吧。
C语言:建议是C,帮你了解程序是怎么运行的,基础的写代码读代码的能力。
数据结构与简单的算法:了解一些常见的编程方法与思想
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:17513次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'人工智能有个严重问题:它说不清自己为啥这么牛!
【AI世代编者按】虽然人工智能可以解决很多问题,但由于这种技术存在“黑盒子”问题,因此没有一个人能够确切知道它的内部运作方式,因而可能引发严重问题。去年,一辆古怪的无人驾驶汽车开上了新泽西州蒙茅斯郡宁静的道路。这辆实验用车是由芯片制造商开发的,它的外观与其他无人驾驶汽车别无二致,但与()、特斯拉和通用汽车展示的系统不同,这辆汽车证明了人工智能的强大能量。它并没有遵循工程师提供的任何指令,而是通过观察人类司机的驾驶方式,完全依赖算法自学成才。让一辆汽车自学成才确实令人惊喜,但也带来了一丝不安,因为我们并不完全清楚它是如何制定决策的。车身传感器收集的信息会直接传输到巨大的人工神经网络,在那里处理数据,然后生成相应的指令,引导汽车操纵方向盘、刹车和其他系统。最终的结果似乎符合你对一个人类驾驶员的预期。但如果它有朝一日做出什么令人意外的举动,比如撞到路边的树木,或在绿灯前停止不动,那该如何是好?以现在的情况来看,可能很难找出背后的原因。人工智能系统十分复杂,就连设计它的工程师都难以分辨某个具体行动背后的逻辑。你又不能直接向它询问原因:目前还没有一种明确的方式可以设计出这样的系统,从而随时解释它每一步行动背后的原因。这种汽车的神奇思维引出了人工智能领域的一个若隐若现的问题。这辆汽车的底层采用了名为深度学习的人工智能技术,最近几年的许多研究都表明,这项技术很擅长解决很多问题,而且已经广泛部署在图像说明、语音识别、语言翻译等诸多领域领域。还有人希望用同样的技术诊断恶性疾病,制定数百亿美元的交易策略,甚至通过数不清的其他方式改变一个又一个的行业。但除非你找到一种方式,让它的开发者充分理解深度学习技术,并对用户肩负起应负的责任,否则这翻畅想就无法实现——或者说,不应该实现。如若不然,就很难预测何时出现问题——毕竟,按照目前的设计,这些系统肯定会出现问题。但英伟达之所以仍在测试,却有它自己的原因。各种各样的数学模型已经可以帮助人们在假释、放贷和招聘领域制定决策。如果你可以评估这些数学模型,那就有可能理解它们背后的逻辑。但银行、军队和雇主现在都把精力转向了更加复杂的机器学习方法,使得自动化决策流程变得完全无法理解。作为其中最常见的一种技术,深度学习与以往的计算机编程截然不同。“这个问题已经凸显出来,今后还将越来越受重视。”麻省理工学院机器学习应用教授多米·加考拉(Tommi Jaakkola)说,“无论是投资决策、医疗决策还是军事决策,你肯定都不希望把权力交给一个‘黑盒子’。”有人认为,向人工智能系统质问其结论背后的原因是一项合法的基本权利。从2018年夏天开始,欧盟可能就会要求相关企业具备相应的能力,以便向用户解释自动化系统的决策理由。这或许难以实现,即便是对那些表面看来相对简单的系统也同样如此,包括那些使用深度学习技术投放广告和推荐歌曲的应用和网站。这些服务所使用的电脑采用了自我编程模式,外界无法理解它们的行为方式。就连负责开发这些应用的工程师也无法解释它们的行为。这便引发了许多难以置信的问题。随着科技不断进步,我们可能很快就会跳过某个门槛,到那时,必须要给予人工智能极大的信任才能顺利使用这些系统。诚然,人类很多时候也无法解释我们自己的思维过程——但我们却可以通过各种各样的方式利用直觉来信任或评价他人。但对于这些思维和决策方式都不同于人类的机器来说,有没有可能实现这一点呢?我们之前从未开发过连它的创造者都无法完全理解的机器。我们能否与这些无法预测、无法理解的机器展开顺畅的沟通,保持和睦的关系?带着这些问题,我开始研究谷歌、和很多公司的人工智能算法,还找到了一位当今时代最伟大的哲学家。医学尝试2015年,纽约西奈山医院(Mount Sinai Hopital)决定用深度学习分析该院庞大的病历数据。这个数据集里包含病人的数百个变量,都来自他们的检测结果、医生面诊等环节。由此催生了一个名为Deep Patient的项目,它利用70万病人的数据进行训练,然后对新的病例展开测试:结果显示,它在预测疾病方面表现十分优异。在没有任何专家指导的情况下,Deep Patient挖掘了隐藏在医院数据中的各种模式,甚至可以借此了解人们何时有可能患上肝癌等各种疾病。在西奈山医院负责这个项目的乔尔·杜德利(Joel Dudley)表示,有很多方法都很适合通过病例来预测疾病。但他也补充道,“这种方法效果好很多。”与此同时,Deep Patient也有些令人疑惑。他在预测精神分裂症等精神疾病方面的表现出奇得好,但由于精神内科医生向来很难预测精神分裂,所以杜德利想知道,这套系统究竟是如何做到的。他至今没有找到答案,这套新系统没有透露出任何理由。如果想让Deep Patient真正为医生提供帮助,最理想的情况就是阐述这种预测背后的逻辑,确保整个过程精确且有事实依据——例如,医生给某人开具的处方药物是否发生了某种变化。“我们可以开发这种模型,”杜德利说,“但却并不知道它是如何工作的。”人工智能并非总是如此。最初,关于可以理解、可以解释的人工智能应该是什么样子,出现了两派观点。很多人认为,最有意义的机器应该根据规则和逻辑做出判断,这样一来,任何愿意了解代码的人都可以理解它的内部工作原理。还有人认为,如果机器从学领域获得启发,通过观察和经验来学习,就更容易实现智能。这就意味着把编程任务交给机器自己来完成。解决问题时,不再需要程序员编写命令,而是由程序根据样本数据和渴望的输出结果来自主生成算法。已经成为当今最强大人工智能系统的机器学习技术就遵循了后一条道路:本质上是由机器自主编程。这种算法起初的实际应用范围非常有限,在年代,还仅限于一些边缘领域。之后,很多行业的电脑化普及和大型数据集的涌现重新点燃了人们的兴趣。这也推动了更加强大的机器学习技术的发展,尤其是新一代的人工神经网络。到1990年代末,神经网络已经可以自动对手写字母进行数字化处理。但直到这个十年初期,经过了一系列聪明的调整和提炼之后,真正大规模——或者真正“深度”——的神经网络才在自动感知领域实现了重大提升。如今的人工智能爆发都要归功于深度学习,它为计算机赋予了无与伦比的力量,包括实现与人类相似的口语能力,这种技术非常复杂,根本无法通过手动编程来实现。深度学习还改变了计算机视觉,并大幅提升了机器翻译效果。它现在可以用于引导医疗、金融、生产等各个领域的关键决策。黑盒效应与手动编码的系统相比,机器学习技术的工作方式天生就很模糊,即便是对计算机家来说也同样如此。这并不意味着未来的所有人工智能技术都会同样难以理解。但从特性上看,深度学习的确像是一个“黑盒子”。你无法通过直接研究深度神经网络来了解它的工作模式。神经网络得出的推论,嵌入在成千上万个模拟神经元的行为之中,它们组成了数十甚至数百个杂乱相连的不同层次。第一层的每个神经元都负责接收输入信息,例如一个图像中某个像素的强度,然后通过计算来输出新的信号。在复杂的网络中,这些输出结果会进一步成为下一层神经元的输入信息,如此往复,直到生成整体输出结果。另外,还有一个被称作反向传播的过程,可以通过调整个别神经元的计算让神经网络学会生成期望的输出结果。因为深度网络有那么多层,所以可以从不同的抽象层面认识事物。例如,在一套专门为了识别狗而打造的系统中,底层神经元可以识别轮廓或颜色等简单的元素,较高层次的神经元则识别皮毛或眼睛等更加复杂的元素,最顶层则负责识别狗这个整体。简单来说,同样的方法也可以用于处理其他任务,从而让机器实现自学,包括说话时构成语音的声音,在文本中构成句子的字母和单词,或者开车时转动方向盘的动作。现在出现了一些具有独创性的策略,试图捕捉并详细解释这类系统中发生了哪些事情。2015年,谷歌研究人员修改了一套深度学习图形识别算法,使之不再识别照片中的物体,而是生成或修改这样的物体。通过反向运行这种算法,便可了解算法在识别鸟或建筑时使用了哪些特征。这个名为Deep Dream的项目生成的图片,呈现出动物从云朵和植物中浮现的奇异效果,还有宝塔从森林或山脉中盛开的幻觉效果。这些图片证明深度学习并非完全不可理解,同时也表明这些算法把注意力集中在熟悉的视觉特征上,包括鸟嘴和羽毛。不过,这些图片也透露出深度学习与人类知觉的差异,正因如此,人工智能往往可以利用那些被我们忽略的信息。谷歌研究人员指出,当算法生成哑铃的图像时,还生成了一个抓着哑铃的人类胳膊。这表明机器已经认定,胳膊也是哑铃的一部分。进一步的发展是因为借鉴了来自神经科学和认知科学领域的想法。怀俄明大学助理教授杰夫·克鲁尼(Jeff Clune)已经部署了相当于人工智能的光幻觉来测试深度神经网络。2015年,克鲁尼的团队展示了如何利用某些图片欺骗神经网络,使之得出错误的结论,原因在于这些图片利用了系统所寻找的底层模式。作为克鲁尼的合作者,詹森·尤辛斯基(Jason Yosinski)也开发了一个像插入大脑的探针一样的工具。他的工具瞄准了神经网络中的任意一个神经元,然后寻找对其激活程度最高的图片。结果出现了一些抽象的图片(就像印象派画家绘制的火烈鸟或校车),凸显出及其感知能力的神秘特性。事关重大但我们需要的不只是一窥人工智能的思维方式,而且这个问题并不容易解决。深度神经网络中的运算之间的相互影响才是高层次模式识别和复杂决策过程的核心,但这些运算是一片由数学函数和变量构成的沼泽。“如果你有一个很小的神经网络,或许可以理解它。”加考拉说,“可一旦规模巨大,每一层都有数千个单元,或者总共拥有数百个层次,那就完全无法理解。”加考拉办公室隔壁是雷吉纳·巴兹雷(Regina Barzilay),这位麻省理工学院的教授致力于把机器学习应用于医疗领域。几年前,当时43岁的她被诊断出乳腺癌。诊断本身令人震惊,但更令巴兹雷失望的是,没有人使用尖端的统计学和机器学习技术为肿瘤学研究提供帮助,或者引导病人的治疗。她还表示,人工智能拥有很大的潜力改革医疗行业,但她也意识到,这项技术的潜力不仅局限于病例。她还希望使用更多尚未充分利用的数据,包括影响数据、病理学数据以及各种各样的信息。在去年结束了癌症治疗后,巴兹雷和她的学生开始与麻省综合医院的医生合作开发一套系统,可以通过挖掘病理学报告来寻找那些具备研究人员感兴趣的临床表现的病人。然而,巴兹雷发现,系统需要解释自己背后的逻辑。所以,她与加考拉和一个学生增加了一个步骤:这套系统会把它认为代表某种模式的文本片段提取出来,并加以强调。巴兹雷和她的学生还开发了一套能够通过乳房X光片找到早期乳腺癌迹象的深度学习算法,他们希望让这套系统具备一定的解释能力。“的确需要让机器和人类展开协作。”巴兹雷说。美国军方也投资数十亿美元,希望使用机器学习来控制汽车和飞机、识别目标、过滤海量情报数据。这一领域甚至比医疗行业更期待透明的算法,所以国防部将可解释性视作一大关键障碍。美国国防部高等研究项目署(DARPA)的项目经理大卫·冈宁(David Gunning)负责一个名为可解释人工智能(Explainable Artificial Intelligence)的计划。作为该部门的一位银发老兵,他之前在DARPA负责的项目最终促成了Siri的诞生。冈宁透露,自动化已经渗透到无数的军事领域。情报分析师正在测试机器算法,希望通过大量的监控数据判断各种模式。很多无人驾驶汽车和飞机也在开发和测试过程中。但士兵可能不会喜欢这种无法解释自己行为的机器坦克,而分析师在按照这些没有明确逻辑的信息采取行动的时候,也可能有所迟疑。“从这些机器学习天生就容易发出错误警报,所以情报分析师需要额外的帮助来明白系统为何会给出某条建议。”冈宁说。今年3月,DARPA从学术和工业界选择了13个资助项目,纳入了冈宁的这个计划。其中一些项目会以华盛顿大学教授卡洛斯·古斯特林(Carlos Guestrin)的成果作为基础。他和他的同事开发了一种方法,可以让机器学习系统阐述其输出结果的基本原理。也就是说,借助这种方法,电脑会从数据集中自动找到一些样本,然后给出简短的解释。例如,一套用于寻找恐怖分子邮件的系统,可能会在训练和决策过程中使用数以百万的样本信息。但利用华盛顿团队的方法,便可突出显示在信息中找到的特定关键词。古斯特林的团队也针对图形识别系统设计了一些方法,通过标注图片上最重要的部分来暗示它们的判断逻辑。保持谨慎但这类模式的缺点在于,系统提供的解释往往过于简单,因此可能缺失一些关键信息。“我们尚未真正实现目标,那就是让人工智能与我们对话,向我们解释。”古斯特林说,“我们距离真正能够解读的人工智能还有很长距离。”即便不是在癌症诊断或军事演习这种重要活动中,这一问题也会体现出来。如果想要普及人工智能技术,使之成为我们日常生活中的一个有益组成部分,了解人工智能的工作逻辑就显得尤其重要。苹果Siri团队负责人汤姆·克鲁伯(Tom Cruber)表示,可解释性是他的团队尝试让Siri更聪明的过程中的关键考量因素。克鲁伯不肯透露Siri未来的具体计划,但可以想见的是,如果你收到了Siri推荐的餐馆信息,你肯定希望知道背后的原因。苹果人工智能研究总监、卡内基梅隆大学副教授鲁斯兰·萨拉库特迪诺夫(Ruslan Salakhutdinov)认为,可解释性是人类与人工智能关系发展的核心。“这能带来信任。”他说。正如很多人类行为无法详细解释一样,人工智能可能也无法解释它的一切行为。“即使有人能够针对自己的行为给你一个合理的解释,很可能也不够全面,人工智能同样如此。”克鲁尼说,“这或许正是智能的天然属性,只有一部分可以用理性来解释,有的只是本能或潜意识,根本无法解释。”倘若如此,我们某些时候可能必须盲目相信人工智能的判断,否则就只能抛弃它。类似地,具体的判断也必须考虑社交智能。正如社会的基础是一套关于预期行为的合约,我们设计人工智能系统时,也需要尊重和适应社会规范。如果能够创造机器人坦克和其他杀人机器,那就必须确保它们的决策过程符合我们的道德判断。为了理解这些形而上的概念,我找到了塔夫斯大学的丹尼尔·丹尼特(Daniel Dennett),他是一位著名的哲学家和认知科学家,专门研究意识和心灵。在他的新书《From Bacteria to Bach and Back》是一本关于意识的广博论述,其中有一个章节认为智能的进化本身就是创造一套连创造者也无法理解的系统。“问题在于,我们拥有哪些条件来聪明地做到这一点——我们要求它们达到什么标准?要求我们自己达到什么标准?”他对我说。他还针对可解释性的问题提出了警告。“我认为,如果我们希望使用并依靠这些东西,那就应该尽可能明确地知道它们给出答案的逻辑和原因。”他说。但由于可能并不存在完美的答案,所以对待人工智能的解释时,应该像对待其他人类的解释一样保持一份谨慎——无论机器看起来有多么聪明。“如果机器并不比我们更加擅长解释自己的行为,那就别相信它。”(编译/长歌)推荐:人工智能汹涌而来,未来已变!关注“AI世代”微信号(tencentAI),关注未来。
正文已结束,您可以按alt+4进行评论
责任编辑:jimmonzang
扫一扫,用手机看新闻!
用微信扫描还可以
分享至好友和朋友圈
Copyright & 1998 - 2017 Tencent. All Rights Reserved

我要回帖

更多关于 人工智能可以自学吗 的文章

 

随机推荐