人工智能入门-初次邂逅

前言

研究生毕业之后因为一些机缘巧合入职某不知名手机公司,不是算法出身,但是入了算法的坑。有幸接触了AI和深度学习,从零开始在这些庞大繁杂的知识体系中一点点摸索,摔跤又爬起来,爬起来又接着摔跤。幸亏老大和同事们对我还比较包容,并没有把我开除。我的头发也比较忠诚,能一起陪我走到现在。后来,慢慢开始接触公司的项目,经历了实践的历练,跑出一张小小的图像,或者几天毫无进展的绝望,都不知不觉化作这其中的乐趣和感悟,在人工智障到人工智能迈进的路上前进了小小一步。

正好借这个机会,把自己之前踩过的坑、走过的路和那些有意思的故事分享出来,结合前人的经验和我自己的体会,写下了这些内容,当作对自己工作几年来学习的总结和提升吧~

太长不看版

书籍推荐:

《机器学习(俗称西瓜书)》,作者周志华,网上有《机器学习公式推导解析》,可以对照着看;

《Deep Learning(俗称花书)》,作者Ian Goodfellow、Yoshua Bengio、Aaron Courville,巨厚的一大本,网上有中文版;

《统计学习方法》,作者李航,也有叫蓝皮书,网上也有大牛手写实现了这本书中所有算法。

其中花书被称为“深度学习圣经”,网上这三本书都有很多大佬们总结的笔记、课件等。

课程推荐:

吴恩达,斯坦福CS229,Machine Learning,Deep Learning

李飞飞,斯坦福CSs231n,Convolutional Neural Networks for Visual Recognition

李宏毅,机器学习/深度学习

同样的,网上笔记、课件、PPT、视频、课后题一大堆。慢慢消化~

UP主推荐:

YouTube:3bule1brown

B站/知乎:shuhuai008

常用工具推荐:

Pycharm:开源的免费的python IDE软件

Anaconda:一个简化的免费的开源的Python版本,包含了Python、需要用到的一切包、和包管理系统、和各种工具。省掉了安装Python再安装各种包的麻烦

Netron:可以看模型的拓扑图,支持大部分主流框架的模型格式

Netscope:在线工具,用于解析Caffe的.prototext文件,绘制拓扑图

Sublime:一个文本编辑器,颜值在线,好用免费

必备:

N块很牛叉的GPU+一个不用很牛叉的带Linux操作系统的电脑

尽量别用Windows了,也别用CPU训练网络了,如果有足够的耐心除外。

正经版:

机器学习/深度学习学习路线总结

1.数学基础

开始研究深度学习之前,最好重温一下数学。花书和蓝皮书都行,其中线性代数、概率论等内容都比较重要,后面都会遇到。

个人感觉这些书还是比较难啃的,我当时也是只啃了西瓜书,这两本也并没有看(主要也是数学不好,看不动,公式也推不动-_-||)。刚开始接触这些比较抽象的概念也不太好理解,可以在对深度学习有了初步了解之后再回来看更有收获(嗯,肯定是这样)。

2.Python基础

了解Python基础语法即可,主流深度学习框架和网络开源代码都是用Python实现的,个人也比较推荐这种路线,优点就是可读性好,移植和修改都比较方便。对于理工科的小同学们来说,学语言这东西so easy了,甚至说不用专门学,多用一用就问题不大~

需要注意的是Python2和Python3语法有一些不同,而且可能出现互不兼容的情况,某一位同事有云“Python2和Python3是两种语言”,不过核心的东西差不太多,也不用太介意。

参考资料: (1)廖雪峰 https://www.liaoxuefeng.com/wiki/1016959663602400 ;(2)菜鸟教程 https://www.runoob.com/python3/python3-tutorial.html

3.常用模块

包括numpy(数据处理和矩阵运算),pandas(数据结构和数据分析),matplotlib(数据可视化,说白了就是画图的)。除了上面这三个是比较常用的典型的Python工具包,还包括其他各种包,在训练数据预处理、训练loss可视化等方面都有广泛应用。

但是我认为这些没必要单独了解,深入学习的话每个包里面的内容都非常多,很深的话也没太大必要,知道他们都干啥用的,在用的过程中慢慢查就可以。

参考资料:随便找吧

4.机器学习与深度学习基础知识

如果从零开始学习AI的话,那就从看视频开始吧。

机器学习首推吴恩达的课程,网上资料非常多,讲义、PPT、源代码都很完整,干货很多,值得反复学习。

深度学习同样推吴恩达的深度学习的课程和李飞飞CS231n课程,李飞飞的课程侧重机器视觉的角度,网上资料也有很多。

