ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

对人工智能的一些思考和给初学者的建议

2020-06-11 17:01:30  阅读:257  来源: 互联网

标签:问题 框架 人工智能 学习 研究 初学者 思考


"THE TRUE SIGN OF INTELLIGENCE IS NOT KNOWLEDGE BUT IMAGINATION. " ——Albert Einstein

写在前面的一些话

各位大佬们好,我是一个人工智能研究领域的小学生,愿意的话,你们可以叫我Carlisle。在开启这个博客之前,我已经完成了四年的本科学习,我的专业是信号处理,同时现阶段我正在海外完成人工智能硕士学位。很开心在我的学术生涯道路上得到了许多老师和同事的帮助,使得我能够在漫长的人工智能发展历史中,留下属于我自己的一笔痕迹。随着人工智能技术的不断发展变化,越来越多的人开始投入到人工智能的领域中,或者从原有的研究领域逐渐结合人工智能进行创新创造。在2020年这一代的研究人员中,许多人都是跨学科背景进行人工智能的研究的,因此难免在进行人工智能学习时候有很多的困惑。

这个系列的博客主要是面向对人工智能感兴趣的朋友们。我希望通过这个系列的博客,将我自己对于人工智能的整体学习入门情况和一些技术上的内容进行解释说明。同时我还会不定期更新一些我自己读到的感兴趣的论文,或者有一些是对我自己发表的学术论文的解读和分析,希望能够帮助大家树立理解人工智能相关论文的一些思路,同时和大家交流看法,提升我自己的水平。因为笔者还是一个研究领域的小学生,所以难免有写的不对或者不好的地方。如果大家有任何发现,请直接在评论区毫不客气地留言发问或指出(其实客客气气也挺好=)),时间允许的条件下我会尽力回复大家。谢谢!这篇文章的文字内容篇幅比较长,希望大家能耐心看下去,相信会对你或多或少有一些帮助和启发。

1. 关于人工智能,我想说

谈及人工智能,大家都非常感兴趣,这个概念和事情在当下时代被赋予了很多神奇的色彩。许多AI算法也用在了不同的工业和学术领域,创造着巨大的财富。那么神秘的人工智能究竟是怎么回事?人工智能是否像我们所看到的,门外汉看着直呼惊奇,道上的朋友侃侃而谈,挥斥方遒呢?其实一切的一切,都起源于一个神奇的基础叫做“梯度”,也就是我们说的导数。这也是后来,所有人工智能的最最基础。在这个基础上,人工智能进行了广泛的演变进化,像一个方便的插件一样可以随时嵌入到许多研究领域,如:医疗,艺术设计,金融,环境,语言学等等。这里要强调的一点是,我一直坚信并永远相信,“人工智能是许多基础学科和传统问题的另一种看待和解决方式”。许多学者习惯性地把人工智能看的很高端很前沿,在追逐前沿发展的过程中,忘记了自己的老本行,轻视了基础和传统学科的重要性,同时研究的内容不具备实际应用价值。这是非常容易陷入的一个误区,我经常听到许多相关专业的博士生抱怨到:“我不知道我研究这个将来出来能做什么?” 因此,我在博文的开篇,着重强调一下这一点。

2. 从何开始上手学习人工智能?

我身边有很多希望学习人工智能的人,大家面临的最普遍的问题就是:我到底该从何处开始学习人工智能?在这里,我不能给出一个明确的答案,因为每个人的情况和长处不同。因此,我只能给出一个普遍适用的学习流程以帮助大家,尽快树立对于人工智能的宏观框架概念,然后大家可以自己选择从哪里下手进行深入研究。

首先,在学习人工智能的过程中,需要你有广泛的知识面和研究基础,其中包括但不限于,线性代数,高等数学,高等代数,随机过程,概率论与数理统计,工程数学等。那么很多同学听到这里就已经开始打退堂鼓了,因为所有提到的东西都是和数学相关的。但是实际上,现阶段的人工智能“应用”,对于数学原理的依赖性并不是很大,反而是对于网络结构的设计和对于任务的理解,占据了相当重要的比例。这其中很大一部分原因是我们有很多,很方便使用的深度学习框架,如我们耳熟能详的TensorFlow,PyTorch,Keras,Theano,Caffe等。这些框架帮助我们实现了许多复杂繁琐的计算过程,这使得我们在对问题进行建模等方面得到了极大的简化。事实上,现如今我们只需要几十行代码便可以复现一个基本的神经网络。通过这一点可以看出,框架的出现帮助人工智能在极短的时间里获取了最广泛的普及。这一点有利,也有弊。

深度学习框架的来龙去脉——史上最全面最新的深度学习框架对比分析

