算法工程师学习之路


之前是通信行业工程师,作为流水线上的一颗螺丝钉N年,只是耕耘在自己熟悉的领域,视野比较窄。 兴趣是最好的老师,兴趣引我转向了这个行业。
最开始 我对数据分析比较感兴趣, 后来是数据挖掘,再是机器学习,深度学习..  自然走在这条路上。本人资质也只是勉强够用,学习过程中也有觉得很难想放弃过,还好克服了走过了。分享学习道路如下吧 :)

前些年读了一些关于大数据的文章,有初步的了解。后来在平时相关的运营支撑工作中接触了一个大数据的产品,学习了大数据分析挖掘的流程及初步了解一些算法知识。后来车品觉老师来(前)我司分享,参加后很是受用。
如果没有类似条件也没关系,开始时为了培养对大数据这个行业的兴趣,推荐阅读车品觉老师的"决战大数据",书中数据运营运维的思想让我转到一个新世界。 "大数据时代"中译者周涛老师的序言比原文作者带给我的共鸣冲击更大。 从数据分析到数据挖掘,谭磊老师"大数据挖掘" 也让我冲出了那一步,知道数据挖掘也没我想象中那么难 :)

一路上的第一个目标 转行成为数据分析师要做的:
https://www.zhihu.com/question/29265587/answer/44010658
我曾经去捯饬那些excel函数,VBA, 补看数据库教程,看powerBI、数据可视化等教程。那些日子虽然也只是今年上半年的事但觉得已远去但觉得没白过。。 


正传了:

一:最最基础要预备的:
1) python      
最开始本人看的菜鸟教程, 如果有其他语言基础,可以看廖雪峰老师的python教程;否则个人觉得类似菜鸟教程可能更适合一点。当然只是入门,如果想熟悉一门语言,需要投入大量的项目锻炼还需要看不止一本书/一套教程。 另外有个好消息:不用学习R语言啦,python就够用了,具体原因刘建平老师的文章里也有。
2) 数学知识     高数/线代/概率和统计/ 离散数学    
    虽然数据挖掘/机器学习是统计学的范畴 现在感觉前两门相对更重要..
   
关于高数:
    其实我也是看到公式就怕的人,直到现在。。palmface 对推导过程不太明白,但现在原理还是能理解一些。以前读书时数学也很一般,现在几乎是从头学起,嗯,对,从三角函数以及排列组合看起。。
    推荐"遇见数学"公众号, 里面有高数的专集。 里面的图解数学相当不错。底下很多人留言要是当年学习时有这样的指导就好了.. 本人看了台湾单维彰老师的视频专辑:大学微积分入门合集。看完后过了两周再又再看了一遍。 而当我花大概四五天看完一本纸质高数书时(图书馆任借一本高数教材即可,无推荐的好书),虽然当时也记了几十条看不懂的问题,但还是会回想,为啥大学要花一学期或是一学年来学高数呢...好像看一周应该能考 50/60分, 两周能考70分,一月能考8,90分吧,猜的..:)  链式求导,求偏导很重要,搞不懂的不能轻易放过。
关于线代:
    我是从 知乎live课程: 线性代数入门:从方程到映射 开始的。我没加群拿到最新的胶片,live里的胶片有几处小错误让我很费解,不过整体还是不错的。 有很多是在知乎上找到答案的。除了"遇见数学"公众号,matongxue314 马同学看图学数学 应该也很不错   
关于概率和统计:
    SSE, MSE, RMSE SSR SST 这些,卡方分布,T分布,F分布,各种检验等。p值 置信区间含义等。
关于离散数学:
    有时间看离散数学,不吃亏。在好几份源码中,都有DAG的相关处理。
可以听听知乎大神SimonS的课程 机器学习入门需要哪些数学基础  https://www.zhihu.com/lives/818124675715600384


这里我还想分享一些锁碎的名词或概念,可以去单独去搜一搜。能搜到不同的文章,这样一篇没看明白时,可能再看看另一种讲解的风格就懂了,或者明白了后再多看另一种观点,又有不同的收获。  而且这些名词懂了以后,其他文章也好看一些,不明白的话有可能卡住。 我经常得在读文章时,跳出来去搜这些概念。

