详细讲解最小二乘法名称的由来

最小二乘法是一种典型的数学优化技术,其目的是通过最小化误差函数(也称为成本函数、损失函数)而求得最优的解。名称中关键的词语就是"最小"、"二乘",名称的英文为"Least Squares"。所谓最小就是使误差函数最小,"二乘"就是指的平方,因此,最小二乘法又称为最小平方法。

要想打好机器学习的数学基础,请参见清华大学出版社的人人可懂系列,包括《人人可懂的微积分》(已上市)、《人人可懂的线性代数》(即将上市)、《人人可懂的概率统计》(即将上市)。

先来看最为简单的在平面中拟合直线方程的情况,这种情况下只需要找出1个系数和截距。这种情况下,最小二乘法使用的误差函数为:

J ( θ ) = 1 2 m ∑ i = 0 m − 1 ( y p i − y i ) 2 J\left( \mathbf{\theta} \right) = \frac{1}{2m}\sum_{i = 0}^{m - 1}{(y_{pi} - y_{i})}^{2} J(θ)=2m1i=0∑m−1(ypi−yi)2

(公式1)

做线性拟合的目的就是要使 J ( θ ) J\left( \mathbf{\theta} \right) J(θ)这个误差函数的值尽可能的小。值更小就表明预测值与真实值的差值更小。公式1中, y pi y_{\text{pi}} ypi表示第i 个预测值; y i y_{i} yi即为 y t i y_{ti} yti,表示第i 个真实值; m m m表示 m m m个数据样本。因此这个函数表示计算预测值与真实值的差的平方和后再求平均。

这里有2个问题要说明,这2个问题初次接触者很容易困惑。

第1个问题是公式1中为什么要采用平方?因为平方计算后都变成了正数,就不必再担心预测值与真实值的差为负数的情况;二是平方后做导数计算。这还能有未知数存在;三是平方函数的图形是一根开口向上的抛线,必有极小值。从 J ( θ ) J\left( \theta \right) J(θ)来要求的未知数是 θ \theta θ,但是公式1中并未见 θ \theta θ?实际上是有的,只是隐含在 y pi y_{\text{pi}} ypi中罢了。要拟合的直线模型为:

y = θ 1 x + θ 0 y = \theta_{1}x + \theta_{0} y=θ1x+θ0

(方程1)

把这方程代入到公式1中,实际上就是:

J ( θ ) = 1 2 m ∑ i = 0 m − 1 ( ( θ 1 x i + θ 0 ) − y i ) 2 J\left( \mathbf{\theta} \right) = \frac{1}{2m}\sum_{i = 0}^{m - 1}{((\theta_{1}x_{i} + \theta_{0}) - y_{i})}^{2} J(θ)=2m1i=0∑m−1((θ1xi+θ0)−yi)2

(公式2)

这样把拟合方程1就转化了求得 J ( θ ) J\left( \theta \right) J(θ)的最小值,在做最小值优化的过程中来求得最合适的 θ 1 \theta_{1} θ1、 θ 0 \theta_{0} θ0这2个参数的值。

**提示:**再次提醒,求解模型是要求其中的 θ 1 \theta_{1} θ1、 θ 0 \theta_{0} θ0这些参数值,而不是xyxy的值事先都是已知的值。

要想打好机器学习的数学基础,请参见清华大学出版社的人人可懂系列,包括《人人可懂的微积分》(已上市)、《人人可懂的线性代数》(即将上市)、《人人可懂的概率统计》(即将上市)。

如果 θ \theta θ只有一次方,则求导数值就会变成1,这就没有办法再求解下去了。假定采用的公式是:

J ( θ ) = 1 2 m ∑ i = 0 m − 1 ( ( θ 1 x i + θ 0 ) − y i ) J\left( \mathbf{\theta} \right) = \frac{1}{2m}\sum_{i = 0}^{m - 1}{((\theta_{1}x_{i} + \theta_{0}) - y_{i})} J(θ)=2m1i=0∑m−1((θ1xi+θ0)−yi)

用这个公式对 θ 0 \theta_{0} θ0求偏导数:

