Pytorch入门 - Day5

基本优化思想和最小二乘法

1. 简单线性回归的机器学习建模思路

回顾简单线性回归建模问题

在这里插入图片描述
在这里插入图片描述

上述问题除了可以用矩阵方程求解以外, 可以转化成最优化问题,通过求解最优化问题的方法对其进行求解.

总的来说, 最优化问题的转发分为两步, 其一是确定最优化数值指标, 其二则是确定优化目标函数.

如果我们希望通过一条直线拟合二维平面上分布的点, 最核心的目标,毫无以为就是希望方程的预测值和真实值相差较小. 假设真实的y值用 y y y表示, 预测值用 y ^ \hat{y} y^ 表示,带入a, b参数, 则有数值表示如下:
在这里插入图片描述
而这两个预测值和真实值相差:

y 1 y_1 y1 = 2, y ^ 1 \hat{y}_1 y^1 = a + b, y 1 y_1 y1 - y ^ 1 \hat{y}_1 y^1 = 2 - a - b

y 2 y_2 y2 = 4, y ^ 2 \hat{y}_2 y^2 = 3a + b, y 2 y_2 y2 - y ^ 2 \hat{y}_2 y^2 = 4 - 3a - b

我们希望 y ^ \hat{y} y^ y y y 尽可能接近, 所以我们可以考虑计算上述误差总和. 但为了避免正负相消(一部分为正, 另一部分为负), 在衡量上述两个点的误差总和时, 我们使用平方和进行衡量, 而不是简单的求和:

在这里插入图片描述

上式就是两个点的预测值和真实值的差值的平方和, 也就是误差平方和 - SSE (Sum of the Squared Errors)

至此, 我们已经把原问题转化为一个最优化问题,接下来我们的问题就是, 当a, b取何值时, SSE取值最小? SSE是我们优化的目标方程(求最小值), 因此上述方程为目标函数. 同时 SSE代表真实值和预测值之间的差值(误差平方和), 因此也被称为损失函数(预测值距离真实值的损失)

目标函数和损失函数并不完全等价, 但大多数目标函数都有损失函数构成

最优化问题的求解方法

在机器学习领域, 大多数优化问题都是围绕目标函数(或者损失函数)进行求解. 在上述问题中, 我们需要围绕SSE求最小值. SSE是一个关于a和b的二元函数, 要求其最小值,需要借助数学工具,也就是最优化方法.

图形展示目标函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于一个凸函数来说, 全域最小值明显存在, 基于凸函数的数学定义, 我们可以进一步给出求解上述SSE凸函数最小值的一般方法, 也就是著名的最小二乘法.

驻点可以使说是临界点, 但不是拐点, 拐点特指左右两边函数凹凸性发生变化的点,不可和驻点混淆.

SSE最小值

对于SSE来说, 对于简单线性回归的损失函数, SSE是凸函数,因此, 对于SSE(a,b) = ( 2 − a − b ) 2 (2-a-b)^2 (2ab)2 + ( 4 − 3 a − b ) 2 (4-3a-b)^2 (43ab)2, 最小值点就是a, b两个参数求偏导等于0的点

在这里插入图片描述
在这里插入图片描述

利用偏导等于得出的方程组求解线性回归方程参数, 就是最小二乘法求解过程. 此处我们求得a = 1, b =1时, SSE(a,b)取得最小值, 也就是(1,1)时目标函数的最小值.

2. 机器学习一般流程

1). 提出基本模型
2). 确定损失函数和目标函数
3). 根据目标函数特性,选择优化方法, 求解目标函数

3. 第一个优化算法:最小二乘法

利用优化方法求解目标函数其实是机器学习建模过程中最为核心的环节. 因此围绕上述简单线性回归问题, 进一步讨论最小二乘法背后的数学逻辑和优化思想, 同事简单探讨数据的矩阵表示方法和基本矩阵运算.
同时,线性方程也是构建神经网络模型的基础, 我们需要深入探讨线性模型建模细节以及最基本的优化算法: 最小二乘法.

最小二乘法的表示方法

两种表示方式, 代数表示法和矩阵表示法

代数表示法

假设多元线性方程有如下形式:
f ( x ) = w 1 x 1 + w 2 x 2 + . . . + w d x d + b f(x) = {w_1}{x_1} + {w_2}{x_2}+...+ {w_d}{x_d} + b f(x)=w1x1+w2x2+...+wdxd+b

w w w = ( w 1 w_1 w1, w 2 w_2 w2,… w d w_d wd), x x x = ( x 1 x_1 x1, x 2 x_2 x2,… x d x_d xd), 则上式可写为
f ( x ) = w T x + b f(x) = {w^T}x + b f(x)=wTx+b
在机器学习领域, 线性回归自变量系数命名为w, (weight)的简写, 意为自变量的权重

优化目标可写为:

在这里插入图片描述