全概率公式和贝叶斯公式 正态分布 高斯分布 二项分布 beta分布 共轭分布  Dirichlet分布  可以顺便了解Gamma分布,泊松分布  共轭分布 Dirichlet分布等在NLP中有使用,beta分布看到知乎这条解释(答主小杰)就比较容易理解了:https://www.zhihu.com/question/30269898
频率派与贝叶斯派各自不同的思考方式:
什么是无偏估计 有偏估计    概率和似然的区别
ROC曲线,lift曲线 分别适合于什么场景等,搞清TPR,TFR,召回率和准确率等指标的含义。F1分数。有F2分数吗?
什么是凸函数, 什么是对偶问题?  拉格朗日对偶问题  kkt条件
机器学习常见的损失函数有哪几种。 对于0-1损失  平方损失  绝对值损失来度量损失是好理解的,而对数为什么能度量这个损失,要绕个弯从其他角度想想,我也绕了好一圈才习惯。
什么是熵,什么是信息熵,基尼指数,基尼不纯度。 相对熵 交叉熵  条件熵 互信息(注意基尼指数常用来收入平衡状态,理想情况是要比较大即比较均匀。而数据挖掘机器学习里的基尼不纯度是要越小越好,两者是从不同的角度看问题!我刚开始搜索基尼时是糊涂的..  其实基尼相关的 目前应该不太重要,了解即可。主要是几种熵 很重要。 )
为什么常用的损失函数是交叉熵 而不是均方差? 而VAE生成的图像,较GAN来说相对模糊,模糊的原因是?(第二个问题需要了解了 VAE/GAN之后再看 )
生成模型和判别模型的区别是什么?

什么是归一化(normalization),标准化(standardization)?  机器学习中更常用的是哪一种? 逻辑回归需要做吗?
白化,这个在看完刘建平老师的PCA后,可继续了解。因为PCA后的目的可能就是要做白化,为数据进一步处理做准备。
什么是范数  有助于处理。。情况?  什么是condition number
搞清楚矩阵乘法是怎么乘的。
矩阵的行列式,意义 (顺便了解下迹:行列式是特征值的乘积,迹是特征值的加和)
特征值和特征向量  先从公式和计算上入手 A* V = λ * V   (A矩阵* V向量 =  λ常数 * V向量)  再了解在数据挖掘 机器学习中特征值和特征向量的意义,这个一搜就一大把了。
关注数据挖掘的话还需要多去了解特征工程。
矩阵对角化的意义。相似矩阵的意义。 矩阵左乘,变换基。逆矩阵。 这几个话题知乎上有很多很好的解答,令人茅塞顿开。
什么是协方差,相关系数。协方差矩阵 格拉姆矩阵 的意义?
雅可比矩阵 海森矩阵  牛顿法迭代求解
各种距离 余弦相似度
张量的含义和性质?
什么是超参数 什么是batch_size epoch_size等。 batch_size大小对训练的影响?
hadoop, map reduce方法,spark,hive,hbase,这些,以及大数据分析挖掘流程 也需要了解

二:数据挖掘 机器学习 基本的常用算法  
   强烈推荐刘建平pinad老师的blog。这可以是机器学习的线索或目录。http://www.cnblogs.com/pinard/   我从第一篇文章看起的。从感知机 决策树 SVM开始一直讲到DNN,CNN。除了原理,还有运用的代码。(当然后期神经网络的那些,还有很多很好的文章可以看,仅看刘老师这一篇可能是不够的。) 隐马模型看完后,我心里觉得对算法工程师这个职位要做的事和方法 有个大概的谱了。 感谢刘老师的无私分享! (其实刘老师的分享我觉得要有一点数学基础的人看比较合适,如果看不懂时可再搜其他的文章,但其作为 学习的线索/目录肯定是很好的)
   在学习正则化,范数,EM算法时,包括后面的图像卷积时卷积核的含义和效果时 zouxy老师的blog也让我受益匪浅:http://blog.csdn.net/zouxy09/article/details/24971995
   在学习各种组合方法时,要了解bagging/boosting各适用于什么场景,谁的基模型为强模型及目标是降什么,谁的基模型为弱模型及目标是降什么。
   看刘老师的KNN算法时,仍是不能很好的理解。 关于KNN,这个很不错: https://zhuanlan.zhihu.com/p/22345658?refer=hgjjsms
   这些算法在学习时就边看边动手,后面可以去参加一下天池的新人离线赛,实际操作感受一下数据清洗/处理过程,寻找特征工程等数据挖掘的过程,熟悉dataframe的各种操作,熟悉sklearn等这些库的使用。

