一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)

《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)

version 1.0 2022-1-20

声明:

1)《繁凡的深度学习笔记》是我自学完成深度学习相关的教材、课程、论文、项目实战等内容之后,自我总结整理创作的学习笔记。写文章就图一乐,大家能看得开心,能学到些许知识,对我而言就已经足够了 ^q^ 。

2)因个人时间、能力和水平有限,本文并非由我个人完全原创,文章部分内容整理自互联网上的各种资源,引用内容标注在每章末的参考资料之中。

3)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除,非常感谢各位为知识传播做出的贡献!

4)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢。

5)本文由我个人( CSDN 博主 「繁凡さん」(博客) , 知乎答主 「繁凡」(专栏), Github 「fanfansann」(全部源码) , 微信公众号 「繁凡的小岛来信」(文章 P D F 下载))整理创作而成,且仅发布于这四个平台,仅做交流学习使用,无任何商业用途。

6)「我希望能够创作出一本清晰易懂、可爱有趣、内容详实的深度学习笔记,而不仅仅只是知识的简单堆砌。」

9)此属 version 1.0 ,若有错误,还需继续修正与增删,还望大家多多指点。本文会随着我的深入学习不断地进行完善更新,Github 中的 P D F 版也会尽量每月进行一次更新,所以建议点赞收藏分享加关注,以便经常过来回看!

如果觉得还不错或者能对你有一点点帮助的话,请帮我给本篇文章点个赞,你的支持是我创作的最大动力!^0^

如果没人点赞的话自然就更新慢咯 >_<

话题 1 :什么是回归分析?什么又是回归问题?

话题 2 :有哪些回归分析方法?

话题 3 :如何将线性回归模型模型化?

话题 4 :什么是神经元与神经元模型?

话题 5 :什么是损失函数?为什么需要使用损失函数?

话题 6 :回归问题中常用的损失函数有哪些?

话题 7 :深度学习为什么需要使用优化算法

话题 8 :有哪些常用的优化算法?

话题 9 :什么是梯度下降算法?

话题 10 :梯度下降算法为什么可以优化目标函数?(选学)

话题 11 :训练过程中如何避免陷入局部最优解?如何逃离鞍点?

话题 12 : 趣味话题:有时候我们没办法直接计算梯度,可以尝试估计梯度大小吗?- 有限差分法与对称导数法(选学)

话题 13 :什么是最小二乘法?如何使用最小二乘法解决线性回归问题?

话题 14 :道理我都懂,怎么用代码实现并解决神经元线性模型呢?

话题 15 :线性模型已经完全学会了!如果换成非线性的模型该怎么办呢?

话题 1 :什么是回归分析?什么又是回归问题?

回归分析(Regression Analysis)是一种统计学上分析数据的方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型以便观察特定变量来 预测 (prediction)研究者感兴趣的变量。在自然科学和社会科学领域,回归经常用来表示 输入和输出之间的关系

机器学习领域的大多数任务通常都与预测有关。当我们进行回归分析并想要预测预测值在实数的连续范围内时,我们称之为回归问题。常见的例子有:预测房价/库存、预测需求/销售等等。但并非所有预测都是回归问题。在下一章中,我们将介绍分类问题。分类问题的目标是预测数据属于一组类别中的哪一个,即预测预测值属于实数的连续区间的方法。

[En]

Most tasks in the field of machine learning are usually related to * prediction. When we do regression analysis and want to predict that a predicted value is within a continuous range of real numbers, we call it a * regression problem. Common examples are: forecasting house prices / stocks, forecasting demand / sales, and so on. But not all forecasts are regression problems. In the next chapter, we will introduce the problem of classification. The goal of the classification problem is to predict which of a set of categories the data belongs to, that is, the method of predicting that a predicted value belongs to a continuous interval of real numbers.

话题 2 :有哪些回归分析方法?

统计学中的回归分析方法一般有线性回归(简单线性回归、复杂回归、对数线性回归)、非线性回归对数概率回归偏回归自回归(自回归滑动平均模型、差分自回归滑动平均模型、向量自回归模型)。本章主要讨论线性回归和非线性回归,只对其他回归方法作了一些简单的介绍,更详细的解释、代码实现和应用,详见《非凡机器学习笔记》。

[En]

The regression analysis methods in statistics generally include * linear regression * (simple linear regression, complex regression, logarithmic linear regression), * nonlinear regression , * logarithmic probability regression , * partial regression , * autoregressive (autoregressive moving average model, difference autoregressive moving average model, vector autoregressive model). This chapter mainly discusses linear regression and non-linear regression, only gives some simple introduction to other regression methods, more detailed explanation, code implementation and application, see “extraordinary Machine Learning Notes” for more details.

❑ ❑\,❑ 线性回归

在回归问题中,如果使用线性模型去逼近真实模型,那么我们把这一类方法叫做 线性回归(Linear Regression),线性回归是回归问题中的一种具体的实现。

线性回归基于几个简单的假设:首先,假设自变量 x \mathbf{x}x 和因变量 y y y 之间的关系是线性的,即 y y y 可以表示为 x \mathbf{x}x 中元素的加权和,这里通常允许包含观测值的一些噪声;其次,我们假设任何噪声都比较正常,如噪声遵循 正态分布 (NormalDistribution) N ( μ , σ 2 ) \mathcal{N}\left(\mu, \sigma^{2}\right)N (μ,σ2 )。

简单线性回归(simple linear regression),在统计学中指只有一个解释变量的线性回归模型。往往是以单一变量预测,用于判断两变量之间相关的方向和程度。

复回归分析(multiple regression analysis),也称多变量回归,是简单线性回归的一种延伸应用,用以了解一个因变量与两组以上自变量的函数关系。

对数线性回归(Log-linear model),是将自变量和因变量都取对数值之后再进行线性回归,所以根据自变量的数量,可以是对数简单线性回归,也可以是对数复回归。

❑ ❑\,❑ 非线性回归

非线性回归(non-linear regression),是回归函数关于未知回归系数具有非线性结构的回归。

❑ ❑\,❑ 对数几率回归

对数几率回归(Logistic Regression),又称 逻辑回归,是一种 对数几率模型(英语:Logit model,又译作逻辑模型、评定模型、分类评定模型)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。关于对数几率回归的更多讲解,详见 《繁凡的深度学习笔记》 第 3 章 分类问题与信息论基础 3.2 逻辑回归

❑ ❑\,❑ 自回归模型

自回归模型(Autoregressive model),简称AR模型,是统计上一种处理时间序列的方法,用同一变数例如 x {\displaystyle x}x 的之前各时期,也即 x 1 {\displaystyle x_{1}}x 1 ​ 至 x t − 1 {\displaystyle x_{t-1}}x t −1 ​ 来预测本期 x t {\displaystyle x_{t}}x t ​ 的表现,并假设它们为一线性关系。因为这是从回归分析中的线性回归发展而来,只是不用 x {\displaystyle x}x 预测 y {\displaystyle y}y ,而是 用x {\displaystyle x}x 预测x {\displaystyle x}x (自己);所以叫做 自回归

2.1 线性回归

我们在 话题 2中已经讲解过了什么是线性回归,我们继续深入探讨,考虑如何解决线性回归问题。

话题 3 :如何将线性回归模型模型化?

考虑一个实例:作为一个有志青年,我们想要预测未来的城市房价!我们希望可以根据房屋的面积和房龄来估算房屋的价格。为了开发一个能预测房价的模型,我们首先需要收集一个真实的数据集。这个数据集包括了房屋的销售价格、面积和房龄。在机器学习的术语中,通常将数据集称之为 训练数据集(training data set)或 训练集(training set)。其中数据集内的每行数据(这里就是与一次房屋交易相对应的各种数据)称为 样本(sample),或 数据点(data point)或 数据样本(data instance)。将我们想要预测的目标(这里显然是房屋的价格)称之为 标签(label)或 目标(target)。预测所依据的自变量(面积和房龄)称为 特征(feature)或 协变量(covariate)。

通常,我们使用 n n n 或者 m m m 来表示数据集中的样本数。对索引为 i i i 的样本,其输入表示为 x ( i ) = [ x 1 ( i ) , x 2 ( i ) ] T \boldsymbol {x}^{(i)} = [x_1^{(i)}, x_2^{(i)}]^{\mathrm{T}}x (i )=[x 1 (i )​,x 2 (i )​]T ,其对应的标签是 y ( i ) y^{(i)}y (i ) 。

这里线性回归的线性假设意味着目标(房价)可以表示为特征(面积和年龄)的加权和,例如以下公式:

[En]

The linear hypothesis of linear regression here means that the target (house price) can be expressed as a weighted sum of characteristics (area and age), such as the following formula:

p r i c e = w a r e a ⋅ a r e a + w a g e ⋅ a g e + b . (2.1) \mathrm{price} =w_{\mathrm{area}} \cdot \mathrm{area} +w_{\mathrm{age}} \cdot \mathrm{age} + b.\tag{2.1}price =w area ​⋅area +w age ​⋅age +b .(2.1 )

式中的 w a r e a w_{\mathrm{area}}w area ​​​ 和 w a g e w_{\mathrm{age}}w age ​​​ 称为 权重(weight), b b b​​ 称为 偏置(bias),或称为 偏移量(offset)、 截距(intercept)。

权重决定了每个特征对我们预测值的影响。偏置是指当所有特征都取值为 0 0 0 时,预测值应该为多少。如果没有偏置项,我们模型的表达能力将受到限制。 严格来说,上式是输入特征的一个 仿射变换(affine transformation)。仿射变换的特点是通过加权和对特征进行 线性变换(linear transformation),并通过偏置项来进行 平移(translation)。

至此问题就变为了:给定一个数据集,我们的目标是寻找模型的权重 w \boldsymbol w w​ 和偏置 b b b​ ,使得根据模型做出的预测大体符合数据里的真实价格。输出的预测值由输入特征通过 线性模型的仿射变换决定,仿射变换由所选权重和偏置确定。显然我们只需要求出符合实际情况的模型参数 w , b \boldsymbol w,b w ,b​,就可以得到一个可以大致预测房屋价格的线性模型。这种模型被发现与人类的神经元模型十分吻合,我们考虑从神经元模型的角度出发解决上面的问题。

2.2 神经元模型

话题 4 :什么是神经元与神经元模型?

神经元(Neuron),即 神经元细胞(Nerve Cell),是神经系统最基本的结构和功能单位。如图 2.1 所示,典型的生物神经元结构分为细胞体和突起两大部分。成年人大脑中包含了约 1000 亿个神经元,每个神经元通过树突获取输入信号,通过轴突传递输出信号,神经元之间相互连接构成了巨大的神经网络,从而形成了人脑的感知和意识基础。

图 2.1 神经元

在神经元中,树突中接收到来自其他神经元或视网膜等环境传感器的信息 x i x_i x i ​​​ 。该信息通过 突触权重 w i w_i w i ​​​ 来加权,以确定输入的影响(即通过设置突触权重的大小,使 w i w_i w i ​​​ 与 x i x_i x i ​​ 相乘 来 激活抑制该输入信息)。 来自多个源的加权输入以加权和 y = ∑ i x i w i + b \displaystyle y = \sum_i x_i w_i + b y =i ∑​x i ​w i ​+b​​ 的形式汇聚在细胞核中,然后将这些信息发送到轴突 y y y​​ 中进一步处理,通常会通过 σ ( y ) \sigma(y)σ(y )​​ 进行一些 非线性处理。之后,它要么到达目的地(例如肌肉),要么通过树突进入另一个神经元(一层又一层地组成 神经网络)。

考虑将生物神经元 (Neuron) 的模型抽象成具体的数学模型得到 神经元模型:对于神经元的输入向量 𝒙 = [ 𝑥 1 , 𝑥 2 , 𝑥 3 , … , 𝑥 𝑛 ] T 𝒙 = [𝑥_1, 𝑥_2, 𝑥_3, … , 𝑥_𝑛]^\mathrm{ T }x =[x 1 ​,x 2 ​,x 3 ​,…,x n ​]T,经过函数映射:𝑓 θ : 𝒙 → 𝑦 𝑓_{\theta}: 𝒙 → 𝑦f θ​:x →y 后得到输出 𝑦 𝑦y ,其中 θ {\theta}θ 为函数 𝑓 𝑓f 自身的参数。考虑一种简化的情况,即线性变换,对于两个列向量 𝒙 , 𝒘 𝒙,𝒘x ,w,我们希望可以计算得到类似神经元模型 y = ∑ i x i w i + b \displaystyle y = \sum_i x_i w_i + b y =i ∑​x i ​w i ​+b 的值,我们可以将其中一个列向量转置之后相乘:𝑓 ( 𝒙 ) = 𝒘 T 𝒙 + 𝑏 𝑓(𝒙) = 𝒘^\mathrm{ T } 𝒙 + 𝑏f (x )=w T x +b,展开为标量形式:

