1. 线性回归

  回归(regression)问题指一类为一个或多个自变量与因变量之间关系建模的方法,通常用来表示输入和输出之间的关系。

  机器学习领域中多数问题都与预测相关,当我们想预测一个数值时,就会涉及到回归问题,如预测房价等。(预测不仅包含回归问题,还包含分类问题)

  线性回归(Linear Regression),自变量 $\textbf x$ 与因变量 $y$ 之间的关系是线性的,即 $y$ 可以表示为 $\textbf x$ 中元素的加权和。

  我们用 $n$ 来表示数据集中的样本数,对索引为 $i$ 的样本,其输入表示为 $\textbf x^{\left ( i \right )}= \begin{bmatrix} x_{1}^{\left ( i \right )} & x_{2}^{\left ( i \right )}\end{bmatrix}^T$ ,其对应的标签为 $y^{\left ( i \right )}$ 。(这里的输入 $\textbf x$ 包含2个特征)

2. 线性模型

2.1 一个简化模型

  假设1:影响房屋价格的关键因素是卧室个数、卫生间个数、居住面积,记为 $x_{1}$ ,$x_{2}$ ,$x_{3}$ 。

  假设2:房屋价格 $y$ 是关键因素的加权和,$y=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+b$ 。

  上式中的 $x_{1}$ ,$x_{2}$ ,$x_{3}$ 称为特征, $w_{1}$ , $w_{2}$ , $w_{3}$ 称为权重(weight),$b$ 称为偏置(bias),或偏移量、截距。权重决定了每个特征对我们预测值的影响。偏置是指所有特征为0时,预测值应为多少。既是现实中不会有房子居住面积为 $0$ ,或者没有卧室,但我们仍需要偏置项,因为它拓展了模型的表达能力。

2.2 线性模型

  给定一个数据集,我们的目标是寻找模型的权重 $\textbf w$ 和偏置 $b$ ,使得根据模型做出的预测大体符合数据里的真实价格。

  当输入包含 $d$ 个特征时,我们将预测结果 $\hat{y}\in\mathbb{R}$ 表示为:

$$\hat{y}=w_{1}x_{1}+\cdots+w_{d}x_{d}+b$$

  我们用向量使表示更简洁,特征向量 $\textbf x\in\mathbb{R}^{d}$ ,权重向量 $\textbf w\in\mathbb{R}^{d}$ ,偏置 $b\in\mathbb{R}$ ,即:

$$\textbf x=\begin{bmatrix}x_{1} & x_{2} & \cdots & x_{d} \end{bmatrix}^T , \textbf w=\begin{bmatrix}w_{1} & w_{2} & \cdots & w_{d} \end{bmatrix}^T , b$$

  该模型可以用点积式表示:

$$\hat{y}=\textbf w^{T}\textbf x+b$$

  

  上式中,向量 $\textbf x$ 仅对应于单个数据样本的特征,我们使用 $\textbf X\in\mathbb{R}^{n\times d}$ 来表示整个数据集的 $n$ 个样本。 $\textbf X$ 的每一行是一个样本,每一列是一种特征。

  对于特征集合 $\textbf X$ ,预测值向量 $\hat{\textbf y}\in\mathbb{R}^{n}$ 可以通过矩阵-向量乘法表示为:

$$\hat{\textbf y}=\textbf X\textbf w+b$$

  在开始寻找最优的模型参数 $\textbf w$ 和 $b$ 之前,我们还需要了解:模型质量的度量方式、更新和优化模型参数的方法。

3. 损失函数——平方损失

  损失函数可以量化目标的真实值和预测值之间的差距。通常使用非负数作为损失,数值越小表示损失越小,完美预测时为 $0$ 。回归问题中最常用的损失函数就是平方损失函数。

  当样本 $i$ 的预测值为 $\hat{y}^{\left ( i \right)}$ ,其对应的真实标签为 $y^{\left ( i \right)}$ 时,平方损失可以表示为:

