Part2 深度学习原理 Lesson 8 :矩阵乘积;正向&反向传递

正文共: 6920字 7图

预计阅读时间: 18分钟


学完了Jeremy的深度学习实践 Part1,了解了DL应用的4大领域,计算机视觉,自然语言处理,表格数据,协同过滤,感慨对于一个编程基础断断续续加一块一年的PM,竟然是具备可操作性的,于是在Part2课程刚出来没几天,就下功夫学习,想搞清楚这个一堆科学家和博士生扎堆的领域到底有多么高不可攀,答案是,并没有那么高不可攀,而且会越来越容易上手。

FastAI就是这样一个帮你快速上手的工具,而且即使不是将来要从事工程师类的职位,上完这些课,你也可以更深入的了解深度学习到底是如何运作的,甚至可以帮助你理解人类学习的本质(学习观里有非常有趣的解读)。

既然到了Part2,也该总结下写这份笔记的初衷:不是为了吸粉,不是为了经营一份事业,只是单纯的想帮助自己学习,同时可以帮助别人学习。费曼学习法中讲到,能用最通俗易懂的语言和别人讲清楚了,你才是真正学明白了,写这篇文章就是想做到这一点;而帮助别人学习,是想通过这样一个由浅入深的大纲,以及核心要点的提炼,可以帮助读者更好的分配自己的学习精力,以提高学习效率。


Part 2 简介

课程目标

  1. 实践FastAI最基础的部分,搞清楚原理(相当于重构一个FastAI)

  2. 学会读论文,并实践

  3. 学习主流技术:对象监测,seq2seq注意力……

  4. 想办法提高性能:分布式训练

  5. 在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 简介

  1. Matrix Multiply 矩阵乘积,包含broadcasting

  2. Forward Pass 正向传播(包含初始化一个nn)

  3. Backward Pass 反向传播,一个链式刷新器

训练一个CNN的Roadmap


1.1 课程中提到的琐事

  1. 记得更新libs

  2. Jeremy的blog有关于swift的介绍

  3. 学习的过程应该多写blog

  4. numpy broadcasting einsum

  5. 矩阵运算

  6. 论文中看不懂的数学符号,可以搜wiki或者通过手写识别

1.2 作业

  1. 回顾Part1的16个深度学习概念

  2. 确认理解了Broadcasting

  3. 读论文2.2 

  4. 重写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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值