f ( x ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + ⋯ + w n x n + b (2.2) f(x) = w_1x_1 + w_2x_2 + w_3x_3 + \cdots + w_nx_n + b\tag{2.2}f (x )=w 1 ​x 1 ​+w 2 ​x 2 ​+w 3 ​x 3 ​+⋯+w n ​x n ​+b (2.2 )

上述公式如图2.2所示可直观显示:

[En]

The above formula can be visually shown as shown in figure 2.2:

图 2.2 单层神经元模型

参数 θ = 𝑤 1 , 𝑤 2 , 𝑤 3 , . . . , 𝑤 𝑛 , 𝑏 \theta= {𝑤_1, 𝑤_2, 𝑤_3, . . . , 𝑤_𝑛,𝑏}θ=w 1 ​,w 2 ​,w 3 ​,…,w n ​,b 确定了神经元的状态,通过固定 𝜃 参数即可确定此神经元的处理逻辑。当神经元输入节点数 𝑛 = 1 𝑛 = 1 n =1 也即单输入时,神经元数学模型可进一步简化为:

y = w x + b (2.3) y = wx + b\tag{2.3}y =w x +b (2.3 )
此时我们可以绘制出神经元的输出 𝑦 𝑦y​ 和输入 𝑥 𝑥x​ 的变化趋势,如图 2.3 所示,随着输入信号 𝑥 𝑥x​ 的增加,输出电平 𝑦 𝑦y​ 也随之线性增加,其中 𝑤 𝑤w​参数可以理解为直线的斜率 (Slope),b b b​ 参数为直线的偏置 (Bias)。

图 2.3 单输入神经元线性模型

我们知道 n + 1 n+1 n +1 个点确定 n n n 次项多项式,n + 1 n+1 n +1 个点确定 n n n 元一次方程(最小二乘法), 显然对于一个单输入向量,我们只需要观测得到两个不同数据点,就可求得单输入线性神经元模型的参数。同样的,对于 n n n 输入的现象神经元模型,只需要观测采样 n + 1 n + 1 n +1 组不同数据点即可得到所有参数,似乎就此线性神经元模型可以得到完美的解决。那么上述方法是否存在着什么问题呢?

话题 5 :什么是损失函数?为什么需要使用损失函数?;

考虑对于任何采样点,都有可能存在 观测误差。我们假设观测误差变量 ϵ \epsilon ϵ 属于均值为 μ \mu μ,方差为 σ 2 \sigma^{2}σ2 的正态分布 (NormalDistribution) 或高斯分布 (Gaussian Distribution):N ( μ , σ 2 ) \mathcal{N}\left(\mu, \sigma^{2}\right)N (μ,σ2 ),那么我们观测采样得到的样本符合:
y = w x + b + ϵ , ϵ ∼ N ( μ , σ 2 ) (2.4) y=w x+b+\epsilon, \epsilon \sim \mathcal{N}\left(\mu, \sigma^{2}\right)\tag{2.4}y =w x +b +ϵ,ϵ∼N (μ,σ2 )(2.4 )

正态分布的概率密度函数如下:

[En]

The probability density function of normal distribution is as follows:

p ( x ) = 1 2 π σ 2 exp ⁡ ( − 1 2 σ 2 ( x − μ ) 2 ) . (2.5) p(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{1}{2 \sigma^2} (x – \mu)^2\right).\tag{2.5}p (x )=2 πσ2 ​1 ​exp (−2 σ2 1 ​(x −μ)2 ).(2.5 )

我们发现,一旦引入观测误差,即使像线性模型一样简单,如果只对两个数据点进行采样,可能会带来较大的估计偏差。如图2.4所示,图中的数据点存在观测误差。如果基于蓝色矩形块的两个数据点进行估计,则计算出的蓝色虚线与实际橙色线之间存在较大偏差。

[En]

We find that once the observation error is introduced, even if it is as simple as a linear model, if only two data points are sampled, it may bring a large estimation deviation. As shown in figure 2.4, the data points in the figure have observation errors. If the estimation is based on two data points of the blue rectangular block, there is a large deviation between the calculated blue dashed line and the real orange line.

图 2.4 带观测误差的估计模型

为了减少观测误差引入的估计偏差,可以通过采样多组数据样本集合 𝔻 = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , … , ( x ( n ) , y ( n ) ) } 𝔻 = \left{\left(x^{(1)}, y^{(1)}\right),\left(x^{(2)}, y^{(2)}\right), \ldots,\left(x^{(n)}, y^{(n)}\right)\right}D ={(x (1 ),y (1 )),(x (2 ),y (2 )),…,(x (n ),y (n ))},然后找出一条 “最好” 的直线,使得它尽可能地让所有采样点到该直线的 误差 (Error) 或 损失 (Loss) 之和最小即可。

也就是说,由于观测误差 ϵ \epsilon ϵ 的存在,当我们采集了多个数据点 𝔻 𝔻D 时,可能不存在一条直线完美的穿过所有采样点。因此我们希望能找到一条比较 “好” 的位于采样点中间的直线,这个过程就叫做 拟合(fit)。

为了判断拟合线的好坏,需要确定拟合度的大小,因此人们提出了损失函数来衡量它。

[En]

In order to judge whether the fitted line is “good” or not, we need to determine a measure of the degree of fitting, so people put forward * loss function * to measure it.*

损失函数(loss function),又称 代价函数(cost function),是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的”风险”或”损失”的函数。在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。 损失函数 能够量化目标的 实际值预测值之间的差距。通常我们会选择非负数作为损失,且数值越小表示损失越小,完美预测时的损失为 0 0 0​ 。

话题 6 :回归问题中常用的损失函数有哪些?

回归问题中常用的损失函数有平方误差、均方根误差、平均绝对误差、平滑平均绝对误差之和等。

[En]

The commonly used loss functions in regression problems are * sum of square error, root mean square error, average absolute error, smooth average absolute error and so on.*

❑ ❑\,❑​ 均方误差 (Mean Squared Error, MSE)

首先一个很自然的想法就是,求出当前模型的所有采样点上的预测值 w x ( i ) + b w x^{(i)}+b w x (i )+b​ 与真实值 y ( i ) y^{(i)}y (i )​ 之间的差的平方和作为总误差 L \mathcal{L}L​​。当样本 i i i​ 的预测值为 y ^ ( i ) = w x ( i ) + b \hat{y}^{(i)}=w x^{(i)}+b y ^​(i )=w x (i )+b​ (通常使用 ” 尖角\hat 符号表示估计值、预测值),其相应的真实标签为 y ( i ) y^{(i)}y (i )​ 时,平方和误差可以定义为:
L ( w , b ) = 1 n ∑ i = 1 n ( y ^ ( i ) − y ( i ) ) 2 . (2.6) \mathcal{L}(\boldsymbol {w}, b) =\frac{1}{n} \sum_{i=1}^{n} \left(\hat{y}^{(i)} – y^{(i)}\right)^2.\tag{2.6}L (w ,b )=n 1 ​i =1 ∑n ​(y ^​(i )−y (i ))2 .(2.6 )

在训练模型时,我们希望搜索到一组参数( w ∗ , b ∗ \boldsymbol {w}^ , b^w ∗,b ∗ ),这组参数能最小化在所有训练样本上的总损失 L \mathcal{L}L,其对应的直线就是我们要寻找的最优直线:

w ∗ , b ∗ = argmin ⁡ w , b 1 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) 2 (2.7) \boldsymbol {w}^{}, b^{}=\underset{\boldsymbol {w}, b}{\operatorname{argmin}} \frac{1}{n} \sum_{i=1}^{n} \left(w x^{(i)}+b-y^{(i)}\right)^{2}\tag{2.7}w ∗,b ∗=w ,b argmin ​n 1 ​i =1 ∑n ​(w x (i )+b −y (i ))2 (2.7 )

其中 𝑛 𝑛n 表示采样点的个数。这种误差计算方法称为均方误差 (Mean Squared Error) 简称 MSE

即:
MSE = 1 n ∑ i = 1 n ( y ^ ( i ) − y ( i ) ) 2 (2.8) \text{MSE}=\dfrac 1 n \sum^{n}{i=1}(\hat y^{(i)}-y^{(i)})^2\tag{2.8}MSE =n 1 ​i =1 ∑n ​(y ^​(i )−y (i ))2 (2.8 )
❑ ❑\,❑ 均方根误差(Root Mean Square Error, RMSE)
RMSE = 1 n ∑ i = 1 n ( y ^ ( i ) − y ( i ) ) 2 (2.9) \text{RMSE}=\sqrt{\dfrac {1} {n} \sum
{i=1}^n(\hat y^{(i)}-y^{(i)})^2}\tag{2.9}RMSE =n 1 ​i =1 ∑n ​(y ^​(i )−y (i ))2 ​(2.9 )
均方根误差,也叫回归系统的拟合标准差,是 MSE \text{MSE}MSE 的平方根,容易受异常点(误差很大的点)影响,易朝减小异常点误差的方向行进而牺牲总体性能。

❑ ❑\,❑ 平均绝对误差(Mean Absolute Error, MAE)
MAE = 1 n ∑ i = 1 n ∣ y ^ ( i ) − y ( i ) ∣ (2.10) \text{MAE}=\frac 1 n \sum_{i=1}^n\mid\,\hat y^{(i)}-y^{(i)}\,\mid\tag{2.10}MAE =n 1 ​i =1 ∑n ​∣y ^​(i )−y (i )∣(2.10 )
由于导数不变,绝对误差的平均值不利于梯度下降法的更新。并且该函数在0 000处不可微。

[En]

The average value of the absolute error is not conducive to the updating of the gradient descent method because the derivative is constant. And the function is not differentiable at 0 000.

