我是一个工作时间比较久的全栈工程师,做过web开发,前端,后端,移动端,HTML5的开发。2016年底开始学习机器学习,做深度学习大概不到半年。在人工智能技术方面我肯定没有研究人工智能很多年的人有经验,但在怎样转型人工智能方面我还是有些体会的。
学习人工智能为什么比学习其他的编程技术要困难
首先是人工智能整个领域特别大
我们常说的深度学习是机器学习的一个小分支,而机器学习又只是人工智能的一个小分支。但目前深度学习比较热,因此很多人就把深度学习当成人工智能了。具体到业务领域,就有计算机视觉,语音识别,自然语言处理等,每一个领域都很专业,会用到机器学习的各种方法。后面的内容主要是说深度学习和机器学习。其次人工智能是不确定性的
思维模式和传统编程不一样,我们平常接触的编程语言无论前端,后端还是移动端,都是确定性的,确定性是什么意思呢?例如你要修改个传统系统的bug,你弄明白了逻辑,就可以修改代码改掉bug。但做人工智能不一样,它是不确定性的,目前深度神经网络可能会有几百层,几千万个参数,我们没有严格的数学逻辑确定这些参数的意义,只能根据经验和一些原理进行调参,修改数据集等优化结果,过程中充满了不确定性。第三,学习人工智能对于数学和英语有一定要求
特别是做模型优化的时候。数学方面需要知道一些微积分,线性代数,概率论的知识,英文方面需要能够比较顺利的看懂一些英文的资料和论文,例如很多著名模型的结构相关的论文都发表在arxiv上,需要能大概看懂这些论文。第四,学习深度学习对于计算机有一定要求
模型训练在GPU上做能够明显加快速度,例如在Imagenet2012数据集上训练InceptionV3模型, 大概有120万张图片, 在一个nVidia Tesla P100 GPU上训练到95%的召回率需要3天,在普通CPU上训练可能需要几个星期。如果你学习一个东西,几星期后才能知道结果那肯定是让人崩溃的。万幸的是,现在Amazon,Goolge,阿里云,腾讯云等都GPU服务器可以租用。
程序员学习人工智能的三个阶段
学习人工智能的三个阶段是 应用,优化,和定义问题,这个观点是我在某大牛的一篇文章中看到的,然后我针对程序员的学习特点做了一些优化。
应用应该是学习的第一步,就是想怎么样才能把人工智能应用到你的业务中,在这一步之前你需要对人工智能的现状有个基本清晰的认识,抛弃不实际的想法。具体的做法大概是针对自己的问题,收集数据,建立模型,可以用传统模型或深度学习模型。这一块程序员去做还是有一定优势的, 做到这一步需要对机器学习和深度学习有一定了解, 熟悉python, 能用tensorflow做一些模型训练。举个应用的例子,人工智能跨界农业实现“桃脸识别”,用人工智能实现桃子的智能筛选。
优化是学习的第二步,这一步就有些难度了,需要对卷积神经网络的原理和计算过程很清楚,需要对tensorflow,caffe,pyTorch等框架比较熟悉,需要对Inception,Resnet等经典模型的结构有一定研究,能够看懂论文和代码,并能够结合数据进行分析和实验,对模型结构,参数等不断进行优化,达到提高识别率等目的, 这个优化过程需要耗费大量的时间。
定义问题是学习的第三步,能够做到这一步应该是大神级的存在了,例如谷歌大脑,AlphaGO,百度大脑等顶级团队和学术界的科学家和资深工程师等。这一步的难点是如果用数学语言定义清楚问题,并能够用工程上可行的机器学习算法进行优化求解。做到这一步是很难的,能够做到这一步的人应该是很少的,大部分都是大公司某个方向的领军人物。
应该怎样转型人工智能
对于想转型人工智能的程序员, 我觉得首先要想清楚,自己想不想做这样一个不确定性的事情,自己的学习能力,数学和英语基础怎么样,不能看到行业热工资高就盲目转行。其实无论是前端,后端还是移动端,只要技术做到一定深度,收入都会不错,互联网行业的高薪还会持续很多年,做好技术可以有个不错的收入。
当然,学习和了解一些人工智能技术总是没有坏处的,可以先在自己感兴趣的领域尝试应用下人工智能技术,试试有没有这方面的兴趣和能力。毕竟IT行业变化很快,说不定几年后无论做什么开发都需要懂一些人工智能知识呢?
在人工智能这个热门的行业,早起的鸟有虫吃,但前提是鸟才行。