《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础

前言

        作者来自北京某不知名985,现在是本科在读学生,专业是数据科学与大数据技术,班上同学都太卷了,没办法,需要学习深度学习,经大佬介绍,在B站上找到了一个很不错的资源,李沐老师的《动手学深度学习v2》,不仅有全套视频,讲解细致,而且配套资料全部公开免费,不用加公众号也不用私别人的vx,我觉得挺不错,在这里做一个学习记录,也想跟大家一起讨论深度学习相关的问题。新的一年,不要摆烂,一起加油!!!

 这里附上连接:

跟李沐学AI的个人空间-跟李沐学AI个人主页-哔哩哔哩视频

1. 引言 — 动手学深度学习 2.0.0 documentation

相关的视频和书籍的pdf都有介绍,可以免费下载,然后还有jupyter,非常nice,ok下面咱们进入正题,本博客的图片基本来自李沐老师的视频

 本文章包含了《动手学深度学习v2》视频中的 04,05,06,07,这几章基础知识比较多,同时李沐老师的ppt讲解的也很仔细,我就大量上图了,一些容易有疑问的点我在后面进行了例子的辨析与讲解,大家可以参考!

目录

前言

04 数据处理

创建数组

访问元素

05 线性代数

 06 矩阵计算

因变量为标量,自变量为向量

因变量为向量,自变量为标量

因变量和自变量均为向量

07 向量的链式法则

自动求导

自动求导的两种模式


04 数据处理

最基本的处理单元——N维数组

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第1张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第2张图片

创建数组

  • 形状:例 3*4

  • 每个元素的数据类型

  • 每个元素的值

访问元素

一个元素 【1,2】

一行 【1,:】

一列 【:,1】

子区域 【1:3,1:】 第一行到第三行(不包括第三行),取这几行的第一列

【::3,::2】这个是选取0-m行中为3的倍数的行,再在这些行中选取0-n列中,列数为2的倍数的列

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第3张图片

05 线性代数

 基本概念的回顾

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第4张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第5张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第6张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第7张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第8张图片

 矩阵乘法可能比较容易忘记,这里我再提一嘴,两个矩阵A,B能够实现AB 的首要条件就是A的列数等于B的行数,同时,新生成的矩阵的行数等于A矩阵行数,新生成矩阵的列数等于B的列数,就像两个人结婚生子,小孩会得到母亲的一半染色体也会得到来自父亲的一半染色体。

  同时新生成的矩阵C的C_{ij}=\sum_{k=0}^n A_{ik}B_{kj}也就是说,新矩阵C的第i行第j列等于A矩阵的第i行的(假设A的列数为n,那么B的行数也为n)n个数(列)与B矩阵第j列的n个数(行)相乘,也就是矩阵乘法的定义

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第9张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第10张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第11张图片

 06 矩阵计算

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第12张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第13张图片

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第14张图片

重要的是我们需要弄清楚相除之后的形状

因变量为标量,自变量为向量

此时我们可以将y与x的关系写作:

y=f(x_1,x_2,x_3,x_4,....x_n)

这时我们直接求导就行

\frac{\partial y}{\partial\boldsymbol{x}}=(\frac{\partial y}{\partial x_1},\frac{\partial y}{\partial x_2},\frac{\partial y}{\partial x_3},\frac{\partial y}{\partial x_4},....,\frac{\partial y}{\partial x_n})

例:如 y=a^TX,其中a和X的维数相同,均为n\times 1维向量,y为向量a和X的内积

这里我们要计算\frac{\partial y}{\partial X},其中y为标量,我们只需要将其拆分成一个累加和的形式,然后再进行求导:

y=a^TX=\sum_{i=1}^{n}a_ix_i

所以我们分别进行求导可以得到:

\frac{\partial y}{\partial X}=(a_1,a_2,a_3,....a_n)=a