❑ ❑\,❑ 平滑平均绝对误差(HuberLoss)
L δ ( y i ) = { 1 2 ( y ^ ( i ) − y ( i ) ) 2 , ∣ y ^ ( i ) − y ( i ) ∣ ≤ δ δ ∣ y ^ ( i ) − y ( i ) ∣ − 1 2 δ 2 , otherwise (2.11) L_{\delta}\left(y_{i}\right)=\left{\begin{array}{ll}\dfrac{1}{2}\left(\hat{y}^{(i)}-y^{(i)}\right)^{2}, & \left|\hat{y}^{(i)}-y^{(i)}\right| \leq \delta \\delta\left|\hat{y}^{(i)}-y^{(i)}\right|-\dfrac{1}{2} \delta^{2}, & \text { otherwise }\end{array}\right.\tag{2.11}L δ​(y i ​)=⎩⎨⎧​2 1 ​(y ^​(i )−y (i ))2 ,δ​y ^​(i )−y (i )​−2 1 ​δ2 ,​​y ^​(i )−y (i )​≤δotherwise ​(2.11 )
Huber Loss 是一个用于回归问题的带参损失函数,结合了 MSE \text{MSE}MSE 和 MAE \text{MAE}MAE 的优点, 优点是能增强 MSE \text{MSE}MSE 对离群点的鲁棒性,对异常点不会特别敏感同时在 0 0 0 处也可微。当预测偏差小于 δ \delta δ 时,它采用平方误差,当预测偏差大于 δ \delta δ 时,采用的线性误差。也正因如此,我们需要不断地调整超参数 δ \delta δ ,也因此带来一些不便。

回到问题本身,我们这里选择均方差作为损失函数解决线性神经元模型问题。我们需要找出最优参数 (Optimal Parameter) w ∗ , b ∗ \boldsymbol {w}^{}, b^{}w ∗,b ∗ ,使得输入和输出满足线性关系 y ( i ) = w x ( i ) + b , i ∈ [ 1 , n ] y^{(i)}=w x^{(i)}+b, i \in[1, n]y (i )=w x (i )+b ,i ∈[1 ,n ]。但是由于观测误差 ϵ \epsilon ϵ 的存在,需要通过采样足够多组的数据样本组成的数据集 (Dataset):𝔻 = ( 𝑥 ( 1 ) , 𝑦 ( 1 ) ) , ( 𝑥 ( 2 ) , 𝑦 ( 2 ) ) , … , ( 𝑥 ( 𝑛 ) , 𝑦 ( 𝑛 ) ) 𝔻 ={(𝑥(1),𝑦(1)), (𝑥(2),𝑦(2)),… , (𝑥(𝑛), 𝑦(𝑛))}D =(x (1 ),y (1 )),(x (2 ),y (2 )),…,(x (n ),y (n )),来找到一组最优的参数 𝒘 ∗ , b ∗ 𝒘^{}, b^{}w ∗,b ∗ 使得均方差 L = 1 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) 2 \mathcal{L} =\displaystyle \frac{1}{n} \sum_{i=1}^{n} \left(w x^{(i)}+b-y^{(i)}\right)^{2}L =n 1 ​i =1 ∑n ​(w x (i )+b −y (i ))2 最小即可。

话题 7 :深度学习为什么需要使用优化算法

经过上面内容的学习,我们对深度学习进行一次简单的总结。在传统的监督机器学习中,往往会给出训练数据集 D = { ( x 1 , y 1 ) , … , ( x N , y N ) } \mathcal D = {(x_1, y_1),…,(x_N, y_N)}D ={(x 1 ​,y 1 ​),…,(x N ​,y N ​)},如 (输入图像,输出标签) 对。我们希望训练一个预测模型 y ^ = f θ ( x ) \hat{y}=f_{\theta }\left ( x \right )y ^​=f θ​(x ) ,参数化 θ θθ ,通过求解下式得到参数的全局最优解:
θ ∗ = arg ⁡ min ⁡ θ L ( D ; θ , ω ) (2.12) \theta^{*}=\arg \min {\theta} \mathcal{L}(\mathcal{D} ; \theta, \omega)\tag{2.12}θ∗=ar g θmin ​L (D ;θ,ω)(2.12 )
其中 L \mathcal L L 是上一小节介绍的用于测量真实标签与 f θ ( ⋅ ) f
{\theta}(\cdot)f θ​(⋅) 预测的标签之间的误差的损失函数。 我们通过评估具有已知标签的多个测试点来测量泛化能力。

如何求解最优参数是我们需要解决的问题。暴力搜索最优参数所带来的时间和空间复杂性显然是不可接受的,因此人们发明了许多优化算法来解决这些问题。优化算法的作用是通过改进训练方法来优化损失函数,加快收敛速度,缩短训练时间,得到更好的损失函数。

[En]

How to solve the optimal parameters is a problem that we need to solve. The time and space complexity caused by brute force searching for the optimal parameters is obviously unacceptable, so people have invented numerous optimization algorithms to solve them. The function of the optimization algorithm is to optimize the loss function by improving the training method, which can accelerate the convergence speed, shorten the training time, and obtain a better loss function.

话题 8 :有哪些常用的优化算法?

深度学习中的优化算法有很多,例如梯度下降算法、动量法、AdaGrad算法、RMSProp算法、Adadelta算法、Adam算法等。我们这里着重介绍最简单的一种优化方法: 梯度下降算法,以及另一种可以高效解决线性回归问题的经典算法: 最小二乘法。其余优化算法详解详见 《繁凡的深度学习笔记》第 7 章 过拟合、优化算法与参数优化 7.9 优化算法

话题 9 :什么是梯度下降算法?

梯度下降算法(Gradient Descent)是神经网络训练中最常用的优化算法,配合强大的图形处理芯片 GPU 的并行加速能力,非常适合优化海量数据的神经网络模型,自然也适合优化我们这里的神经元线性模型。这里先简单地应用梯度下降算法,以及如何使用它解决神经元模型预测的优化问题。

我们在高中都学过 导数 (Derivative) 的概念,如果要求解一个函数的极大、极小值,可以简单地令导数函数为 0 0 0​​​​​​​​​​,求出对应的自变量点 (称为驻点) ,再检验驻点类型即可。以函数 𝑓 ( 𝑥 ) = x 2 sin ⁡ ( 𝑥 ) 𝑓(𝑥) = x^2 \sin(𝑥)f (x )=x 2 sin (x )​​​​​​​​​​ 为例,我们绘制出函数及其导数在 𝑥 ∈ [ − 1 , 1 ] 𝑥\in [−1 ,1]x ∈[−1 ,1 ]​​​​​​​​​​ 的区间曲线,其中蓝色实线为 𝑓 ( 𝑥 ) 𝑓(𝑥)f (x )​​​​​​​​​​,黄色虚线为 d f ( x ) d x \dfrac{\mathrm{d} f(x)}{\mathrm{d} x}d x d f (x )​​​​​​​​​​​。可以看出,函数导数为 0 0 0​​​​​​​​​​ 的点即为 𝑓 ( 𝑥 ) 𝑓(𝑥)f (x )​​​​​​​​​​ 的 临界点(critical point)或 驻点(stationary point),函数的极大值和极小值点均出现在驻点中。

图 2.5 函数及其导数

导数 f ′ ( x ) f'(x)f ′(x ) 代表 f ( x ) f(x)f (x ) 在点 x x x 处的斜率。换句话说,它表明如何缩放输入的小变化才能在输出获得相应的变化:f ( x + ϵ ) ≈ f ( x ) + ϵ f ′ ( x ) f(x + ϵ) ≈ f(x) + ϵf'(x)f (x +ϵ)≈f (x )+ϵf ′(x )。因此导数对于最小化一个函数很有用,因为它告诉我们如何更改 x x x 来略微地改善 y y y。例如,我们知道对于足够小的 ϵ ϵϵ 来说,f ( x − ϵ s i g n ( f ′ ( x ) ) ) f(x − ϵsign(f′(x)))f (x −ϵs i g n (f ′(x ))) 是比 f ( x ) f(x)f (x ) 小的。因此我们可以将 x x x​ 往导数的反方向移动一小步来减小 f ( x ) f(x)f (x )。这种技术被称为 梯度下降(gradient descent)。

图 2.6 梯度下降。梯度下降算法如何使用函数导数的示意图,即沿着函数的下坡方向(导数反方向)直到最小。[《Deep Learning》]

函数的梯度(Gradient)定义为函数对各个自变量的 偏导数(Partial Derivative)组成的向量。考虑 3 3 3​​​​​​​​​​​​​ 维函数 𝑧 = 𝑓 ( 𝑥 , 𝑦 ) 𝑧 = 𝑓(𝑥, 𝑦)z =f (x ,y )​​​​​​​​​​​​​,函数对自变量 𝑥 𝑥x​​​​​​​​​​​​​ 的偏导数记为 ∂ z ∂ x \dfrac{\partial z}{\partial x}∂x ∂z ​​​​​​​​​​​​​​ 可以衡量点 x x x​​​​​​​​​​​​ 处只有 x x x​​​​​​​​​​​ 增加时 f ( x ) f(x)f (x )​​​​​​​​​​ 如何变化。 梯度是相对一个向量求导的导数: f f f​​​​​​​​ 的导数是包含所有偏导数的向量,记为 ∇ x f ( x ) \nabla_x f(x)∇x ​f (x )​​​​​​​。函数对自变量 y y y 的偏导数记为 ∂ z ∂ y \dfrac{\partial z}{\partial y}∂y ∂z ​​​​​​​​​​​​​​ ,则梯度 ∇ f \nabla f ∇f​​​​​​​​​​​​​ 为向量 ( ∂ z ∂ x , ∂ z ∂ y ) \left(\dfrac{\partial z}{\partial x}, \dfrac{\partial z}{\partial y}\right)(∂x ∂z ​,∂y ∂z ​)​​​​​​​​​​​​​。对于多维的情况下,梯度的第 i i i​​​​ 个元素是 f f f​​​ 关于 x i x_i x i ​​​ 的偏导数。此时的临界点是梯度中所有元素都为零的点。我们通过一个具体的函数来感受梯度的性质。

如图 2.2.7 所示,f ( x , y ) = − ( cos ⁡ 2 x + cos ⁡ 2 y ) 2 f(x, y)=-\left(\cos ^{2} x+\cos ^{2} y\right)^{2}f (x ,y )=−(cos 2 x +cos 2 y )2 ,图中 𝑥 𝑦 𝑥𝑦x y 平面的红色箭头的长度表示梯度向量的模,箭头的方向表示梯度向量的方向。可以看到,箭头的方向总是指向当前位置函数值增速最大的方向,函数曲面越陡峭,箭头的长度也就越长,梯度的模也越大。

图 2.7 函数及其梯度向量

通过上面的例子,我们能直观地感受到,函数在各处的梯度方向 ∇ 𝑓 ∇𝑓∇f​ 总是指向函数值增大的方向,那么梯度的反方向 − ∇ 𝑓 −∇𝑓−∇f​​ 应指向函数值减少的方向。

定义 ∇ x f ( x ) \nabla_{\boldsymbol{x}} f(\boldsymbol{x})∇x ​f (x ) 以 n × 1 n\times 1 n ×1 实向量 x x x 为变元的实标量函数 f ( x ) f(x)f (x ) 相对于 x x x 的梯度,是一个 n × 1 n\times 1 n ×1 的列向量,定义为:

∇ x f ( x ) = def [ ∂ f ( x ) ∂ x 1 , ∂ f ( x ) ∂ x 2 , ⋯ , ∂ f ( x ) ∂ x n ] T = ∂ f ( x ) ∂ x \nabla_{\boldsymbol{x}} f(\boldsymbol{x}) \stackrel{\text { def }}{=}\left[\frac{\partial f(\boldsymbol{x})}{\partial x_{1}}, \frac{\partial f(\boldsymbol{x})}{\partial x_{2}}, \cdots, \frac{\partial f(\boldsymbol{x})}{\partial x_{n}}\right]^{T}=\frac{\partial f(\boldsymbol{x})}{\partial \boldsymbol{x}}∇x ​f (x )=def [∂x 1 ​∂f (x )​,∂x 2 ​∂f (x )​,⋯,∂x n ​∂f (x )​]T =∂x ∂f (x )​

我们规定在 u \boldsymbol u u(单位向量)方向的 方向导数(directional derivative)是函数 f f f 在 u \boldsymbol u u 方向的斜率。也即方向导数是函数 f ( x + α u ) f(x + \alpha \boldsymbol u)f (x +αu ) 关于 α \alpha α 的导数(在 α = 0 \alpha = 0 α=0 时取得)。使用链式法则,我们可以发现当 α = 0 \alpha = 0 α=0 时,∂ ∂ α f ( x + α u ) = u ⊤ ∇ x f ( x ) \dfrac{\partial}{\partial \alpha} f(\boldsymbol{x}+\alpha \boldsymbol{u})=\boldsymbol{u}^{\top} \nabla_{x} f(\boldsymbol{x})∂α∂​f (x +αu )=u ⊤∇x ​f (x )。

为了最小化 f f f,我们希望找到使 f f f 下降得最快的方向。计算方向导数:
min ⁡ u , u ⊤ u = 1 u ⊤ ∇ x f ( x ) = min ⁡ u , u ⊤ u = 1 ∥ u ∥ 2 ∥ ∇ x f ( x ) ∥ 2 cos ⁡ θ (2.13) \begin{aligned}\min {\boldsymbol u,\boldsymbol u^{\top} u=1} \boldsymbol{u}^{\top} \nabla{x} f(\boldsymbol{x}) =\min {u, \boldsymbol{u}^{\top} \boldsymbol{u}=1}\|\boldsymbol{u}\|{2}\left\|\nabla_{\boldsymbol{x}} f(\boldsymbol{x})\right\|{2} \cos \theta\end{aligned}\tag{2.13}u ,u ⊤u =1 min ​u ⊤∇x ​f (x )=u ,u ⊤u =1 min ​∥u ∥2 ​∥∇x ​f (x )∥2 ​cos θ​(2.13 )
其中 θ \theta θ​​​​​​​​​​ 是 u \boldsymbol u u​​​​​​​​​ 与梯度的夹角。将 ∥ u ∥ 2 = 1 \|\boldsymbol u\|_2 = 1 ∥u ∥2 ​=1​​​​​​​​ 代入,并忽略与 u \boldsymbol u u​​​​​​​​ 无关的项,就能简化得到 min ⁡ u cos ⁡ θ \displaystyle \min
{\boldsymbol u}\cos θu min ​cos θ​​​​​​​。这在 u \boldsymbol u u​​​​​​ 与梯度方向相反时取得最小。换句话说,梯度向量指向上坡,负梯度向量指向下坡。我们在负梯度方向上移动可以减小 f f f​​​​​ 。这被称为 最速下降法(method of steepest descent)或 梯度下降(gradient descent)。

综上所述我们按照
x ′ = x − η ⋅ ∇ x f (2.14) x^{\prime}=x-\eta \cdot \nabla_x f\tag{2.14}x ′=x −η⋅∇x ​f (2.14 )

来迭代更新 x ′ x’x ′​ ,即可获得越来越小的函数值,其中 η \eta η​ 是一个确定步长大小的正标量,用来缩放梯度向量,被称为 学习率(learning rate)。

学习率决定了目标函数 能否收敛到局部最小值,以及 何时收敛到最小值。 学习率 η \eta η 可由算法设计者设置。一般设置为某较小的值,如 0.01 , 0.001 0.01,0.001 0.01 ,0.001 等。 请注意,如果我们使用的学习率太小,将导致 x x x 的更新非常缓慢,需要更多的迭代。

例如,考虑同一优化问题中 η = 0.05 \eta = 0.05 η=0.05​ 的进度。 如图 2.8 所示,尽管经过了 10 10 10​ 次训练,我们仍然离最优解很远。

图 2.8 学习率过小导致训练缓慢

相反,如果我们使用过高的学习率,∣ η f ′ ( x ) ∣ \left|\eta f'(x)\right|∣ηf ′(x )∣​对于一阶泰勒展开式可能太大。在这种情况下,x x x​ 的迭代不能保证降低 f ( x ) f(x)f (x )​的值。 例如,当学习率为 η = 1.1 \eta=1.1 η=1.1​ 时,x x x​ 超出了最优解 x = 0 x=0 x =0​ 并逐渐发散。

图 2.9 学习率过大导致训练不稳定

我们可以通过几种不同的方式选择 η \eta η。普遍的方式是选择一个小常数。有时我们通过计算,选择使方向导数消失的步长。还有一种方法是根据几个 η \eta η 计算 f ( x − η ∇ x f ( x ) ) f(x − \eta \nabla xf(x))f (x −η∇x f (x )),并选择其中能产生最小目标函数值的 η \eta η 。这种策略被称为 线搜索 (line search)。

对于一个一维函数而言,选择好学习率 η \eta η 之后,向量形式的 x ′ = x − η ⋅ ∇ f x^{\prime}=x-\eta \cdot \nabla f x ′=x −η⋅∇f​ 就退化成了标量形式:
x ′ = x − η ⋅ d y d x (2.15) x^{\prime}=x-\eta \cdot \frac{\mathrm{d} y}{\mathrm{d} x}\tag{2.15}x ′=x −η⋅d x d y ​(2.15 )

通过上式迭代更新 x ′ x’x ′​​​ 若干次,这样得到的 𝑥 ′ 𝑥’x ′​​​ 处的函数值 y ′ y’y ′​​​,总是更有可能比在 x x x​​ ​处的函数值 y y y​​​ 小。

通过上面公式优化参数的方法称为 梯度下降算法,它通过循环计算函数的梯度 ∇ 𝑓 ∇𝑓∇f​ 并更新待优化参数 θ \theta θ​,从而得到函数 f f f​ 获得极小值时参数 θ \theta θ​ 的最优数值解。需要注意的是,在深度学习中,一般 𝒙 𝒙x​ 表示模型输入,模型的待优化参数一般用 θ , 𝑤 , 𝑏 \theta,𝑤,𝑏θ,w ,b​ 等符号表示。

现在我们将应用梯度下降算法来求解 w ∗ , b ∗ \boldsymbol w^{}, b^{}w ∗,b ∗​ 参数。这里要最小化的是均方差误差函数 L \mathcal{L}L​:
L = 1 n ∑ i = 0 n ( w x ( i ) + b − y ( i ) ) 2 (2.16) \mathcal{L}=\frac{1}{n} \sum_{i=0}^{n}\left(w x^{(i)}+b-y^{(i)}\right)^{2}\tag{2.16}L =n 1 ​i =0 ∑n ​(w x (i )+b −y (i ))2 (2.16 )

需要优化的模型参数是 w \boldsymbol w w 和 b b b ,因此我们按照
w ′ = w − η ∂ L ∂ w (2.17) w^{\prime}=w-\eta \frac{\partial \mathcal{L}}{\partial w}\tag{2.17}w ′=w −η∂w ∂L ​(2.17 )

b ′ = b − η ∂ L ∂ b (2.18) b^{\prime}=b-\eta \frac{\partial \mathcal{L}}{\partial b}\tag{2.18}b ′=b −η∂b ∂L ​(2.18 )

只需以循环方式更新参数即可。

[En]

Simply update the parameters in a cyclic manner.

话题 10 :梯度下降算法为什么可以优化目标函数?(选学);

为什么梯度下降算法可以优化目标函数?这里有一个简单的证据:

[En]

Why can the gradient descent algorithm optimize the objective function? Here is a simple proof:

考虑一类连续可微实值函数 f : R → R f: \R \rightarrow \mathbb{R}f :R →R, 利用泰勒展开,我们可以得到
f ( x + ϵ ) = f ( x ) + ϵ f ′ ( x ) + O ( ϵ 2 ) . (2.19) f(x + \epsilon) = f(x) + \epsilon f'(x) + \mathcal{O}(\epsilon^2).\tag{2.19}f (x +ϵ)=f (x )+ϵf ′(x )+O (ϵ2 ).(2.19 )

即在一阶近似中,f ( x + ϵ ) f(x+\epsilon)f (x +ϵ) 可通过 x x x 处的函数值 f ( x ) f(x)f (x ) 和一阶导数 f ′ ( x ) f'(x)f ′(x ) 得出。 我们可以假设在负梯度方向上移动的 ϵ \epsilon ϵ 会减少 f f f 。 为了简单起见,我们选择固定步长 η > 0 \eta > 0 η>0 ,然后取 ϵ = − η f ′ ( x ) \epsilon = -\eta f'(x)ϵ=−ηf ′(x ) 。 将其代入泰勒展开式我们可以得到
f ( x − η f ′ ( x ) ) = f ( x ) − η f ′ 2 ( x ) + O ( η 2 f ′ 2 ( x ) ) . (2.20) f(x – \eta f'(x)) = f(x) – \eta f’^2(x) + \mathcal{O}(\eta^2 f’^2(x)).\tag{2.20}f (x −ηf ′(x ))=f (x )−ηf ′2 (x )+O (η2 f ′2 (x )).(2.20 )

如果其导数 f ′ ( x ) ≠ 0 f'(x) \neq 0 f ′(x )=0 没有消失,我们就能继续展开,这是因为 η f ′ 2 ( x ) > 0 \eta f’^2(x)>0 ηf ′2 (x )>0。 此外,我们总是可以令 η \eta η 小到足以使高阶项变得不相关。 因此,
f ( x − η f ′ ( x ) ) ⪅ f ( x ) . (2.21) f(x – \eta f'(x)) \lessapprox f(x).\tag{2.21}f (x −ηf ′(x ))⪅f (x ).(2.21 )

这意味着,如果我们使用
x ← x − η f ′ ( x ) (2.22) x \leftarrow x – \eta f'(x)\tag{2.22}x ←x −ηf ′(x )(2.22 )

来迭代 x x x​​​​,函数 f ( x ) f(x)f (x )​​​​ 的值可能会下降。 因此,在梯度下降中,我们首先选择初始值 x x x​​​​ 和常数 η > 0 \eta > 0 η>0​​​​ , 然后使用它们连续迭代 x x x​​​​​ ,直到停止条件达成,达到全局最小值(全局最优解)或局部最小值后停止。表现在图像上如图 2.10 所示:

图 2.10 梯度下降示意图

❑ ❑\,❑​​ 局部最优解

请注意,我们刚才提到了全局最优解和局部最优解的概念,那么它们分别是什么意思?全局最优解可以理解为我们需要解决的问题,它在全范围内是最优的。那么局部最优解是指问题的解在一定范围或区域内是最优的,或者解决问题或实现目标的手段在一定范围或极限内是最优的。显然,我们更愿意得到全局最优解,而不是局部最优解。

[En]

Notice that we just mentioned the concept of global optimal solution and local optimal solution, so what do they mean respectively? The global optimal solution can be understood as the problem we need to solve, which is optimal in the full range. Then the local optimal solution means that the solution of a problem is optimal in a certain range or region, or the means to solve the problem or achieve the goal is optimal in a certain range or limit. We obviously prefer to get the global optimal solution rather than the local optimal solution.

图2.11 近似最小化。当存在多个局部极小点或平坦区域时,优化算法可能无法找到全局最小点。 在深度学习的背景下,即使找到的解不是真正最小的,但只要它们对应于代价函数显著低的值,我 们通常就能接受这样的解。[《Deep Learning》]

在梯度下降的过程中,如果落入局部最优解之中,将会陷入其中无法脱出。根据上图我们可以很清晰地发现,局部最优解处正是 f ′ ( x ) = 0 f'(x) = 0 f ′(x )=0​​​ 的临界点,此时的导数无法提供往哪个方向移动的信息。一个 局部极小点(local minimum)意味着这个点的 f ( x ) f(x)f (x )​​​ 小于所有邻近点,因此不可能通过移动无穷小的步长来减小 f ( x ) f(x)f (x )​​​。一个 局部极大点(local maximum)意味着这个点的 f ( x ) f(x)f (x )​​​ 大于所有邻近点,因此不可能通过移动无穷小的步长来增大 f ( x ) f(x)f (x )​​​​。更可怕的是,有些临界点既不是最小点也不是最大点,由于这个临界点特殊的地形,同样会导致梯度下降算法被困在其中,这些点被称为 鞍点(saddle point)。各种临界点如下图所示:

图 2.12 临界点的类型。一维情况下,三种临界点的示例。临界点是斜率为零的点。这样的点可以 是 局部极小点(local minimum),其值低于相邻点; 局部极大点(local maximum),其值高于相 邻点; 或鞍点,同时存在更高和更低的相邻点。[《Deep Learning》]

话题 11 :训练过程中如何避免陷入局部最优解?如何逃离鞍点?

我们在训练的过程中,肯定想要避免陷入局部最优解,及时逃离鞍点。对于梯度下降算法而言,可以通过自适应学习率、动量等方法进行优化,进而衍生出了各种优化算法如:Adagrad、RMSprop、stochastic GD(SGD)等方法。他们逃离鞍点的效果如下图所示:

图 2.13 优化算法在遇到鞍点处的表现

我们将在 《繁凡的深度学习笔记》第 7 章 过拟合、优化算法与参数优化 7.9 优化算法 中对这些拓展的优化算法进行进一步的深入探讨。

我们将在 《繁凡的深度学习笔记》第 7 章 过拟合、优化算法与参数优化 7.9 优化算法 中更进一步地深入探讨梯度下降算法,并对Jacobian 和 Hessian 矩阵进行详细讲解。

话题 12 : 趣味话题:有时候我们没办法直接计算梯度该怎么办呢?可以尝试估计梯度大小吗?- 有限差分法与对称导数法(选学)

❑ ❑\,❑ ​有限差分法

在数学中, 有限差分法finite-difference methods,FDM),是一种微分方程数值方法,是通过有限差分来近似导数,从而寻求微分方程的近似解。有时我们不能直接获取梯度值,就可以使用有限差分法,根据导数的定义,取极限的方法来获得对梯度的估计。

❑ ❑\,❑ 有限差分法的推导

首先,假设近似函数的所有导数都具有良好的性质。根据泰勒定理,可以形成以下泰勒展开式:

[En]

First of all, it is assumed that all the derivatives of the approximate function have good properties. according to Taylor’s theorem, the following Taylor expansions can be formed:

f ( x 0 + h ) = f ( x 0 ) + f ′ ( x 0 ) 1 ! h + f ( 2 ) ( x 0 ) 2 ! h 2 + ⋯ + f ( n ) ( x 0 ) n ! h n + R n ( x ) , (2.23) f(x_{0}+h)=f(x_{0})+{\frac {f'(x_{0})}{1!}}h+{\frac {f^{{(2)}}(x_{0})}{2!}}h^{2}+\cdots +{\frac {f^{{(n)}}(x_{0})}{n!}}h^{n}+R_{n}(x),\tag{2.23}f (x 0 ​+h )=f (x 0 ​)+1 !f ′(x 0 ​)​h +2 !f (2 )(x 0 ​)​h 2 +⋯+n !f (n )(x 0 ​)​h n +R n ​(x ),(2.23 )

其中 n ! n!n !​​​​​​ 表示是 n n n​​​ 的阶乘,R n ( x ) Rn(x)R n (x )​ 为余数,表示泰勒多项式和原函数之间的差。可以推导函数 f f f 一阶导数的近似值:
f ( x 0 + h ) = f ( x 0 ) + f ′ ( x 0 ) h + R 1 ( x ) , (2.24) f(x_{0}+h)=f(x_{0})+f'(x_{0})h+R_{1}(x),\tag{2.24}f (x 0 ​+h )=f (x 0 ​)+f ′(x 0 ​)h +R 1 ​(x ),(2.24 )
设定 x 0 = a x_0=a x 0 ​=a,可得:
f ( a + h ) = f ( a ) + f ′ ( a ) h + R 1 ( x ) , (2.25) f(a+h)=f(a)+f'(a)h+R_{1}(x),\tag{2.25}f (a +h )=f (a )+f ′(a )h +R 1 ​(x ),(2.25 )
除以 h h h 可得:
f ( a + h ) h = f ( a ) h + f ′ ( a ) + R 1 ( x ) h (2.26) {f(a+h) \over h}={f(a) \over h}+f'(a)+{R_{1}(x) \over h}\tag{2.26}h f (a +h )​=h f (a )​+f ′(a )+h R 1 ​(x )​(2.26 )
求解f ′ ( a ) f'(a)f ′(a ):
f ′ ( a ) = f ( a + h ) − f ( a ) h − R 1 ( x ) h (2.27) f'(a)={f(a+h)-f(a) \over h}-{R_{1}(x) \over h}\tag{2.27}f ′(a )=h f (a +h )−f (a )​−h R 1 ​(x )​(2.27 )
假设 R 1 ( x ) {\displaystyle R_{1}(x)}R 1 ​(x ) 相当小,因此可以将 “f” 的一阶导数近似为:
f ′ ( a ) ≈ f ( a + h ) − f ( a ) h . (2.28) f'(a)\approx {f(a+h)-f(a) \over h}.\tag{2.28}f ′(a )≈h f (a +h )−f (a )​.(2.28 )
❑ ❑\,❑ 对称导数

在数学中, 对称导数symmetric derivative)是对普通导数的推广。它被定义为:
lim ⁡ h → 0 f ( x + h ) − f ( x h ) 2 h . (2.29) {\displaystyle \lim _{h\to 0}{\frac {f(x+h)-f(xh)}{2h}}.}\tag{2.29}h →0 lim ​2 h f (x +h )−f (x h )​.(2.29 )
极限下的表达式有时称为 对称差商symmetric difference quotient.)。如果函数的对称导数存在于该点, 则称该函数在点 x x x​ 处 对称可微。 如果一个函数在一点上是可微的(在通常意义上),那么它也是对称可微的,但反之则不成立。

❑ ❑\,❑ ​二阶对称导数

二阶对称导数定义为
lim ⁡ h → 0 f ( x + h ) − 2 f ( x ) + f ( x h ) h 2 . (2.30) {\displaystyle \lim {h\to 0}{\frac {f(x+h)-2f(x)+f(xh)}{h^{2}}}.}\tag{2.30}h →0 lim ​h 2 f (x +h )−2 f (x )+f (x h )​.(2.30 )
如果存在(通常的)二阶导数,则二阶对称导数存在并且等于它。然而,即使(普通)二阶导数不存在,二阶对称导数也可能存在。例如,考虑符号函数 sgn ⁡ ( x ) {\displaystyle \operatorname {sgn}(x)}sgn (x ),其定义为
sgn ⁡ ( x ) = { − 1 if x < 0 , 0 if x = 0 , 1 if x > 0. (2.31) {\displaystyle \operatorname {sgn}(x)={\begin{cases}-1&{\text{if }}x sgn (x )=⎩⎨⎧​−1 0 1 ​if x <0 ,if x =0 ,if x >0.​(2.31 )
符号函数在零处不连续,因此对于 x = 0 {\displaystyle x=0}x =0 不存在。但是二阶对称导数存在于 x = 0 {\displaystyle x=0}x =0 :
lim ⁡ h → 0 sgn ⁡ ( 0 + h ) − 2 sgn ⁡ ( 0 ) + sgn ⁡ ( 0 − h ) h 2 = lim ⁡ h → 0 sgn ⁡ ( h ) − 2 ⋅ 0 + ( − sgn ⁡ ( h ) ) h 2 = lim ⁡ h → 0 0 h 2 = 0. (2.32) {\displaystyle \lim
{h\to 0}{\frac {\operatorname {sgn}(0+h)-2\operatorname {sgn}(0)+\operatorname {sgn}(0-h)}{h ^{2}}}=\lim {h\to 0}{\frac {\operatorname {sgn}(h)-2\cdot 0+(-\operatorname {sgn}(h))}{h^{ 2}}}=\lim {h\to 0}{\frac {0}{h^{2}}}=0.}\tag{2.32}h →0 lim ​h 2 sgn (0 +h )−2 sgn (0 )+sgn (0 −h )​=h →0 lim ​h 2 sgn (h )−2 ⋅0 +(−sgn (h ))​=h →0 lim ​h 2 0 ​=0.(2.32 )

❑ ❑\,❑ 估计梯度

在论文 CCS 2017 ZOO: Zeroth Order Optimization Based Black-box Attacks to Deep Neural Networks without Training Substitute Models[14]中,对于待攻击的黑盒模型,无法获得被攻击模型的损失函数的梯度 ∇ x L ( x , y ) \nabla_xL(x,y)∇x ​L (x ,y ) ,作者提出可以使用有限差分法来估计梯度。

首先我们先对输入 x x x​​​ 进行扰动:x = x + h × e x=x+h\times e x =x +h ×e​​​,其中常量 h = 0.0001 h=0.0001 h =0.0001​​​。 e e e​​​ 是标准单位向量。记模型的输出为 f ( x ) f(x)f (x ) ,文中利用对称差商得到梯度的估计值:
g ^ i : = ∂ f ( x ) ∂ x i ≈ f ( x + h e i ) − f ( x − h e i ) 2 h (2.33) \hat{g}{i}:=\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}{i}} \approx \frac{f\left(\mathbf{x}+h \mathbf{e}{i}\right)-f\left(\mathbf{x}-h \mathbf{e}{i}\right)}{2 h }\tag{2.33}g ^​i ​:=∂x i ​∂f (x )​≈2 h f (x +h e i ​)−f (x −h e i ​)​(2.33 )
添加一条查询后,可以得到二次查询信息:

[En]

After adding one query, you can get the second-order information:

h ^ i : = ∂ 2 f ( x ) ∂ x i i 2 ≈ f ( x + h e i ) − 2 f ( x ) + f ( x − h e i ) h 2 (2.34) \hat{h}{i}:=\frac{\partial^{2} f(\mathbf{x})}{\partial \mathbf{x}{i i}^{2}} \approx \frac{f\left(\mathbf{x}+h \mathbf{e}{i}\right)-2 f(\mathbf{x})+f\left(\mathbf{x}-h \mathbf{e}{i}\right)}{h^{2}}\tag{2.34}h ^i ​:=∂x ii 2 ​∂2 f (x )​≈h 2 f (x +h e i ​)−2 f (x )+f (x −h e i ​)​(2.34 )
获得了这两个梯度估计值以后,即可直接对 x x x 进行梯度下降优化。

利用牛顿法:
x = x − η g ~ h ~ (2.35) x=x-\eta \frac{\tilde{g}}{\tilde{h}}\tag{2.35}x =x −ηh ~g ~​​(2.35 )
其中 η \eta η​ 是学习率(步长)。

实现的伪代码如下图所示:

[En]

The pseudo code of the implementation is shown in the following figure:

图 2.14 原论文伪代码[14]

论文 ICLR 2019 Prior convictions: Black-box adversarial attacks with bandits and priors. [15] 中提出使用有限差分法估计某个函数 f f f​ 在向量 v v v​ 方向上的点 x x x​ 处的方向导数 D v f ( x ) = ⟨ ∇ x f ( x ) , v ⟩ D_{v} f(x)=\left\langle\nabla_{x} f(x), v\right\rangle D v ​f (x )=⟨∇x ​f (x ),v ⟩​ 为:
D v f ( x ) = ⟨ ∇ x f ( x ) , v ⟩ ≈ ( f ( x + δ v ) − f ( x ) ) δ (2.36) D_{v} f(x)=\left\langle\nabla_{x} f(x), v\right\rangle \approx \dfrac {(f(x+\delta v)-f(x))}{\delta}\tag{2.36}D v ​f (x )=⟨∇x ​f (x ),v ⟩≈δ(f (x +δv )−f (x ))​(2.36 )
δ > 0 \delta > 0 δ>0​​​​ 为步长,控制梯度估计的质量。 由于精度和噪声等问题,步长更小会得到更准确的估计,但同时也会降低可靠性。 因此,在实践中,将 δ \delta δ​​​​ 作为一个可调参数使用。

我们使用有限差分来构建梯度的估计,可以通过使用所有标准基向量 e 1 , . . . , e d e_1,… , e_d e 1 ​,…,e d ​​​​​​ 估计梯度的内积来找到梯度的 d d d​​​​​ 个分量:
∇ ^ x L ( x , y ) = ∑ k = 1 d e k ( L ( x + δ e k , y ) − L ( x , y ) ) δ ≈ ∑ k = 1 d e k ⟨ ∇ x L ( x , y ) , e k ⟩ (2.37) \widehat{\nabla}{x} L(x, y)=\sum{k=1}^{d} e_{k}\dfrac {\left(L\left(x+\delta e_{k}, y\right)-L(x, y)\right)}{\delta} \approx \sum_{k=1}^{d} e_{k}\left\langle\nabla_{x} L(x, y), e_{k}\right\rangle\tag{2.37}∇x ​L (x ,y )=k =1 ∑d ​e k ​δ(L (x +δe k ​,y )−L (x ,y ))​≈k =1 ∑d ​e k ​⟨∇x ​L (x ,y ),e k ​⟩(2.37 )

话题 13 :什么是最小二乘法?如何使用最小二乘法解决线性回归问题?

❑ ❑\,❑ 最小二乘法​

最小二乘法是由勒让德在19世纪发现的,形式如下式:

标函数 = ∑ ( 观测值 − 理论值 ) 2 (2.38) 标函数=\sum(观测值-理论值)^2\tag{2.38}标函数=∑(观测值−理论值)2 (2.38 )

观测值是我们的样本组,理论值是我们的假设拟合函数。在机器学习中,目标函数通常被称为损失函数。我们的目标是在目标函数最小的情况下得到拟合函数模型。

[En]

The observations are our groups of samples, and the theoretical values are our hypothetical fitting functions. The objective function is often referred to as the loss function in machine learning. Our goal is to get the fitting function model when the objective function is minimized.

举一个最简单的线性回归的简单例子,比如我们有 m m m 个只有一个特征的样本:( x i , y i ) , i ∈ [ 1 , m ] (x_i,y_i),i\in1,m,i ∈[1 ,m ]​。样本采用一般的 f θ f_{\theta}f θ​ 为次 n n n 的多项式拟合,f θ = θ 0 + θ 1 x + θ 2 x 2 + ⋯ + θ n x n f_{\theta}=\theta_0+\theta_1x+\theta_2x^2+\cdots+\theta_nx^n f θ​=θ0 ​+θ1 ​x +θ2 ​x 2 +⋯+θn ​x n,其中 θ i , i ∈ [ 1 , m ] \theta_i,i\in[1,m]θi ​,i ∈[1 ,m ]​ 为参数。最小二乘法就是要找到一组 θ i , i ∈ [ 1 , m ] \theta_i,i\in[1,m]θi ​,i ∈[1 ,m ]​ 使得 ∑ i = 1 n ( f θ ( x i ) − y i ) 2 \displaystyle \sum_{i=1}^{n}(f_{\theta}(x_i)-y_i)^2 i =1 ∑n ​(f θ​(x i ​)−y i ​)2​ 最小,即求解 min ⁡ { ∑ i = 1 n ( f θ ( x i ) − y i ) 2 } \min{\displaystyle \sum_{i=1}^{n}(f_{\theta}(x_i)-y_i)^2}min {i =1 ∑n ​(f θ​(x i ​)−y i ​)2 }​​ 。

我们发现这是一个二次函数,当导数为0000时,我们可以求出它的最小值。

[En]

We find that this is a quadratic function, and we can derive it and get the minimum when the derivative is 0 000.

回到我们之前讨论的神经元问题,求解 w w w 和 b b b 是使损失函数最小化的过程,在统计中,称为线性回归模型的 最小二乘参数估计 (parameter estimation)。我们可以将 L ( w , b ) \mathcal{L}(w,b)L (w ,b ) 分别对 w w w 和 b b b 求偏导,得到:

∂ L ∂ w = 1 n ∑ i = 1 n 2 ( w x ( i ) + b − y ( i ) ) ⋅ ∂ ( w x ( i ) + b − y ( i ) ) ∂ w = 1 n ∑ i = 1 n 2 ( w x ( i ) + b − y ( i ) ) ⋅ x ( i ) = 2 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) ⋅ x ( i ) (2.39) \begin{aligned}\frac{\partial \mathcal{L}}{\partial w}&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)}{\partial w} &\&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot x^{(i)} &\&=\frac{2}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right) \cdot x^{(i)}\end{aligned}\tag{2.39}∂w ∂L ​​=n 1 ​i =1 ∑n ​2 (w x (i )+b −y (i ))⋅∂w ∂(w x (i )+b −y (i ))​=n 1 ​i =1 ∑n ​2 (w x (i )+b −y (i ))⋅x (i )=n 2 ​i =1 ∑n ​(w x (i )+b −y (i ))⋅x (i )​​(2.39 )

