动不动就是50万的毕业生年薪,动不动就是100万起步价的海归AI高级人才,普通员到底应不应该转型AI工程师,普通程序员到底应该如何转型AI工程师?
下面就分享几个特别典型的普通程序员成功转型AI的案例
第一个案例
是只懂 ACM 竞赛相关算法的普通程序员,误打误撞接触到了数据挖掘,之后开始系统地了解机器学习相关的知识,如今已经基本走上了数据科学家之路的经验分享。
第二个案例
是其他行业的普通程序员,具有计算机专业的人所没有的专业知识和行业大数据,他只是想把深度学习和神经网络当作工具,知道它们能做什么,如何去做。这类程序员经过4个月的转型学习,他们的经验和体会。
案例一
我曾经也只是一个只懂 ACM 竞赛相关算法的普通程序员,误打误撞接触到了数据挖掘,之后才开始系统地了解机器学习相关的知识,如今已经基本走上了正轨,开始了走向 Data Scientist 的征途。
首先作为一个普通程序员,C++ / Java / Python 这样的语言技能栈应该是必不可少的,其中 Python 需要重点关注爬虫、数值计算、数据可视化方面的应用,主要是:
如果日常只编写增删改查的代码的话,那可能数学已经忘得差不多了,需要重温线性代数和微积分的基础知识,这会为之后的学习立下汗马功劳。
再然后就是统计学相关基础
相关性分析(相关系数r、皮尔逊相关系数、余弦相似度、互信息)
回归分析(线性回归、L1/L2正则、PCA/LDA降维)
聚类分析(K-Means)
分布(正态分布、t分布、密度函数)
指标(协方差、ROC曲线、AUC、变异系数、F1-Score)
显著性检验(t检验、z检验、卡方检验)
A/B测试
如果以上知识都具备了,再往后的路就可以开得很快了,可以一直冲刺到 Deep Learning。但在这之前我们还是需要了解不少机器学习的基础:
关联规则(Apriori、FP-Growth)
回归(Linear Regression、Logistics Regression)
决策树(ID3、C4.5、CART、GBDT、RandomForest)
SVM(各种核函数)
推荐(User-CF、Item-CF)
此时的你或许已经有一块可以用的敲门砖了,但离工业界实际应用还有比较大的距离,主要差距就在于 Feature Engineering,这也是我在面试考察有经验的人面前比较注重的点。
这一块中有一些比较基础的知识点,简单罗列如下:
可用性评估:获取难度、覆盖率、准确率
特征清洗:清洗异常样本
采样:数据不均衡、样本权重
单个特征:无量纲化(标准化、归一化)、二值化、离散化、缺失值(均值)、哑编码(一个定性特征扩展为N个定量特征)
数据变换:log、指数、Box-Cox
降维:主成分分析PCA、线性判别分析LDA、SVD分解
特征选择:Filter(相关系数、卡方检验)、Wrapper(AUC、设计评价函数A*、Embedded(L1-Lasso、L2-Ridge、决策树、DL)
衍生变量:组合特征
特征监控:监控重要特征,fa特征质量下降
我放一张公司内部算法培训关于特征工程的 PPT,仅供学习参考:
再往后你就可以在技能树上点几个酷炫的了:
提升
Adaboost
加法模型
xgboost
SVM
软间隔
损失函数
核函数
SMO算法
libSVM
聚类
K-Means
并查集
K-Medoids
聚谱类SC
EM算法
Jensen不等式
混合高斯分布
pLSA
主题模型
共轭先验分布
贝叶斯
停止词和高频词
TF-IDF
词向量
word2vec
n-gram
HMM
前向/后向算法
Baum-Welch
Viterbi
中文分词
数据计算平台
Spark
Caffe
Tensorflow
可以看到,不管你是用 TensorFlow 还是用 Caffe 还是用 MXNET 等等一系列平台来做高大上的 Deep Learning,在我看来都是次要的。想要在这个行业长久地活下去,内功的修炼要比外功重要得多,不然会活得很累,也很难获得一个优秀的晋升空间。
最后,关注你所在行业的最新 paper,对最近的算法理论体系发展有一个大致印象,譬如计算广告领域的几大经典问题:
相关 paper 的 gitlist 仅供参考:wnzhang/rtb-papers - https://github.com/wnzhang/rtb-papers
最最后,也要时刻关注能帮你偷懒的工具,它将让你拥有更多的时间去调参: Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 - Python
温馨提示:想转型的可以加入群:671017482,等着你
案例二
说说我学习深度学习的经历吧
先说编程:自认会用C++, 熟悉Python
英语水平:中等,能很快读懂英文科学文献
最开始对人工智能/深度学习感兴趣是因为想用它试一试自然语言生成,后来想到一个物理方面的题目,预计可以用深度学习技术解决,开始接触深度神经网络。记录一下学习历程,
安装 Tensorflow(google 开源的深度学习程序), 尝试里面最简单的例子MNIST 获得激励。
尝试通过读书(看视频)理解最简单的全连接神经网络
先搜索找到答案:为什么要Go Deep?
神经网络中输入层,隐藏层,输出层之间矩阵乘积的维度变化。
Weight, Bias 这些是什么,改变它们有什么结果。
激励函数是什么,有什么作用,有哪些常用的激励函数
误差如何向后传递,网络如何通过最小化误差函数更新,有哪些常用的优化方法
选择一种比较比较底层的神经网络开源库,tensorflow 或 theano
读官方文档 https://www.tensorflow.org/versions/r0.11/tutorials/index.html
https://www.tensorflow.org/tutorials/
看周莫凡的网络教程 https://www.youtube.com/user/MorvanZhou
https://www.youtube.com/user/MorvanZhou
重复敲代码,重复实现例子程序
开始理解各种不同神经网络架构所能处理的问题
CNN 图像识别,图像处理,语音处理
RNN,LSTM 自然语言理解与生成
增强学习,玩游戏
尝试各种开源的有意思的神经网络项目,新手可以从下面这个列表开始
Andrej Karpathy blog char-rnn, Deep Reinforcement Learning: Pong from Pixels- http://karpathy.github.io
Neural Style In tensorflow - https://github.com/anishathalye/neural-style
如果能翻墙,注册 twitter, facebook 账号,follow 那些文章中经常出现的大牛的名字。
他们每天提供很多新动向及最新技术,很多时候有很 Fancy的应用。
当你对这些都很熟悉的时候,开始阅读艰深的文献:
CNN 的原始文献
RNN 和 LSTM 的原始文献
Reinforcement Learning 的原始文献
Google DeepMind 发表在 Nature 上的几篇经典
最后强调一个最最重要的事情:要有自己的想法,有将这种新技术用到自己项目中的强烈愿望,从开始就要Coding,不断尝试才能不断进步。
你是属于哪类程序员呢?他们的经验你又是否能用上呢?
你是否想要转型?如果你想的话,可以加入我的qq群:671017482,希望可以给你一些帮助和建议。记得点个关注哦