∂ J ( θ ) ∂ θ 0 = ∂ ∂ θ 0 ( 1 2 m ∑ i = 0 m − 1 ( ( θ 1 x i + θ 0 ) − y i ) ) = 1 2 m ∑ i = 0 m − 1 ∂ ∂ θ 0 ( ( θ 1 x i + θ 0 ) − y i ) \frac{\partial J\left( \mathbf{\theta} \right)}{\partial\theta_{0}} = \frac{\partial}{\partial\theta_{0}}\left( \frac{1}{2m}\sum_{i = 0}^{m - 1}\left( \left( \theta_{1}x_{i} + \theta_{0} \right) - y_{i} \right) \right) = \frac{1}{2m}\sum_{i = 0}^{m - 1}{\frac{\partial}{\partial\theta_{0}}\left( \left( \theta_{1}x_{i} + \theta_{0} \right) - y_{i} \right)} ∂θ0∂J(θ)=∂θ0∂(2m1i=0∑m−1((θ1xi+θ0)−yi))=2m1i=0∑m−1∂θ0∂((θ1xi+θ0)−yi)

= 1 2 m ∑ i = 0 m − 1 1 = 1 2 m × m = 1 2 = \frac{1}{2m}\sum_{i = 0}^{m - 1}1 = \frac{1}{2m} \times m = \frac{1}{2} =2m1i=0∑m−11=2m1×m=21

这就使得导数值变成了一个常数,这就违背了做优化的初衷。因为在极值点, ∂ J ( θ ) ∂ θ 0 = 0 \frac{\partial J(\mathbf{\theta})}{\partial\theta_{0}} = 0 ∂θ0∂J(θ)=0,而这里 ∂ J ( θ ) ∂ θ 0 = 1 2 \frac{\partial J(\mathbf{\theta})}{\partial\theta_{0}} = \frac{1}{2} ∂θ0∂J(θ)=21,这就互相矛盾了。上述求导过程中,为什么 ∂ ∂ θ 0 ( ( θ 1 x i + θ 0 ) − y i ) = 1 \frac{\partial}{\partial\theta_{0}}\left( \left( \theta_{1}x_{i} + \theta_{0} \right) - y_{i} \right) = 1 ∂θ0∂((θ1xi+θ0)−yi)=1?前述数学知识中我们已经学过,求偏导数时,把 θ 0 \theta_{0} θ0看成未知数,则把 θ 1 \theta_{1} θ1看成是常量, x i x_{i} xi、 y i y_{i} yi是已知数,也看成是常量,常量的导数为0,因此:

∂ ∂ θ 0 ( ( θ 1 x i + θ 0 ) − y i ) = ∂ θ 0 ∂ θ 0 = 1 \frac{\partial}{\partial\theta_{0}}\left( \left( \theta_{1}x_{i} + \theta_{0} \right) - y_{i} \right) = \frac{\partial\theta_{0}}{\partial\theta_{0}} = 1 ∂θ0∂((θ1xi+θ0)−yi)=∂θ0∂θ0=1

同理,对 θ 1 \theta_{1} θ1求偏导数:

∂ J ( θ ) ∂ θ 1 = ∂ ∂ θ 1 ( 1 2 m ∑ i = 0 m − 1 ( ( θ 1 x i + θ 0 ) − y i ) ) = 1 2 m ∑ i = 0 m − 1 ∂ ∂ θ 1 ( ( θ 1 x i + θ 0 ) − y i ) = 1 2 m ∑ i = 0 m − 1 ∂ ∂ θ 1 ( θ 1 x i ) = 1 2 m ∑ i = 0 m − 1 x i \frac{\partial J(\mathbf{\theta})}{\partial\theta_{1}} = \frac{\partial}{\partial\theta_{1}}\left( \frac{1}{2m}\sum_{i = 0}^{m - 1}\left( \left( \theta_{1}x_{i} + \theta_{0} \right) - y_{i} \right) \right) = \frac{1}{2m}\sum_{i = 0}^{m - 1}{\frac{\partial}{\partial\theta_{1}}(\left( \theta_{1}x_{i} + \theta_{0} \right) - y_{i})} = \frac{1}{2m}\sum_{i = 0}^{m - 1}{\frac{\partial}{\partial\theta_{1}}(\theta_{1}x_{i})} = \frac{1}{2m}\sum_{i = 0}^{m - 1}x_{i} ∂θ1∂J(θ)=∂θ1∂(2m1i=0∑m−1((θ1xi+θ0)−yi))=2m1i=0∑m−1∂θ1∂((θ1xi+θ0)−yi)=2m1i=0∑m−1∂θ1∂(θ1xi)=2m1i=0∑m−1xi

