代价函数

本文介绍了代价函数在机器学习中的应用,特别是针对深度学习。主要内容包括方差代价函数、交叉熵代价函数以及log似然代价函数。在使用sigmoid激活函数时,推荐使用交叉熵代价函数以优化训练效率。此外,还解释了Softmax回归中的代价函数,强调了正确分类神经元输出概率高时代价更低的原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代价函数

1. 方差代价函数

代价函数经常用方差代价函数(即采用均方误差MSE),比如对于一个神经元(单输入单输出,sigmoid函数),定义其代价函数为:
公式
其中y是我们期望的输出,a为神经元的实际输出【 a=σ(z), where z=wx+b 】。

2. 交叉熵代价函数

公式对应一个神经元,多输入单输出
公式
其中y为期望的输出,a为神经元实际输出【a=σ(z), where z=∑Wj*Xj+b】
与方差代价函数一样,交叉熵代价函数同样有两个性质:

  • 非负性。(所以我们的目标就是最小化代价函数)
  • 当真实输出a与期望输出y接近的时候,代价函数接近于0.(比如y=0,a~0;y=1,a~1时,代价函数都接近0)。

3. 总结

  • 当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢。
  • 不过,你也许会问,为什么是交叉熵函数?导数中不带σ′(z)项的函数有无数种,怎么就想到用交叉熵函数?这自然是有来头的,更深入的讨论就不写了,少年请自行了解。
  • 另外,交叉熵函数的形式是−[ylna+(1−y)ln(1−a)]。而不是−[alny+(1−a)ln(1−y)],为什么?因为当期望输出的y=0时,lny没有意义;当期望y=1时,ln(1-y)没有意义。而因为a是sigmoid函数的实际输出,永远不会等于0或1,只会无限接近于0或者1,因此不存在这个问题。

4. log似然代价函数

Softmax回归中将x分类为类别j的概率为:

### 代价函数的定义 在机器学习中,代价函数(Cost Function)是一个用于衡量模型预测值与实际值之间差异的函数。它通过量化模型预测错误的程度来评估模型性能[^1]。具体而言,代价函数定义在整个训练集上,表示所有样本误差的平均值,即损失函数的平均值[^3]。 例如,在线性回归问题中,常用的代价函数是均方误差(Mean Squared Error, MSE),其公式如下: ```python def mean_squared_error(y_true, y_pred): return ((y_true - y_pred) ** 2).mean() ``` 这里的 `y_true` 表示真实值,`y_pred` 表示预测值,通过计算两者差值的平方并取平均值得到代价函数的值。 --- ### 代价函数的作用 #### 1. 评估模型性能 代价函数的主要作用之一是量化模型在训练数据上的表现。一个较小的代价函数值通常意味着模型能够更准确地预测数据[^4]。通过计算代价函数的值,可以直观地了解模型当前的预测能力。 #### 2. 指导参数调整 在机器学习的训练过程中,目标是找到一组参数 \(\theta\),使得代价函数 \(J(\theta)\) 的值最小。这通常通过优化算法(如梯度下降法)实现,该算法会不断地调整参数以减小代价函数的值[^4]。例如,梯度下降法的核心思想是沿着代价函数的负梯度方向更新参数,从而逐步逼近最优解。 以下是一个简单的梯度下降实现: ```python def gradient_descent(X, y, theta, learning_rate, iterations): m = len(y) for _ in range(iterations): predictions = X.dot(theta) errors = predictions - y gradient = X.T.dot(errors) / m theta -= learning_rate * gradient return theta ``` #### 3. 防止过拟合与欠拟合 通过选择合适的代价函数和正则化项,可以在一定程度上防止模型过拟合或欠拟合训练数据。例如,在代价函数中加入正则化项可以帮助控制模型的复杂度,从而避免过拟合[^4]。正则化项通常以 L1 或 L2 范数的形式添加到目标函数中。 以下是带有 L2 正则化的代价函数示例: ```python def regularized_cost_function(y_true, y_pred, theta, lambda_): mse = ((y_true - y_pred) ** 2).mean() regularization_term = (lambda_ / (2 * len(theta))) * np.sum(theta**2) return mse + regularization_term ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值