今天微信私信回答了一个同学的问题:?我在入门深度学习的过程中,从配环境到 debug 全是坑,解决问题的时间远超跑模型的时间,为什么入门深度学习这么难?
这个问题真的问到我的心坎里了,我只能说,入门深度学习这件事,我是真的有经验。
1、我是如何入门深度学习的
我从机械硕士毕业就转码开始搞软件开发,然后转行做深度学习算法,已有不少年了。
这个过程,经历了不少。
无论是自学 C++、python 这种基础编程技能,还是从零学习 AI 算法,还是钻研计算机体系结构,每一部分都有很多的感悟。
这里重点说一下学习 AI 算法的经历和感受。
记得第一次参加与深度学习算法的面试时,是一个小公司,面试官问我什么是权值?
那会儿深度学习还远不像现在这么火,面试问的问题很基础,什么是权值这种简单的问题,我估计是真的很难再碰到了。
我当时的回答是:你说的是不是达不溜(w)。
面试官笑着说,什么达不溜?
我说我看很多文章中的权值,都用 w 表示。
那次的面试是失败了,后来又面过很多公司。最后幸运的是进入了一家 AI 芯片算法公司,在那里有大量的时间边工作边学习,算是入门了深度学习。
从我的经历来看,现在很多打算入门深度学习的同学的水平,包括上面问问题的同学的水平,是绝对可以很好的回答上来"什么是权值的"。
虽然我现在在 AI 行业混了很久了,也熟悉了不少算法和神经网络,但我相信你肯定可以比我学的更好。
看下我当时是怎么入的门?
2、基础技能欠缺,就买课看课
我当时 C++ 基础薄弱,就买了一个 399 的 C++ 课程,是一个百度资深工程师的录播课。
我每天上下班路上坚持看。
从家里到公司坐地铁刚好半小时,每天上下班看一个小时,坚持了 3 个月,将课程视频来回看了 6 遍,然后到公司一有闲暇时间就练习课程中的技术,3个月下来,C++ 就真的是很熟练了。
以至于后来的某次面试,我甚至可以和面试官探讨“引用计数”的底层实现。
学会了 C++ 再去学 python 就真的很容易。
2、深度学习算法一定要练手,一定要亲自写算法
吴恩达的课程很经典,很多入门深度学习的同学都会看,我当时也看了,吴恩达也算是我半个深度学习理论的领路人吧。
在学习算法原理的基础上,我会把很多算法都自己实现一遍,这得益于C++和 python 技能的熟练。
自己手写这些算法是为了加深对这些算法的理解,比如我手写过很多版本的卷积算法等等。
为什么我要手写,因为调用三方库和自己手写是两种完全不一样的学习体验。
调用三方库比如 numpy 或者 torch,很多人都会调用,但是对初学者来说只是会使用,我认为算法本身只有自己可以手写出来才是真正学到手。
我还手写过不少的神经网络,比如Github上放的这个 https://github.com/dongtuoc/resnet50_zero,是我曾经写过的一个,最近打算重构。
竟然还被 20 个小伙伴星标了,有点意外。
在完成以上两点(编程基础和算法基础)之后,我的深度学习入门基本就完成了。
剩下的就是在工作中不断地打磨自己对算法的理解,不断的精进自己的水平。
业余的时间写一些文章,谈一下自己对于一些算法和行业的认识。
当你看到这篇文章的时候,我已经在公众号上发了100篇原创文章,很多都是在给想入门深度学习算法的同学做算法科普。
因为我经历过当时初学算法的难度,也就知道有些算法该怎么理解起来会更加简单。
这里放一个我认为到目前为止写的最棒的一篇算法科普文章:5分钟搞懂矩阵乘法的本质。
最后,再回答一下上面那个同学的问题。
深度学习入门确实很难,但秘诀也很简单,那就是:学习加实践,再加一条坚持就可以了。
初学确实很多东西看起来都不懂,但是一点点啃下来之后,就会发现难点正在就一点点消失,这其中最怕的就是半途而废。