事实上,在学习的过程中,我们在最开始应避免使用框架,而是使用单纯的基本编程语言,如python语言等,和矩阵计算库NumPy对这一系列计算进行复现,以便深入了解人工智能的底层运行原理。当然这一点,本质上是对专业的人工智能研究人员提出的要求与期望。如果只是一般的AI使用者,那么可以在最开始借助框架,快速实现一些令人拍案叫绝的Demo。一旦实现了一些有趣的应用,你会深深的爱上这个领域,这也能够最大化激发你对人工智能的渴望与学习动力。初学者可以在先借助框架梳理基本概念,并通过明确基本问题的答案进行问题启发式学习,如:如何使用Numpy构建自己的训练数据?如何构建基础的神经网络?如何选择优化器?如何选择损失函数?如何进行参数与超参数的调整?如何判断模型训练情况与进行模型性能评价?等等。当你获取了这些基本的概念,再去深入探究底层情况,可能不会让你一上来就碰一鼻子灰,深深陷入数学原理,后逐渐丧失了对人工智能的兴趣。

其次,要多复现,多写代码,多Debug。许多初学者喜欢看,不喜欢写。这是一个大问题,看代码容易,写代码难,手写代码更难。熟能生巧在任何领域都不失为经典。其次,只有你把Debug打开了,这个代码才会告诉你他是什么样子的,他在运行的过程中,处理着怎样的数据,数据在反应什么样的问题。所以核心的学习建议就是Keep coding 和 Don't ask, debug.

3. 人工智能学习中的基本问题

其实我们平常谈到的人工智能领域包含内容十分广泛,有数据分析,机器学习,深度学习等等。这里我默认大家已经具备了基本的数学基础和计算机基础,那么我们就谈一谈如何上手实践人工智能项目。从我个人理解的角度出发,开启人工智能学习之旅,我们需要明确以下几个问题:

1)开发的系统环境。通常我们谈到开发环境,需要关注两个点:windows环境还是Linux环境?以及CPU还是GPU训练?我们现阶段虽然有了很方便的深度学习框架来进行辅助研发,但是框架的要求不尽相同。这里我们举几个简单的问题来帮助大家树立对于系统开发环境的要求。首先,笔者个人认为Linux系统环境对于深度学习是非常有好处的。举个最简单的例子,同样的代码在Linux环境下运行的速度会比windows快很多。同时,在工业界中,许多嵌入式设备的系统环境都会选择使用Linux,因为轻量,且稳定。同时,许多依赖项安装在linux下比windows要容易,但是需要使用者比较熟悉Linux系统环境开发,同时具备Linux使用经验和基础,不然很多时候除了问题没有办法调试,反而不如使用windows来的方便,因为在系统图像化这一块,windows可是做的远超linux,非常适合非CS背景人员进行开发。

其次,训练模型使用CPU还是GPU?如果是CPU,那么大部分框架你都可以很轻松的安装好,但是相对训练速度和计算时间会很慢很长,这其中一个很重要的原因是我们神经网络大部分进行的是矩阵运算,这种计算在CPU的物理架构上不是很适用。如果选择使用GPU,那么你需要一些辅助的库来帮助你进行环境搭建。这里我们讲的GPU一般是NVIDIA公司生产的GPU,因此主要的辅助依赖包括CUDA和CuDNN。利用CUDA技术,我们可以将那些内处理器串通起来,成为线程处理器去解决数据密集的计算。CuDNN,全称“CUDA Deep Neural Network library”,是专门为进行深度学习而搭建的科学计算库。这里面需要注意的是,CUDA和CuDNN和使用深度学习框架的版本以及GPU驱动版本之间有着密切的关系。具体的依赖关系,NVIDIA公司已经为我们处理好了并且在下载对应安装文件的时候,他们会通过选择现有的系统环境自动生成解决方案。因此,各位初学者不必太担心现在的环境构建问题。同时,也有许多类似的博文来介绍环境搭建问题,笔者在这里就不过多赘述。

2)框架的选择。现阶段,可供选择的人工智能框架不胜枚举。在学术研究中常见使用的深度学习框架有PyTorch,TensorFlow和Keras这三个。在机器学习领域我们通常使用的是Sklearn。在数据分析和可视化中我们通常使用的是Matplotlib和Pandas。

这里没有对框架批评或者偏向的意思,每一个框架的背后都凝聚着无数工程师的汗水和心血。笔者这里提出的,只是经常出现在Github的集中常见框架,同时相对而言参考资料较为丰富和全面,对于框架本身的问题也维护的相对较好。简单聊聊就是,Tensorflow和Caffe出现的比较早,代码书写量相对其他框架来说要大一些,同时有一些自己的计算机制需要开发人员进行学习和熟悉。这对于初学者和非CS背景的研发人员来说可能有些困难,而且对应框架的文档写的比较深,需要一定的专业基础才能够很好理解。但是,许多老项目都选择使用tensorflow和caffe进行研究,如MIT的很多项目都是基于caffe来进行展开的,那么如果你想基于他们的优秀工作进行深入开展,理解这些框架并看懂他们的代码就不可避免。然而对于初学者而言,最快最容易上手的框架,笔者个人认为是Keras。Keras能够让初学者在最短的时间里,构建起使用者人工智能项目的大致轮廓。同时对于系统环境的依赖性相对较弱。刚上手的朋友可能对深度学习系统环境配置不甚清楚,因此选择一个依赖相对较少的框架能够帮助我们尽快的关注到重点问题,而不是花费大量的精力在环境配置上。但是Keras本身的问题,也源于他的优势,即“封装性过好”。这样的优点带来的问题是,在创新研究工作中,你的工具不灵活,很难在固有的框架下做出非常新颖的工作。那么与这个问题互补的就是PyTorch,这个框架相对来说较为灵活,同时具备一定的封装性,既能够很方便的调用现有的模型,也能够很灵活的进行封装和创新开发。因此,笔者个人的建议是,都尝试一下,然后选择你自己最有感觉的那一款。推荐的学习路线是:keras到PyTorch,如果有必要,就到TF及其他。这里强调一下,学习框架最快的办法就是耐心阅读每个框架的Document,和Tutorial。这些内容都可以在对应框架的主页上找到,一定要耐心,切不可浮躁潦草。同时,在阅读Document的同时要多写代码,多对比实验结果,以便对代码产生自己的理解和感知,这一点非常重要。

