当前位置: 首页 > news >正文

服务器网站部署企业管理软件公司排名

服务器网站部署,企业管理软件公司排名,生产销售管理软件,网站建设公司江苏在正式开始进行神经网络建模之前#xff0c;我们还需要掌握pytorch中最核心的基础数学工具——autograd(自动微分)模块。虽然对于任何一个通用的深度学习框架都会提供许多自动优化的算法和现成的loss function#xff0c;但如果想更深入理解神经网络#xff0c;对深度学习的…在正式开始进行神经网络建模之前我们还需要掌握pytorch中最核心的基础数学工具——autograd(自动微分)模块。虽然对于任何一个通用的深度学习框架都会提供许多自动优化的算法和现成的loss function但如果想更深入理解神经网络对深度学习的建模不仅仅停留在调包和调参的层次就必须掌握一些数学工具在日后取得更好的建模效果。当然要使用好微分工具就首先要了解广泛应用于机器学习建模的优化思想。 所谓优化思想指的是利用数学工具求解复杂问题的基本思想。在实际建模过程中我们往往会给出待解决问题的数值评估指标并在此基础上构建方程、采用数学工具、不断优化评估指标结果以期达到可以达到的最优结果。 import numpy as np import torch21 简单线性回归的机器学习建模思路 在上一节末尾我们曾简单提及线性方程建模问题将方程组转化为矩阵表示形式最终使用逆矩阵的方法解出线性方程系数。线性回归是较为基础且通用的模型但使用矩阵方法求解不是通用方法。 接下来将进一步将简单线性回归的求解参数问题转化为最优化问题求解这也是机器学习建模中最通用的思想。 21.1 回顾简单线性回归建模问题 import matplotlib as mpl import matplotlib.pyplot as pltA torch.arange(1, 5).reshape(2, 2).float() A # output : tensor([[1., 2.],[3., 4.]])# 绘制点图查看两个点的位置 plt.plot(A[:, 0], A[:, 1], o) # output :如果更近一步我们希望在二维空间中找到一条直线来拟合这两个点也就是所谓的构建以恶线性回归模型我们可以设置线性回归方程如下 y a x b y ax b yaxb 21.2 转化为优化问题 上述问题除了可以使用矩阵方法求解以外还可以将其转化为最优化问题然后通过求解最优化问题的方法对其进行求解。 最优化问题的转化分为两步其一是确定优化数值指标其二则是确定优化目标函数。在大多数问题中这二者是相辅相成的确定了优化的数值指标也就确定了优化的目标函数。 如果我们希望通过一条直线拟合二维平面空间上分布的点最核心的目标毫无疑问就是希望方程的预测值和真实值相差较小。假设真实的y值用y表示预测值用ŷ表示带入a、b参数则表示如下 x(i)y(i)ŷ(i)12ab343ab y ^ 1 1 ∗ a b a b ŷ_1 1*a b a b y^​1​1∗abab y ^ 2 3 ∗ a b 3 a b ŷ_2 3*a b 3a b y^​2​3∗ab3ab 而这两个预测值和真实值相差 y 1 2 , y ^ 1 a b , y 1 − y ^ 1 2 − a − b y_1 2, ŷ_1 a b, y_1 - ŷ_1 2 - a - b y1​2,y^​1​ab,y1​−y^​1​2−a−b y 2 4 , y ^ 2 3 a b , y 2 − y ^ 1 2 4 − 3 a − b y_2 4, ŷ_2 3a b, y_2 - ŷ_12 4 - 3a - b y2​4,y^​2​3ab,y2​−y^​1​24−3a−b 我们希望y和ŷ尽可能接近因此可以考虑计算上述误差总和但为了避免正负相消我们使用平方和来进行衡量两个点的误差总和而不是简单的求和 ( y 1 − y ^ 1 ) 2 ( y 2 − y ^ 2 ) 2 (y_1 - ŷ_1)^2 (y_2 - ŷ_2)^2 (y1​−y^​1​)2(y2​−y^​2​)2 ( 2 − a − b ) 2 ( 4 − 3 a − b ) 2 (2 - a - b)^2 (4 - 3a - b)^2 (2−a−b)2(4−3a−b)2 上式也就是两个点的预测值和真实值间差值的平方和也就是误差平方和(Sum of the Squared Errors)。 此处只带入了(12)和(34)两个点来计算SSE也就是带入了两条数据来训练y ax b这个模型。 至此我们已经将原问题转化为了一个最优化问题接下来我们的问题是当a、b取何值时SSE取值最小 值得注意的是SSE方程就是我们优化的目标方程求最小值因此上述方程也被称为目标函数同时SSE代表着真实和预测之间的差值因此也被称为损失函数。 换言之当SSE取值最小的时候a、b的取值就是最终线性回归方程的系数取值。 注 目标函数和损失函数并不完全等价但大多数目标函数都由损失函数构成。 21.3 最优化问题的求解方法 在上述问题中我们需要围绕SSE求最小值。SSE是一个关于a和b的二元函数要求其最小值需要借助数学工具也就是所谓的最优化方法。选择优化方法并执行相应计算可以硕士整个建模过程中最核心也是相对较难的部分很多时候这个过程会直接决定模型的性能。 图形展示目标函数 为了更好讨论目标函数SSE求最小值的过程对于上述二元函数我们可以将其展示在三维空间内。 from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3Dx np.arange(-1, 3, 0.05) y np.arange(-1, 3, 0.05) a, b np.meshgrid(x, y) # 生成一个二维的网格点坐标矩阵a和b SSE (2 - a - b) ** 2 (4 - 3 * a - b) ** 2 ax plt.axes(projection 3d) # 创建了一个三维坐标轴对象ax ax.plot_surface(a, b, SSE, cmap rainbow) # 在三维坐标轴上绘制曲面,cmaprainbow指定了颜色映射使得曲面根据高度显示不同的颜色。 ax.contour(a, b, SSE, zdir z, offset 0, cmap rainbow) plt.show() # 在三维视图中添加了等高线图 # output :函数的凹凸性 不难看出目标函数是个整体“向下凸”的函数。 函数的凹凸性是函数的重要性质首先我们给出凸函数的一般定义对于任意一个函数如果函数f(x)上存在任意两个点x1x2且 ( f ( x 1 ) f ( x 2 ) ) / 2 f ( ( x 1 x 2 ) / 2 ) (f(x_1) f(x_2))/2 f((x_1 x_2)/2) (f(x1​)f(x2​))/2f((x1​x2​)/2) 我们就判定这个函数是凸函数。 典型的例如y x2我们可以绘制函数图像如下 x np.arange(-10,10,0.1) y x ** 2 plt.plot(x, y, -) plt.show() # output :不难看出函数上任意两个点y的取值的均值都不小于这两个点均值的y值。 # x1 1, x2 3 (1 ** 2 3 ** 2)/2 # output : 5.0# x1 1, x2 3 ((13)/2) ** 2 # output : 4.0而对于一个凸函数来说全域最小值明显存在基于凸函数的数学定义我们可以进一步给出求解上述SSE凸函数最小值的一般方法也就是著名的最小二乘法。 凸函数的最小值 通过y x2函数不难看出最小值x 0 唯一存在并且最小值点对应的函数切线与x轴平行也就是在最小值点函数的导数为0。这其实也凸函数求解最小值的一般方法 对于一元函数如果存在导数为0的点则该点就是最小值点 对于多元函数如果存在某一点使得函数的各个自变量的偏导数都为0则该点就是最小值点。 因此对于凸函数的最小值求解最基本的出发点就是寻找导数为0的点。而最小二乘法也是基于偏导函数取值为0联立的方程组进行的求解。 从更严格的意义上来说凸函数的最小值点其实是根据边界点和驻点导数为0的点决定如果没有边界点且没有驻点则函数没有最小值例如y x如果存在边界点但没有驻点则边界点的一侧就是最小值点。 如果存在驻点且左右两边单调性相反则驻点就是最小值点例如对于y x2而言y′ 2x2x 0时x取值为0也就是0点就是最小值点。 值得注意的是驻点也可以说是临界点但不是拐点拐点特指左右两边函数凹凸性发生变化的点切勿和驻点混淆。 机器学习建模中的目标函数大多数时候都是可导的函数而凹凸性则是影响使用哪种最优化方法的最核心因素。正因如此凸函数的最优化问题是优化方法的一类重要应用甚至围绕凸函数还衍生出了凸优化相关的一大类优化问题分支学科。 在机器学习中我们经常听说的最小二乘法就是求解凸优化问题的重要工具。当然很多本身不是针对凸函数设计的最优化方法但鉴于凸函数在求最小值时的优异特性我们也会在凸优化过程中应用例如梯度下降、拟牛顿法等等等等都是本次重点学习的内容。 SSE最小值 对于简单线性回归的损失函数SSE是凸函数因此对于$ SSE(a,b) (2 - a - b)^2 (4 - 3a - b)^2 $而言最小值点就是a、b两个参数求偏导等于0的点 S S E ( y 1 − y ^ 1 ) 2 ( y 2 − y ^ 2 ) 2 SSE (y_1 - ŷ_1)^2 (y_2 - ŷ_2)^2 SSE(y1​−y^​1​)2(y2​−y^​2​)2 ( 2 − a − b ) 2 ( 4 − 3 a − b ) 2 (2 - a - b)^2 (4 - 3a - b)^2 (2−a−b)2(4−3a−b)2 ∂ S S E ( a , b ) ∂ ( a ) 0 \frac{\partial{SSE_(a,b)}}{\partial{(a)}} 0 ∂(a)∂SSE(​a,b)​0 ∂ S S E ( a , b ) ∂ ( b ) 0 \frac{\partial{SSE_(a,b)}}{\partial{(b)}} 0 ∂(b)∂SSE(​a,b)​0 其中 ∂ S S E ( a , b ) ∂ ( a ) 2 ( 2 − a − b ) ∗ ( − 1 ) 2 ( 4 − 3 a − b ) ∗ ( − 3 ) 20 a 8 b − 28 ( 1 ) 0 \begin{align} \frac{\partial{SSE_{(a,b)}}}{\partial{(a)}} 2(2-a-b)*(-1) 2(4-3a-b)*(-3)\\ 20a8b-28(1)\\ 0 \end{align} ∂(a)∂SSE(a,b)​​​2(2−a−b)∗(−1)2(4−3a−b)∗(−3)20a8b−28(1)0​​ ∂ S S E ( a , b ) ∂ ( b ) 2 ( 2 − a − b ) ∗ ( − 1 ) 2 ( 4 − 3 a − b ) ∗ ( − 1 ) 8 a 4 b − 12 ( 2 ) 0 \begin{align} \frac{\partial{SSE_{(a,b)}}}{\partial{(b)}} 2(2-a-b)*(-1) 2(4-3a-b)*(-1)\\ 8a4b-12(2) \\ 0 \end{align} ∂(b)∂SSE(a,b)​​​2(2−a−b)∗(−1)2(4−3a−b)∗(−1)8a4b−12(2)0​​ ( 1 ) 式 − ( 2 ) 式 ∗ 2 可得 4 a − 4 0 a 1 (1)式 - (2)式*2 可得 4a-4 0a1 (1)式−(2)式∗2可得4a−40a1 将 a 1 带入 ( 2 ) 式可得 4 b − 4 0 b 1 将a1带入(2)式 可得 4b-4 0b1 将a1带入(2)式可得4b−40b1 y x 1 y x 1 yx1 利用偏导等于0得出的方程组求解线性回归方程参数就是最小二乘法求解过程。 此处我们求得a 1b 1时SSE(a,b)取得最小值也就是11是目标函数的最小值点。 21.4 机器学习建模一般流程 至此我们就完成了一个基本的简单线性回归建模过程。当然对于线性回归来说有很多种建模方式哪怕是主流的统计学和机器学习在利用线性回归进行建模时都有不一样的流程。 此处我们是通过一个简单的例子来介绍机器学习、包括深度学习的利用优化方法建模的一般思想我们可以将其总结如下 Step 1提出基本模型   如本节中我们试图利用一条直线yaxb去拟合二维平面空间中的点这里我们所使用的这条直线就是我们提出的基本模型。而在后续的深度学习的学习过程中我们还将看到更为强大、同时也更加通用的神经网络模型。当然不同的模型能够适用不同的场景在提出模型时我们往往会预设一些影响模型结构或者实际判别性能的参数如简单线性回归中的a和b Step 2确定损失函数和目标函数 接下来围绕建模的目标我们需要合理设置损失函数并在此基础之上设置目标函数当然在很多情况下这二者是相同的。例如在上述简单线性回归中我们的建模目标就是希望yaxb这条直线能够尽可能的拟合(1,2)、(3,4)这两个点或者说尽可能“穿过”这两个点因此我们设置了SSE作为损失函数也就是预测值和真实值的差值平方和。当然在计算过程中不难发现SSE是一个包含了a和b这两个变量的方程因此SSE本身也是一个函数a和b的二元函数并且在线性回归中SSE既是损失函数用于衡量真实值和预测值差值的函数同时也是我们的目标函数接下来需要优化、或者说要求最小值的函数。这里尤其需要注意的是损失函数不是模型而是模型参数所组成的一个函数。 Step 3根据目标函数特性选择优化方法求解目标函数 之前提到目标函数既承载了我们优化的目标让预测值和真实值尽可能接近同时也是包含了模型参数的函数因此完成建模需要确定参数、优化结果需要预测值尽可能接近真实值这两方面需求就统一到了求解目标函数最小值的过程中了也就是说当我们围绕目标函数求解最小值时也就完成了模型参数的求解。当然这个过程本质上就是一个数学的最优化过程求解目标函数最小值本质上也就是一个最优化问题而要解决这个问题我们就需要灵活适用一些最优化方法。当然在具体的最优化方法的选择上函数本身的性质是重要影响因素也就是说不同类型、不同性质的函数会影响优化方法的选择。在简单线性回归中由于目标函数是凸函数我们根据凸函数性质判断偏导函数取值为0的点就是最小值点进而完成a、b的计算也就是最小二乘法其实就是通过函数本身的性质进行最优化方法的选取。 22 第一个优化算法最小二乘法 前面提到利用优化方法求解目标函数其实是机器学习建模过程中最为核心的环节因此我们有必要将围绕上述简单线性回归问题进一步讨论最小二乘法背后的数学逻辑和优化思想同时简单探讨数据的矩阵表示方法和基本矩阵运算。 虽然最小二乘法并不是主流的深度学习损失函数的优化算法但从最小二乘法入手了解优化算法背后的数学逻辑却是非常有必要同时线性方程也是构建神经网络模型的基础因此我们有必要深入探讨线性模型建模细节以及最基本的优化算法最小二乘法。 最小二乘法的代数表示方法 从更加严格的数学角度出发最小二乘法有两种表示形式分别是代数法表示和矩阵表示。我们先看最小二乘法的代数表示方法。 首先假设多元线性方程有如下形式 f ( x ) w 1 x 1 w 2 x 2 . . . w d x d b f(x) w_1x_1w_2x_2...w_dx_db f(x)w1​x1​w2​x2​...wd​xd​b 令 w ( w 1 , w 2 , . . . w d ) w (w_1,w_2,...w_d) w(w1​,w2​,...wd​) x ( x 1 , x 2 , . . . x d ) x (x_1,x_2,...x_d) x(x1​,x2​,...xd​)则上式可写为 f ( x ) w T x b f(x) w^Txb f(x)wTxb 在机器学习领域我们将线性回归自变量系数命名为w其实是weight的简写意为自变量的权重。 多元线性回归的最小二乘法的代数法表示较为复杂此处先考虑简单线性回归的最小二乘法表示形式。在简单线性回归中w只包含一个分量x也只包含一个分量我们令此时的 x i x_i xi​就是对应的自变量的取值此时求解过程如下 优化目标可写为 S S E ∑ i 1 m ( f ( x i ) − y i ) 2 E ( w , b ) SSE \sum^m_{i1}(f(x_i)-y_i)^2 E_(w,b) SSEi1∑m​(f(xi​)−yi​)2E(​w,b) 通过偏导为0求得最终结果的最小二乘法求解过程为 ∂ S S E ( w , b ) ∂ ( w ) 2 ( w ∑ i 1 m x i 2 − ∑ i 1 m ( y i − b ) x i ) 0 \begin{align} \frac{\partial{SSE_(w,b)}}{\partial{(w)}} 2(w\sum^m_{i1}x^2_i - \sum^m_{i1}(y_i-b)x_i) 0 \end{align} ∂(w)∂SSE(​w,b)​​2(wi1∑m​xi2​−i1∑m​(yi​−b)xi​)0​​ ∂ S S E ( w , b ) ∂ ( b ) 2 ( m b − ∑ i 1 m ( y i − w x i ) ) 0 \begin{align} \frac{\partial{SSE_(w,b)}}{\partial{(b)}} 2(mb - \sum^m_{i1}(y_i-wx_i)) 0 \end{align} ∂(b)∂SSE(​w,b)​​2(mb−i1∑m​(yi​−wxi​))0​​ 进而可得 w ∑ i 1 m y i ( x i − x ˉ ) ∑ i 1 m x i 2 − 1 m ( ∑ i 1 m x i ) 2 w \frac{\sum^m_{i1}y_i(x_i-\bar{x}) }{\sum^m_{i1}x^2_i-\frac{1}{m}(\sum^m_{i1}x_i)^2 } w∑i1m​xi2​−m1​(∑i1m​xi​)2∑i1m​yi​(xi​−xˉ)​ b 1 m ∑ i 1 m ( y i − w x i ) b \frac{1}{m}\sum^m_{i1}(y_i-wx_i) bm1​i1∑m​(yi​−wxi​) 其中 x ˉ 1 m ∑ i 1 m x i x i \bar x \frac{1}{m}\sum^m_{i1}x_ix_i xˉm1​∑i1m​xi​xi​为x的均值并且 ( x i , y i ) (x_i,y_i) (xi​,yi​)代表二维空间中的点。 最小二乘法的矩阵表示形式 从上节的矩阵部分内容不难理解对于线性方程组来说矩阵表示是一种更加简洁的表示方式并且对于支持数组运算的torch来说线性方程组的矩阵表示也更贴近代码的实际书写形式。首先先回顾上节中提到的将上述方程转化为矩阵的过程。线性方程如下 1 ∗ a b 2 1*a b 2 1∗ab2 3 ∗ a b 4 3*a b 4 3∗ab4 在转化为矩阵表示的过程中我们令 A [ 1 1 3 1 ] A \left [\begin{array}{cccc} 1 1 \\ 3 1 \\ \end{array}\right] A[13​11​] B [ 2 4 ] B \left [\begin{array}{cccc} 2 \\ 4 \\ \end{array}\right] B[24​] X T [ a b ] X^T \left [\begin{array}{cccc} a \\ b \\ \end{array}\right] XT[ab​] 则原方程组可表示为 A ∗ X T B A * X^T B A∗XTB 更为一般的情况下多元线性回归方程为 f ( x ) w 1 x 1 w 2 x 2 . . . w d x d b f(x) w_1x_1w_2x_2...w_dx_db f(x)w1​x1​w2​x2​...wd​xd​b 令 w ^ ( w 1 , w 2 , . . . , w d , b ) \hat w (w_1,w_2,...,w_d,b) w^(w1​,w2​,...,wd​,b) x ^ ( x 1 , x 2 , . . . , x d , 1 ) \hat x (x_1,x_2,...,x_d,1) x^(x1​,x2​,...,xd​,1) w ^ \hat w w^方程系数所组成的向量并且我们将自变量系数和截距放到了一个向量中此处 w ^ \hat w w^就相当于前例中的a、b组成的向量(a,b) x ^ \hat x x^方程自变量和1共同组成的向量 因此方程可表示为 f ( x ) w ^ ∗ x ^ T f(x) \hat w * \hat x^T f(x)w^∗x^T 另外我们将所有自变量的值放在一个矩阵中并且和此前A矩阵类似为了捕捉截距添加一列全为1的列在矩阵的末尾设总共有m组取值则 X [ x 11 x 12 . . . x 1 d 1 x 21 x 22 . . . x 2 d 1 . . . . . . . . . . . . 1 x m 1 x m 2 . . . x m d 1 ] X \left [\begin{array}{cccc} x_{11} x_{12} ... x_{1d} 1 \\ x_{21} x_{22} ... x_{2d} 1 \\ ... ... ... ... 1 \\ x_{m1} x_{m2} ... x_{md} 1 \\ \end{array}\right] X ​x11​x21​...xm1​​x12​x22​...xm2​​............​x1d​x2d​...xmd​​1111​ ​ 对应到前例中的A矩阵A矩阵就是拥有一个自变量、两个取值的X矩阵。令y为因变量的取值则有 y [ y 1 y 2 . . . y m ] y \left [\begin{array}{cccc} y_1 \\ y_2 \\ . \\ . \\ . \\ y_m \\ \end{array}\right] y ​y1​y2​...ym​​ ​ 此时SSE可表示为 S S E ∣ ∣ y − X w ^ T ∣ ∣ 2 2 ( y − X w ^ T ) T ( y − X w ^ T ) E ( w ^ ) SSE ||y - X\hat w^T||_2^2 (y - X\hat w^T)^T(y - X\hat w^T) E(\hat w) SSE∣∣y−Xw^T∣∣22​(y−Xw^T)T(y−Xw^T)E(w^) 根据最小二乘法的求解过程令 E ( w ^ ) E(\hat w) E(w^)对 w ^ \hat w w^求导方程取值为0有 E ( w ^ ) ∂ w ^ ∂ ∣ ∣ y − X w ^ T ∣ ∣ 2 2 ∂ w ^ ∂ ( y − X w ^ T ) T ( y − X w ^ T ) ∂ w ^ ∵ ( A − B ) T A T − B T 并且 ( A B ) T B T ∗ A T ∴ 上式 ∂ ( y T − w ^ X T ) ( y − X w ^ T ) ∂ w ^ ∂ ( y T y − w ^ X T y − y T X w ^ T w ^ X T X w ^ T ) ∂ w ^ 0 − X T y − X T y 2 X T X w ^ T X T X w ^ T − X T y 0 值得注意的是在矩阵求导中 a 为常数有如下规则 ∂ a ∂ A 0 , ∂ A T B T C ∂ A B T C , ∂ C T B A ∂ A B T C , ∂ A T B A ∂ A ( B B T ) A \begin{aligned} \frac{E(\hat w)}{\partial{\boldsymbol{\hat w}}} \frac{\partial{||\boldsymbol{y} - \boldsymbol{X\hat w^T}||_2}^2}{\partial{\boldsymbol{\hat w}}} \\ \frac{\partial(\boldsymbol{y} - \boldsymbol{X\hat w^T})^T(\boldsymbol{y} - \boldsymbol{X\hat w^T})}{\partial{\boldsymbol{\hat w}}} \\ \\ \because \ (A-B)^T A^T - B^T并且(AB)^T B^T*A^T \\ \\ \therefore 上式\frac{\partial(\boldsymbol{y}^T - \boldsymbol{\hat w X^T})(\boldsymbol{y} - \boldsymbol{X\hat w^T})}{\partial{\boldsymbol{\hat w}}} \\ \frac{\partial(\boldsymbol{y}^T\boldsymbol{y} - \boldsymbol{\hat w X^Ty}-\boldsymbol{y}^T\boldsymbol{X \hat w^T} \boldsymbol{\hat wX^T}\boldsymbol{X\hat w^T})} {\partial{\boldsymbol{\hat w}}}\\ 0 - \boldsymbol{X^Ty} - \boldsymbol{X^Ty} 2\boldsymbol{X^TX\hat w ^T}\\ \boldsymbol{X^TX\hat w^T} - \boldsymbol{X^Ty} 0 \\ 值得注意的是在矩阵求导中a为常数有如下规则 \begin{equation} \\\frac{\partial{a}}{\partial{A}} 0, \ \ \ \frac{\partial{A^TB^TC}}{\partial{A}} B^TC, \ \ \ \frac{\partial{C^TBA}}{\partial{A}} B^TC, \ \ \ \frac{\partial{A^TBA}}{\partial{A}} (BB^T)A \end{equation} \end{aligned} ∂w^E(w^)​∵∴​∂w^∂∣∣y−Xw^T∣∣2​2​∂w^∂(y−Xw^T)T(y−Xw^T)​ (A−B)TAT−BT并且(AB)TBT∗AT上式∂w^∂(yT−w^XT)(y−Xw^T)​∂w^∂(yTy−w^XTy−yTXw^Tw^XTXw^T)​0−XTy−XTy2XTXw^TXTXw^T−XTy0值得注意的是在矩阵求导中a为常数有如下规则∂A∂a​0,   ∂A∂ATBTC​BTC,   ∂A∂CTBA​BTC,   ∂A∂ATBA​(BBT)A​​​ 进一步可得 X T X w ^ T X T y X^TX\hat w^T X^Ty XTXw^TXTy 要使得此式有解等价于 X T X X^TX XTX也被称为矩阵的交叉乘积crossprod存在逆矩阵若存在则可解出 w ^ T ( X T X ) − 1 X T y \hat w ^T (X^TX)^{-1}X^Ty w^T(XTX)−1XTy 最小二乘法的简单实现 回到最初的例子不难发现有如下对应关系 X A [ 1 1 3 1 ] X A \left [\begin{array}{cccc} 1 1 \\ 3 1 \\ \end{array}\right] XA[13​11​] y B [ 2 4 ] y B \left [\begin{array}{cccc} 2 \\ 4 \\ \end{array}\right] yB[24​] w ^ T X T [ a b ] \hat w ^T X^T \left [\begin{array}{cccc} a \\ b \\ \end{array}\right] w^TXT[ab​] 手动实现代码验证最小二乘法 X A X # output : tensor([[1., 1.],[3., 1.]])y B y # output : tensor([[2.],[4.]])X.t() # output : tensor([[1., 3.],[1., 1.]])w torch.mm(torch.mm(torch.inverse(torch.mm(X.t(),X)),X.t()),y) w # output : tensor([[1.0000],[1.0000]])和此前结果保持一致。当然最小二乘法作为最优化问题的求解方法我们可以这么理解w最终取值当w取值为11时自变量为w的SSE函数取得全域最小值。 当然我们也可以直接调用最小二乘法函数torch.lstsq(B, A)进行求解 torch.lstsq(y, X) # output : torch.return_types.lstsq( solutiontensor([[1.0000],[1.0000]]), QRtensor([[-3.1623, -1.2649],[ 0.7208, -0.6325]]))对于lstsq函数来说第一个参数是因变量张量第二个参数是自变量张量并且同时返回结果还包括QR矩阵分解的结果QR分解也是一种矩阵分解方法后续在涉及到QR分解内容时会详细进行讲解。 另外在最小二乘法数学推导过程涉及到矩阵范数的运算在PyTorch中我们使用linalg.norm函数求向量或矩阵的范数 在深度学习中范数Norm是一个数学概念用于衡量向量的大小或长度。它是一个非负值可以用来表示向量在多维空间中的距离或幅度。范数在深度学习中被广泛应用于各种场景例如正则化、梯度下降、损失函数等。 常见的范数有 L1范数曼哈顿距离向量各元素绝对值之和。 ∥ x ∥ 1 ∑ i 1 n ∣ x i ∣ \|\mathbf{x}\|_1 \sum_{i1}^{n} |x_i| ∥x∥1​i1∑n​∣xi​∣ L1范数在深度学习中常用于正则化可以促进模型的稀疏性。 L2范数欧几里得距离向量各元素平方和的平方根。 ∥ x ∥ 2 ∑ i 1 n x i 2 \|\mathbf{x}\|_2 \sqrt{\sum_{i1}^{n} x_i^2} \ ∥x∥2​i1∑n​xi2​ ​  L2范数在深度学习中常用于正则化可以防止模型过拟合。 注意老版本教材会推荐使用norm函数进行求解但实际上新版pytorch已经开始推荐使用linalg.norm替换norm进行范数运算因此更推荐使用linalg.norm函数 t torch.tensor([-1, 2.]) # 默认情况求解L2范数各元素的平方和开平方 torch.linalg.norm(t) # output : tensor(2.2361)torch.sqrt(torch.tensor(5.)) # output : tensor(2.2361)# 输入参数求解L1范数各元素的绝对值之和 torch.linalg.norm(t, 1) # output : tensor(3.)反向验证导数为零 当然我们也可以反向验证看下损失函数SSE在a1b1时偏导数是否都为0。此时就需要借助PyTorch中的autograd模块来进行偏导计算。严格意义上来讲autograd模块是PyTorch中的自动微分模块我们可以通过autograd模块中的函数进行微分运算在神经网络模型中通过自动微分运算求解梯度是模型优化的核心。关于微分计算梯度进而执行优化的相关方法我们会在后续逐步介绍此处我们仅适用autograd模块来进行简单的微分计算尝试也就是对SSE进行偏导计算判断a、b同时取值为1时偏导是否为0。 目前市面上流通的PyTorch教材有些会介绍Variable类在进行微分运算时需提前将Tensor类转化为Variable类但其实在PyTorch 0.4版本以后Tensor就已经不仅仅是一个纯计算的载体而是可以支持微分运算Variable的概念被逐渐弱化可微分性也变成了Tensor的一个基本属性我们只需要在创建Tensor时通过设置requires_grad属性为True、规定张量可微分即可。 a torch.tensor(1.,requires_grad True) a # output : tensor(1., requires_gradTrue)此时a就是一个可微分的张量requires_grad是a的一个属性可以查看可以修改。 # 查看可微分性 a.requires_grad # output : True# 修改可微分性 a.requires_grad Falsea.requires_grad # output : Falsea.requires_grad True b torch.tensor(1.,requires_grad True) b # output : tensor(1., requires_gradTrue)然后创建损失函数 ( y 1 − y ^ 1 ) 2 ( y 2 − y ^ 2 ) 2 (y_1 - ŷ_1)^2 (y_2 - ŷ_2)^2 (y1​−y^​1​)2(y2​−y^​2​)2 ( 2 − a − b ) 2 ( 4 − 3 a − b ) 2 (2 - a - b)^2 (4 - 3a - b)^2 (2−a−b)2(4−3a−b)2 sse torch.pow((2 - a - b), 2) torch.pow((4 - 3 * a - b), 2)使用torch.autograd.grad进行偏导运算并输出a1、b1时偏导数的值 torch.autograd.grad(sse,[a, b]) # output : (tensor(-0.), tensor(-0.))至此也可验证(1,1)是损失函数的最小值点。 torch.autograd.grad函数 torch.autograd.grad是通用微分函数当只输入一个自变量时计算结果就是导数输入多个自变量时则会计算偏导数。 x torch.tensor(1.,requires_grad True) y x ** 2 # 导数计算结果 torch.autograd.grad(y, x) # output : (tensor(2.),)当然微分计算作为神经网络优化的核心autograd模块的功能远不仅于此更多的微分运算我们将在下一节继续讲解。
http://www.hkea.cn/news/14267841/