∂ L ∂ b = ∂ 1 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) 2 ∂ b = 1 n ∑ i = 1 n ∂ ( w x ( i ) + b − y ( i ) ) 2 ∂ b = 1 n ∑ i = 1 n 2 ( w x ( i ) + b − y ( i ) ) ⋅ ∂ ( w x ( i ) + b − y ( i ) ) ∂ b = 1 n ∑ i = 1 n 2 ( w x ( i ) + b − y ( i ) ) ⋅ 1 = 2 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) (2.40) \begin{aligned}\dfrac{\partial \mathcal{L}}{\partial b}&=\dfrac{\displaystyle \partial \dfrac{1}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right)^{2}}{\partial b}\&=\frac{1}{n} \sum_{i=1}^{n} \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)^{2}}{\partial b} &\&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)}{\partial b} &\&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot 1 &\&=\frac{2}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right)\end{aligned}\tag{2.40}∂b ∂L ​​=∂b ∂n 1 ​i =1 ∑n ​(w x (i )+b −y (i ))2 ​=n 1 ​i =1 ∑n ​∂b ∂(w x (i )+b −y (i ))2 ​=n 1 ​i =1 ∑n ​2 (w x (i )+b −y (i ))⋅∂b ∂(w x (i )+b −y (i ))​=n 1 ​i =1 ∑n ​2 (w x (i )+b −y (i ))⋅1 =n 2 ​i =1 ∑n ​(w x (i )+b −y (i ))​​(2.40 )

