正文共: 6920字 7图
预计阅读时间: 18分钟
学完了Jeremy的深度学习实践 Part1,了解了DL应用的4大领域,计算机视觉,自然语言处理,表格数据,协同过滤,感慨对于一个编程基础断断续续加一块一年的PM,竟然是具备可操作性的,于是在Part2课程刚出来没几天,就下功夫学习,想搞清楚这个一堆科学家和博士生扎堆的领域到底有多么高不可攀,答案是,并没有那么高不可攀,而且会越来越容易上手。
FastAI就是这样一个帮你快速上手的工具,而且即使不是将来要从事工程师类的职位,上完这些课,你也可以更深入的了解深度学习到底是如何运作的,甚至可以帮助你理解人类学习的本质(学习观里有非常有趣的解读)。
既然到了Part2,也该总结下写这份笔记的初衷:不是为了吸粉,不是为了经营一份事业,只是单纯的想帮助自己学习,同时可以帮助别人学习。费曼学习法中讲到,能用最通俗易懂的语言和别人讲清楚了,你才是真正学明白了,写这篇文章就是想做到这一点;而帮助别人学习,是想通过这样一个由浅入深的大纲,以及核心要点的提炼,可以帮助读者更好的分配自己的学习精力,以提高学习效率。
Part 2 简介
课程目标
实践FastAI最基础的部分,搞清楚原理(相当于重构一个FastAI)
学会读论文,并实践
学习主流技术:对象监测,seq2seq注意力……
想办法提高性能:分布式训练
在Swift中实践FastAI
课程安排:
8 - Backprop from the foundations 反向传播原理
9 - The training in depth 训练原理
10 - Looking inside the model 模型原理
11 - Data Block API; generic optimizer 数据块API和优化器原理
12 - Advanced training; ULMFiT 进阶训练 & 文本分类 的通用语言模型的 微调
13 - Swift: Deep Learning Basics Swift语言的深度学习基础
14 - Swift: Putting it all together Swift语言的整合
More lessons - Applications of Deep Learning 更多应用课程,比如近期会放出语音识别的课程
1 Lesson 8 简介
Matrix Multiply 矩阵乘积,包含broadcasting
Forward Pass 正向传播(包含初始化一个nn)
Backward Pass 反向传播,一个链式刷新器
训练一个CNN的Roadmap
1.1 课程中提到的琐事
记得更新libs
Jeremy的blog有关于swift的介绍
学习的过程应该多写blog
numpy broadcasting einsum
矩阵运算
论文中看不懂的数学符号,可以搜wiki或者通过手写识别
1.2 作业
回顾Part1的16个深度学习概念
确认理解了Broadcasting
读论文2.2
重写notebook尽量不看别的
2.1 从头创建一个 矩阵乘积 的函数,性能提升5万倍 [00:36:00]
纯Python运算,3次循环,取出每个数字的值,然后去相乘&相加(原理:http://matrixmultiplication.xyz/)
速度 827ms
def matmul(a,b):
ar,ac = a.shape # n_rows * n_cols
br,bc = b.shape
assert ac==br # 单元测试的声明,不等的话会报错
c = torch.zeros(ar, bc)
for i in range(ar):
for j in range(bc):
for k in range(ac): # or br
c[i,j] += a[i,k] * b[k,j]
return c
Element-Wise 元素指向的运算,2次循环,相当于vector * vector
快178倍
def matmul(a,b):
ar,ac = a.shape
br,bc = b.shape
assert ac==br
c = torch.zeros(ar, bc)
for i in range(ar):
for j in range(bc):
# Any trailing ",:" can be removed
c[i,j] = (a[i,:] * b[:,j]).sum()
return c