人工智能是什么
人工智能是一个很大的圈子,但是基础必然是机器学习
什么是机器学习呢?
说白了就是你告诉机器你想做什么?并且给它一堆数据让它去模仿着做
(比如,咱们上高中,老师会告诉我们一个目标就是考高分,然后给我们一堆练习册和答案,我们的目的就是让我们做的题的解和答案一致)
机器学习需要什么?
算法,数据,程序,评估,应用
机器学习能做什么?
机器学习在数据挖掘,图像识别,语音和自然语言处理中有着广泛应用
人工智能哪些领域
回到本文的正题。全面认识人工智能之所以困难,是有客观原因的。
其一、人工智能是一个非常广泛的领域。当前人工智能涵盖很多大的学科,我把它们归纳为六个:
(1)计算机视觉(暂且把模式识别,图像处理等问题归入其中)、(2)自然语言理解与交流(暂且把语音识别、合成归入其中,包括对话)、(3)认知与推理(包含各种物理和社会常识)、(4)机器人学(机械、控制、设计、运动规划、任务规划等)、(5)博弈与伦理(多代理人agents的交互、对抗与合作,机器人与社会融合等议题)。(6)机器学习(各种统计的建模、分析工具和计算的方法),
这些领域目前还比较散,目前它们正在交叉发展,走向统一的过程中。
由于学科比较分散,从事相关研究的大多数博士、教授等专业人员,往往也只是涉及以上某个学科,甚至长期专注于某个学科中的具体问题。比如**,人脸识别**是计算机视觉这个学科里面的一个很小的问题;深度学习属于机器学习这个学科的一个当红的流派。很多人现在把深度学习就等同于人工智能,就相当于把一个地级市说成全国,肯定不合适。
三大学派
为更充分认识人工智能,我们从他的派系来了解人工智能的发展
人工智能符号主义
早在上个世纪五十年代,人们基于”让机器产生像人类一样的智能“这样的美好愿望,提出了人工智能的概念,所以一切试图做到这一点的都可以看作”人工智能“的技术,比如在人工智能早期曾十分流行的人工智能三大流派之一的符号主义,人们自己总结规则,然后通过if-else的方法堆砌成一个专家系统,这也属于人工智能领域,而且是人工智能领域非常重要的一部分。
正是这些符号主义者,早在1956年首先采用“人工智能”这个术语。后来又发展了启发式算法>专家系统>知识工程理论与技术,并在20世纪80年代取得很大发展。符号主义曾长期一枝独秀,为人工智能的发展作出重要贡献,尤其是专家系统的成功开发与应用,为人工智能走向工程应用和实现理论联系实际具有特别重要的意义。在人工智能的其他学派出现之后,符号主义仍然是人工智能的主流派别。这个学派的代表人物有纽厄尔(Newell)、西蒙(Simon)和尼尔逊(Nilsson)等。
近些年来符号主义中的知识图谱在很多智能问答应用中还发挥着很重要的作用,但这种符号主义的手段对于人工消耗极大,每一个规则都需要人手工录入,机器无法自主学习,所以为了解决这个问题,人们提出了机器学习的想法,这时候我们不再需要给机器逐个录入规则本身,而是让机器自己在数据中学习到规则,所以一切试图做到这一点的,都可以看作是机器学习的技术。
对于商用QA系统生成的答案,即使并没有很人性化的回答到问题,但表述的准确性和正确性往往比所谓的智能更重要,所以业内普遍还是偏向于使用符号主义中的知识图谱技术,而不是深度学习让机器学习规则。
人工智能连接主义
认为人工智能源于仿生学,特别是对人脑模型的研究。它的代表性成果是1943年由生理学家麦卡洛克(McCulloch)和数理逻辑学家皮茨(Pitts)创立的脑模型,即MP模型,开创了用电子装置模仿人脑结构和功能的新途径。它从神经元开始进而研究神经网络模型和脑模型,开辟了人工智能的又一发展道路。
其中最具代表的神经网络,和深层次神经网络(深度学习)。所以在深度学习领域中,就是不断的增加一个神经网络的隐藏层神经元,让输入的数据被这些神经元不断的抽象和理解,最后得到一个具有泛化能力的预测网络模型
而我们一般把隐藏层超过三层的网络,称之为:深度神经网络
至于网络中每个节点到底在理解什么,很难用精确的数学手段去分析。
我们唯一能做的就是:收集数据,送入数据,进行训练,然后期待结果
当然也不是说我们对一个深度神经网络完全不可把控,起码我们能在比如学习率,激活函数,神经元层数和数量等等方面调节神经网络的大致工作行为,俗称——调参
深度学习的训练可以来这里进行体验:
Tensorflow 游乐场:/
近些年来,人工智能,机器学习领域随着算力,数据和从业者的不断增加,正在不断的涌现着一些十分有趣的想法,等待着探索和发现。
人工智能行为主义
行为主义认为人工智能源于控制论。
除了深度学习以外,目前机器学习领域中还有另外一项振奋人心的技术,强化学习。
强化学习的灵感来自于人工智能三大流派之一的行为主义,让一个智能体(Agent)不断的采取不同的行动(Action), 改变自己的状态(State),和环境(Enviroment)进行交互,从而获得不同的奖励(Reward),我们只需要设计出合适的奖励(Reward)规则,智能体就能在不断的试错中习得合适的策略,
强化学习近些年来也得到了很多的应用,从alphago开始,到近期腾讯的”觉悟“,通过强化学习训练的游戏AI,已经让人类选手开始在MOBA游戏中深感绝望,当然像觉悟这样的AI,在强化学习中也加入了深度学习部分,也就是所谓的深度强化学习。
机器学习该怎么学?
-机器学习本质包含了数学原理推导与实际应用技巧
机器学习中有很多经典算法,既然要学习,那就需要清楚一个算法是怎么来的(推导)以及该如何应用
数学重要吗?非常重要的,大学的数学基础即可,如果你都忘了,大致的印象还是有的吧,我觉得与其从头过一遍数学,不如边学边查,一个合适的做法就是哪里不会点哪里,我每天也在查很多知识点
一定要学数学,学推导吗?我知道会用不就可以了吗?
有句老话,不光要知其然还要知其所以然,这对我们的应用具有很大的帮助
推导肯定是重中之重了,因为对于我们来说学习的目的就是转换成自身的资本让我们更有竞争力,面试与笔试的时候,这些推导全来了
程序员兄弟如果要转行,让你看数学你肯定要疯的,重点应在于如何应用(库的使用,完整项目如何构建,从头到尾的流程)
底层实现和上层应用
像很多技术领域一样,往往可以把这个领域的知识体系简单的分为两层:底层实现和上层应用。
而上层应用中往往随着该领域的发展又会出现很多经过验证的行之有效的经典方法
比如编程语言中Java这个体系,jvm虚拟机,字节码技术构成了Java体系的底层实现,并通过Java语言向上提供应用的接口,而像Spring、Mybatis等框架,以及各种常用的库,则是人们在多年实践中总结而成,能高效的用于生产的经典上层实现,那在实现一个经典任务的时候,Java程序员往往会直接使用这些框架和库,而他们往往也能应对绝大多数问题。
同样,在深度学习领域,我们学习过的像梯度下降,反向传播,CNN,RNN,以及未详细说明的其他的一些基本原理,则构成了现代神经网络的底层实现,而像LeNet-5网络,LSTM,GRU以及AlexNet,VGG,ResNet,Yolo等等,则是在神经网络发展的过程中经过检验而行之有效的模型,
同样,这些经典的网络模型在很多常见的场景,比如语音识别,自然语言处理,图像识别等领域中都能有不错的效果,所以想要用神经网络实现一个具体任务,那么应该首先考虑这些已有的经典网络模型,就像我们使用spring开发Java项目一样,是很自然的选择,
而我们为了提高自己Java项目的开发水平,可能需要去熟悉框架的实现,好消息是我们可以阅读他们的源码,只要你想,就能知道所有细节,而坏消息是这些代码往往非常的庞杂,配合文档和资料也需要很长时间的学习和研究。
同样为了提高对神经网络应用水平,我们需要去熟悉这些经典网络模型,最好的方法就是阅读他们的论文,好消息是这些论文一般都不会特别的长,内容也相对单一,很快就可以看一遍,但坏消息是这些论文一般不会附带源码,一般都是数学公式和图表,阅读他们的门槛可能更高,
但另外一个好消息就是,对于这些经典的网络结构,目前网络上已经有很多人写博客做了更通俗易懂的解读,比如一篇关于LSTM的著名博客,《Understanding LSTM Network》,这要比看LSTM的原论文要轻松许多,有些文章甚至会逐步的贴出相应的代码,比如对于LeNet5和AlexNet,随便一搜就能找到一大批关于他们论文的解读和用keras实现的代码,所以对于这些经典网络的学习并不是一件特别困难 事情。
当然,人工智能作为一门正处于高速发展的学科,每段社区都会有新的idea被提出,有些可能是变革性的,有些可能只是一个小的修补,不论怎样,如果你希望了解这些新的想法,那么唯一的方法就是去看原始的论文,这可能会比较艰难,因为很多论文都是对想法进行简单的描述,然后给出一些公式,而且一般不会详细的说明这些公式每一步推导的细节,最后贴出测试效果的图表,而且并不会附赠源代码,所以为了提高阅读的效率,只能是多看,排除那些写的特别晦涩的论文,一般来说一个领域内的论文,看的多了也就能慢慢的培养出一点感觉,
当然这里还有个很重要的问题,那就是要对机器学习神经网络的底层实现有足够的了解,不仅仅是概念上的,还有数学上的。当然,如果你并不是想做机器学习,神经网络相关的研究工作,而只是想把它应用到自己实际的问题上,那倒是不必研究的如此深刻,在理解了大致工作原理之后,去学习使用那些经典的模型就好,正如我们在学习编程语言的时候,即使不是特别深入的了解计算机的底层实现,也可以写出不错的程序,但是如果是从事像操作系统这样的计算机的方面的研究工作,那么深入的学习则是不可避免的。