动手学深度学习——线性回归之线性模型与梯度下降法

目录

1. 线性回归模型与损失函数

1.1 构建简化模型

1.2 构建线性模型

1.3 线性模型联系神经网络

1.4 神经网络源于神经科学

1.5 构建损失函数

1.6 构建训练数据集

1.7 利用损失进行参数学习

1.8 学习过程表示为显示解

1.9 线性回归总结

2. 梯度下降法与参数优化

2.1 参数优化实现

2.2 学习率选取

2.3 小批量随机梯度下降

2.4 批量大小选取

2.5 梯度下降法总结


1. 线性回归模型与损失函数

为了解释 线性回归,我们举一个实际的例子:我们希望根据房屋的 面积(平方英尺)和 房龄(年)来估算 房屋价格(美元)

  1. 为了开发一个能预测房价的模型,我们需要收集一个真实的数据集。 这个数据集包括了房屋的销售价格、面积和房龄。 在机器学习的术语中,该数据集称为训练数据集(training data set) 或 训练集(training set)
  2. 每行数据(比如一次房屋交易相对应的数据)称为 样本(sample)也可以称为 数据点(data point)或 数据样本(data instance)
  3. 我们把试图预测的 目标(比如预测房屋价格)称为标签(label)或 目标(target)
  4. 预测所依据的 自变量(面积和房龄)称为 特征(feature)或 协变量(covariate)

1.1 构建简化模型

1.2 构建线性模型

1.3 线性模型联系神经网络

我们可以将线性回归模型描述为一个单层神经网络,如下图所示。 需要注意的是,该图只显示连接模式,即只显示每个输入如何连接到输出,隐去了权重和偏差。

1.4 神经网络源于神经科学

树突中接收到来自其他神经元(或视网膜等环境传感器)的信息 \large x_{i} 。 该信息通过突触权重 \large w_{i} 来加权,以确定输入的影响(即,通过 \large x_{i}w_{i} 相乘来激活或抑制)。 来自多个源的加权输入以加权和 \large y=\sum_{i}x_{i}w_{i}+b 的形式汇聚在细胞核中, 然后将这些信息发送到轴突 \large y 中进一步处理,通常会通过 \large \sigma(y) 进行一些非线性处理。 之后,它要么到达目的地(例如肌肉),要么通过树突进入另一个神经元

1.5 构建损失函数

一般用损失函数来衡量预估的质量,即预估值与真实值的偏差情况。

用二维图像表示如下:

1.6 构建训练数据集

分别构建n个 样本x 组成的 特征数据集X 标签数据集y

1.7 利用损失进行参数学习

将训练数据集代入到损失函数中计算 样本整体的损失 ,并通过最小化损失来学习(求出)最佳的参数:权重w 和 偏差b

1.8 学习过程表示为显示解

待求解的未知量移到等号左侧,已知量全部移到等号右侧的形式称为——显示解 。

对上式简单推导如下:

1.9 线性回归总结

2. 梯度下降法与参数优化

梯度 的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

找寻 “山谷” 与 “山顶” 的问题使用的就是 梯度下降法 ,即沿着梯度相反的方向,函数的变化率不断减小,最终趋于0,如果用此方法优化的是凸函数,便可得到函数的全局最优值

值得注意的是 梯度上升(提升)法 ,虽然名字里有个上升,但其也是沿着梯度相反的方向,所谓的提升是指优化损失的函数的增加,即弱学习器的增加(查看详解),每个学习器还是依照梯度下降法在对函数寻优;

这里优化参数明显应当使用梯度下降法(箭头所指为梯度反方向,函数变化率减小):

2.1 参数优化实现

使用当前参数 \large w_{t-1} 减去步长(即:学习率*梯度)求得新的参数 \large w_{t},当梯度变为0时求得最佳参数。

加上还是减去步长其实取决于梯度值,在梯度下降法中:

  • 梯度值<0时参数应加上步长;
  • 梯度值>0时参数应减去步长。

2.2 学习率选取

2.3 小批量随机梯度下降

简单来说就是随机取 \large \frac{b}{n} 的样本用于计算梯度,再用该梯度计算步长来优化参数。

2.4 批量大小选取

2.5 梯度下降法总结

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性回归机器学习中的一种基本算法梯度下降法线性回归中常用的优化算法。下面是线性回归梯度下降法的实现步骤: 1.读取数据集,包括自变量和因变量。 2.初始化相关参数,包括习率、迭代次数、截距和斜率等。 3.定义计算代价函数,常用的代价函数是均方误差(MSE)。 4.梯度下降,通过不断迭代更新截距和斜率,使得代价函数最小化。 5.执行梯度下降算法,得到最优的截距和斜率。 下面是Python代码实现: ```python import numpy as np # 读取数据集 def load_data(file_path): data = np.loadtxt(file_path, delimiter=',') x_data = data[:, :-1] y_data = data[:, -1] return x_data, y_data # 初始化相关参数 def init_params(): b = 0 k = 0 learning_rate = 0.01 num_iterations = 1000 return b, k, learning_rate, num_iterations # 定义计算代价函数 def compute_cost(b, k, x_data, y_data): total_error = 0 for i in range(len(x_data)): total_error += (y_data[i] - (k * x_data[i] + b)) ** 2 cost = total_error / float(len(x_data)) return cost # 梯度下降 def gradient_descent(b, k, x_data, y_data, learning_rate, num_iterations): m = float(len(x_data)) for i in range(num_iterations): b_gradient = 0 k_gradient = 0 for j in range(len(x_data)): b_gradient += (1/m) * ((k * x_data[j] + b) - y_data[j]) k_gradient += (1/m) * ((k * x_data[j] + b) - y_data[j]) * x_data[j] b = b - (learning_rate * b_gradient) k = k - (learning_rate * k_gradient) return b, k # 执行梯度下降算法 def linear_regression(file_path): x_data, y_data = load_data(file_path) b, k, learning_rate, num_iterations = init_params() print("Starting parameters: b = {0}, k = {1}, cost = {2}".format(b, k, compute_cost(b, k, x_data, y_data))) b, k = gradient_descent(b, k, x_data, y_data, learning_rate, num_iterations) print("After {0} iterations: b = {1}, k = {2}, cost = {3}".format(num_iterations, b, k, compute_cost(b, k, x_data, y_data))) # 调用线性回归函数 linear_regression('data.csv') ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值