通过偏导为0求得最终结果的最小二乘求解过程为:

在这里插入图片描述
进而可得

在这里插入图片描述

其中 x ‾ \overline{x} x = 1 m ∑ i = 1 m x i \frac{1}{m}\sum_{i=1}^mx_i m1i=1mxi , x 1 x_1 x1 x x x的均值, 并且( x i x_i xi, y i y_i yi)代表二维空间中的点,.

最小二乘法的矩阵表示形式

对于线性方程组来说, 矩阵表示是一种更加简洁的表示方式, 并且对于支持数组运算的torch来说,线性方程组的矩阵表示也更贴近代码的实际书写形式. 线性方程如下:

1 ∗ a + b = 2 3 ∗ a + b = 4 1*a+b=2 \\ 3*a+b=4 1a+b=23a+b=4

在转化为矩阵表格的过程中, 令

A A A = [ 1 2 3 1 ] \begin{bmatrix} {1}&{2}\\ {3}&{1}\\ \end{bmatrix} [1321]

B B B = [ 2 4 ] \begin{bmatrix} {2}\\ {4} \end{bmatrix} [24]

X T X^T XT = [ a b ] \begin{bmatrix} {a}\\ {b} \end{bmatrix} [ab]

则原方程组可以表示为
A ∗ X T = B A * X^T = B AXT=B
更一般的情况下, 多元线性回归方程为

f ( x ) = w 1 x 1 + w 2 x 2 + . . . + w d x d + b f(x)={w_1}{x_1} +{w_2}{x_2}+ ... +{w_d}{x_d} + b f(x)=w1x1+w2x2+...+wdxd+b

w ^ = ( w 1 x 1 + w 2 x 2 + . . . + w d x d + b ) \hat{w} = ({w_1}{x_1}+{w_2}{x_2}+...+{w_d}{x_d}+b) w^=(w1x1+w2x2+...+wdxd+b)

x ^ = ( x 1 , x 2 , . . . , x d , 1 ) \hat{x} = ({x_1},{x_2},...,{x_d},1) x^=(x1,x2,...,xd,1)

1) w ^ \hat{w} w^ : 方程系数所组成的向量, 并且我们将自变量系数和截距放到了一个向量中, 此处\hat{w}就相当于前例中的a, b组成的向量(a,b)

2) 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组取值, 则

在这里插入图片描述

对应到前例中的A矩阵, A矩阵就是拥有一个自变量, 两个取值的x矩阵. 令 y y y为自变量的取值, 则有

在这里插入图片描述
此时, SSE可表示为:

在这里插入图片描述
根据最小二乘法的求解过程, 令 E ( w ^ ) E(\hat w) E(w^) w ^ \hat w w^ 求导方程取值为0, 有

在这里插入图片描述

进一步可得

X T X w ^ T = X T y X^T X {\hat w}^T = X^T y XTXw^T=XTy
要使得此式有解, 等价于 X T X X^T X XTX (也被称为矩阵的交叉乘积crossprod)存在逆矩阵, 若存在,则可以解出
w ^ T = ( X T X ) − 1 X T y {\hat w}^T = (X^T X)^{-1} X^T y w^T=(XTX)1XTy

最小二乘法的简单实现

回到最初的例子,有如下关系:

X X X = A A A = [ 1 2 3 1 ] \begin{bmatrix} {1}&{2}\\ {3}&{1}\\ \end{bmatrix} [1321]

y y y = B B B = [ 2 4 ] \begin{bmatrix} {2}\\ {4} \end{bmatrix} [24]

w ^ T \hat w^T w^T = X T X^T XT = [ a b ] \begin{bmatrix} {a}\\ {b} \end{bmatrix} [ab]

代码实现最小二乘法:

在这里插入图片描述
在这里插入图片描述
我们也可以直接调用最小二乘函数 torch.lstsq(B, A)进行求解.

在这里插入图片描述
对于lstsq函数来说, 第一个参数是因变量张量, 第二个参数是自变量张量, 并且同时返回结果还包括QR矩阵分解的结果. QR分解也是矩阵分解的一种方法.

另外, 在最小二乘法数学推导过程中, 涉及到矩阵范数的运算, 在Pytorch中, 我们利用linalg.nom函数求向量或者矩阵的范数.

在这里插入图片描述

4. 反向验证导数为0

借助Pytorch中的autograd模块来进行反向验证, 看下损失函数SSE在a=1, b=1时偏导数是否都为0.
严格意义上, autograd模块是Pytorch中的自动微分模块, 我们可以通过autograd模块中的函数进行微分运算,在神经网络模型中, 通过自动微分运算求解梯度是模型优化的核心.

在这里插入图片描述
在这里插入图片描述

torch.autograd.grad 函数

是通用微分函数, 当只输入一个自变量是计算结果为导数, 输入多个自变量时则会计算偏导数.

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值