$$l^{\left ( i \right)}\left ( \textbf w,b \right)=\frac{1}{2}\left( \hat{y}^{\left ( i \right)}-y^{\left ( i \right)}\right)^{2}$$

  $\frac{1}{2}$ 是为了求导方便。

  为了度量模型在整个数据集上的质量,我们计算在训练集上 $n$ 个样本的损失均值:

$$L\left( \textbf w,b \right)=\frac{1}{n}\sum_{i=1}^{n}l^{\left( i \right )}\left( \textbf w,b \right )=\frac{1}{n}\sum_{i=1}^{n}\frac{1}{2}\left( \textbf w^{T}\textbf x^{\left( i \right)}+b-y^{\left( i \right)}\right)^{2}=\frac{1}{2n}\Vert \textbf X\textbf w+b-\textbf y\Vert_2$$

  在训练模型时,我们希望找到一组参数 $\left(\textbf w^{*},b^{*}\right)$ ,能够最小化在训练集上的损失,表示如下:

$$\textbf w^{*},b^{*}=\mathop{\arg\min}_{\textbf w,b}L\left(\textbf w,b\right)$$

4. 解析解(显式解)

  线性回归是一个非常简单的优化问题,它的解可以用一个公式简单地表达出来,这类解叫做解析解(Analytical solution)。下面进行求解:

  首先将偏置 $b$ 合并到权重 $\textbf w$ 中,即 $\textbf X \leftarrow \begin{bmatrix} \textbf X & \textbf 1 \end{bmatrix}$ ,$\textbf w \leftarrow \begin{bmatrix}\textbf w \\ b \end{bmatrix}$ ,此时,$\textbf X \in\mathbb{R}^{n\times \left(d+1\right)}$ ,$\textbf w \in\mathbb{R}^{d+1}$ 。

  我们的目标是,最小化损失(下式):

$$L\left( \textbf w \right)=\frac{1}{2n}\Vert \textbf y-\textbf X\textbf w \Vert_2$$

  损失函数对参数 $\textbf w$ 求导:

$$\frac{\partial L\left(\textbf w \right )}{\partial \textbf w}=\frac{\partial L}{\partial \left(\textbf y-\textbf X\textbf w\right)}\frac{\partial \left(\textbf y-\textbf X\textbf w\right)}{\partial \textbf X\textbf w}\frac{\partial \textbf X\textbf w}{\partial \textbf w}$$

$$=\frac{1}{n}\left(\textbf y-\textbf X\textbf w\right)^{T}_{\left(1,n\right)}I_{\left(n,n\right)}X_{\left(n,d\right)}$$

$$=\frac{1}{n}\left(\textbf y-\textbf X\textbf w \right )^{T}\textbf X$$

  损失函数是凸函数(不知道为什么,搞懂了再来写),所以最小值满足:

$$\frac{\partial L\left(\textbf w\right)}{\textbf w}=0$$

$$\frac{1}{n}\left(\textbf y-\textbf X\textbf w \right )^{T}\textbf X=0$$

$$\textbf w^{*}=\left(\textbf X^{T}\textbf X\right)^{-1}\textbf X\textbf y$$

5. 小批量随机梯度下降(minibatch stochasitc gradient descent)

5.1 梯度下降

  大多数深度学习的问题无法得到解析解,这种情况下,我们仍可以有效的训练模型。

  梯度下降(gradient descent)算法是深度学习中常用的优化算法,它可以优化几乎所有的深度学习模型,原理是通过不断地在损失函数递减的方向上更新参数来降低损失。

  梯度下降最简单的用法是计算损失函数(训练集中所有样本的损失均值)关于模型参数的导数(又称梯度)。

  简要过程如下:

  首先随机初始化模型参数 $\textbf w_{0}$ ,

  然后按照 $\textbf w_{t}=\textbf w_{t-1}-\eta\frac{\partial L\left(\textbf w\right)}{\partial \textbf w_{t-1}}$ 公式来更新参数,$t$ 为迭代参数,$\eta$ 为学习率(步长)。

