【论文阅读】Defending Large Language Models Against Attacks With Residual Stream Activation Analysis

论文:Defending Large Language Models Against Attacks With Residual Stream Activation Analysis

作者:Amelia Kawasaki 、Andrew Davis 、 Houssam Abbas 

发表:

摘要

以 OpenAI 的 ChatGPT 为代表的大型语言模型 (LLM) 的广泛采用,使防御这些模型上的对抗性威胁的必要性凸显出来。这些攻击通过引入恶意输入来操纵法学硕士的输出,破坏模型的完整性和用户对其输出的信任。为了应对这一挑战,我们的论文提出了一种创新的防御策略,允许白盒访问法学硕士,利用LLM的Transformer层之间的剩余激活分析。我们应用一种新颖的方法来分析残留流中的独特激活模式,以进行攻击提示分类。我们整理了多个数据集来演示这种分类方法如何在多种类型的攻击场景(包括我们新创建的攻击数据集)中具有高精度。此外,我们通过集成法学硕士的安全微调技术来增强模型的弹性,以衡量其对我们检测攻击能力的影响。结果强调了我们的方法在增强对抗性输入的检测和缓解、推进法学硕士运作的安全框架方面的有效性。

方法

贡献:

1、用模型的残差数据集训练一个LigtGBM分类器,对输入prompt进行识别(两类Attack、Benign)

2、使用防御分类检测输入提示词

### 联邦学习中的数据异构性研究 联邦学习是一种分布式机器学习技术,能够在保护用户隐私的同时联合多个节点进行模型训练[^3]。然而,由于参与训练的节点可能来自不同的地理位置、组织或应用场景,其数据来源和特征分布往往存在显著差异,这种现象被称为数据异构性(Statistical Heterogeneity)。数据异构性可能导致全局模型性能下降甚至发生偏差。 #### 数据异构性的定义与影响 数据异构性是指在联邦学习环境中,各客户端的数据分布不符合独立同分布假设(i.i.d. assumption),即不同客户端之间的数据可能存在类别不平衡、样本重叠度低等问题[^1]。这些特性会对联邦学习的效果造成负面影响,具体表现为: - **模型收敛速度变慢**:传统联邦平均算法(FedAvg)在面对非独立同分布(Non-IID)数据时,可能会因为局部最优解的存在而导致整体收敛效率降低[^4]。 - **模型泛化能力减弱**:如果某些类别的数据仅存在于部分客户端,则全局模型对该类别的预测准确性可能大幅下降[^2]。 #### 解决数据异构性的方法概述 为了缓解数据异构性带来的问题,研究人员提出了多种改进策略,主要包括以下几个方面: 1. **优化本地更新过程** 部分工作通过调整本地目标函数的形式来增强对 Non-IID 数据的适应能力。例如,FedProx 方法引入了一个额外的正则化项,用于约束本地模型参数偏离全局模型的程度,从而减少因数据分布差异引起的震荡效应[^4]。 2. **设计新型聚合机制** 另一种思路是从全局视角出发重新定义模型融合方式。Virtual Homogeneity Learning 是一项最新研究成果,它尝试构建虚拟均质空间使得原本高度异质化的个体贡献变得相对一致,最终达到改善测试表现的目的[^5]。 3. **采用元学习框架** 利用元学习的思想可以快速适配新任务并捕捉跨域规律,这对于应对复杂多样的实际场景尤为适用。尽管目前该方向尚处于探索阶段,但仍展现出巨大潜力值得进一步挖掘。 以下是几篇针对联邦学习中数据异构性展开深入探讨的经典文献推荐供参考: ```plaintext [1] McMahan H B, Moore E, Ramage D, et al. Communication-efficient learning of deep networks from decentralized data[J]. arXiv preprint arXiv:1602.05629, 2016. [2] Li T, Sahu A K, Zaheer M, et al. Federated optimization in heterogeneous networks[M]//Proceedings of MLSys'20 Workshop on Distributed and Private Machine Learning. 2020. [3] Smith V, Chiang M, Sanjabi M, et al. Federated multi-task learning[C]//Advances in Neural Information Processing Systems. 2017. [4] Reddi S J, Charles Z, Zaheer M, et al. On the convergence of fedavg on non-iid data[C]//International Conference on Learning Representations. 2020. [5] Tang Z, Zhang Y, Shi S, et al. Virtual homogeneity learning: Defending against data heterogeneity in federated learning[C]//International Conference on Machine Learning. PMLR, 2022: 21111-21132. ``` ### 示例代码片段展示如何模拟 Non-IID 数据环境 下面提供了一段 Python 实现代码用来生成简单的分类任务下具有不同程度标签分离特性的合成数据集。 ```python import numpy as np from sklearn.datasets import make_classification def generate_non_iid_data(num_clients=10, num_classes=5, alpha=0.5): """ Generate synthetic classification dataset with varying levels of label skew. Parameters: num_clients (int): Number of clients to distribute data among. num_classes (int): Total number of classes present within entire population. alpha (float): Dirichlet distribution concentration parameter controlling degree of imbalance between partitions. Returns: dict: Dictionary mapping each client ID to their respective training samples & labels. """ X, y = make_classification(n_samples=500 * num_clients, n_features=20, n_informative=num_classes, n_redundant=0, n_clusters_per_class=1, weights=None, flip_y=0., class_sep=1.) # Split global indices into per-client shards via dirichlet sampling over one-hot encoded targets proportions = [] for i in range(num_clients): proportion = np.random.dirichlet(np.repeat(alpha, num_classes)) proportions.append(proportion) cumulative_proportions = np.cumsum([p / sum(p) for p in proportions], axis=-1).tolist() partitioned_indices = [[] for _ in range(num_clients)] sorted_idx = np.argsort(y) current_client_id = 0 start_index = 0 while True: end_index = next((idx for idx,val in enumerate(cumulative_proportions[current_client_id]) if val >= ((sorted_idx-start_index)/len(sorted_idx))[start_index]), None) if not end_index: break selected_sample_ids = list(range(start_index,end_index)) partitioned_indices[current_client_id].extend(selected_sample_ids) current_client_id +=1 if current_client_id>=num_clients: break start_index=end_index result_dict={f"Client_{cid}": {"data":X[idx],"labels":y[idx]} for cid,idx in zip(range(len(partitioned_indices)),partitioned_indices)} return result_dict if __name__ == "__main__": generated_datasets = generate_non_iid_data() print({k:v["labels"].shape for k,v in generated_datasets.items()}) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值