- PyTorch深度学习实战:从新手小白到数据科学家
- 张敏
- 3112字
- 2025-02-25 07:33:49
1.5 加油站之高等数学知识回顾
抛开课本多年,再次回头,重温数学知识,也许会有不一样的感悟!本书的主要目的不是讲解数学知识,而是帮助读者回顾已经遗忘的数学知识。如果读者要系统地复习或学习数学知识,建议找一本专业的数学书。
1.5.1 函数基础知识
1.函数的定义
给定一个数据集A(定义域),假设其中的元素为x,现对数据集A中的元素x施加对应法则f,记作f(x),得到另一个数据集B(值域),假设数据集B中的元素为y,则y与x之间的等量关系可以用y=f(x)表示,我们把这个关系式称为函数关系式,简称函数。函数的映射关系如图1.28所示。函数概念包含3个要素:定义域A、值域B和对应法则f,其中核心是对应法则f,它是函数关系的本质特征。

图1.28 函数的映射关系
简单来看,函数就是一种从数据集A映射到数据集B的关系。例如,圆的面积公式为S=πr2,它表达的是面积和半径之间的关系,有了这种关系,就可以在知道任何半径的情况下计算出面积。函数通常使用y=f(x)的形式来表达,其中x是自变量,y是因变量,f是映射关系。而表示自变量在x0处取得的函数值。
很多人不喜欢数学,不是因为学不会,而是因为数学太抽象。和学习外语一样,很多学不好数学的人都是缺乏对数学语言的理解,导致越学越困难,越学越费劲。其实,掌握了数学语言,学习数学还是很轻松的。数学就是由数学语言精确定义的科学或规则。学习数学一定要弄懂数学语言。
下面介绍几种常见的函数。第一种是分段函数,在其定义域的不同范围内有不同的映射法则,常见的形式为,在不同的定义域内取不同的映射关系,这与国内使用人民币而美国使用美元一样,规则不同。
第二种是反函数。反函数是在知道值域取值的情况下找出定义域,这是一个相反的过程。一般来说,设函数y=f(x)(x∈A)的值域是C,若一个函数g(y)在每处g(y)都等于x,这样的函数x=g(y)(y∈C)叫作函数y=f(x)(x∈A)的反函数,记作y=f-1(x)。反函数y=f-1(x)的定义域、值域分别是函数y=f(x)的值域、定义域,最具有代表性的就是对数函数与指数函数。例如,原函数为y=6x,其反函数为x=log6y。
第三种是显函数与隐函数。解析式中明显地用一个变量的代数式表示另一个变量时称为显函数,显函数可以用y=f(x)来表示。如果方程F(x,y)=0能确定y是x的函数,那么称这种方式表示的函数是隐函数。隐函数与显函数的区别主要包括以下几点。
●隐函数不一定能写成y=f(x)的形式,如x2+y2=0。
●显函数是用y=f(x)表示的函数,左边是一个y,右边是x的表达式,如y=2x+1;隐函数是x和y都混在一起,如2x-y+1=0。
●有些隐函数可以表示成显函数,叫作隐函数显化,但也有些隐函数是不能显化的,如ey+xy=1。
2.函数的性质
(1)函数奇偶性。该性质表述的是函数关于X轴或Y轴对称的性质,偶函数关于Y轴对称,因此有f(x)=f(-x);而奇函数关于原点对称,因此有f(x)=-f(-x)。例如,f(x)=x2有f(-x)=(-x)2=x2=f(x);而g(x)=x5有g(-x)=(-x)5=-x5=-g(x)。函数奇偶性如图1.29所示。

图1.29 函数奇偶性
(2)函数周期性,函数图像周期性重复出现的性质,如正弦波、余弦波等,通常表述为f(x)=f(x+T),T表示周期。例如,sin(x)的周期为2π,因此可用f(x)=f(x+2π)表示。图1.30是借助软件绘制的sin(x)和tan(x)的曲线,可以看出其周期性。FooPlot是在线绘制函数图像的网站,读者可以在该网站尝试绘制各种函数的图像。

图1.30 函数周期性
(3)函数单调性。函数的单调性也可以叫作函数的增减性。当函数f(x)的自变量在其定义区间内增大(或减小)时,函数值f(x)也随着增大(或减小),则称该函数在该区间内具有单调性。具有单调性的函数,当x变大时f(x)值也变大,当x减小时f(x)值也减小,如图1.31所示。

