ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

机器学习模型描述入门:从假设函数到代价函数的线性回归解析

机器学习模型描述入门:从假设函数到代价函数的线性回归解析 1. 从“房价预测”到“模型描述”一个经典问题的引入如果你刚开始接触吴恩达老师的机器学习课程到了第四讲“模型描述”这里可能会觉得有点抽象。什么“假设函数”、“参数”、“代价函数”一堆新名词扑面而来。别急我们从一个最经典的例子入手把这些概念串起来你会发现它们其实非常直观。想象一下你是一个房产中介或者你只是想预测一下自己所在城市的房价。你手头有一份数据记录了不同面积单位平方米的房子对应的售价。你的目标是当有一个新房源只知道它的面积时你能大概估出它值多少钱。这就是一个最典型的监督学习问题更具体地说是回归问题。我们有一些“正确答案”的数据已知面积和对应售价希望计算机从这些数据中学习一个规律模型然后用这个规律去预测新的、未知的答案。那么这个“规律”怎么表示呢这就是“模型描述”要解决的核心问题。在机器学习里我们不会说“我猜大概是面积乘以某个数”而是用一套严谨的数学语言来描述它。吴恩达老师在这一讲里就是为我们搭建起这套语言的框架。理解了这个框架你再看任何线性模型甚至更复杂的模型都会有一种“哦原来如此”的通透感。2. 假设函数用数学公式“猜”出规律面对那一堆面积和售价的散点图我们肉眼可能觉得“好像面积越大价格越高大致呈一条斜向上的直线”。在机器学习中我们把这种“猜测”或“假设”的形式化表达称为假设函数。对于这个房价预测问题最简单的假设就是房价和面积成一次线性关系。我们用 (h) 来表示这个假设函数公式如下[ h_\theta(x) \theta_0 \theta_1 x ]别被这个公式吓到我们一点点拆解( x ) 这是我们的输入特征。在这个例子里就是房屋的面积。它是已知的。( h_\theta(x) ) 这是假设函数给出的预测输出。对于输入的面积 ( x )它预测出一个房价。( \theta_0, \theta_1 ) 这是模型的参数也叫权重。它们是我们要通过数据“学习”出来的核心。( \theta_1 ) 通常被称为斜率或权重。它表示“面积每增加1平方米房价预计增加 ( \theta_1 ) 万元”。它决定了直线的倾斜程度。( \theta_0 ) 通常被称为截距或偏置。它表示“当面积为0时房子的基础价格”。在现实中它可能代表无法由面积解释的固定成本比如地段、品牌溢价等。所以这个假设函数 ( h_\theta(x) \theta_0 \theta_1 x ) 的本质就是定义了一族直线。( \theta_0 ) 和 ( \theta_1 ) 取不同的值就得到不同的直线。机器学习的任务就是从这无穷多条可能的直线中找到最贴合我们数据的那一条。一个关键的心得初学者常混淆“假设函数”和最终的“模型”。在训练开始前( h_\theta(x) ) 只是一个带有未知参数( \theta )的公式框架是一个“假设的模型结构”。只有当通过数据学习确定了 ( \theta_0 ) 和 ( \theta_1 ) 的具体数值后这个“假设函数”才变成一个具体的、可用的“预测模型”。理解这个区别对后续理解训练过程至关重要。3. 代价函数量化“猜”得有多不准现在我们有了一族可能的直线假设函数也有一堆真实的房价数据点。怎么判断哪条直线最好呢直观上当然是那条“离所有数据点最近”的直线最好。在数学上我们需要一个定量的标准来衡量这条直线“不准”的程度。这个标准就是代价函数吴恩达老师课程中常用 ( J(\theta_0, \theta_1) ) 来表示。最常用的代价函数是均方误差。它的思想非常朴素对于训练数据中的每一个房子面积 ( x^{(i)} )真实售价 ( y^{(i)} )我们用当前的假设函数算一个预测价 ( h_\theta(x^{(i)}) )。计算预测价和真实价的差距( h_\theta(x^{(i)}) - y^{(i)} )。这个差值就是误差。误差有正有负直接相加会抵消。所以我们取误差的平方 ( (h_\theta(x^{(i)}) - y^{(i)})^2 )这样所有误差都变成正数且放大了大的误差。把所有训练样本的误差平方加起来再除以样本数量的2倍除以2是为了后续求导计算方便就得到了代价函数[ J(\theta_0, \theta_1) \frac{1}{2m} \sum_{i1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 ]这里 ( m ) 代表训练样本的总数。这个公式的威力在于代价函数 ( J ) 的值完全由参数 ( \theta_0 ) 和 ( \theta_1 ) 决定。因为 ( h_\theta(x) ) 里面就是这两个参数。所以( J(\theta_0, \theta_1) ) 实际上是一个关于 ( \theta_0 ) 和 ( \theta_1 ) 的二元函数。我们的目标变得极其清晰找到一对 ( \theta_0 ) 和 ( \theta_1 ) 的数值使得代价函数 ( J(\theta_0, \theta_1) ) 的值最小。注意为什么用平方误差而不是绝对误差这其实有深刻的数学和概率论背景。简单来说平方误差函数是“光滑”的处处可导这使我们能使用强大的梯度下降等优化算法。而绝对误差函数在零点处不可导优化起来更困难。此外在假设误差服从高斯分布的前提下最小化平方误差等价于最大似然估计这是一个非常良好的性质。4. 可视化理解代价函数的“碗状”曲面对于线性回归 ( h_\theta(x) \theta_0 \theta_1 x ) 和均方误差代价函数 ( J )我们可以将其可视化这能极大地加深理解。想象一个三维空间X轴 代表参数 ( \theta_1 )斜率。Y轴 代表参数 ( \theta_0 )截距。Z轴 代表代价函数 ( J(\theta_0, \theta_1) ) 的值。对于一组给定的训练数据每一个 ( (\theta_0, \theta_1) ) 的组合都对应一条具体的直线也对应一个具体的代价 ( J )。当我们遍历所有可能的 ( \theta_0, \theta_1 ) 时( J ) 的值在三维空间中会形成一个曲面。关键来了这个曲面通常是一个凸函数形状像一个“碗”或者“汤盆”。这个“碗”的碗底最低点对应的 ( (\theta_0, \theta_1) ) 坐标就是使得代价函数最小的那组参数也就是我们梦寐以求的“最佳直线”的参数为什么是凸函数很重要因为凸函数只有一个全局最小值没有局部最小值。这意味着无论我们从“碗边”的哪个地方开始只要沿着最陡的下坡方向走最终一定能到达碗底全局最优解。这个“下坡”的过程就是下一讲要介绍的梯度下降算法。我们可以先看一个简化情况假设 ( \theta_0 0 )即假设函数为 ( h_\theta(x) \theta_1 x )。此时代价函数 ( J(\theta_1) ) 是一个关于 ( \theta_1 ) 的一元二次函数图像是一个抛物线。当 ( \theta_1 ) 取某个值时抛物线达到最低点此时的直线最拟合数据。一个实用的理解技巧在调试自己模型时如果条件允许可以尝试绘制代价函数随迭代次数变化的曲线。如果曲线平滑下降并最终趋于平稳说明学习过程良好如果曲线震荡剧烈或上升很可能意味着学习率设置不当这是后话但根源在于对代价函数行为的理解。5. 从单特征到多特征模型的通用描述上面的例子只用了“面积”一个特征来预测房价。现实中房价显然还受房间数量、房龄、地段、楼层等多种因素影响。我们的模型需要能容纳这些信息。这时假设函数就需要扩展。假设我们有 ( n ) 个特征( x_1 ) 面积( x_2 ) 房间数( x_3 ) 房龄...( x_n ) 第n个特征为了公式整洁我们引入一个虚拟特征( x_0 1 )。这样多变量的线性回归假设函数可以写成非常简洁的形式[ h_\theta(x) \theta_0 x_0 \theta_1 x_1 \theta_2 x_2 ... \theta_n x_n ]用求和符号表示为[ h_\theta(x) \sum_{i0}^{n} \theta_i x_i ]更进一步用向量化的方式表示会带来计算和思维上的巨大便利。我们把所有参数写成一个 ( n1 ) 维的列向量 ( \mathbf{\theta} )把所有特征也写成一个 ( n1 ) 维的列向量 ( \mathbf{x} )[ \mathbf{\theta} \begin{bmatrix} \theta_0 \ \theta_1 \ \theta_2 \ \vdots \ \theta_n \end{bmatrix}, \quad \mathbf{x} \begin{bmatrix} x_0 \ x_1 \ x_2 \ \vdots \ x_n \end{bmatrix} ]那么假设函数就是这两个向量的内积或转置相乘[ h_\theta(x) \mathbf{\theta}^T \mathbf{x} ]这个形式极其强大且统一。无论有多少个特征模型描述的核心依然是一组参数 ( \mathbf{\theta} ) 与输入特征 ( \mathbf{x} ) 的线性组合。对应的代价函数也扩展为[ J(\mathbf{\theta}) \frac{1}{2m} \sum_{i1}^{m} (h_\theta(\mathbf{x}^{(i)}) - y^{(i)})^2 \frac{1}{2m} \sum_{i1}^{m} ( \mathbf{\theta}^T \mathbf{x}^{(i)} - y^{(i)} )^2 ]这里有一个至关重要的实操点特征缩放。当特征 ( x_1 )面积范围0-200平米和 ( x_2 )房间数范围1-5的数量级差异巨大时它们对应的参数 ( \theta_1 ) 和 ( \theta_2 ) 的尺度也会差异巨大。这会导致代价函数的“碗”形状变得又高又窄像一条峡谷使得梯度下降算法收敛得非常慢甚至难以收敛。因此在实际操作中将不同特征缩放到相近的数值范围例如 -1 到 1 之间是一个几乎必须的步骤。常用方法有“均值归一化”和“标准化”。6. 模型描述的本质机器学习的基本框架通过“房价预测”这个例子走完一遍我们再回过头看“模型描述”这一讲它的核心其实是为所有监督学习尤其是回归问题建立了一个清晰、通用的框架。这个框架可以概括为以下三步确定模型形式假设函数根据问题选择一个函数族来表达输入 ( x ) 和输出 ( y ) 之间的关系。线性回归只是最简单的一种线性关系。后续我们会看到逻辑回归用于分类、神经网络复杂非线性关系等它们都有自己对应的假设函数形式。这一步体现了“模型假设”是机器学习的建模艺术。定义评价标准代价函数定义一个函数用来量化“模型预测”与“真实答案”之间的差距。均方误差是回归问题最常用的标准。对于分类问题我们会用交叉熵损失等不同的代价函数。代价函数是驱动模型学习的“指挥棒”。寻找最优参数优化目标将学习问题转化为一个数学优化问题寻找一组模型参数使得代价函数的值最小化。即 [ \underset{\mathbf{\theta}}{\text{minimize}} \quad J(\mathbf{\theta}) ]我个人在学习和教学中的一个深刻体会是很多初学者在后续学习更复杂模型如神经网络时感到困惑往往是因为没有把这个基础框架吃透。无论模型多复杂其描述都逃不开这三要素模型结构、损失函数、优化算法。吴恩达老师在这里用最简单的线性回归把这套框架稳稳地立了起来。吃透这一讲后续内容不过是在这个框架上更换更复杂的“零件”而已。7. 常见误区与问题排查思路即使理解了概念在具体实现或思考时也常会遇到一些困惑。下面梳理几个典型问题问题一为什么非要引入 ( x_0 1 ) 这个虚拟特征这完全是为了数学表达和代码实现的优雅与统一。如果不引入 ( x_0 )假设函数是 ( h \theta_0 \theta_1 x_1 ... )参数 ( \theta_0 ) 需要单独处理。引入 ( x_0 1 ) 后( \theta_0 ) 就可以和其他参数 ( \theta_1, \theta_2, ... ) 一样视为与某个特征恒为1相乘的权重从而可以用统一的向量内积形式 ( \mathbf{\theta}^T \mathbf{x} ) 来表示在编程时用一个循环或矩阵运算就能搞定所有计算。问题二代价函数值很大一定是模型错了吗不一定。代价函数的值本身没有绝对意义它的大小严重依赖于标签 ( y ) 的尺度。比如预测房价如果房价单位是“万元”误差平方和可能几千如果单位是“元”误差平方和可能上亿。因此我们更关心的是代价函数在优化过程中是否在持续下降以及下降到一个相对稳定的值。有时我们也会用“均方根误差”这种与原始标签同量级的指标来直观判断模型精度。问题三线性模型描述能力太弱是不是没用恰恰相反。线性模型是许多复杂模型的基础其解释性强、计算效率高在特征工程得力的情况下比如对特征进行组合、变换可以解决相当多的问题。更重要的是理解线性模型是理解一切复杂模型的基石。很多非线性模型在局部都可以用线性模型来近似。先掌握线性模型这个“麻雀”将其五脏六腑剖析清楚再去研究“雄鹰”复杂模型会事半功倍。问题四如何判断我的“模型描述”是否合适这是一个模型诊断问题在课程后期会涉及。一个初步的检查方法是绘制学习曲线在训练集和验证集上分别计算代价函数随训练样本数增加的变化。如果两者都很高且接近可能是欠拟合说明模型太简单比如用线性描述明显非线性的关系需要更复杂的假设函数。如果训练集代价很低但验证集代价很高则是过拟合说明模型可能过于复杂记住了训练数据中的噪声。线性回归描述简单通常面临的是欠拟合风险。
返回列表