在极值点, ∂ J ( θ ) ∂ θ 1 = 1 2 m ∑ i = 0 m − 1 x i = 0 \frac{\partial J(\mathbf{\theta})}{\partial\theta_{1}} = \frac{1}{2m}\sum_{i = 0}^{m - 1}x_{i} = 0 ∂θ1∂J(θ)=2m1∑i=0m−1xi=0,这个表达式里已经没有了 θ 1 \theta_{1} θ1,因此也没有办法求得 θ 1 \theta_{1} θ1。

此外,在求误差时,参照图3-3来看,已知点的分布实际情况多会是分布在线的上下,如果 θ \theta θ只有一次方,误差值有正有负,做加法时会相互抵消,也会使误差值不真实。要使误差值不相互抵消,可能您会想到可以使用绝对值,即:

J ( θ ) = 1 2 m ∑ i = 0 m − 1 ∣ ( θ 1 x i + θ 0 ) − y i ∣ J\left( \mathbf{\theta} \right) = \frac{1}{2m}\sum_{i = 0}^{m - 1}{|(\theta_{1}x_{i} + \theta_{0}) - y_{i}|} J(θ)=2m1i=0∑m−1∣(θ1xi+θ0)−yi∣

但是这样做,会使这个函数成了一个不可导的函数。前面的数学知识中已经学过,在 ∣ ( θ 1 x i + θ 0 ) − y i ∣ |(\theta_{1}x_{i} + \theta_{0}) - y_{i}| ∣(θ1xi+θ0)−yi∣这个函数的极值点, ( ( θ 1 x i + θ 0 ) − y i ) ((\theta_{1}x_{i} + \theta_{0}) - y_{i}) ((θ1xi+θ0)−yi)和 − ( ( θ 1 x i + θ 0 ) − y i ) - ((\theta_{1}x_{i} + \theta_{0}) - y_{i}) −((θ1xi+θ0)−yi)的导数值不同,产生矛盾,因此不可导。

第2个问题是公式1中系数 1 2 m \frac{1}{2m} 2m1为什么分母有个2?这是为了简化计算,当求导数时, d θ 2 dθ = 2 θ \frac{d\theta^{2}}{\text{dθ}} = 2\theta dθdθ2=2θ,这样就可以把 2 θ 2\theta 2θ前的2约掉。当然,不想要简化计算的话,用 1 m \frac{1}{m} m1也是可以的,因为并不影响求解参数 θ 1 \theta_{1} θ1、 θ 0 \theta_{0} θ0这2个参数的值,而且也不影响求做优化计算。在做优化过程中,函数前有系数 1 2 \frac{1}{2} 21和没有系数 1 2 \frac{1}{2} 21,使函数值往最小值的方向发展趋势是一样的。

要想打好机器学习的数学基础,请参见清华大学出版社的人人可懂系列,包括《人人可懂的微积分》(已上市)、《人人可懂的线性代数》(即将上市)、《人人可懂的概率统计》(即将上市)。

讲了这么多,都是为了让大家解开心中对取公式1这样的优化函数的疑团。我始终认为,只有清楚为什么这么做,才会对知识理解得透彻。

相关推荐
一切尽在,你来12 小时前
1.2 LangChain 1.2.7 版本核心特性与升级点
人工智能·langchain
LYFlied12 小时前
AI大时代下前端跨端解决方案的现状与演进路径
前端·人工智能
深蓝电商API12 小时前
图片验证码识别:pytesseract+opencv入门
人工智能·opencv·计算机视觉·pytesseract
.Katherine௰12 小时前
AI数字人模拟面试机器人
人工智能
光影少年12 小时前
AI 前端 / 高级前端
前端·人工智能·状态模式
zhangshuang-peta12 小时前
OpenCode vs Claude Code vs OpenAI Codex:AI编程助手全面对比
人工智能·ai agent·mcp·peta
Bruk.Liu12 小时前
(LangChain 实战14):基于 ChatMessageHistory 自定义实现对话记忆功能
人工智能·python·langchain·agent
代码改善世界12 小时前
CANN中的AI算子开发:ops-nn仓库深度解读
人工智能
大江东去浪淘尽千古风流人物13 小时前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
云飞云共享云桌面13 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能