这里跟我们上图得到的结果是相符的,一个因变量(标量)对一个自变量(1\times n维向量)求导,得到的导数是一个n\times 1维的向量

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第15张图片

 从几何的角度来理解,这里我们求的导数即为垂直于椭圆的切线方向,为梯度,即指向值变化最大的方向,在后面的机器学习中也是我们要求的目标

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第16张图片

一维向量从数学的表达习惯上我们将其默认为列向量

有关公式已给出,我们例子中的即为最后一种内积的变式

因变量为向量,自变量为标量

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第17张图片

 跟上面的情况相似,也是展开然后分别求导

因变量和自变量均为向量

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第18张图片

 相当于分两步走,先拆解成一个列向量,再对每行进行标量对向量的求导,形成一个矩阵

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第19张图片例子:Y=WX\, 其中Y为m\times 1维向量,X为n\times 1维向量,W为m\times n维向量

 Y=WX=\begin{bmatrix} w_{11}x_1+w_{12}x_2+w_{13}x_3+....+w_{1n}x_n\\ w_{21}x_1+w_{22}x_2+w_{23}x_3+....+w_{2n}x_n\\ w_{31}x_1+w_{32}x_2+w_{33}x_3+....+w_{3n}x_n\\ .\\ .\\ .\\ w_{m1}x_1+w_{m2}x_2+w_{m3}x_3+....+w_{mn}x_n \end{bmatrix}\\ y_i=\sum_{j=0}^n w_{ij}x_j,\frac{\partial y_i}{\partial X_j}=w_{ij}

因此由上面我们得到的求导公式可得:

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第20张图片

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第21张图片

这里总结一下:

也就是说对于向量而言:

因变量Y为m\times 1,而自变量X为n\times 1,则\frac{\partial Y}{\partial X}的形状为(m,n)

也就是说导数的行数看因变量的行数,导数的列数看自变量的行数(在分子布局下)

对于矩阵而言(原理不过多赘述,不要求掌握,知道形状即可):

导数的前两项取因变量矩阵的前两项,最后一项或两项取自变量的形状转置,当出现1时,舍去。

被李沐老师脑袋被挡住的地方(m,l,k,n)

07 向量的链式法则

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第22张图片

 这里跟我们上面总结的规律一致

线性回归的一个例子

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第23张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第24张图片

 计算过程还是一致的,一般不会涉及到真正的矩阵求导(这里注意,例1的b为一个标量,可以直接求导得到一个标量,而例2中的:

b=a-y,其中a=Xw为一个m\times 1的向量,对其求导得到的结果为b^T而不是b

这里有:||b||^2=b_1^2+b_2^2+b_3^2+....+b_n^2

其对\pmb{b}求导得到的向量为\frac{\partial ||b||^2}{\partial \pmb{b}}=(2b_1,2b_2,2b_3,....,2b_n)=2\pmb{b}^T

自动求导

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第25张图片

神经网络层数很多,我们求导求不过来,需要自动求导

符号求导就是对代数表达式得到一个导函数的代数表达式

数值求导就是即便我们不知道f是啥样的函数,我能通过数值去拟合这个导数

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第26张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第27张图片

显示构造就是定义变量a,b,c=2*a+b,后面再代入值即可

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第28张图片

 隐式构造:告诉系统,系统把你的过程记录下来

自动求导的两种模式

《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第29张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第30张图片

 《动手学深度学习v2》之细致解析(2)数据处理以及相关数学基础_第31张图片

 总结:反向运算的代价是需要存储正向中所有的中间结果,比较耗内存,吃GPU资源,而正向则是每一层均要计算梯度,其计算复杂度太高。在实战中我们一般使用反向运算,也就是我们下一节中会提到的backward()。

  下一次更新我们就进入代码实战了,也就是线性回归的原理以及代码实现,这里我才刚把softmax()这几章看完,得赶赶进度啦,要不然博客更新来不及了,大家加油!

你可能感兴趣的:(动手学深度学习,深度学习,python,pandas)