线性回归&梯度下降&神经网络理解

11 篇文章 0 订阅
3 篇文章 0 订阅
本文介绍了线性回归模型的构建,通过最小二乘法确定参数,并探讨了误差平方和作为损失函数的意义。接着引入高维空间中的最优化思想,解释了梯度下降法在寻找最优解中的作用,同时讨论了学习率和批量大小在深度学习中的重要性。最后,阐述了这些概念在神经网络优化中的应用。
摘要由CSDN通过智能技术生成

序幕:线性回归
引入方程

从最简单的二元一次方程开始 y = w 1 x 1 + w 2 x 2 + b y=w_1x_1+w_2x_2+b y=w1x1+w2x2+b,假设 y y y是奶茶价格, x 1 x_1 x1为人流量参数、 x 2 x_2 x2为原材料价格,这样一来就能根据不同地方的信息确认奶茶价格,但是要构建这个模型需要在此定义:

添加数据

需要的数据不止一项,所以 x 1 、 x 2 x1、x2 x1x2相对应的是一系列n项数据,可以描述为:
y ^ ( i ) = w 1 x 1 ( i ) + w 2 x 2 ( i ) + b ( i ∈ [ 1 , n ] ) \hat{y}^{(i)}=w_1x_1^{(i)}+w_2x_2^{(i)}+b\quad(i\in[1,n]) y^(i)=w1x1(i)+w2x2(i)+b(i[1,n])
y y y处所标记符号为== y ^ \hat{y} y^==的意义为期望值而并非实际值,可以将任务简要理解为我们现在知道了 n n n个地方的奶茶价格、人流量、原材料价格数据,需要将三个未知参数 ( w 1 , w 2 , b ) (w_1,w_2,b) (w1,w2,b)做估计。

借鉴:🐶最小二乘法​

如何定义使得建立一个标准评估估计参数的好坏嘞,最小二乘法中有最常见的一个说法叫最小化误差平方和,用公式可书写为:
S 2 = ∑ i = 1 n ( y i − y ^ i ) 2 S^2=\sum^{n}_{i=1}{(y_i-\hat{y}_i)^2} S2=i=1n(yiy^i)2
在这里插入图片描述

假设红点为待拟合点,曲线为参数估计好的目标曲线,可以看出评价指标的意义就是曲线与各个待拟合点之间的相对距离,值越小证明拟合程度越好。

生成图像代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 10, 0.05)
y = x ** 2
plt.plot(x, y)
x_sc = np.random.uniform(-10, 10, (1, 20))
e = np.random.normal(0, 1, (1, 20)) * 10
y_sc = x_sc ** 2 + e
plt.scatter(x_sc, y_sc, alpha=0.5, c="r")
plt.savefig("./最小二乘法.png")
引入限制