5.2 小批量随机梯度下降

  在实际的训练中,梯度下降的方法可能非常慢,因为每一次更新参数之前,必须遍历整个训练集。所以,我们通常会在每次需要计算更新的时候随机抽取一小批样本,这种变体叫做小批量随机梯度下降(minibatch stochastic gradient descent)。在这种方法中,我们随机采样若干个样本来近似整个训练集的损失。

  过程如下:

  在每次迭代中,我们首先随机抽样一个小批量 $\Beta$ ,它由固定数量的训练样本组成,

  然后我们计算小批量的平均损失关于模型参数的导数(梯度), $\left|\Beta\right|$ 为批量大小(batch size),并乘上一个学习率(learning rate) $\eta$ ,从当前参数值中减去:

$$\textbf w\leftarrow \textbf w - \frac{\eta}{\left|\Beta\right|}\sum_{i\in\Beta}\frac{\partial l^{\left(i\right)}\left(\textbf w\right)}{\partial \textbf w}$$

  对于线性回归的参数 $\textbf w$ 和 $b$ ,可以明确地写成如下形式:

$$\textbf w \leftarrow \textbf w - \frac {\eta} {\left|\Beta\right|}\sum_{i\in\Beta}\frac{\partial l^{\left(i\right)}\left(\textbf w,b\right)}{\partial \textbf w} = \textbf w - \frac{\eta}{\left| \Beta \right|} \sum_{i \in \Beta} \textbf x^{\left(i\right)} \left( \textbf w^{T} \textbf x^{\left(i\right)} + b - y^{\left(i\right)} \right)$$

$$b \leftarrow b - \frac {\eta} {\left|\Beta\right|}\sum_{i\in\Beta}\frac{\partial l^{\left(i\right)}\left(\textbf w,b\right)}{\partial b} = b - \frac{\eta}{\left| \Beta \right|} \sum_{i \in \Beta} \left( \textbf w^{T} \textbf x^{\left(i\right)} + b - y^{\left(i\right)} \right)$$

本文为学习笔记,学习内容来自李沐 https://zh-v2.d2l.ai/

最新文章

  1. Pyqt adb 获取Android手机屏幕
  2. Java -- 找不到或无法加载主类
  3. <转>Java 常用排序算法小记
  4. hdu 1025 dp 最长上升子序列
  5. Manifest 与TypeTag
  6. java.sql.Date to java.util.Date
  7. libvirt 命令行交互工具之virsh
  8. PC和ARM平台编译Qt的命令
  9. android LinearLayout android:layout_weight 作用,固定比例
  10. Asp.Net实现FORM认证的一些使用技巧
  11. 寒假学干货之------ 初学者关于fragment_main(碎片的困扰)
  12. 矢量切片(Vector tile)
  13. idea快速搭建springboot项目
  14. MPSOC之9——host、embeded间tftp、nfs、ftp环境搭建
  15. transform-style为什么子元素需要定位?
  16. 使用js控制表单重复提交(1加锁,2事件方式,3 EasyUI中解决表单重复提交)
  17. 记录一次群答问:jmeter正则提取器提取一个及多个值
  18. 题解 P3871 【[TJOI2010]中位数】
  19. ORACLE存储过程定时器例子(存储过程变量赋值)
  20. Spring Boot自动配置与Spring 条件化配置

热门文章

  1. Dom4j(解析property)
  2. 关于Java集合框架的总结
  3. Linux下修改mysql默认最大连接数
  4. 基于CentOS7.x Linux操作系统,从0开始构建一套Docker虚拟化平台,使用二进制Tar包方式,部署的步骤和方法如下:
  5. 基于SigalR实现的奥运会实时金牌榜
  6. 【Qt pro 文件配置】
  7. linux centos7 控制台下的一些操作
  8. Linux定时任务(详细)
  9. vue 导出excel后端返回乱码下载不了的解析问题
  10. Linux - 解决使用 apt-get 安装 yum 的时耗报 E: Unable to locate package yum 的错误