有人推荐李宏毅的深度学习/机器学习课程,好吧我承认我没看过。。。不做过多评价。

小目标Step1

了解机器学习基础。吴恩达的机器学习课程中把机器学习里面比较主要的概念都做了介绍,建议以这个作为切入点,讲到对应章节以西瓜书作为参考书辅助学习。西瓜书中有详细的理论分析和公式(虽然我也没记住多少。。。),能够更深入理解基础的理论。个人感觉把吴恩达的课程看完之后就对这些东西有初步的概念了,后面也可以根据自己的需求有针对性地学习。

小目标Step2

开始了解神经网络。吴恩达的机器学习课程中会有一些初步涉及,可以继续学习他的深度学习课程,或者学习李飞飞的课程,结合一些参考书或者CSDN上的文章,能够建立一个系统的了解。

参考资料推荐:

(1)3bule1brown,一个UP主,在YouTube和B站都有,他推出过一系列神经网络讲解视频,用动画的形式介绍的一些概念和理论,强烈推荐。

https://www.youtube.com/c/3blue1brown/featured

(2)Neural Networks and Deep Learning,作者Michael A. Nielsen,强烈推荐。Github上也有这本书相关资料和源代码,可以先阅读这本书的前半部分,和吴恩达课程并行,当逐步上手了之后再慢慢看这本书的后半部分。

英文版:http://neuralnetworksanddeeplearning.com/,中文版:https://tigerneil.gitbooks.io/neural-networks-and-deep-learning-zh/content/

小目标Step3

深入的学习深度学习(有点绕),到这一步我基本就进入到解决具体问题(就是工作太忙+懒-_-||)的阶段了,也没有再多的更系统的学习。

这里推荐一些参考资料吧,没事的时候翻一翻,也还能有一些收获:

(1)深度学习500问,https://github.com/scutan90/DeepLearning-500-questions,取材于日常学习和工作中以及面试中常见的问题,一问一答的形式,干货满满,可以给后面的学习提供一个思路。

(2)网上也有继续推荐吴恩达的课程:《深度学习专项系列课程(Deep Learning Specialization)》,好像是付费的,我也没看过~

(3)另外也推荐斯坦福大学的CS231n和CS224n。CS231n专注于计算机视觉的深度学习,而CS224n专注于序列建模。

5.深度学习框架

终于到这一步了,找一个框架开始撸代码吧!

Caffe平台比较经典,当年也火遍全球,贾扬清曾经说过:Caffe是一份非常好的代码!Caffe是基于C++语言,CSDN上有非常多的Caffe源码解读的文章,另外推荐一本参考书:《深度学习:21天实战Caffe》,我当时是这本书加上看CSDN的文章,啃完了全部Caffe源码,后来帮世豪搞定点化也算能hold住了。(这本书和我写满的笔记一起借给了周杨,结果他一直没还我╭(╯^╰)╮)。如果学有余力,在这个基础上能再了解一点Cuda,就锦上添花了。学习Caffe的最大收获就是对NN能有更具体的认识,通过代码理解他每个地方到底是怎么做的,为什么这么做。

有个问题就是Caffe安装非常麻烦。。。这里也曾经踩过无数的坑,有机会欢迎交流被虐心得。不过Caffe逐渐在被时代所淘汰。

TensorFlow是谷歌提出的,底层是C语音,上层是Python的接口,安装方便,但是代码相对比较晦涩,底层细节抽象度高,便于开发和部署,自成一套体系,学习曲线比较陡峭。不过他自己的工具也很多,可视化的东西很好看,因为谷歌影响力大,用他的还是很多,而且谷歌自家的东西基本都用这个,可以学学他的一些思想。

Torch底层C语言,上层是Lua语言作为接口,不好用。Pytorch是Torch的Python版,底层也是C语言,上层Python作为接口。

个人推荐学习Pytorch框架,和Python完全兼容,和numpy、scipy等无缝衔接,各种包齐全,安装方便,官网和教程非常多,非常全面,现在这个框架用的也越来越广泛,代码可读性好。而且Pytorch已经开源,网上也有很多源代码解析和完善的教程资料供学习。随着不断发展,Pytorch和TensorFlow也有互相学习借鉴的部分,两个人长得越来越像。

Theano、Keras、某度的PaddlePaddle没用过。某菊的MindSpore倒是用过,和Pytorch的类似,额外有一些昇腾定制化的东西。

总结一下,个人建议的学习路线是从Pytorch入手,好搭环境,可以很快地跑起来,比较有成就感。然后结合Pytorch的源代码解析,深入理解一下他各个函数都是怎么搞的,他的运作机制是什么样。看源码的话也可以考虑Caffe,目录结构比较简单,源码相关资料非常多也非常细致。