我们也将其指标类似定义为:
e ( i ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 e^{(i)} =\frac{1}{2}{(\hat{y}^{(i)}-y^{(i)})^2} e(i)=21(y^(i)y(i))2
又因为 y ( i ) y^{(i)} y(i)为可知的数据,其他数据展开可得:
e ( i ) = 1 2 ( w 1 x 1 ( i ) + w 2 x 2 ( i ) + b − y ( i ) ) 2 e^{(i)} =\frac{1}{2}{(w_1x_1^{(i)}+w_2x_2^{(i)}+b-y^{(i)})^2} e(i)=21(w1x1(i)+w2x2(i)+by(i))2
很大的疑惑:为什么要加个 1 2 \frac{1}{2} 21呢,这里埋下伏笔不做解释(我也是后面才知道的)

函数的概念

当我将上述公式理解为一个指标函数又或者说是一种损失函数的时候,它已经被我们定义为是一种函数,那么书写为函数的样子呢:

损失函数:损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。 不同的模型用的损失函数一般也不一样。

e ( i ) ( w 1 , w 2 , b ) = e ( i ) e^{(i)}(w_1,w_2,b)=e^{(i)} e(i)(w1,w2,b)=e(i)

为什么现在的未知数不是 x x x呢?因为 x x x是我们的数据(这个问题原来居然困惑了我很久)

矩阵の精简

利用矩阵知识我可以做如下定义:
θ = [ w 1 , w 2 , b ] T \theta=[w_1,w_2,b]^T θ=[w1,w2,b]T
之后的代换就很好理解了:
e ( i ) ( w 1 , w 2 , b ) = e ( i ) ( θ ) e^{(i)}(w_1,w_2,b)=e^{(i)}(\theta) e(i)(w1,w2,b)=e(i)(θ)

麻烦的现状

当建立了漂亮的数学公式 y = w 1 x 1 + w 2 x 2 + b y=w_1x_1+w_2x_2+b y=w1x1+w2x2+b后,很激动的想到既然有个 n n n组数据要不要带入直接求出未知参数 w 1 , w 2 , b w_1,w_2,b w1,w2,b呢?

事实很残酷,不是每一个数学问题都有一个明确的解析解。

在这里插入图片描述

参照上面的散点图,我们不可能找到一个完美的曲线去拟合,或许是有的,不过找到它的代价比开一家奶茶店更大一些;所以,这个问题让我们寻找到的就是一种数值解,就像数值计算方法所用到的牛顿法一样,精确到一定程度就放弃得到了。

最优化の想法:

一维函数的做法:

在这里插入图片描述

x = np.arange(-10, 10, 0.05)
y = x ** 2
plt.plot(x, y)
plt.scatter(6, 36, c="r")
plt.quiver(6, 36, -2.5, -30, angles='xy', scale_units='xy', scale=1)
plt.savefig("./一维下降.png")

由简单的二维图像看出,(6,36)点处于函数 y = x 2 y=x^2 y=x2之上,并且 y ′ = 2 x y'=2x y=2x,黑色矢量箭头表示为当前点的下降方向,如果说无法简单的由该点去往最低点(0,0),只能通过最优化的知识去求解,于是引入迭代算法:

迭代格式为: x k + 1 = x k + λ k d k x_{k+1}=x_k+\lambda_kd_k xk+1=xk+λkdk

x k + 1 x_{k+1} xk+1被修正方向 d k d_k dk和步长 λ k \lambda_k λk决定,给定上述参数我们需要发现的是:

要确定步长使得: f ( x k + 1 ) = f ( x k + λ k d k ) < f ( x k ) f(x_{k+1})=f(x_k+\lambda_kd_k)<f(x_k) f(xk+1)=f(xk+λkdk)<f(xk)

ϕ ( λ ) = f ( x k + λ d k ) \phi(\lambda)=f(x_k+\lambda d_k) ϕ(λ)=f(xk+λdk),有 ϕ ( λ k ) < ϕ ( 0 ) \phi(\lambda_k)<\phi(0) ϕ(λk)<ϕ(0)

这个问题相当于可以被优化:使 d k = − f ′ ( x k ) d_k=-f'(x_k) dk=f(xk),确定一个合适的 λ k \lambda_k λk使得 x k x_k xk在函数中做出的范围相对可接受。而 λ \lambda λ的取值为 m i n λ ≥ 0 ( f ( x k + λ d k ) ) min_{\lambda\geq0}(f(x_k+\lambda d_k)) minλ0(f(xk+λdk))。更详细内容可参考最优化课程:最有一维搜索。

高维空间

类似的将方法扩展到高维空间,有一个神奇的概念叫梯度:
∇ f ( θ ) = ∇ f ( w 1 , w 2 , b ) = ( ∂ f ∂ w 1 , ∂ f ∂ w 2 , ∂ f ∂ b ) T \nabla f(\theta)=\nabla f(w_1,w_2,b)=(\frac{\partial f}{\partial w_1},\frac{\partial f}{\partial w_2},\frac{\partial f}{\partial b})^T f(θ)=f(w1,w2,b)=(w1f,w2f,bf)T
梯度理解为高维空间的导数向量,之后使得: d k = − ∇ f ( x k ) d_k=-\nabla f(x_k) dk=f(xk),继续运算可得到一个最有利的方向。

回到当初重新看待数据:

自我感觉:矩阵的引入是现代社会最大的进步之一,将所有信息带入矩阵计算:

数据可以描述为:
奶 茶 价 格 : Y ( n × 1 ) 预 测 奶 茶 价 格 : Y ^ ( n × 1 ) 两 个 参 数 : X ( n × 2 ) 未 知 参 数 1 : ω ( 2 × 1 ) 未 知 参 数 2 : b ( 1 × 1 ) 奶茶价格:Y_{(n\times 1)}\\ 预测奶茶价格:\hat{Y}_{(n\times 1)}\\ 两个参数:X_{(n\times 2)}\\ 未知参数1:\omega_{(2\times 1)}\\ 未知参数2:b_{(1\times 1)} Y(n×1)Y^(n×1)X(n×2)1ω(2×1)2b(1×1)
预测公式可简化书写为无上标的形式:
Y ^ = ω X + b \hat{Y}=\omega X+b Y^=ωX+b
损失函数表示为:
E ( θ ) = 1 2 n ( Y ^ − Y ) T ( Y ^ − Y ) E(\theta)=\frac{1}{2n}(\hat{Y}-Y)^T(\hat{Y}-Y) E(θ)=2n1(Y^Y)T(Y^Y)
一直损失函数后如何优化呢?运用上述的最有一维搜索的扩展方法:
∇ E = 1 n ( ∂ E ∂ w 1 , ∂ E ∂ w 2 , ∂ E ∂ b ) T \nabla E = \frac{1}{n}(\frac{\partial E}{\partial w_1},\frac{\partial E}{\partial w_2},\frac{\partial E}{\partial b})^T E=n1(w1E,w2E,bE)T

现在解释 1 2 \frac{1}{2} 21的好处:举例求导 ∇ E \nabla E E的第一项为: ∂ E ∂ w 1 = 1 n X 1 T ( Y ^ − Y ) \frac{\partial E}{\partial w_1}=\frac{1}{n}X_1^T(\hat{Y}-Y) w1E=n1X1T(Y^Y),无其他参数影响,看着整洁,目前我的理解是这样,慢慢学习哈哈

得到梯度后我就可以求出下降方向,使得损失函数变小,之后使得结果最优,这就是线性回归和最优化在神经网络中的的意义。

更深的意义:

深度学习中数据量很大,很多事情难以估计,所以引入了两项计算:

  • η \eta η:学习率,作为每次迭代运算的比率,以免过快迭代跨过了最优点。

  • β \beta β:一次训练的样本数量,由于数据量的体积,很难去一次性计算一些东西,所以采取了一次获取一定量的数据集进行操作。

这两个参数由人工去调整所以称之为超参数。

最终损失函数的核心部分被优化为

迭代每次的损失函数:

θ = θ − η ∣ β ∣ ∑ i ∈ β ∇ θ e ( i ) ( θ ) \theta = \theta - \frac{\eta}{|\beta|}\sum_{i\in\beta}\nabla_\theta e^{(i)}(\theta) θ=θβηiβθe(i)(θ)

可以发现当一次的训练样本为1时就是最简化的最优高维搜索。

最终损失函数的核心部分被优化为

迭代每次的损失函数:

θ = θ − η ∣ β ∣ ∑ i ∈ β ∇ θ e ( i ) ( θ ) \theta = \theta - \frac{\eta}{|\beta|}\sum_{i\in\beta}\nabla_\theta e^{(i)}(\theta) θ=θβηiβθe(i)(θ)

可以发现当一次的训练样本为1时就是最简化的最优高维搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数学小牛马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值