前言
作者来自北京某不知名985,现在是本科在读学生,专业是数据科学与大数据技术,班上同学都太卷了,没办法,需要学习深度学习,经大佬介绍,在B站上找到了一个很不错的资源,李沐老师的《动手学深度学习v2》,不仅有全套视频,讲解细致,而且配套资料全部公开免费,不用加公众号也不用私别人的vx,我觉得挺不错,在这里做一个学习记录,也想跟大家一起讨论深度学习相关的问题。新的一年,不要摆烂,一起加油!!!
这里附上连接:
1. 引言 — 动手学深度学习 2.0.0 documentation
相关的视频和书籍的pdf都有介绍,可以免费下载,然后还有jupyter,非常nice,ok下面咱们进入正题,本博客的图片基本来自李沐老师的视频
本文章包含了《动手学深度学习v2》视频中的 04,05,06,07,这几章基础知识比较多,同时李沐老师的ppt讲解的也很仔细,我就大量上图了,一些容易有疑问的点我在后面进行了例子的辨析与讲解,大家可以参考!
目录
04 数据处理
最基本的处理单元——N维数组
创建数组
-
形状:例 3*4
-
每个元素的数据类型
-
每个元素的值
访问元素
一个元素 【1,2】
一行 【1,:】
一列 【:,1】
子区域 【1:3,1:】 第一行到第三行(不包括第三行),取这几行的第一列
【::3,::2】这个是选取0-m行中为3的倍数的行,再在这些行中选取0-n列中,列数为2的倍数的列
05 线性代数
基本概念的回顾
矩阵乘法可能比较容易忘记,这里我再提一嘴,两个矩阵A,B能够实现AB 的首要条件就是A的列数等于B的行数,同时,新生成的矩阵的行数等于A矩阵行数,新生成矩阵的列数等于B的列数,就像两个人结婚生子,小孩会得到母亲的一半染色体也会得到来自父亲的一半染色体。
同时新生成的矩阵C的也就是说,新矩阵C的第i行第j列等于A矩阵的第i行的(假设A的列数为n,那么B的行数也为n)n个数(列)与B矩阵第j列的n个数(行)相乘,也就是矩阵乘法的定义
06 矩阵计算
重要的是我们需要弄清楚相除之后的形状
因变量为标量,自变量为向量
此时我们可以将y与x的关系写作:
这时我们直接求导就行
例:如 ,其中a和X的维数相同,均为
维向量,y为向量a和X的内积
这里我们要计算,其中y为标量,我们只需要将其拆分成一个累加和的形式,然后再进行求导:
所以我们分别进行求导可以得到:
这里跟我们上图得到的结果是相符的,一个因变量(标量)对一个自变量(维向量)求导,得到的导数是一个
维的向量
从几何的角度来理解,这里我们求的导数即为垂直于椭圆的切线方向,为梯度,即指向值变化最大的方向,在后面的机器学习中也是我们要求的目标
一维向量从数学的表达习惯上我们将其默认为列向量
有关公式已给出,我们例子中的即为最后一种内积的变式
因变量为向量,自变量为标量
跟上面的情况相似,也是展开然后分别求导
因变量和自变量均为向量
相当于分两步走,先拆解成一个列向量,再对每行进行标量对向量的求导,形成一个矩阵
例子:
其中Y为
维向量,X为
维向量,W为
维向量
因此由上面我们得到的求导公式可得:
这里总结一下:
也就是说对于向量而言:
因变量Y为,而自变量X为
,则
的形状为(m,n)
也就是说导数的行数看因变量的行数,导数的列数看自变量的行数(在分子布局下)
对于矩阵而言(原理不过多赘述,不要求掌握,知道形状即可):
导数的前两项取因变量矩阵的前两项,最后一项或两项取自变量的形状转置,当出现1时,舍去。
被李沐老师脑袋被挡住的地方(m,l,k,n)
07 向量的链式法则
这里跟我们上面总结的规律一致
线性回归的一个例子
计算过程还是一致的,一般不会涉及到真正的矩阵求导(这里注意,例1的b为一个标量,可以直接求导得到一个标量,而例2中的:
其中
为一个
的向量,对其求导得到的结果为
而不是
这里有:
其对求导得到的向量为
自动求导
神经网络层数很多,我们求导求不过来,需要自动求导
符号求导就是对代数表达式得到一个导函数的代数表达式
数值求导就是即便我们不知道f是啥样的函数,我能通过数值去拟合这个导数
显示构造就是定义变量a,b,c=2*a+b,后面再代入值即可
隐式构造:告诉系统,系统把你的过程记录下来
自动求导的两种模式
总结:反向运算的代价是需要存储正向中所有的中间结果,比较耗内存,吃GPU资源,而正向则是每一层均要计算梯度,其计算复杂度太高。在实战中我们一般使用反向运算,也就是我们下一节中会提到的backward()。
下一次更新我们就进入代码实战了,也就是线性回归的原理以及代码实现,这里我才刚把softmax()这几章看完,得赶赶进度啦,要不然博客更新来不及了,大家加油!