sigmoid函数求导_常见的损失函数(loss function)总结

损失函数评估模型预测与真实值的偏差,影响模型性能。本文总结了常见的损失函数,包括0-1损失、绝对值损失、对数损失、平方损失、指数损失、Hinge损失、感知损失和交叉熵损失,探讨它们的特点、应用场景及与模型的关系。特别指出,交叉熵损失在Sigmoid或Softmax函数中效果更佳。
摘要由CSDN通过智能技术生成

f85966aee4969fdddde3c789bf32b9db.png

损失函数用来评价模型的预测值真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。

损失函数分为经验风险损失函数结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。

常见的损失函数以及其优缺点如下:

  1. 0-1损失函数(zero-one loss)

0-1损失是指预测值和目标值不相等为1, 否则为0:

特点:

(1)0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用.

(2)感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足

时认为相等,

2. 绝对值损失函数

绝对值损失函数是计算预测值与目标值的差的绝对值:

3. log对数损失函数

log对数损失函数的标准形式如下:

特点:

(1) log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。

(2)健壮性不强,相比于hinge loss对噪声更敏感。

(3)逻辑回归的损失函数就是log对数损失函数。

4. 平方损失函数

平方损失函数标准形式如下:

特点:

(1)经常应用与回归问题

5. 指数损失函数(exponential loss)

指数损失函数的标准形式如下:

特点:

(1)对离群点、噪声非常敏感。经常用在AdaBoost算法中。

6. Hinge 损失函数

Hinge损失函数标准形式如下:

特点:

1. whale_optimization 在 Matlab 中实现鲸鱼优化算法(Whale Optimization Algorithm)需要先定义目标函数。以下是一个简单的示例: ``` function f = obj_fun(x) f = x(1)^2 + x(2)^2; end ``` 然后,可以使用以下代码来实现鲸鱼优化算法: ``` function [bestSol, bestFitness] = whale_optimization(obj_fun, nVar, lb, ub) % 参数说明: % obj_fun:目标函数句柄 % nVar:变量个数 % lb:每个变量的下限 % ub:每个变量的上限 % 初始化种群 popSize = 10; maxIter = 100; emptyWhale.Position = []; emptyWhale.Fitness = []; pop = repmat(emptyWhale, popSize, 1); for i = 1:popSize pop(i).Position = unifrnd(lb, ub, 1, nVar); pop(i).Fitness = obj_fun(pop(i).Position); end % 迭代优化 for it = 1:maxIter for i = 1:popSize % 更新位置 A = 2 * rand(1, nVar) - 1; C = 2 * rand(1, nVar); l = rand(); p = rand(); for j = 1:nVar if p < 0.5 if abs(A(j)) >= 1 rand_leader_index = floor(popSize * rand() + 1); X_rand = pop(rand_leader_index).Position; D_X_rand = abs(C(j) * X_rand(j) - pop(i).Position(j)); pop(i).Position(j) = X_rand(j) - A(j) * D_X_rand; else D_Leader = abs(C(j) * bestSol.Position(j) - pop(i).Position(j)); pop(i).Position(j) = bestSol.Position(j) - A(j) * D_Leader; end else dist = abs(bestSol.Position(j) - pop(i).Position(j)); pop(i).Position(j) = dist * exp(b * l) * cos(2 * pi * l) + bestSol.Position(j); end end % 对位置进行限制 pop(i).Position = max(pop(i).Position, lb); pop(i).Position = min(pop(i).Position, ub); % 更新适应度 pop(i).Fitness = obj_fun(pop(i).Position); % 更新最优解 if pop(i).Fitness < bestSol.Fitness bestSol = pop(i); end end end % 返回最优解及其适应度 bestFitness = bestSol.Fitness; bestSol = bestSol.Position; end ``` 2. gru_loss 在 Matlab 中实现 GRU 模型的损失函数需要使用交叉熵损失函数。以下是一个简单的示例: ``` function loss = gru_loss(y_pred, y_true) % 参数说明: % y_pred:模型预测结果,大小为 [batch_size, num_classes] % y_true:真实标签,大小为 [batch_size, num_classes] eps = 1e-10; y_pred = max(min(y_pred, 1 - eps), eps); % 防止出现 log(0) 的情况 loss = -sum(y_true .* log(y_pred), 2); end ``` 3. gru_predict 在 Matlab 中使用 GRU 模型进行预测需要先定义模型。以下是一个示例: ``` function model = gru_model(num_classes) % 参数说明: % num_classes:分类数 inputSize = 100; hiddenSize = 64; outputSize = num_classes; model = struct(); model.Wx = randn(inputSize, hiddenSize); model.Wh = randn(hiddenSize, hiddenSize); model.b = zeros(1, hiddenSize); model.Wy = randn(hiddenSize, outputSize); model.by = zeros(1, outputSize); end ``` 然后,可以使用以下代码进行预测: ``` function y_pred = gru_predict(model, X) % 参数说明: % model:GRU 模型 % X:输入数据,大小为 [batch_size, inputSize, sequence_length] [batch_size, inputSize, sequence_length] = size(X); hiddenSize = size(model.Wx, 2); outputSize = size(model.Wy, 2); h = zeros(batch_size, hiddenSize); for t = 1:sequence_length x_t = reshape(X(:, :, t), [batch_size, inputSize]); z_t = sigmoid(x_t * model.Wx + h * model.Wh + model.b); r_t = sigmoid(x_t * model.Wxr + h * model.Whr + model.br); h_tilde_t = tanh(x_t * model.Wxh + (r_t .* h) * model.Whh + model.bh); h = (1 - z_t) .* h + z_t .* h_tilde_t; end y_pred = softmax(h * model.Wy + model.by); end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值