令上述两式为 0 0 0​,即可得到 w w w​ 和 b b b​ 最优解的闭式(closed-form)解。

❑ ❑\,❑ 最小二乘法的矩阵法解法(选学)

这里用多元线性回归例子来描述:假设函数 f θ ( x 1 , x 2 , … , x n ) = θ 0 + θ 1 x 1 + ⋯ + θ n x n f_{\theta}(x_1,x_2,\dots,x_n)=\theta_0+\theta_1x_1+\cdots+\theta_nx_n f θ​(x 1 ​,x 2 ​,…,x n ​)=θ0 ​+θ1 ​x 1 ​+⋯+θn ​x n ​ 的矩阵表达方式为:
f θ ( X ) = X θ (2.41) f_{\theta}(\boldsymbol X)=\boldsymbol X\theta\tag{2.41}f θ​(X )=X θ(2.41 )

其中, 假设函数 f θ ( X ) = X θ f_{\theta}(\boldsymbol X)=\boldsymbol X\theta f θ​(X )=X θ 为 m × 1 m\times 1 m ×1 的向量,θ \theta θ 为 n × 1 n\times 1 n ×1的向量,里面有 n n n 个代数法的模型参数。 X \boldsymbol X X 为 n × m n\times m n ×m 维的矩阵。m m m 代表样本的个数,n n n 代表样本的特征数。