图1.31 函数单调性
在x>0的定义域内,是单调递增的,而-log(x)是单调递减的。
3.函数的极限
在《流浪地球》中,Moss推算出了地球将突破木星的洛希极限,而该极限预示着地球将被木星巨大的引力撕碎,最后选择通过行星发动机的尾焰引爆飞船点燃木星,借助冲击波推离地球。而洛希极限就是通过刚体洛溪极限函数推导出来的。而函数的极限要从数列说起,数列是按照一定规律排列的一列数,如2,4,6,8,…,2n,…。其中,2n被称为通项,因为只要知道了n,就能由通项计算出该位置数值的大小。对于数列{an},当n无限增大时,其通项接近于一个常数A,则称该数列以A为极限或收敛于A,否则数列没有极限,为发散型数列。极限在数学中用lim表示,如,表示当n趋于无限时an的极限等于A。极限有如下几个性质。
●x→∞ 表示|x|无限增大。
●x→+∞ 表示x无限增大。
●x→-∞ 表示x无限减小。
●x→x0表示x从x0的两侧无限接近x0。
●x→表示x从x0的右侧无限接近x0。
●x→表示x从x0的左侧无限接近x0。
成立的充要条件是
。例如,如下分段函数:

当x→0时,而
,显然左极限不等于右极限,故x→0时极限不存在。
极限的基本性质主要包括以下几点。
●有限个无穷小的代数和仍为无穷小。
●有限个无穷小的乘积仍为无穷小。
●有界变量和无穷小的乘积仍为无穷小。
●无穷个无穷小之和不一定是无穷小。

●无穷小的商不一定是无穷小。

求极限的方法有很多,最常见的是洛必达法则。这里列举了几种常见的求极限的方法,供读者参考。
●利用洛必达法则求极限。洛必达法则是在一定的条件下通过分子和分母分别求导再求极限来确定未定式值的方法。
●利用函数的连续性求极限。若函数f(x)在某去心邻域内连续,则在该去心邻域中任意一点的极限等于该点的函数值。
●有理化分子或分母再求极限。
若分子或分母中含有“√”,一般利用a2-b2=(a+b)(a-b)去掉根号。

若分子或分母含“∛”,一般利用a3-b3=(a-b)(a2+ab+b2)和a3+b3=(a+b)(a2-ab+b2)去掉根号。

●利用两个重要极限求极限,即和
。

●利用无穷小的性质求极限。
●分段函数分点处的极限必须满足左极限等于右极限。
●利用“大头准则”求极限。

●利用定积分的定义求极限。

4.函数的连续性
函数y=f(x)在x0的某邻域内有定义,如果当自变量的改变量Δx趋于0时,相应函数的改变量Δy也趋于0,则称f(x)在x0处连续,如图1.32所示。函数的连续性需要满足如下条件。
●函数在该点有定义。
●函数在该点的极限存在。
●极限值等于函数值。

图1.32 函数的连续性
1.5.2 常见的导数公式
1.导数的定义
如果平均变化率的极限存在,即,则称该极限为函数y=f(x)在x0处的导数,表示f'(x0)或
或
或
。
物理学中的瞬时速度就是一个典型的平均变化率极限的问题。瞬时经过的路程Δs=s(t0+Δt)-s(t0)。在Δt时间内的平均速度,当Δt→0时就变成瞬时速度。所有函数的导数的求取都可以用上面的平均变化率的思想求极限得到。
2.常见的导数公式
常见的导数公式如表1.1所示。
表1.1 常见的导数公式

3.用PyTorch求常见函数的导数
(1)对函数y=6x+b求导数。

上面构建了一个一元一次方程y=6x+b,其中,输入x的形状为2行5列的矩阵,b为标量6,y是由x在“+”运算下创建的。Tensor的一条创建规则是,只要创建者中有一个Tensor的requires_grad=True,则所创建的Tensor的requires_grad也为True。因此,生成的变量y的requires_grad=True,在应用backward方法后,PyTorch的自动微分系统将自动计算导数,并将导数返回holder_weights,它是一个和输出y拥有相同形状的Tensor,可以将其视为带权重的偏导数接收器,它将计算得到的导数和自己相乘。由导数公式可知,而holder的初始值都是1,因此最终的结果为
,结果y对x的导数值为6,在x上使用grad属性可查看。

将holder_weights变为2,最终结果则变成12,但验证最终的x.grad所得到的导数是使用holder_weights与真正的导数相乘的结果。
(2)对sin(x)求导数。

y=sin(x),由导数公式得出结果y对输入x的导数为,而x的值为1,所以最终的结果x.grad=holder_weights∗cos(x)=1∗cos(1)=0.5403。
(3)对指数函数y=ex求导数。


y=ex的导数仍然为ex,x.grad的计算公式为holder_weights×ex,而holder_weights=1,因此最终的结果为[[e1,e3],[e2,e4]]。
(4)对幂函数y=xe求导。

y=xe的求导公式为,这里的x.grad是由holder_weights×e×xe-1得到的,因此其结果为[[e×1e-1,e×3e-1],[[e×2e-1,[e×4e-1]]。
(5)对对数函数y=ln x求导数。

对数函数y=ln x的导数为,因此最终的结果为
,
。
(6)对Sigmoid函数求导数(导数公式为y′=y(1-y))。


Sigmoid公式的导数形式为y′=y(1-y),因此x.grad的计算公式是holder_weights×y×(1-y);这里y的取值为。
,
,
,1×
,和程序的计算结果一致。
Sigmoid函数的导数形式在很多地方都会使用,所以需要牢记它。