本文来自作者 章华燕 在 GitChat 上分享「转行 AI,如何给自己定位?」,「阅读原文」查看交流实录
「文末高能」
编辑 | 奕迅
众所周知,互联网行业的变化快到让所有从业者知悉并惶恐。就在笔者还在读研的时候,大家都在议论:Java 还是 C++ 更好就业的问题、移动互联网时代正在到来、安卓还是 iOS 开发,当然也有更前沿的大数据 Hadoop 与 Spark 等技术的横行。
然而就在2016年的一场人机大战举行,随着 Google 的 AlphaGo 打败韩国围棋棋手李世乭之后,机器学习尤其是深度学习的热潮席卷了整个IT界。
所有的互联网公司,尤其是 Google、 微软、百度、阿里、腾讯等巨头,无不在布局人工智能技术和市场。前有百度深度学习研究院,腾讯的AILab,最近几天阿里的“达摩院”又占据了各大新闻头条。
确实,人工智能时代正在到来。人工智能已经被各个国家提升到国家战略的高度!
中国AI目前人才短缺,国内的供求比例仅为1:10,供需严重失衡。工信部教育考试中心副主任周明也曾在2016年向媒体透露,中国人工智能人才缺口超过500万人。
领英近日发布的全球AI领域技术人才分布地图
机会与挑战并存,现在很多开发人员正在考虑转岗人工智能领域。于是有很多的方法和途径供大家选择:1)自己看相关的AI书书籍;2)参加培训机构培训;3)买网络教学课程自学。
很多著名的机器学习(当然本文中机器学习也包括深度学习,深度学习只是机器学习的一个重要的分支)书籍包括机器学习培训机构的课程,大家都把数学列为机器学习课程的必备基础,几乎如出一辙地都在强调数学的重要性。于是乎许多想转头AI学习机器学习的小伙伴们就被高深莫测的数学难倒了,吓得退出了,事实真的是这样吗?不学高深的数学就无法在工业界应用机器学习算法去解决实际问题了吗?答案显然不是这样的。
毫无疑问,数学是机器学习的基础。以至于传统机器学习最重要的流派叫做 “统计学习理论” 。但是这和转行AI学机器学习必须要具备深厚的数学“看起来是合情合理”,但事实却并非如此!想要解释清楚这个问题,首先我们需要解释掌握机器学习的三个层次到底是什么?每个层次是怎么定义的?掌握每个层次需要的必备知识是什么?
虽然这个级别被我定义为最低的等级。但是大家可不要忘记,在中国目前的互联网公司中处于我定义的这一级别的从事AI工作的算法工程至少占到 75% 以上。所以,这也是我建议的绝大多数数学不是特别好的,没读过博士或者硕士的同学转行AI给自己定位的建议。这样,你就不需要去学习那些你很难搞懂的高深莫测的数学知识,也不需要掌握各种数学原理的推导。你只需要知道理工科本科毕业的那三门数学基础知识就完全可以了。这时候,知道常见算法的基本原理,以及各个参数的含义。OK,能用机器学习算法解决实际项目中的任务才是王道嘛!
举个栗子吧!燕哥本人曾经在公司做过的实战性数据挖掘任务,数据在文件 “lppz.csv”中,第8列(为了与代码一致,从0计数)为预测数据。第10列开始的为特征向量列。于是如下的程序就能够完成预测任务,其实就这么简单。
from xgboost import XGBRegressorfrom sklearn.model_selection import train_test_splitfrom xgboost import plot_importancefrom matplotlib import pyplot as plt# 读取文件原始数据data = [] labels = [] labels2 = []with open("lppz.csv", encoding='UTF-8') as fileObject: for line in fileObject: line_split = line.split(',') data.append(line_split[10:]) labels.append(line_split[8]) X = []for row in data: row = [float(x) for x in row] X.append(row) y = [float(x) for x in labels]# XGBoost训练过程X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.34, random_state=0) model = XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=145, silent=True, objective='reg:gamma') model.fit(X_train, y_train) ans = model.predict(X_test) plot_importance(model) plt.show()
如果你想去BAT核心部门去做算法工程师,也许调库君是不够资格的。那么你需要满足一定的学术水平。也就是说,你不仅要懂得算法的大致原理,比如说决策树的分支是基于信息熵和信息增益的策略的。
你还得知道常见算法的优化过程中使用的损失函数以及他的推导过程,这时候对大家的要求就相对来说比较高了。接下来我就以BAT机器学习算法面试必考题(这是福利,燕哥亲自经历的经验,大家要认真点哦!)。
LR逻辑回归算法的损失函数的大致推导过程?
逻辑回归函数形式
Sigmoid函数形状
推导过程
下面左图是一个线性的决策边界,右图是非线性的决策边界:
对于线性边界的情况,边界形式如下:
构造预测函数为:
函数的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:
构造如下的损失函数:
下面详细说明推导的过程:
取似然函数为:
对数似然函数为:
最大似然估计就是求使 取最大值时的θ,其实这里可以使用梯度上升法求解,求得的θ就是要求的最佳参数。但是,在 Andrew Ng 的课程中将 取为下式,即:
因为乘了一个负的系数-1/m,所以取 最小值时的θ为要求的最佳参数。
梯度下降法求的最小值θ更新过程:
于是,θ更新过程可以写成:
掌握上述的推导过程,基本上应对BAT算法面试没问题!
这一层次的典型人物就是 吴恩达、Hinton、Lecun 等大神级别的人物,这并非是仅仅是数学好或者是普通硕士生就能达到的水平,需要从博士生的艰苦数学基础的积累和长期不懈的研究探索才能达到的境界,一般如果转行的话,我个人建议别忘这个 level 上去想,容易伤害你自己!
但是,如果你是本科生,而且数学也非常不错的话,向往这方面发展还是很有希望的。
那么,这个层级的大神到底如何牛呢?还是举个栗子吧!
著名的神经网络发明人 Hinton ,在别人发现感知机的时候,他觉得感知机能力有限,于是想出了神经网络来表示更复杂的学习任务。只是提出这么个模型不行,还得解决我该怎么优化参数,想出(与上面的会推是两回事)一个损失函数并且找到很好的BP反向传播算法来优化神经网络参数,这就是他牛的地方。
并不是理解别人的思路,会推别人想出来的公式,而是从头到尾自己创造,并且算法实用性非常好,能解决很多现实的问题。
典型的神经网络结构
对于转行的小伙伴们来说,我个人建议是最多选择自己的目标为第二个级别,也就是能够推常用机器学习公式的学术君。
但是,并不是所有人都适合这个级别的。这也是很多辅导机构包括业内人士误传的一句看似很有道理的“名言”:数学不好,千万别转AI。
事实绝对不是这样的,非常严谨的表述应该是:数学越好,你的AI转型之路越宽广,数学是决定你走AI路的天花板!
前面我也说了,其实现在互联网公司从事AI工作的 75% 以上的都是调库君,所以如果你数学确实不是很好,而且你又不是机器学习科班出身。AI之路并不是不可行,只是说,你不要对自己要求太高。
不要相信所谓的数学不行就不能转行AI,也不要觉得转行AI我就一定能成为机器学习专家,这两者都是很极端的例子,正视现实才是唯一的出路。转行AI,准确定位自己很重要。
如果你是计算机或者数学博士毕业,虽然当初不是科班出身,但是你数学很棒!我觉得这样的小伙伴可以给自己定位为我所说的第二级别学术君。
但是,你得专心有耐心的看专业书籍,并在有必要的时候研究原始算法论文搞清楚这个算法的来龙去脉。
这样你才能对算法的理解达到一个新的高度。长期积累下去,你肯定能成为机器学习专家级别的人物,但是一定不要着急,慢慢来!
关于入门
对于入门,可能是所有机器学习初学者的痛点,这是一个艰辛的过程,因为这并没有一个统一的答案。对于转行者来说,我个人的建议是选择一个比较正规的视频课程全套教程学习班去学习一下。别着急,我知道很多人会发现学了一遍之后还是蒙圈的,觉得太难崩溃了。
不怕,燕哥是个过来人,当初我研究生阶段的时候上了我们学校一位很著名的机器学习大牛的课程。其实上完了几乎所有学生都是蒙圈状态,当然我也不例外。
那个老师本身就是北大数学系(中国数学最牛的院校)博士毕业的,在机器学习领域已经有20多年的研究。上课的时候,他觉得所有人都跟他一样,对基本的数学理论了如指掌。
于是乎,这位大侠上课的时候就沉醉在自己的公式推导之中,自己无比的崇拜和陶醉,然而学生一个个的蒙圈状态。
但是,后来在我自己买书自学的时候,我发现,其实当初上课还是很有用的。
当我看见书上的一些公式或者算法讲解的时候,我的脑海深处是有印象的,原来当初那位大神推导的东西是这个意思,会有一种豁然开朗的感觉。如果某一天你有这种感觉了,恭喜你,你入门了!
关于提升
如果你入门了,机器学习提升的过程是漫长的,无止境的过程。在这里我就不长篇大论了,你可以结合以下步骤作为参考:
机器学习的学习过程
俗话说,完事开头难。其实在机器学习的道路上提升也是一个不轻松的工作。毅力坚持是一方面,经验也是一方面。毅力是每个人自己的事,看你自己。关于经验,我觉得多写博客,多做实战,多关注比较著名的机器学习公众号。现在很多机器学习公众号的文章质量其实是相当不错的,尤其是近年来AI大火,大家的激情也是蛮高涨的。
近期热文
《想入行 AI,别让那些技术培训坑了你...》
《低学历又如何?这样的程序员照样可以逆袭》
《像这样构建前端架构,除了 React 没有其他可说了》
《一次由点餐引发的 Vue2.0 实战》
《连公式都没看懂?!学渣谨碰这个「神经网络」》
《当我说要做大数据工程师时他们都笑我,直到三个月后……》