损失函数定义为
g ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) (2.42) g({\theta}) = \dfrac 1 2(\boldsymbol X\theta-\boldsymbol Y)^\mathrm{T}(\boldsymbol X\theta-\boldsymbol Y)\tag{2.42}g (θ)=2 1 ​(X θ−Y )T (X θ−Y )(2.42 )

其中 Y \boldsymbol {Y}Y 是样本的输出向量,维度为 m × 1 m\times 1 m ×1。1 2 \dfrac 1 2 2 1 ​ 在这主要是为了求导后系数为 1 1 1,方便计算。

根据最小二乘法的原理,我们要对这个损失函数对 θ \theta θ 向量求导取 0 0 0。结果如下式:
∂ g ( θ ) ∂ θ = X T ( X θ − Y = 0 (2.43) \dfrac {\partial g(\theta)}{\partial \theta}=\boldsymbol {X}^{\mathrm{T}}(\boldsymbol {X}\theta-\boldsymbol {Y}=0\tag{2.43}∂θ∂g (θ)​=X T (X θ−Y =0 (2.43 )

整理可得:
θ = ( X T X ) − 1 X T Y (2.44) \theta=(\boldsymbol {X}^{\mathrm T}\boldsymbol {X})^{-1}\boldsymbol {X}^{\mathrm{T}}\boldsymbol {Y}\tag{2.44}θ=(X T X )−1 X T Y (2.44 )

❑ ❑\,❑ 最小二乘法的局限性和适用场景

  • 最小二乘法需要计算 X T X \boldsymbol {X}^{\mathrm{T}}\boldsymbol {X}X T X 的逆矩阵,有可能它的逆矩阵不存在,这样就没有办法直接用最小二乘法了,此时梯度下降法仍然可以使用。当然,我们可以通过对样本数据进行整理,去掉冗余特征。让 X T X \boldsymbol {X}^{\mathrm{T}}\boldsymbol {X}X T X 的行列式不为 0 0 0 ,然后继续使用最小二乘法。
  • 当样本特征 n n n 非常的大的时候,计算 X T X {\boldsymbol X}^{\mathrm{T}}\boldsymbol {X}X T X 的逆矩阵是一个非常耗时的工作(n × n n\times n n ×n 的矩阵求逆),甚至不可行。而此时以梯度下降为代表的迭代法仍然可以使用。有时可以通过主成分分析降低特征的维度后再用最小二乘法。
  • 如果拟合函数不是线性的,此时不能使用最小二乘法,需要一些技巧将其转换为线性,仍可使用梯度下降。
    [En]

    if the fitting function is not linear, the least square method cannot be used at this time, and some techniques are needed to convert it into linear, and the gradient descent can still be used.*

话题 14 :道理我都懂,怎么用代码实现并解决神经元线性模型呢?

在了解了神经元线性化模型的原理和各种优化算法后,得出了实战训练的单输入神经元线性化模型。

[En]

After understanding the principle of the neuron linear model and various optimization algorithms, we come to the actual combat training single input neuron linear model.

首先我们引入需要的包。

In [ 1 ] : \text { In }[1]:In [1 ]:

import numpy as np
import math

1. 生成数据集

我们需要采样自真实模型的多组数据,对于已知真实模型的 玩具样例 (Toy Example),我们直接从指定的 w = 1.477 , b = 0.089 w = 1.477 , b = 0.089 w =1.477 ,b =0.089 的真实模型中直接采样:
y = 1.477 × x + 0.089 (2.45) y=1.477 \times x+0.089\tag{2.45}y =1.477 ×x +0.089 (2.45 )

为了能够很好地模拟真实样本的观测误差,我们给模型添加误差自变量 ϵ \epsilon ϵ ,它采样自均值为 0 0 0 ,方差为 0.01 0.01 0.01 的高斯分布:
y = 1.477 x + 0.089 + ϵ , ϵ ∼ N ( 0 , 0.01 ) (2.46) y=1.477 x+0.089+\epsilon, \epsilon \sim \mathcal{N}(0,0.01)\tag{2.46}y =1.477 x +0.089 +ϵ,ϵ∼N (0 ,0.01 )(2.46 )

我们通过随机采样 n = 100 n = 100 n =100 次,我们获得 n n n 个样本的训练数据集 D t r a i n \mathbb D_{\mathrm{train}}D train ​ ,然后循环进行 100 100 100 次采样,每次从均匀分布 U ( − 10 , 10 ) U ( -10,10)U (−10 ,10 ) 中随机采样一个数据 x x x 同时从均值为 0 0 0 ,方差为 0. 1 2 0.1^{2}0.1 2 的高斯分布 N ( 0 , 0. 1 2 ) \mathcal{N}\left(0,0.1^{2}\right)N (0 ,0.1 2 ) 中随机采样噪声 ϵ \epsilon ϵ,根据真实模型生成 y y y 的数据,并保存为 Numpy \text{Numpy}Numpy 数组。

In [ 2 ] : \text { In }[2]:In [2 ]:

def get_data():

    data = []
    for i in range(100):
        x = np.random.uniform(-10., 10.)

        eps = np.random.normal(0., 0.01)

        y = 1.477 * x + 0.089 + eps

        data.append([x, y])

    data = np.array(data)
    return data

2. 计算误差

循环计算在每个点 ( x ( i ) , y ( i ) ) \left(x^{(i)}, y^{(i)}\right)(x (i ),y (i )) 处的预测值与真实值之间差的平方并累加,从而获得训练集上的均方差损失值。

最终误差和除以数据样本总数,得到每个样本的平均误差。

[En]

The final error sum is divided by the total number of data samples to get the average error on each sample.

In [ 3 ] : \text { In }[3]:In [3 ]:

def mse(b, w, points) :
    totalError = 0

    for i in range(0, len(points)) :

        x = points[i, 0]

        y = points[i, 1]

        totalError += (y - (w * x + b)) ** 2

    return totalError / float(len(points))

3. 计算梯度

这里我们使用更加简单好用的梯度下降算法。我们需要计算出函数在每一个点上的梯度信息: ( ∂ L ∂ w , ∂ L ∂ b ) \left(\dfrac{\partial \mathcal{L}}{\partial w}, \dfrac{\partial \mathcal{L}}{\partial b}\right)(∂w ∂L ​,∂b ∂L ​)。我们来推导一下梯度的表达式,首先考虑 ∂ L ∂ w \dfrac{\partial \mathcal{L}}{\partial w}∂w ∂L ​ ,将均方差函数展开:

∂ L ∂ w = ∂ 1 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) 2 ∂ w = 1 n ∑ i = 1 n ∂ ( w x ( i ) + b − y ( i ) ) 2 ∂ w (2.47) \begin{aligned}\frac{\displaystyle \partial \mathcal{L}}{\partial w}&=\frac{\displaystyle \partial \frac{1}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right)^{2}}{\partial w}&\&=\frac{1}{n} \sum_{i=1}^{n} \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)^{2}}{\partial w}\end{aligned}\tag{2.47}∂w ∂L ​​=∂w ∂n 1 ​i =1 ∑n ​(w x (i )+b −y (i ))2 ​=n 1 ​i =1 ∑n ​∂w ∂(w x (i )+b −y (i ))2 ​​​(2.47 )

由于:

∂ g 2 ∂ w = 2 ⋅ g ⋅ ∂ g ∂ w (2.48) \frac{\partial g^{2}}{\partial w}=2 \cdot g \cdot \frac{\partial g}{\partial w}\tag{2.48}∂w ∂g 2 ​=2 ⋅g ⋅∂w ∂g ​(2.48 )

则有:

∂ L ∂ w = 1 n ∑ i = 1 n 2 ( w x ( i ) + b − y ( i ) ) ⋅ ∂ ( w x ( i ) + b − y ( i ) ) ∂ w = 1 n ∑ i = 1 n 2 ( w x ( i ) + b − y ( i ) ) ⋅ x ( i ) = 2 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) ⋅ x ( i ) (2.49) \begin{aligned}\frac{\partial \mathcal{L}}{\partial w}&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)}{\partial w} &\&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot x^{(i)} &\&=\frac{2}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right) \cdot x^{(i)}\end{aligned}\tag{2.49}∂w ∂L ​​=n 1 ​i =1 ∑n ​2 (w x (i )+b −y (i ))⋅∂w ∂(w x (i )+b −y (i ))​=n 1 ​i =1 ∑n ​2 (w x (i )+b −y (i ))⋅x (i )=n 2 ​i =1 ∑n ​(w x (i )+b −y (i ))⋅x (i )​​(2.49 )

∂ L ∂ b = ∂ 1 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) 2 ∂ b = 1 n ∑ i = 1 n ∂ ( w x ( i ) + b − y ( i ) ) 2 ∂ b = 1 n ∑ i = 1 n 2 ( w x ( i ) + b − y ( i ) ) ⋅ ∂ ( w x ( i ) + b − y ( i ) ) ∂ b = 1 n ∑ i = 1 n 2 ( w x ( i ) + b − y ( i ) ) ⋅ 1 = 2 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) (2.50) \begin{aligned}\dfrac{\partial \mathcal{L}}{\partial b}&=\dfrac{\displaystyle \partial \dfrac{1}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right)^{2}}{\partial b}\&=\frac{1}{n} \sum_{i=1}^{n} \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)^{2}}{\partial b} &\&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot \frac{\partial\left(w x^{(i)}+b-y^{(i)}\right)}{\partial b} &\&=\frac{1}{n} \sum_{i=1}^{n} 2\left(w x^{(i)}+b-y^{(i)}\right) \cdot 1 &\&=\frac{2}{n} \sum_{i=1}^{n}\left(w x^{(i)}+b-y^{(i)}\right)\end{aligned}\tag{2.50}∂b ∂L ​​=∂b ∂n 1 ​i =1 ∑n ​(w x (i )+b −y (i ))2 ​=n 1 ​i =1 ∑n ​∂b ∂(w x (i )+b −y (i ))2 ​=n 1 ​i =1 ∑n ​2 (w x (i )+b −y (i ))⋅∂b ∂(w x (i )+b −y (i ))​=n 1 ​i =1 ∑n ​2 (w x (i )+b −y (i ))⋅1 =n 2 ​i =1 ∑n ​(w x (i )+b −y (i ))​​(2.50 )

根据上面偏导数的表达式,我们只需要计算在每一个点上面的 ( w x ( i ) + b − y ( i ) ) \left(w x^{(i)}+b-y^{(i)}\right)(w x (i )+b −y (i ))​ 和 ( w x ( i ) + b − y ( i ) ) \left(w x^{(i)}+b-y^{(i)}\right)(w x (i )+b −y (i ))​值,平均后即可得到偏导数 ∂ L ∂ w \dfrac{\partial \mathcal{L}}{\partial w}∂w ∂L ​​ 和 ∂ L ∂ b \dfrac{\partial \mathcal{L}}{\partial b}∂b ∂L ​​​ 。

In [ 4 ] : \text { In }[4]:In [4 ]:


def step_gradient(b_current, w_current, points, lr) :

    b_gradient = 0
    w_gradient = 0

    M = float(len(points))
    for i in range(0, len(points)) :
        x = points[i, 0]
        y = points[i, 1]

        b_gradient += (2 / M) * ((w_current * x + b_current) - y)

        w_gradient += (2 / M) * x * ((w_current * x + b_current) - y)

    new_b = b_current - (lr * b_gradient)
    new_w = w_current - (lr * w_gradient)
    return [new_b, new_w]

plt.rcParams['font.size'] = 16
plt.rcParams['font.family'] = ['STKaiti']
plt.rcParams['axes.unicode_minus'] = False