3)课程与教材选择。在学习的过程中,许多同学都会迷惑,其他科目和研究领域都有书可以看,那人工智能领域的书有啥呢?其实市面上很多的教材都已经被广泛宣传,笔者在这里简单推荐几本书。周志华教授的西瓜书(《机器学习》周志华著),花书《Deep Learning》by Ian J. GoodFellow.这两本书对于初学者而言十分重要,他们很好地概括了人工智能不同的研究方向和人工智能基础,同时没有大量的数学公式需要你推导。因此,比较适合入门学者进行学习。课程的话,笔者个人比较推荐的是Andrew Ng. 教授发布在Cousera上的在线学习课程。同时,LinkedIn也提供了许多在线学习的网络资源。此外,斯坦福大学的公开课也是非常棒的在线教育资源,能够帮助大家对人工智能进行较为系统的学习。

4)研究方向的选择。如我们前面所说,人工智能是对于旧问题的新的解决和理解。因此,他的研究方向是十分广泛的,包括但不限于:医疗,艺术设计,金融,环境,语言学等等。如何选择一个合适自己的,有意义的,感兴趣的研究方向,就显得十分重要。笔者在这里无法给出一个很明确地方向阐述,因为现在还在不断地发展变化。只能说,现阶段的通常情况下,我们可以将人工智能分为三大方向,数据分析,计算机视觉和自然语言处理。那么每个大方向下都有很多小方向,如:在数据分析中,数据清洗,数据挖掘,数据可视化等;在计算机视觉中,目标检测与识别,图像增强,图像修复,图像生成等;在自然语言处理中,机器翻译,文本检索,文本情感分析等。通过这样一个简单的叙述,我们可以发现人工智能的领域包含的内容十分的广泛,那么究竟该怎样做出选择?笔者的建议是,多读论文,多上手尝试。在复现论文和学习的过程中,你逐渐会有一种感觉,这就是我的领域。可能突然有一天,在你看到某个领域的某个问题,你有自己的独特理解;又或是在学习某个领域的过程中,突然间你觉得,这是我要付出一辈子去研究的东西。那么这个,就是你最适合的研究领域。笔者希望各位初学者保持初心,永远探索,不断创新。在不断尝试和学习的过程中,你会逐渐发现你真正感兴趣的地方,并坚持走下去。没有人是相同的,所以我也没有任何办法帮助大家决定自己的研究方向。只能在这里祝福大家,在研究和工作的过程中,能够找到自己的热爱并走下去。

4. 人工智能项目中的核心问题

进行人工智能项目的研究,需要明确以下几个核心问题。当你想清楚了这几个基本的问题,那么你就离成功实现这个项目不远了。但最核心的问题还是,你做的这个研究,你的Motivation和Contribution是什么,这个至关重要。

1)我的研究问题是什么?

2)现阶段做的最好的解决方案是什么?

3)我能否理解他们的解决方案?

4)我自己是怎么看待和理解这个问题的?

5)他们的解决方案是否有问题,缺陷,或者优势?我能做什么,能借鉴什么?

6)干。

5. 结束语

到此,我的第一篇长篇博文就已经告一段落了。这篇文章更倾向于对初学者构建一些基础的概念,或者Big picture。并没有太多技术相关的内容。我在后期会逐渐更新一些博客,用最简单的话来解释复杂的人工智能理论。但是我们仍然要去思考,在千军万马投入人工智能学习的时代,我们如何做到与众不同?信息时代,每个人能获取的学习资源几乎是均等的,在同样的条件下,你如何从人群中脱颖而出?当几乎所有行业的人都可以说,我也可以是个人工智能研究人员的时候,你的长处和优势又是什么?希望每个走在路上的学者和研究人员,以及工作在社会不同位置的朋友们,都能够在人山人海中找到属于自己的定位,和自己的热爱与生活走下去,我也在这里与大家一起前行。最后,希望这个系列博客能够真正帮助到有困难的朋友们,希望自己也能从这一过程中有所收获。谢谢!

标签:问题,框架,人工智能,学习,研究,初学者,思考
来源: https://blog.csdn.net/Function_K/article/details/106654106

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有