相关文章:

  • 广州网站建设懂你所需推广网站的方法有哪些
  • win7怎么做网站服务器吗沙井营销型网站建设
  • 网站设计公司网wordpress 的图片保存在哪
  • 做跨境电商网站有哪些做动图为所欲为的网站
  • 网站建设流程济南外贸网站建设公司排名
  • 自己做的网站怎么改背景图湘潭市高新建设局网站
  • 社交网站模板安平做网站
  • 武进网站建设价格php 网站开发框架ap
  • 高陵县建设局网站做网站分为哪些功能的网站
  • 花都网站建设公司天蝎信息网站文件服务器
  • 网站建设项目书广告代理
  • 0592 网站建设seo线上培训班
  • 杭州企业网站建设公司怎么样深圳网站建设汤小巧
  • 廊坊网站建设解决方案吉林网络推广公司
  • 淘宝网站的建设目的是什么意思网站建设的一些问题
  • 梅林 建站 wordpress长沙专业竞价优化公司
  • 2 网站内部链接优化南京网站开发南京乐识专心
  • 上海奉贤网站建设wordpress 缩略图高度
  • 黄浦网站建设个人养老金制度是什么意思
  • 北京市网站建设公司营销策划公司名字简单大气
  • 佛山哪里有网站开发?域名注册以后会给你一个账户名密码上传做好的网站
  • php网站如何上传数据库admin管理员登录
  • 艾艺的品牌网站设计厦门建设局官网
  • 吴中区建设局招标网站合肥网站建设专业设计
  • 风格活泼的网站设计二级域名查询入口
  • 阿里云网站搭建什么企业需要网站建设
  • 怎么查找网站的根目录群晖安装wordpress
  • 开通域名后怎样建设网站网站备案负责人一定要法人
  • 网站建设与管理实践实践报告做网站流量的方法
  • 免费网站可以下载策划公司排名