损失函数和正则化 Loss Function& Regularization

By Stockholm_Sun
我们来谈谈关于深度学习的概念,损失函数。
这次我将给出一些例子来解释。
(Slide From Stanford CS231n)
CS231n
显然,现在的情况是:猫没有被正确分类,车是对的,青蛙完全错了。
为了使它们完全正确,我们引入了损失函数。现存的损失函数还是比较多样的,这里介绍两种。

SVM loss

SVM损失函数具有如下形式:
在这里插入图片描述
由于自变量的变化像一个合页,所以又被成为“合页函数”。其中,s_y_i表达的含义是正确分类对应的分数。接下来,我们以第一列为例,求一下Loss值:

Losses = max ( 0 , 5.1 - 3.2 + 1 ) + max ( 0 , -1.7 - 3.2 + 1 ) = 2.9

同理,第二、三列的Losses分别为 0 和 12.9 ,最终根据定义求得L值为 L = ( 2.9 + 0 + 12.9 ) / 3 = 5.27
L的大小也就衡量了模型的好坏,越小越好。而且不难得出,L取值范围为 [ 0 , INF )。值得一提的是,上述公式中的为什么要在 s_j - s_y_i 的后面加一个1呢?实际上这个1是一个常数,一般在采用合页函数时就会+1,当然也可以加其它数字。

正则化 Regularization

试想一下,拟合训练集时如果每一个都严格的来拟合,那么对应产生的拟合模型会十分复杂,这实际上是不必要的,因此引入正则化来限制模型变得更复杂。
因此,正则化后L函数的真正的表达式如下:在这里插入图片描述
λ是一个超参数,此外,需要提到的是几个R(W)的形式:
在这里插入图片描述
笼统来说,L2正则化保证了把大型错误放大,L1正则化则更喜欢权重矩阵更稀疏的表达。

Softmax Classifier

它对于每一个分数作出了如下处理:首先将其exp,然后归一化(在这里的表述就是求得权值),损失函数即为所得值的负自然对数,总结下来公式如下:
在这里插入图片描述
不难得出,L取值范围也是 [ 0 , INF )
综上所述,最终的Loss可被归结表述为:
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要添加L2正则化,您可以在模型的损失函数中添加一个称为“L2损失”的项。L2损失是所有权重的平方和的乘积,然后乘以一个正则化系数lambda。这将强制模型权重保持较小的值,从而减少过拟合的风险。您可以使用以下伪代码来实现这个过程: ``` import tensorflow as tf # 定义模型 model = tf.keras.Sequential([ # 添加层 ]) # 定义损失函数和优化器 loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) optimizer = tf.keras.optimizers.Adam() # 添加L2正则化 lambda_val = 0.01 # 在损失函数中添加L2损失项 @tf.function def loss_with_regularization(model, x, y): logits = model(x) loss = loss_fn(y_true=y, y_pred=logits) l2_loss = tf.add_n([tf.nn.l2_loss(v) for v in model.trainable_variables]) total_loss = loss + lambda_val * l2_loss return total_loss # 训练模型 train_ds = tf.data.Dataset.from_tensor_slices((x_train, y_train)).shuffle(10000).batch(32) for epoch in range(num_epochs): for x_batch, y_batch in train_ds: with tf.GradientTape() as tape: loss = loss_with_regularization(model, x_batch, y_batch) grads = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables)) ``` 在这个例子中,我们使用TensorFlow Keras API来构建模型,然后定义了一个新的损失函数loss_with_regularization”,它计算原始损失函数的值,并添加了一个L2损失项。请注意,L2正则化的强度由lambda_val参数控制。您可以根据需要调整它的值,以获得更好的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值