三: 真正到深度学习了

   先大概有个分类吧, 深度学习大方向有三个: CV图像领域,NLP及时序数据,推荐。 个人对推荐兴趣相对小一点,后面的也主要是对图像和NLP而言的。图像的比较基础一些,主业图像的同学可能对时序数据NLP没那么熟悉,但主业NLP的同学应该对图像处理不陌生。


    有很多tensorflow的介绍入门文章。动手尝试。
    另外 opencv也可以了解 https://docs.opencv.org/3.3.0/index.html  (其实我没怎么看 这里要展开又是一大段了)
    对于图像:先了解什么是通道数。
    了解DeepID DeepID2  人脸识别/人脸比对的区别
    了解triplet loss,centor loss
    
    我看过几集莫烦的深度学习视频。其实还有很多视频推荐,还有很多英文的,吴恩达老师的应该也很好, 我觉得看视频比较费时间,打算后面再多看一点。
    刘建平老师的blog里中期就介绍了DNN,随之而来的CNN RNN LSTM。 只看刘建平老师的应该理解还不够,多看看其他文章。
    再去多搜搜CNN的卷积,多一点卷积意义上理解,而不是只了解到 卷积计算过程的GIF动图。
    多通道的多个卷积核过程。卷积核有通道的概念吗? 还是只是二维的? 使用1*1的卷积核为什么能达到降维的效果?
    Feature Map/输出通道/神经元/感受野/padding等概念
    卷积与全连接相比,是如何减小参数个数的?
    需要理解 卷积神经网络各层的参数和连接个数是多少?   http://blog.csdn.net/dcxhun3/article/details/46878999
    高斯卷积 高斯模糊。 模糊是怎么来的? 把清楚的照片(像素之间大差距) 缩小差距,使得数字从整体看更平均,照片就模糊了。
    不容错过的"YJango的卷积神经网络", yjango老师好多次让我茅塞顿开,非常感谢他无私用心的分享,受益非浅。
    全连接层的意义? 为什么cnn rnn的最后经常拼接一个dnn?
    http://blog.csdn.net/zouxy09/article/details/49080029
    这篇文章里提到了 时域上的卷积等于频域上的乘积,这样就需要了解傅里叶变换了。知乎上有很受欢迎的"掐死我"文章,我也是它的受益者。
    另外我看有一些文章里提到了人脸识别的haar特征,haar小波变换我也顺便看了一下,但暂时好像还没用上

    继续了解一下卷积网络架构的发展历史
    Inception v1 v2  v3  v4 模型
    NIN  (Network in Network)
    resnet网络
    有很多很好的文章,这里推荐几个:  比如上面的inception模型和残差网络,下面这篇文章就比较容易理解。
    https://zhuanlan.zhihu.com/p/27642620
    https://zhuanlan.zhihu.com/p/27857399
    我之前只知道调参时可以增加CNN层数和每层的神经元个数来,也看过很多的文章关于cnn的结构。但增加层数和神经元数意味着什么? 这篇文章让我通了很多。 http://www.eepw.com.cn/article/201706/360625.htm
    可以学习下SIFT算法,虽然现在不如CNN
    mtcnn:
    理解BN。顺带可以一起理解 Layer Normalization、Instance Normalization及Group Normalization 。https://blog.csdn.net/malefactor/article/details/82154224 张俊林老师写得相当好。
    这里有图像的知乎live,后面这个串讲了神经网络
    计算机视觉从入门到放肆  https://www.zhihu.com/lives/848170558016356352
    深度学习中的常见名词术语(图像方向) https://www.zhihu.com/lives/904295186979508224

    人脸识别的论文:
    FaceNet: A Unified Embedding for Face Recognition and Clustering
    Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
    Deep Residual Learning for Image Recognition
    Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
    Densely Connected Convolutional Networks

  
    
    时序数据ARIMA模型了解一下 不需要做为重点。 FBprophet也可动手试试。
    RNN的理解很重要,假如你看到三个从左到右排列展开的cell图,是代表网络图中有三个cell吗? 不是,它是同一个cell在不同时序的展开。
    RNN的结构图,应该这样画 才更清晰,对初学者更友好:  https://www.zhihu.com/question/68552209  Scofield的回答
    静态rnn 动态rnn区别是什么? 梯度消失 梯度爆炸是如何形成的?  如何解决?  RNN的梯度消失,跟DNN的一样吗?
    LSTM中几个门的作用是什么?
    理解embedding (知乎上word embedding和解答很多)
    怎么进行词嵌入呢?  word2vec是一种算法,它有两种训练模型CBOW skip-gram. 这个刘建平老师的blog中有介绍。但是在张俊林老师的分享中了解一下 这个发展的背影,理解起来更容易。不然可能会有很多疑问。
    word2vec, glove可以了解下。旁边还有gitem2vec, graph embedding 在等你
    除了基本的DNN CNN LSTM外, 还需了解attention模型,transformer模型,xlnet等。 深度学习枕边书(最近19年中啦)也在啃:https://blog.csdn.net/malefactor/article/details/82051716  这里面带你了解ELMO, GPT, BERT等。
    什么是语言模型/掩码语言模型/乱序语言模型?
    beam search原理?
    Transformer虽好,其缺点是什么?   GPT-3据说训练一次几百万美金,别说模型放在手机等边缘终端,一般的公司也无法使用。 从哪些方向/如何改进呢?
    Transformer是从NLP里发展起来的,图像上可以使用么?  想想如何用? 

    吴军老师的 数学之美 这本书,我听着这名字,原以为会是一系列的公式推到最后得到一个很简洁的结果,这才能体现数学之美嘛。没想到,这本书的目标 竟然是给非IT工作者的科普读物! 其实刘建平老师前面的那些BLOG读过了,有一点NLP的基础来看都OK的,不用害怕看不懂,讲得很好的。除了布隆过滤器是对我来说是完全全新的内 容,其他都是以前见过的。不过吴老师对于人工神经网络的分享,有点意外.. 呵呵

    对于强化学习,刘建平老师的blog更新了一系列的文章!
    对抗生成网络GAN,变分自编码器VAE, 以及他们的很多变体! CGAN WGAN GAN-GP info-gan... CVAE... 有一个开心的事 就是 GAN到CGAN VAE到CVAE代码改变动只需要一两行! GAN到WGAN理论有一些 代码只需改动几行!不过得搞清为啥要这样做。 还有GAN动物园 很多变种, 搜一下就知道。
    变分推断是什么?标准自编码器和变分自编码器的区别 是什么?VAE的两个损失是什么? VAE是假设p(z)先验分布为正态分布吗?(no)
    VAE/GAN的异同点主要是什么?两者能否结合?强化学习与GAN有没有类似的地方?run_glue.py 新世界的大门等着你。有很多预训练好的模型 可以拿来fine-tune。
    知识图谱: 新世界太多了~  知识图谱基础之RDF,RDFS与OWL - 知乎
    其实如果你走到这一步了,要看什么心里应该早有方向了。 万事开头难, 后面。。也难。。不过会越来越好, 就是要多投时间。
