大家好啊,我是董董灿。
之前写了一篇文章:有前途!大模型也需要AI算子开发岗!有同学看了之后,在问AI算子开发需要如何学习,有没有学习路线?
当然是有的了。
今天周末在家,就梳理了一下该岗位需要的技能以及学习路线。
需要说明的是,岗位技能的梳理,我默认的学习对象是没有编程经验和AI相关经验的小白,如果你有其中一部分的学习和工作经验,那就太赞了。
(本文原创,以下干货,谢绝转载,违者必究)
1、技能地图
AI算子开发的技能地图,如果感觉看不清,可以放大图片来看。
2、学习路线
学习路线真的很重要,否则向无头苍蝇一样学了半天,没有反馈,会完全失去学习的动力。
根据我之前对这个岗位的了解,以及转行学习编程和AI算法的过程,我制定了下面的学习路线。
我把上面的技能地图中的内容揉在一起了,因为我们毕竟不像是大学中的课程学习,学C语言就只学C语言,学计算机基础就只学计算机基础,很多东西都是有交集的,一起来学,学的更快,领悟的更深。
多说一句,其实不光是AI算子开发的技能可以这么学,很多入门计算机、算法、AI 的同学都可以这么学。
我相信如果真的可以按照下面的路线全部学一遍,学会其中60%以上的内容,很多与AI相关的岗位,都可以达到基础要求了。这个时候,再增加一些实际项目的实践,分分钟就可以去面试了。
好了,话不多说,下面开始,如果你对其中的某一项比较熟悉,可以直接跳过。
1、C 语言破冰学习(基础中的基础)
1. 搭建 c 语言开发环境,完成一个简单的程序编写
2. 了解程序是如何在计算机上运行的,简单了解计算机的组成原理
3. 学习变量、常量的概念,简单完成一个常量和变量的基础数学运算的程序编写
4. 学习内存的概念,初步了解变量、常量都是在内存中存储的
5. 学习最基础的数据结构——数组,深入理解数组和一个单一变量的区别,数组和内存的映射。
6. 学习基础语句:判断语句、循环语句,switch 语句:完成一个包含0-9的数字的数组创建,并将偶数输出在屏幕上。
66. 学习神经网络中 relu 函数,完成一个 relu 激活函数的实现。
7. 学习函数:了解函数的概念,了解函数对于代码逻辑的封装的意义,将 6 中输出偶数的逻辑封装成一个函数来完成。
8. 破冰作业:利用所学的知识,编写一个高斯小时候就解决的经典数学题:计算1到100的和。
2、 C 语言进阶(指针)
1. 计算机存储原理进阶:了解冯诺依曼结构,深入了解内存结构,了解数据和指令在内存中的存储,了解内存对齐原理
2. 了解指针的概念,了解指针和解引用的概念,完成一个指针对一个变量的解引用。
3. 利用指针获取某个变量的值,完成一个简单的数学逻辑运算
4. 了解数组和指针的关系,将数组转换为指针,利用指针将破冰中的第 6 题完成
3. 简单了解C语言编译原理,如何将代码编译为二进制在电脑上运行。
4. 了解变量、常量、数组、函数被编译成的二进制指令在电脑上运行的概念,了解计算机指令系统:取指,译码。
5.了解函数调用与指令跳转的关系。
6. 了解结构体的概念,学会使用结构体
7. 深入了解了内存对齐后,在结构体基础上学习联合体(可选)
8 . 创建一个指针,直接读取内存中某个地址的数据,了解野指针的概念。
9.了解栈内存和堆内存的区别
10. 深入了解c语言 malloc 函数和 free 函数对于内存申请和释放的机制,简单了解操作系统对于内存管理的机制
11. 编程思维训练:利用已学的知识,完成一个斐波那契数列的输出。
12. 编程思维训练(难):利用冒泡排序完成一个数组的排序功能。
13. 深入了解在c语言中,万物皆指针的思想。
如果把c语言破冰和c语言进阶部分学完,学会其中80%,那么恭喜你,c语言已经入门了,并且可以利用所学的知识进行一些代码开发了。
这两部分在我目前看来,如果在看对书、找对资料、学习能力较强或者有人指导编程实践的前提下,集中学习,从零开始,大概一到两周基本就可以理解到位。
这算是较为基础的内容,后面的内容就会越来抽象,尤其是概念和算法。
3、 C++进阶
1. C++与C语言的区别:面向对象编程的概念,类的概念,会创建一个简单的类。
2. 类与结构体的区别和练习
3. 子类和父类的关系,继承的概念,重写的概念
4. 结构体在内存中的位置,结构体中的函数在内存中的位置
5. 类在内存中的位置,类中的函数在内存中的位置。
6.继承之后,子类和父类在内存中是如何存储的(虚函数表),有什么区别,继承的函数和重写的函数在内存中是如何存储的。
7. 了解C++中 new/delete 和 C语言中 malloc/free的区别和联系,学习智能指针的原理,学会使用智能指针。
8. 了解STL的概念,了解 std::vector 与数组的关系,以及两者在内存中的存储方式。进阶可了解STL中其他容器和算法。
8.利用C++编写一个复杂的类,完成类的学习(可找书籍、课程或找专人辅导)
学完C++进阶,基本上C/C++ 的入门就可以了。剩下的就是不断的去查找资料,扩充自己的知识范围,不断地去实践摸索。
4、 深度学习知识入门
1. 查找资料,学习了解深度学习与机器学习的概念和两者区别和练习,学习相关概念如训练、推理、神经网络、节点、前向传播、反向传播等。这些概念了解即可,否则在看一些文章的时候,可能不知道什么意思。
2. 学习利用工具查看神经网络结构图。如 resnet50 结构。查看一个神经网络是如何由一个个节点(算法)来搭建起来的。
3. 了解 tensor 的概念。也就是张量,这个概念要深入了解。
4. 以 resnet50 为例,学习常用的神经网络算法。建议查看万字长文解析Resnet50的算法原理有个感性认识。
5. 常用算法学习。卷积算法: 初识卷积、卷积的核心原理,矩阵乘算法:矩阵乘,激活函数:激活函数,池化层:池化, softmax分类原理:softmax等。
6. 以上算法几乎是深度学习中最重要最常见的算法,学完之后,可以扩展学习其他算法如:dropout: dropout,交叉熵损失函数:解密熵、交叉熵损失,归一化:批归一化,one-hot 编码:one-hot等等。
5、 计算机基础入门(硬件知识学习)
我个人感觉这部分不用学习的太深入,但是有些概念还是要了解的,可以参考硬件学习 来阅读学习。
除此之外,建议找计算机考研书籍和课程看一遍,把计算机底层原理搞透彻一些,这部分内容就没啥问题了。
如果需要资料,可以私信我。
6、 最后来一波实战
在完成了编程基础的学习、AI算法知识的学习、硬件基础的入门之后,就可以来一波实战了。
可以找一个实际的神经网络来练手,将神经网络中的算子都编码实现一遍,到此,100%就可以胜任 AI 算子开发的岗位了,甚至有更多AI的岗位可以选择。
比如如果你AI算法学的特别好,可以考虑AI算法工程师,做一些算法相关的工作。
比如如果你硬件知识特别感兴趣,学的很不错,可以做一些更偏底层的AI芯片岗位的工作,比如芯片验证等。
当然,任何岗位不是那么简单的学习就可以满足的,以上只是入门学习路径,更多的要靠个人不断实践摸索,才能成就大成。
那如何实战呢?
如果你没有好的项目来做,可以跟着我之前做的一个小项目来练手:从零手写 resnet50。
这个项目是从零开始,将 resnet50 的所有算法都手写了一遍,用C/C++和python两种语言来写的。项目可以正确的识别出图片的中动物:分分钟识别"十二生肖",我手写的神经网络大提速。
这个项目配合之前写的文章来理解算法,对于新手来说,是一个很不错的实战项目,如果全部理解清楚并可以将代码复现出来,真的可以写到简历上哦。
好了,就写到这,如果有同学想试一试,可以照着这个路线来学习,即使你现在是个小白,只要坚持下来,也会完成蜕变的。
有问题可以加我微信一起学习哦。
记住,生活不只眼前,还有诗和远方,加油。