def gradient_descent(points, starting_b, starting_w, lr, num_iterations) :
    b = starting_b
    w = starting_w
    MSE = []
    Epoch = []
    for step in range(num_iterations) :
        b, w = step_gradient(b, w, np.array(points), lr)

        loss = mse(b, w, points)
        MSE.append(loss)
        Epoch.append(step)
        if step % 50 == 0 :
            print(f"iteration:{step}, loss:{loss}, w:{w}, b:{b}")
    plt.plot(Epoch, MSE, color='C1', label='均方差')
    plt.xlabel('epoch')
    plt.ylabel('MSE')
    plt.title('MSE function')
    plt.legend(loc = 1)
    plt.show()
    return [b, w]

4. 主函数

In [ 5 ] : \text { In }[5]:In [5 ]:

def solve(data) :

    lr = 0.01
    initial_b = 0
    initial_w = 0
    num_iterations = 1000
    [b, w] = gradient_descent(data, initial_b, initial_w, lr, num_iterations)
    loss = mse(b, w, data)
    print(f'Final loss:{loss}, w{w}, b{b}')

if __name__ == "__main__":
    data = get_data()
    solve(data)

Out [ 5 ] : \text { Out }[5]:Out [5 ]:

iteration:0, loss:8.52075121569461, w:0.9683621336270813, b:0.018598967590321615
iteration:50, loss:0.0005939300597845278, w:1.477514542941938, b:0.06613823978315139
iteration:100, loss:0.00016616611251547874, w:1.4772610937560182, b:0.08026637756911292
iteration:150, loss:0.00010824080152649426, w:1.4771678278317757, b:0.08546534407456151
iteration:200, loss:0.00010039689211198855, w:1.4771335072140424, b:0.08737849449355252
iteration:250, loss:9.933471542527609e-05, w:1.4771208776838989, b:0.08808250836281861
iteration:300, loss:9.919088162325623e-05, w:1.477116230185043, b:0.08834157608859644
iteration:350, loss:9.917140448460003e-05, w:1.4771145199673728, b:0.08843690956066241
iteration:400, loss:9.916876700352793e-05, w:1.477113890630052, b:0.08847199100845321
iteration:450, loss:9.916840985114966e-05, w:1.4771136590423013, b:0.08848490051392309
iteration:500, loss:9.916836148764827e-05, w:1.4771135738210939, b:0.08848965103996947
iteration:550, loss:9.916835493854371e-05, w:1.4771135424608248, b:0.08849139917027324
iteration:600, loss:9.916835405170177e-05, w:1.4771135309206636, b:0.08849204245893828
iteration:650, loss:9.916835393161082e-05, w:1.4771135266740378, b:0.08849227918059785
iteration:700, loss:9.916835391534817e-05, w:1.4771135251113363, b:0.08849236629101521
iteration:750, loss:9.916835391314785e-05, w:1.477113524536283, b:0.08849239834648838
iteration:800, loss:9.916835391284828e-05, w:1.477113524324671, b:0.08849241014247554
iteration:850, loss:9.916835391280702e-05, w:1.4771135242468005, b:0.08849241448324166
iteration:900, loss:9.916835391280325e-05, w:1.4771135242181452, b:0.08849241608058574
iteration:950, loss:9.916835391280336e-05, w:1.4771135242076006, b:0.08849241666838711
Final loss:9.916835391280157e-05, w1.4771135242037658, b0.08849241688214672

我们可以看到,第 100 100 100 次迭代时,𝑤 𝑤w 和 𝑏 𝑏b 的值就已经比较接近真实模型了,更新 1000 1000 1000 次后得到的 w ∗ , b ∗ w^{}, b^{}w ∗,b ∗​ 数值解与真实模型的非常接近。

2.3 再探回归

话题 15 :线性模型已经完全学会了!如果换成非线性的模型该怎么办呢?

我们来考虑一个回归预测问题:使用后台数据预测youtube账号第二天的观看量。

由于观看量是周期性变化的,显然不能用线性模型来表示。线性模型是机器学习中最简单的数学模型之一,参数少,计算简单,但只能表达线性关系。无论如何调整直线的参数,它都不能很好地符合实际模型:

[En]

As the viewing volume varies periodically, it is obvious that it can not be expressed by a linear model. Linear model is one of the simplest mathematical models in machine learning, with a small number of parameters and simple calculation, but it can only express * linear relationship. No matter how much you adjust the parameters of a straight line, it doesn’t fit the real model very well:

图 2.15 仅用一条直线无法较好地拟合非线性模型

如何表示更复杂的模型,最灵活的模型是连续曲线,它能更准确地描述复杂问题。显然,只要有足够的分段线性曲线,我们就可以逼近连续的曲线。

[En]

How to represent a more complex model, the most flexible model is the continuous curve, which can describe complex problems more accurately. Obviously, as long as there are enough piecewise linear curves, we can approach the continuous curve.

图 2.16 分段函数逼近曲线

那么如何得到一条分段线性曲线呢?一个显而易见的想法是分割几条线性曲线,然后添加一个常量来平移这些曲线,以获得分段的线性曲线。

[En]

So how to get a piecewise linear curve? An obvious idea is to segment several linear curves and then add a constant to translate the curves to get a piecewise linear curve.

图 2.17 若干线段拼接成一条分段曲线

但这里有一个问题,由直线组成的分段线性曲线不能计算拐角处的微分,因此不能用梯度下降算法进行优化。

[En]

But there is a problem here, the piecewise linear curve composed of straight lines can not calculate the differential at the corner, so it can not be optimized by using the gradient descent algorithm.

❑ ❑❑ 解决非线性模型

深度学习希望利用神经元得到期望函数的粗略表达式,通过使用大量数据对函数的参数进行逆拟合,最终勾勒出函数的完整形状

[En]

Deep learning hopes to use neurons to get a rough expression of the desired function, through the use of a large number of data to reverse fit the parameters of the function, and finally * outline the complete shape of the function .*

为了能够拟合非线性的函数,我们可以为神经网络增加非线性因素,使其可以拟合任意的函数。也就是给原先的线性模型嵌套一个非线性函数,即可将线性模型转换为非线性模型。我们把这个非线性函数称为 激活函数(Activation function),用 σ \sigma σ 表示。线性模型就转换为了:

o = σ ( W x + b ) (2.51) \boldsymbol{o}=\sigma(\boldsymbol{W} \boldsymbol{x}+\boldsymbol{b})\tag{2.51}o =σ(W x +b )(2.51 )

这里的 σ \sigma σ 代表了某个具体的非线性激活函数,比如 Sigmoid 函数:

图 2.18 使用激活函数,将直线替代为曲线

❑ ❑❑ Sigmoid(S型曲线)

通过调整 Sigmoid 函数中的三个参数 c , b , w c,b,w c ,b ,w 足以实现各种各样的 S 型曲线。改变 w w w 可以改变 S 型曲线的坡度;改变 b b b 可以使 S 型曲线左右移动;改变 c c c 可以改变 S 型曲线的上下高度。

图 2.19 调整参数得到不同的 Sigmoid 曲线

我们将激活函数后的分段直线组合起来,得到一个非线性模型。

[En]

We combine the piecewise lines after the activation function to get a nonlinear model.

图 2.20 分段直线经过激活函数得到分段曲线可以更好地拟合非线性模型

它可以理解为用一条曲线代替原来的折线,大量的曲线可以拼接在一起,完美地拟合一个非线性函数。

[En]

It can be understood as replacing the original broken line with a curve, and a large number of curves can be spliced together to fit a nonlinear function perfectly.

2.4 面试题目集锦

本小节 2.4 面试题目集锦 中收集的题目和答案大多来自于网上的各大博客,具体链接详见 2.5 参考资料 [7] [8] [9]。

❑ ❑❑ 1. 简单介绍一下线性回归 (Linear Regression) 的原理。

线性关系是指两个或多个变量之间的关系符合一阶函数关系,对应于图像上的一条直线。如果变量之间的关系不符合一次函数,则图像不是直线,也不满足线性关系。

[En]

The linear relationship is that the relationship between two or more variables conforms to the first-order function relationship, which corresponds to a straight line on the image. If the relationship between variables does not conform to the first-order function, the image is not a straight line, nor does it satisfy the linear relationship.

回归是指预测,希望通过计算回到真值。

[En]

Regression refers to prediction, hoping to return to the true value through calculation.

线性回归是用于预测问题的有监督学习。它是一种回归分析,它利用线性回归方程的最小二乘函数来建模一个或多个自变量与因变量之间的映射关系,并使用学习到的映射关系来预测未知数据。该函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,具有多个自变量的情况称为多元回归。此外,线性回归仍然是一个连续值。

[En]

Linear regression is supervised learning for prediction problems. It is a kind of regression analysis that uses the least square function of linear regression equation to model the mapping relationship between one or more independent variables and dependent variables and uses the learned mapping relationship to predict unknown data. This function is a linear combination of one or more model parameters called regression coefficients. The case with only one independent variable is called simple regression, and the case with more than one independent variable is called multiple regression. In addition, linear regression is still a continuous value.

❑ ❑❑ 2.线性回归的假设函数是什么形式?

y ^ i = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 … + θ n x n = θ ⊤ X (2.52) \hat y_i=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2} \ldots+\theta_{n} x_{n}=\boldsymbol {\theta}^\top \boldsymbol X\tag{2.52}y ^​i ​=θ0 ​x 0 ​+θ1 ​x 1 ​+θ2 ​x 2 ​…+θn ​x n ​=θ⊤X (2.52 )

其中 x 0 = 1 x_0=1 x 0 ​=1 也即直接加上偏置 θ 0 \theta_0 θ0 ​ , θ , X \boldsymbol {\theta}, \boldsymbol X θ,X 都是列向量。

X \boldsymbol X X 为特征,y y y 为标签值,y ^ \hat y y ^​ 为预测值,注意线性回归实际上既可以处理回归问题也可以处理分类问题,只是在针对分类问题的0-1这类的标签,线性回归会很难收敛。

❑ ❑❑ 3.线性回归的代价(损失)函数是什么形式?

默认是最小化损失函数:

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 (2.53) J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}\tag{2.53}J (θ)=2 m 1 ​i =1 ∑m ​(h θ​(x (i ))−y (i ))2 (2.53 )

❑ ❑❑ 4. 为什么线性回归使用的是平方差形式的损失函数?

使用平方形式的时候,使用的是”最小二乘法”的思想,这里的”二乘”指的是用平方来度量观测点与估计点的距离(远近),”最小”指的是参数值要保证各个观测点与估计点的距离的平方和达到最小。最小二乘法以估计值与观测值的平方和作为损失函数,在误差服从正态分布的前提下(这一点容易被忽视),与极大似然估计的思想在本质上是相同。也就是说不是我们特意去选择mse作为线性回归的损失函数而是因为我们假设误差服从正态分布,使用极大似然法(最大化误差项目为εi的样本总体出现的概率最大)来求解参数,进一步经过推导之后得到的mse的公式而已,具体流程见下:

我们将观测输出与估计数据之间的误差设置如下:

[En]

We set the error between the observed output and the estimated data as follows:

ε i = y i − y ^ i (2.54) \varepsilon_{i}=y_{i}-\hat{y}_{i}\tag{2.54}εi ​=y i ​−y ^​i ​(2.54 )

我们通常认为 ε \varepsilon ε 服从正态分布,即:

f ( ε i ; u , σ 2 ) = 1 σ 2 π × exp ⁡ [ − ( ε i − u ) 2 ( 2 σ 2 + 1 ] (2.55) f\left(\varepsilon_{i} ; u, \sigma^{2}\right)=\frac{1}{\sigma \sqrt{2 \pi}} \times \exp \left[-\frac{\left(\varepsilon_{i}-u\right)^{2}}{\left(2 \sigma^{2}+1\right.}\right]\tag{2.55}f (εi ​;u ,σ2 )=σ2 π​1 ​×exp −(2 σ2 +1 (εi ​−u )2 ​

我们求的参数 ε εε 的极大似然估计 ( u , σ 2 ) (u,σ^2)(u ,σ2 ) ,即是说,在某个 ( u , σ 2 ) (u,σ^2)(u ,σ2 ) 下,使得服从正态分布的 ε εε 取得现有样本εi的概率最大。也就是说实际上我们的最原始的目标是使得这个正态分布表达式的连乘的极大似然估计最大。

然后根据最大似然估计函数的定义,作出:

[En]

Then according to the definition of maximum likelihood estimation function, make:

L ( u , σ 2 ) = ∏ i = 1 n 1 2 π σ × exp ⁡ ( − ( ε i − u ) 2 ( ρ j π 2 + 1 ) ) (2.56) L\left(u, \sigma^{2}\right)=\prod_{i=1}^{n} \frac{1}{\sqrt{2 \pi} \sigma} \times \exp \left(-\frac{\left(\varepsilon_{i}-u\right)^{2}}{\left(\rho_{j} \pi^{2}+1\right)}\right)\tag{2.56}L (u ,σ2 )=i =1 ∏n ​2 π​σ1 ​×exp (−(ρj ​π2 +1 )(εi ​−u )2 ​)(2.56 )

取对数似然函数:

log ⁡ L ( u , σ 2 ) = − n 2 log ⁡ σ 2 − n 2 log ⁡ 2 π − ∑ i = 1 n ( ε i − u ) 2 2 σ 2 (2.57) \log L\left(u, \sigma^{2}\right)=-\frac{n}{2} \log \sigma^{2}-\frac{n}{2} \log 2 \pi -\cfrac { \displaystyle \sum_{i=1}^{n}\left(\varepsilon_{i}-u\right)^{2}}{2\sigma^2}\tag{2.57}lo g L (u ,σ2 )=−2 n ​lo g σ2 −2 n ​lo g 2 π−2 σ2 i =1 ∑n ​(εi ​−u )2 ​(2.57 )

分别求 ( u , σ 2 ) (u,σ^2)(u ,σ2 ) 的偏导数,然后置 0 0 0 ,最后求得参数 ( u , σ 2 ) (u,σ^2)(u ,σ2 ) 的极大似然估计为:

u = 1 n ∑ i = 1 n ε i σ 2 = 1 n ∑ i = 1 n ( ε i − u ) 2 (2.58) \begin{array}{c}\displaystyle u=\frac{1}{n} \sum_{i=1}^{n} \varepsilon_{i} \\displaystyle \sigma^{2}=\frac{1}{n} \sum_{i=1}^{n}\left(\varepsilon_{i}-u\right)^{2}\end{array}\tag{2.58}u =n 1 ​i =1 ∑n ​εi ​σ2 =n 1 ​i =1 ∑n ​(εi ​−u )2 ​(2.58 )

我们需要在线性回归中找到最佳拟合线:

[En]

We need to find the best fitting line in linear regression:

y ^ i = θ ⊤ X (2.59) \hat y_i=\boldsymbol {\theta}^\top \boldsymbol X\tag{2.59}y ^​i ​=θ⊤X (2.59 )

实质上是求预估值 y ^ i \hat y_i y ^​i ​与观测值 y i y_i y i ​ 之间的误差 ε i ε_i εi ​ 最小(最好是没有误差)的情况下 θ θθ 的值。由于 ε εε 是服从参数 ( u , σ 2 ) (u,σ^2)(u ,σ2 ) 的正态分布,因此最好是均值 u u u 和方差 σ σσ 趋近于 0 0 0 或越小越好,根据表达式可知,均值和方差越小,对数似然函数越大。即:

  • u = 1 n × ( y i − y ^ i ) u=\cfrac 1 n\times (y_i−\hat y_i)u =n 1 ​×(y i ​−y ^​i ​) 越趋近于 0 0 0 越好也即越小越好。
  • σ 2 = 1 n × ( y i − y ^ i − u ) 2 ≈ 1 n × ( y i − y ^ i ) 2 σ^2=\cfrac 1 n\times (y_i−\hat y_i−u)^2≈\cfrac 1 n\times (y_i−\hat y_i)^2 σ2 =n 1 ​×(y i ​−y ^​i ​−u )2 ≈n 1 ​×(y i ​−y ^​i ​)2 趋近于 0 0 0 越好也即越小越好。

这基本上等同于上面建立的平方型损失函数。

[En]

This is essentially equivalent to the square form loss function built above.

❑ ❑❑ 5. 线性回归为什么要求因变量符合正态分布

线性回归的假设是特征与预测值之间存在线性关系,且误差项符合高斯-马尔可夫条件(零均值、零方差、不相关)。在这种情况下,线性回归是一种无偏估计。如果噪声服从正态分布,则因变量也服从正态分布。在进行线性回归之前,要求因变量近似服从正态分布,否则线性回归效果不好(有偏估计)。

[En]

The assumption of linear regression is that there is a linear relationship between the feature and the predicted value, and the error term conforms to the Gauss-Markov condition (zero mean, zero variance, ircorrelation). In this case, the linear regression is an unbiased estimation. If the noise conforms to the normal distribution, then the dependent variable also conforms to the distribution. Before the linear regression, the dependent variable is required to approximately conform to the normal distribution, otherwise the linear regression effect is not good (biased estimation).

❑ ❑❑ 6. 下列关于线性回归说法错误的是(D)

A. 在现有模型上,加入新的变量,所得到的R^2的值总会增加。

B. 线性回归的前提假设之一是残差必须服从独立正态分布。

C. 残差的方差无偏估计是S S E n − p \cfrac {SSE}{n-p}n −p SSE ​ 。

D. 自变量和残差不一定保持相互独立。

A:R 2 R^2 R 2 是拟合优度, R 2 = S S R S S T = 1 − S S E S S T R2=\cfrac {SSR}{SST}=1-\cfrac {SSE}{SST}R 2 =SST SSR ​=1 −SST SSE ​,S S T SST SST 是总平方和, S S R SSR SSR 是回归平方和,S S E SSE SSE 是残差平方和,公式如下:

y ‾ = 1 n ∑ i = 1 n y i S S tot = ∑ i ( y i − y ‾ ) 2 S S reg = ∑ i ( f i − y ‾ ) 2 S S res = ∑ i ( y i − f i ) 2 = ∑ i e i 2 R 2 = 1 − S S res S S tot = S S reg S S tot (2.60) \begin{aligned}&\overline{\mathrm{y}}=\frac{1}{n} \sum_{i=1}^{n} y_{i} \ &S S_{\text{tot}}=\sum_{i}\left(y_{i}-\overline{\mathrm{y}}\right)^{2} \&S S_{\text{reg}}=\sum_{i}\left(f_{i}-\overline{\mathrm{y}}\right)^{2} \&S S_{\text{res}}=\sum_{i}\left(y_{i}-f_{i}\right)^{2}=\sum_{i} e_{i}^{2} \&R^{2}=1-\frac{S S_{\text{res}}}{S S_{\text{tot}}}=\frac{S S_{\text{reg}}}{S S_\text{{tot}}}\end{aligned}\tag{2.60}​y ​=n 1 ​i =1 ∑n ​y i ​S S tot ​=i ∑​(y i ​−y ​)2 S S reg ​=i ∑​(f i ​−y ​)2 S S res ​=i ∑​(y i ​−f i ​)2 =i ∑​e i 2 ​R 2 =1 −S S tot ​S S res ​​=S S tot ​S S reg ​​​(2.60 )

从公式上比较好理解,R 2 = S S reg S S tot R^2=\cfrac {SS_{\text{reg}}} {SS_{\text{tot}}}R 2 =S S tot ​S S reg ​​ 表示的是自变量引起的变动占总变动的百分比,值越大,说明残差的影响越不明显,则权重部分的预测效果越好。从公式上可以看出,因为 S S tot SS_{\text{tot}}S S tot ​ 是不变的,加入新的变量,则对于S S reg SS_{\text{reg}}S S reg ​ ,其中 f i f_i f i ​ 就增加了新的变量进来,比如原来是 w 1 x 1 + w 2 x 2 + w 3 x 3 w_1x_1+w_2x_2+w_3x_3 w 1 ​x 1 ​+w 2 ​x 2 ​+w 3 ​x 3 ​ ,如果新进的特征 x 4 x_4 x 4 ​ 实在太差,再不济我们也可以让其权重 w 4 = 0 w_4=0 w 4 ​=0 从而训练出与加入 x 4 x_4 x 4 ​ 之前的模型一样的模型(也可以从 pac理论来进行分析),显然得到的 R 2 R^2 R 2 的值总会增加。

B:线性回归的前提假设之一是残差必须服从独立正态分布,线性回归的损失函数mse就是:在某个( u , σ 2 ) (u,σ^2)(u ,σ2 ) 下,使得服从正态分布的ε取得现有样本εi的概率最大从而推算出来的损失函数的表达式。

D:错误,残差必须满足独立正态分布才符合线性回归的定义。

❑ ❑❑ 7. 在线性回归问题中,我们使用决定系数 (R-squared)来测量拟合优度。我们在线性回归模型中添加一个特征值,并保留相同的模型。下面说法正确的是(C)

A. 如果R-Squared增大,这个变量是显著的

B . 如果R-Squared减小,这个变量是显著的

C. 单独观察R-Squared的变化趋势,无法判断这个变量是否显著

D. 以上皆非

R-squared 就是上面说的 R 2 R^2 R 2 ,判断变量是否显著,需要根据变量对应的权重系数 W W W ,而与 R 2 R^2 R 2 无直接关系。

❑ ❑❑ 8. 请写出在数据预处理过程中如何处理以下问题

8.1 为了预测摩拜每天订单数,我们建立了一个线性回归模型,其中有一个自变量为天气类型(分类变量),分为晴、阴、雾霾、沙尘暴、雨、雪等6种类型,请问如何处理这种变量

8.2 仍然是 ① 中的线性回归模型,其中有一个自变量为每天红包车的数量,但是这个变量有1/4的数据是缺失值,请写出至少两种处理缺失值的方法

8.3 依然是 ① 中的模型,其中自变量有4个,他们的相关系数矩阵如下:

[ 1 − 0.307 0.338 0.302 − 0.307 1 − 0.831 − 0.410 0.338 − 0.831 1 0.360 0.302 − 0.410 0.360 1 ] (2.61) \left[\begin{array}{cccc}1 & -0.307 & 0.338 & 0.302 \-0.307 & 1 & -0.831 & -0.410 \0.338 & -0.831 & 1 & 0.360 \0.302 & -0.410 & 0.360 & 1\end{array}\right]\tag{2.61}​1 −0.307 0.338 0.302 ​−0.307 1 −0.831 −0.410 ​0.338 −0.831 1 0.360 ​0.302 −0.410 0.360 1 ​​(2.61 )

8.1:天气是离散变量,没有大小关系,并且类别只有 6 6 6 类,可以直接 one-hot 展开。

8.2:1 4 = 25 % \cfrac 1 4=25\%4 1 ​=25% 的数据存在缺失值不能用简单的删除法或者是均值、中位数、众数插补的方法了因为都使用相同的数据进行这么大比例的插补太容易改变原始数据的分布情况了,所以比较好的方式有 1、通过模型插补;2、多重插补法等。

8.3:变量 2、3 存在较强的负相关性,也就是存在共线性的问题,而共线性会导致模型的效果变差,所以需要根据业务知识来进行处理,合并,或者删除等再观察处理之后的效果再决定采用哪一种处理方式(需要注意的是我们这里是针对仅仅使用线性回归的情况,如果是使用 gbdt 这类算法则不需要处理)。

❑ ❑❑ 9. 线性回归解析解的推导(三种方法)

❑ ❑❑ 10. 线性回归的基本假设?

❑ ❑❑ 11. 线性回归效果不好的原因

❑ ❑❑ 12. 为什么进行线性回归前需要对特征进行离散化处理。

❑ ❑❑ 13. 线性回归处理步骤,什么情况下可停止迭代,怎么避免过拟合情况?

一般而言,处理步骤有缺失值处理、类别变量数字化、异常值处理、连续特征离散化等。

[En]

Generally speaking, the processing steps are missing value processing, category variable digitization, abnormal value processing, continuous feature discretization and so on.

当两次迭代中所有参数的变化小于给定阈值或达到最大迭代次数时,停止迭代过程。

[En]

When the variation of all parameters in the two iterations is less than the given threshold, or the maximum number of iterations is reached, the iterative process is stopped.

过拟合没法避免只能说是尽量降低过拟合的影响,通过 ℓ 1 , ℓ 2 \ell_1,\ell_2 ℓ1 ​,ℓ2 ​ 正则化、减少特征的数量、增大样本的数量等等。

❑ ❑❑ 14. 线性回归优缺点

优点:实现简单,建模速度快,这是许多非线性模型的基础。

[En]

Advantages: simple implementation and fast modeling, which is the basis of many nonlinear models.

缺点:模型简单,难以对复杂数据进行拟合,难以使用非线性数据。

[En]

Disadvantages: the model is simple, so it is difficult to fit complex data, and it is difficult to use nonlinear data.

2.5 参考资料

[14] Pin-Yu Chen, Huan Zhang, Yash Sharma, Jinfeng Yi, and Cho-Jui Hsieh. Zoo: Zeroth order optimization based black-box attacks to deep neural networks without training substitute models. In Proceedings of the 10th ACM Workshop on Artificial Intelligence and Security, pages 15–26. ACM, 2017.

[15] Andrew Ilyas, Logan Engstrom, and Aleksander Madry. Prior convictions: Black-box adversarial attacks with bandits and priors. In International Conference on Learning Representations, 2019. 1, 2, 5, 7, 8, 11

[16] 梯度-维基百科
https://zh.wikipedia.org/zh-cn/%E6%A2%AF%E5%BA%A6

谢谢!

Original: https://blog.csdn.net/weixin_45697774/article/details/120786508
Author: 繁凡さん
Title: 一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/511254/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球