......

算法工程师 还有另外一个维度的方向(假设cv/nlp/推荐是同一个维度的):运筹优化。 
深度学习 是非凸优化问题,也是非常大规模的 求最优解问题。深度学习的目标函数非常复杂(复合函数),但是它没有约束条件。与优化相关的问题,肯定是落在运筹学范围内,优化就是运筹学的核心。
借用旁边朋友的话,机器学习/深度学习解决的都是单点的问题。世界上还有很多很复杂的东西,需要协同工作,需要“通盘考虑、统筹优化”的优化算法。这一块现状好像比机器学习深度学习冷门一些,但需要用到的地方还是很多。学院派肯定会学很多基础理论要学习,现实问题中用启发式算法场景多一点,但还是需要懂一些基础理论的。

......

什么是对比学习contrastive learning?prompt learning。in context learning。 了解InstructGPT,对齐税。这样就接近了chatgpt。小模型+精调 vs 大模型+提示词, 选哪样?哪个更适合自己的场景。

学习多模态。比起对抗生成网络,现在更强的生成模型是扩散模型。学习CLIP技术,潜扩散模型。学习DALL-E与stable diffusion的不同。

.......

各种PEFT: Parameter-Efficient Fine-Tuning 技术。LORA,QLORA,p_turning等。虽然大多数人不太可能去训练chatGPT, GPT-4,但垂类大模型,可以用peft技术微调一下得到。