当然框架这个东西也不是局限的,每个框架都有适合的场景,对于学习来说区别不太大。深入了解一个,再往其他地方扩展也比较容易。而且现在网上有很多工具,可以实现各个不同框架下的模型相互转换,也有很多工具辅助开发,很方便。

引用一篇文章,向作者表示感谢:

https://blog.csdn.net/lingpy/article/details/110008883

Pytorch参考资料:

Pytorch官方教程中文版:https://pytorch123.com/ ,Pytorch中文教程:https://pytorch.apachecn.org/docs/1.4/

6.深度学习网络

在这个阶段,用一个具体的任务来辅助学习是最好的方法,找到一个任务或者一个开源的论文,按照他的说法把内容复现一遍,自己去训练一个网络(用CPU肯定是很慢了,最好能有GPU,而且多多益善O(∩_∩)O哈哈~)

我接触过的任务包括下面这些,有一些深入参与过,有一些只是兴趣使然,浅尝辄止了。简单总结一下:

图像

  • 分类,手写汉字识别、3D识别、场景分类,还有与人脸相关的一大套:人脸检测、人脸识别、人脸特征点识别、人脸姿态识别等等~
  • 分割,语义分割、实例分割,例如照片背景虚化、和ISP相关的一大堆等。

语音

  • NLP,语义理解、人声识别等,这个只是帮忙采过数据,算是另外一个大方向了,了解不多。

每一种任务展开之后都有一系列的方法和思想,例如怎么训练效果更好,训练更快,用什么样改进的网络结构等等,可以针对具体的问题深入学习。

小目标Step1

第一个例子:经典的HelloWorld级别的例子Mnist手写字体识别,常用LeNet,比较简单,几天应该就能搞定。

第二个例子:基于Cifar10或者Cifar100数据集的图像分类,常用ResNet网络,网络变大了一点,稍稍复杂一点。

经过这两个例子的实践可以基本了解怎么搭环境,怎么训练,可以愉快地玩起来了。

小目标Step2

进阶版,基于PascalVoc和CoCo的用更复杂的网络的图像分类任务。这两个数据集也被视作图像分类的标杆,出场率很高。有各种国际比赛,也有各种水的不水的论文,为了提高在这两个数据集上的性能而提出的各种奇奇怪怪的网络结构和训练思想,可以逐步深入。

例如分类里面的ResNet、SSD、YOLO、RPN等。

分割里面的FCN等。

NLP里面的Transformer机制、Attention机制等。

以及为了模型轻量化提出的MobileNet、ShuffleNet

以及为了提高性能提出的预处理方法、数据增强方法、各种训练trick和各种loss计算方法等等。  

这一步推荐从下面这些经典网络入手,逐步深入:

(1)LeNet,卷积神经网络的祖师爷

(2)AlexNet,深度学习的开天辟地之作,让深度学习成为可能

(3)ZFNet

(4)VGG-Net

(5)GoogLeNet 四代(Inception v1、v2、v3、v4)

(6)ResNet 两代(ResNet v1和ResNet v2)

(7)DenseNet

(8)ResNeXt

小目标Step3

现在看来差不多已经入门了,人工智能是一个范围非常大的概念,我们只是从一个最小的点切入,接下来就是在这个基础上发散再发散~

从Machine Learning到Deep Learning。

从单层感知机到多层感知机,从神经网络到深度神经网络。

从无监督学习的聚类(Clustering),到生成对抗网络(GAN),到深度信念网络(DBN)。。。

从有监督学习的卷积神经网络(CNN),到循环神经网络(RNN),到长短时记忆网络(LSTM),到图神经网络(GNN)。。。

再到强化学习(Reinforcement Learning)。。。等等

发散到最后,估计就成为大神了吧~

这里放一张图,说明一下目前常见的这些概念的关系,顺便感谢作者:

https://pic4.zhimg.com/80/v2-cde5ae4066b5e3b7899410039a2d7937_720w.jpg

再推荐国外一个大佬dformoso总结的机器学习和深度学习思维导图,同样干货满满~

GitHub:

https://github.com/dformoso/deeplearning-mindmap

https://github.com/dformoso/machine-learning-mindmap

废话了这么多,能力一般,水平有限,如果文中有什么疏漏和不足欢迎各位大佬指正,也欢迎各位小伙伴相互交流,共同进步。

最后的最后,祝各位都能早日成为AI大神ヾ(◍°∇°◍)ノ゙

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值