Mitigating Exaggerated Safety in Large Language Models

本文是LLM系列文章,针对《Mitigating Exaggerated Safety in Large Language Models》的翻译。

减轻大型语言模型中夸大的安全性

摘要

随着大型语言模型 (LLM) 的普及,将模型安全性与实用性相结合变得越来越重要。面临的挑战是确保LLM能够识别并拒绝危险的提示,而不牺牲他们提供帮助的能力。 “夸大安全”的问题表明这有多么困难。为了减少过度的安全行为(发现有 26.1% 的安全提示被错误分类为危险并被拒绝),我们结合使用 XSTest 数据集提示以及交互式、上下文和少量提示来检查 LLM 的决策范围例如 Llama2、Gemma、Command R+ 和 Phi-3。我们发现少量提示最适合 Llama2,交互式提示最适合 Gemma,上下文提示最适合 Command R+ 和 Phi-3。通过结合使用这些提示策略,我们能够将所有LLM的夸大安全行为总体减少 92.9%。我们的工作提出了多种提示策略来越狱LLM的决策过程,使他们能够在拒绝不安全的提示和保持帮助之间找到一条严格的界限。

1 引言

2 相关工作

3 方法

4 评估

5 结果

6 讨论

7 结论

总之,我们的研究解决了在日益流行的大型语言模型(LLM)领域中平衡模型安全性和实用性的迫切需要。随着“夸大安全”的出现成为一项重大挑战,其中很大一部分安全提示被错误分类为危险并被拒绝,我们的研究提供了一种综合方法来减轻此类行为。通过利用 XSTest 数据集提示与交互式、上下文和

在关系抽取中,实体偏差(entity bias)是指模型对某些实体的过度依赖,从而导致在新实体或少见实体上的泛化能力下降。这种偏差可能源于训练数据中的实体分布不平衡,或者模型本身在学习关系表示时未能有效解耦实体特征与关系特征[^4]。 为了解决这一问题,研究人员提出了基于变分方法(Variational Method)的框架来减少实体偏差的影响。该方法的核心思想是通过引入潜在变量建模实体表示中的不确定性,并在训练过程中鼓励模型对不同实体的鲁棒性[^1]。 具体来说,这种方法通常包括以下步骤: 1. **构建实体嵌入的不确定性表示**:使用变分推断的方法,将实体嵌入表示为一个概率分布(如高斯分布),而不是固定的向量。这样可以通过采样不同的实体表示来增强模型对实体变化的适应能力。 2. **优化目标函数**:在传统的关系分类损失函数基础上,加入 KL 散度项以约束实体嵌入的概率分布接近一个先验分布(通常是标准正态分布)。这有助于防止模型对特定实体表示的过度依赖。 3. **多任务学习策略**:有时会结合辅助任务(如实体类型预测)来进一步引导模型学习去偏的实体表示。 这种方法的优势在于其理论基础扎实,并且在多个基准数据集上展示了对实体偏差的有效缓解效果[^1]。 以下是一个简单的伪代码示例,展示如何实现变分方法的基本结构: ```python import torch import torch.nn as nn import torch.distributions as dist class VariationalEntityEncoder(nn.Module): def __init__(self, input_dim, latent_dim): super(VariationalEntityEncoder, self).__init__() self.fc_mu = nn.Linear(input_dim, latent_dim) self.fc_logvar = nn.Linear(input_dim, latent_dim) def reparameterize(self, mu, logvar): std = torch.exp(0.5 * logvar) eps = torch.randn_like(std) return mu + eps * std def forward(self, x): mu = self.fc_mu(x) logvar = self.fc_logvar(x) z = self.reparameterize(mu, logvar) return z, mu, logvar class RelationClassifier(nn.Module): def __init__(self, latent_dim, num_relations): super(RelationClassifier, self).__init__() self.classifier = nn.Sequential( nn.Linear(latent_dim * 2, 512), nn.ReLU(), nn.Linear(512, num_relations) ) def forward(self, h_head, h_tail): combined = torch.cat((h_head, h_tail), dim=1) logits = self.classifier(combined) return logits # 损失函数 def vae_loss(z_head, mu_head, logvar_head, z_tail, mu_tail, logvar_tail, relation_logits, labels): # KL散度损失 kl_div_head = -0.5 * torch.sum(1 + logvar_head - mu_head.pow(2) - logvar_head.exp()) kl_div_tail = -0.5 * torch.sum(1 + logvar_tail - mu_tail.pow(2) - logvar_tail.exp()) kl_loss = kl_div_head + kl_div_tail # 分类损失 class_loss = nn.CrossEntropyLoss()(relation_logits, labels) # 总损失 total_loss = class_loss + 0.1 * kl_loss # 系数可调 return total_loss # 示例用法 entity_encoder_head = VariationalEntityEncoder(input_dim=300, latent_dim=100) entity_encoder_tail = VariationalEntityEncoder(input_dim=300, latent_dim=100) relation_classifier = RelationClassifier(latent_dim=100, num_relations=50) # 假设输入实体表示 head_emb = torch.randn(32, 300) # batch_size x embedding_dim tail_emb = torch.randn(32, 300) z_head, mu_head, logvar_head = entity_encoder_head(head_emb) z_tail, mu_tail, logvar_tail = entity_encoder_tail(tail_emb) logits = relation_classifier(z_head, z_tail) labels = torch.randint(0, 50, (32,)) loss = vae_loss(z_head, mu_head, logvar_head, z_tail, mu_tail, logvar_tail, logits, labels) loss.backward() ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UnknownBody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值