langchain了解一下。强大的工具,串连很多。

上面总结的东西难免有错误和遗漏,也有不太重要的,欢迎各位告知我修改补充,权当各位学习路上的小小的参考。

上面列的东西,我也没有全部掌握,后面的论文也没看多少。书单还有一大串。。(最基本的有统计学习方法  西瓜书 花书等等...)
路还挺长。曾有个朋友说:学习使我快乐。 我觉得这也是我心里的话。 如果没有这种快乐满足的感觉,挺难坚持的; 有的话,好像都不用用坚持这样的字眼。
看到知乎上说 阿里后来面试都不太在乎在天池赛中取得的好名次了,想想熟悉了那些套路,解这些赛题应该也比较简单。我刚转行,很想在新领域中再成为这样的骨干,但这需要时间精力还要点机遇。  一年来潜水看了好多大侠的精彩分享,很少付费,不好意思,那我也来分享点浅薄的东西吧。(而且刚开始看时会很惊奇,世界上为什么有那么多人愿意无条件花时间来写这么多,还想法设法用着各式各样幽默的语言,搞笑的图片.. 非常感谢这样的陌生人!)

---------

20230321更新:


一不小心,世界又变了样。chatGPT/GPT4以惊呆众人及行业者的姿态横扫了这个世界。我曾经觉得机器自然语言( 而不是视觉系统)会达到这样的水平但要达到这样的智能程度需要相当长的时间,没想到它这么快来了。当我还在嫌弃TFIDF/word2vec范式,用着chinese-roberta-wwm-ext.zip+fine-tune就觉得不错的范式处理工作时,世界已经前进到Prompt范式潮流了。(当然目前的工作因为数据安全的原因在本地fine-tune也比较合适)。 新东西学一学也挺快,就是觉得世界眨眼间就变了..世界变之前不需要也不会跟你打招呼(好吧,后来想想GPT3和stable_diffusion都是在打招呼了只是我自己觉得与我当前的工作没太大关系而没联想到没get到而完美错过).. you never know..
以后还需要来更新这个学习之路吗? 学了以后应用的机会,是不是不多了。 了解prompt工程就行,里面的原理和演进 好像不是特别应用广泛..

最近这些天有点小悲伤,没能力不想创业的我,将来能干啥? 
发展的趋势是不可挡的。100多年前照相机的发明,是当时的画师是最不愿意看到的。为人画像的画师这个职业不存在了。 
前面一二十年降维打击的行业还少吗? 高科技养猪等场景下,原来需要N多人维护的工作,只用很少量的人就OK。 我不觉得程序员算法工程师与养猪工人和餐饮服务员有非常本质的不同。新时代民工而已。不会高贵到不可替代。也许就像原来大型养猪厂里的工人一样。将来只需要很少的程序员,更别提NLP工程师了,最先出局。
虽然现在只是叫copilot副驾驶,但副驾驶发展到一定程度,整个社会面上需要的主驾驶就很少了。 虽然现在看到的好一些文章都说只是减轻脏活累活,不会完全替代程序员。但我觉得 这只是时间的问题,大部分现在看到的不可能被替代的困难点,将来都会被解决,甚至超出我们的预期地被解决。虽然目前看到的情况国内大模型的可能一年之内还有点困难,但以后也许2~5年很可能翻身,并且我们也希望国内的厂家能翻身,打个更漂亮的翻身战。国内和国外的技术差距暂时遮掩了国内这一天的来到。但终究是会来的。

我们一直在亲历历史。亲历远如犹如历史教科书中的情节xxx,亲历近如夺去几百万人生命的疫情,现在又开始亲历新一轮的工业革命。渺小如我,怎么可能抵挡这个世界的发展趋势。 
怎么化解? 
我好像只能接受 可能不需要说明的事与愿为。
好好爱家人
 

  • 68
    点赞
  • 299
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值