AI安全必修課:模型偏見檢測與緩解實戰

點擊AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力80G大顯存按量計費靈活彈性頂級配置學生更享專屬優惠


引言:AI偏見——看不見的技術債務

2018年,亞馬遜不得不廢棄一套用于簡歷篩選的AI系統,因為它系統性歧視女性求職者。該系統通過分析十年間的招聘數據發現,男性求職者更受歡迎,于是學會了自動降低包含"女子俱樂部"、"女子學院"等詞匯的簡歷評分。

這類事件揭示了一個嚴峻現實:AI模型會學習并放大人類社會的偏見。隨著AI系統在招聘、信貸、司法等高風險領域的廣泛應用,模型偏見已從技術問題演變為社會責任和商業風險問題。

本文將深入探討AI偏見的檢測與緩解技術,提供從理論到實踐的完整解決方案,幫助開發者構建更加公平、負責任的AI系統。

一、偏見類型與公平性定義

1.1 偏見的主要類型

AI系統中的偏見主要來源于三個方面:
在這里插入圖片描述

1.2 公平性的數學定義

不同的公平性定義對應不同的技術方案和倫理立場:

# 公平性定義實現示例
import numpy as np
from sklearn.metrics import confusion_matrixdef statistical_parity(y_pred, sensitive_attr):"""統計平價:預測結果在不同群體中分布相似P(?=1|A=0) = P(?=1|A=1)"""group_0 = y_pred[sensitive_attr == 0]group_1 = y_pred[sensitive_attr == 1]return abs(group_0.mean() - group_1.mean())def equal_opportunity(y_true, y_pred, sensitive_attr):"""均等機會:真正例率在不同群體中相等P(?=1|Y=1,A=0) = P(?=1|Y=1,A=1)"""tn_0, fp_0, fn_0, tp_0 = confusion_matrix(y_true[sensitive_attr == 0], y_pred[sensitive_attr == 0]).ravel()tn_1, fp_1, fn_1, tp_1 = confusion_matrix(y_true[sensitive_attr == 1], y_pred[sensitive_attr == 1]).ravel()tpr_0 = tp_0 / (tp_0 + fn_0) if (tp_0 + fn_0) > 0 else 0tpr_1 = tp_1 / (tp_1 + fn_1) if (tp_1 + fn_1) > 0 else 0return abs(tpr_0 - tpr_1)def predictive_equality(y_true, y_pred, sensitive_attr):"""預測平等:假正例率在不同群體中相等P(?=1|Y=0,A=0) = P(?=1|Y=0,A=1)"""tn_0, fp_0, fn_0, tp_0 = confusion_matrix(y_true[sensitive_attr == 0], y_pred[sensitive_attr == 0]).ravel()tn_1, fp_1, fn_1, tp_1 = confusion_matrix(y_true[sensitive_attr == 1], y_pred[sensitive_attr == 1]).ravel()fpr_0 = fp_0 / (fp_0 + tn_0) if (fp_0 + tn_0) > 0 else 0fpr_1 = fp_1 / (fp_1 + tn_1) if (fp_1 + tn_1) > 0 else 0return abs(fpr_0 - fpr_1)

二、偏見檢測與評估框架

2.1 全面評估指標系統

構建完整的偏見評估需要多維度指標:

class BiasAuditFramework:"""AI系統偏見審計框架"""def __init__(self, y_true, y_pred, sensitive_attr):self.y_true = y_trueself.y_pred = y_predself.sensitive_attr = sensitive_attrself.groups = np.unique(sensitive_attr)def calculate_all_metrics(self):"""計算所有偏見評估指標"""metrics = {}# 基礎性能指標metrics['accuracy'] = self._calculate_group_accuracy()metrics['precision'] = self._calculate_group_precision()metrics['recall'] = self._calculate_group_recall()metrics['f1_score'] = self._calculate_group_f1()# 公平性指標metrics['statistical_parity'] = statistical_parity(self.y_pred, self.sensitive_attr)metrics['equal_opportunity'] = equal_opportunity(self.y_true, self.y_pred, self.sensitive_attr)metrics['predictive_equality'] = predictive_equality(self.y_true, self.y_pred, self.sensitive_attr)# 高級指標metrics['disparate_impact'] = self._calculate_disparate_impact()metrics['theil_index'] = self._calculate_theil_index()return metricsdef _calculate_group_accuracy(self):"""計算各群體準確率"""accuracy_dict = {}for group in self.groups:mask = self.sensitive_attr == groupcorrect = (self.y_pred[mask] == self.y_true[mask]).mean()accuracy_dict[f'group_{group}'] = correctreturn accuracy_dictdef _calculate_disparate_impact(self):"""計算差異影響指數4/5規則:小于0.8或大于1.25可能存在偏見"""group_0 = self.y_pred[self.sensitive_attr == 0]group_1 = self.y_pred[self.sensitive_attr == 1]positive_rate_0 = group_0.mean()positive_rate_1 = group_1.mean()# 避免除零錯誤if min(positive_rate_0, positive_rate_1) > 0:return min(positive_rate_0, positive_rate_1) / max(positive_rate_0, positive_rate_1)return 0def _calculate_theil_index(self):"""計算泰爾指數(不平等程度度量)"""# 實現泰爾指數計算passdef generate_audit_report(self):"""生成詳細偏見審計報告"""metrics = self.calculate_all_metrics()report = """AI系統偏見審計報告===================性能差異分析:"""for metric_name, metric_value in metrics.items():if isinstance(metric_value, dict):report += f"\n{metric_name}:\n"for group, value in metric_value.items():report += f"  {group}: {value:.4f}\n"else:report += f"\n{metric_name}: {metric_value:.4f}"# 添加偏見檢測結果report += "\n\n偏見檢測結果:\n"if metrics['disparate_impact'] < 0.8:report += "??  檢測到潛在偏見:差異影響指數 < 0.8\n"if metrics['statistical_parity'] > 0.1:report += "??  檢測到潛在偏見:統計差異 > 0.1\n"return report# 使用示例
# audit = BiasAuditFramework(y_true, y_pred, sensitive_attributes)
# report = audit.generate_audit_report()
# print(report)

2.2 可視化分析工具

可視化是理解偏見模式的重要手段:

import matplotlib.pyplot as plt
import seaborn as snsdef plot_fairness_metrics(metrics_dict, model_names):"""繪制多個模型的公平性指標對比"""fig, axes = plt.subplots(2, 2, figsize=(15, 12))# 統計差異對比statistical_parities = [m['statistical_parity'] for m in metrics_dict]axes[0, 0].bar(model_names, statistical_parities)axes[0, 0].set_title('Statistical Parity Difference')axes[0, 0].set_ylabel('Difference')# 均等機會對比equal_opportunities = [m['equal_opportunity'] for m in metrics_dict]axes[0, 1].bar(model_names, equal_opportunities)axes[0, 1].set_title('Equal Opportunity Difference')axes[0, 1].set_ylabel('Difference')# 差異影響指數對比disparate_impacts = [m['disparate_impact'] for m in metrics_dict]axes[1, 0].bar(model_names, disparate_impacts)axes[1, 0].set_title('Disparate Impact Ratio')axes[1, 0].set_ylabel('Ratio')axes[1, 0].axhline(y=0.8, color='r', linestyle='--', label='4/5 threshold')# 準確率對比accuracies = [list(m['accuracy'].values()) for m in metrics_dict]x = np.arange(len(model_names))width = 0.35for i, model_acc in enumerate(accuracies):axes[1, 1].bar(x[i] - width/2, model_acc[0], width, label='Group 0')axes[1, 1].bar(x[i] + width/2, model_acc[1], width, label='Group 1')axes[1, 1].set_title('Accuracy by Group')axes[1, 1].set_ylabel('Accuracy')axes[1, 1].set_xticks(x)axes[1, 1].set_xticklabels(model_names)axes[1, 1].legend()plt.tight_layout()plt.show()def plot_confidence_distribution(y_true, y_pred, sensitive_attr, model_name):"""繪制不同群體的置信度分布"""groups = np.unique(sensitive_attr)plt.figure(figsize=(10, 6))for group in groups:mask = sensitive_attr == groupgroup_probs = y_pred[mask]  # 假設y_pred是概率值sns.kdeplot(group_probs, label=f'Group {group}', fill=True)plt.title(f'Confidence Distribution - {model_name}')plt.xlabel('Prediction Confidence')plt.ylabel('Density')plt.legend()plt.show()

三、偏見緩解技術實戰

3.1 預處理方法:數據重加權

from sklearn.utils import class_weightclass DataReweighting:"""數據重加權偏見緩解"""def __init__(self, sensitive_attr, target_attr):self.sensitive_attr = sensitive_attrself.target_attr = target_attrself.weights = Nonedef calculate_fairness_weights(self):"""計算公平性權重"""# 交叉頻數分析cross_tab = pd.crosstab(self.sensitive_attr, self.target_attr)# 計算理想分布(每個群體-類別組合的期望比例)ideal_distribution = cross_tab.sum(axis=1) / len(self.sensitive_attr)# 計算權重(反比于實際分布)weights = {}for sens_group in cross_tab.index:for target_class in cross_tab.columns:actual_prob = cross_tab.loc[sens_group, target_class] / cross_tab.sum().sum()ideal_prob = ideal_distribution[sens_group] * (cross_tab[target_class].sum() / cross_tab.sum().sum())if actual_prob > 0:weights[(sens_group, target_class)] = ideal_prob / actual_probelse:weights[(sens_group, target_class)] = 0self.weights = weightsreturn weightsdef apply_weights_to_dataset(self, X, sensitive_attr, target_attr):"""應用權重到數據集"""sample_weights = np.ones(len(X))for i, (sens, target) in enumerate(zip(sensitive_attr, target_attr)):sample_weights[i] = self.weights.get((sens, target), 1.0)return sample_weights# 使用示例
# reweighter = DataReweighting(sensitive_attr, y_train)
# weights = reweighter.calculate_fairness_weights()
# sample_weights = reweighter.apply_weights_to_dataset(X_train, sensitive_attr, y_train)
# model.fit(X_train, y_train, sample_weight=sample_weights)

3.2 處理中方法:對抗學習去偏

import torch
import torch.nn as nnclass AdversarialDebiasing(nn.Module):"""對抗學習去偏模型"""def __init__(self, main_model, adversary_model, lambda_val=0.1):super().__init__()self.main_model = main_modelself.adversary_model = adversary_modelself.lambda_val = lambda_valdef forward(self, x, sensitive_attr):# 主任務預測main_output = self.main_model(x)# 對抗預測(嘗試從主任務輸出預測敏感屬性)adversary_output = self.adversary_model(main_output.detach())return main_output, adversary_outputdef compute_loss(self, main_output, adversary_output, y_true, sensitive_attr):# 主任務損失main_loss = nn.CrossEntropyLoss()(main_output, y_true)# 對抗損失(我們希望 adversary 無法預測敏感屬性)adversary_loss = nn.CrossEntropyLoss()(adversary_output, sensitive_attr)# 總損失 = 主任務損失 - λ * 對抗損失total_loss = main_loss - self.lambda_val * adversary_lossreturn total_loss, main_loss, adversary_loss# 對抗訓練循環示例
def adversarial_training(model, dataloader, num_epochs=50):"""對抗訓練循環"""optimizer_main = torch.optim.Adam(model.main_model.parameters())optimizer_adversary = torch.optim.Adam(model.adversary_model.parameters())for epoch in range(num_epochs):for batch_x, batch_y, batch_sensitive in dataloader:# 訓練對抗器model.adversary_model.train()model.main_model.eval()main_output = model.main_model(batch_x)adversary_output = model.adversary_model(main_output.detach())adversary_loss = nn.CrossEntropyLoss()(adversary_output, batch_sensitive)optimizer_adversary.zero_grad()adversary_loss.backward()optimizer_adversary.step()# 訓練主模型(同時優化主任務和欺騙對抗器)model.adversary_model.eval()model.main_model.train()main_output, adversary_output = model(batch_x, batch_sensitive)total_loss, main_loss, adversary_loss = model.compute_loss(main_output, adversary_output, batch_y, batch_sensitive)optimizer_main.zero_grad()total_loss.backward()optimizer_main.step()

3.3 后處理方法:閾值調整

class ThresholdOptimizer:"""通過閾值調整實現公平性"""def __init__(self, y_true, y_score, sensitive_attr):self.y_true = y_trueself.y_score = y_scoreself.sensitive_attr = sensitive_attrself.groups = np.unique(sensitive_attr)def find_fair_thresholds(self, fairness_metric='equal_opportunity', tolerance=0.05):"""為不同群體尋找最優閾值"""best_thresholds = {}fairness_values = {}for group in self.groups:mask = self.sensitive_attr == groupgroup_y_true = self.y_true[mask]group_y_score = self.y_score[mask]# 網格搜索最優閾值thresholds = np.linspace(0, 1, 100)best_fairness = float('inf')best_threshold = 0.5for threshold in thresholds:y_pred = (group_y_score >= threshold).astype(int)current_fairness = self._calculate_fairness(group_y_true, y_pred, fairness_metric)if current_fairness < best_fairness:best_fairness = current_fairnessbest_threshold = thresholdbest_thresholds[group] = best_thresholdfairness_values[group] = best_fairnessreturn best_thresholds, fairness_valuesdef _calculate_fairness(self, y_true, y_pred, metric_name):"""計算指定公平性指標"""if metric_name == 'statistical_parity':return abs(y_pred.mean() - self.y_pred_overall.mean())elif metric_name == 'equal_opportunity':return equal_opportunity(y_true, y_pred, np.ones_like(y_true))else:raise ValueError(f"Unknown metric: {metric_name}")def apply_fair_thresholds(self, y_score, sensitive_attr):"""應用公平閾值進行預測"""y_pred = np.zeros_like(y_score)for group in self.groups:mask = sensitive_attr == groupgroup_scores = y_score[mask]threshold = self.best_thresholds[group]y_pred[mask] = (group_scores >= threshold).astype(int)return y_pred# 使用示例
# optimizer = ThresholdOptimizer(y_val_true, y_val_score, val_sensitive)
# thresholds, fairness = optimizer.find_fair_thresholds(tolerance=0.05)
# fair_predictions = optimizer.apply_fair_thresholds(test_score, test_sensitive)

四、完整偏見審計與緩解流程

4.1 端到端偏見處理流程

class EndToEndBiasMitigation:"""端到端偏見處理流程"""def __init__(self, model, X, y, sensitive_attr):self.model = modelself.X = Xself.y = yself.sensitive_attr = sensitive_attr# 數據分割self.X_train, self.X_test, self.y_train, self.y_test, self.s_train, self.s_test = \self._split_data_with_sensitive(X, y, sensitive_attr)def _split_data_with_sensitive(self, X, y, sensitive_attr, test_size=0.3):"""保持敏感屬性分布的數據分割"""from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test, s_train, s_test = train_test_split(X, y, sensitive_attr, test_size=test_size, stratify=y, random_state=42)return X_train, X_test, y_train, y_test, s_train, s_testdef run_complete_pipeline(self):"""運行完整偏見處理流程"""print("1. 初始偏見檢測...")initial_metrics = self._evaluate_model(self.model, self.X_test, self.y_test, self.s_test)print("2. 應用數據重加權...")reweighted_model = self._apply_reweighting()reweighted_metrics = self._evaluate_model(reweighted_model, self.X_test, self.y_test, self.s_test)print("3. 應用對抗學習...")adversarial_model = self._apply_adversarial_learning()adversarial_metrics = self._evaluate_model(adversarial_model, self.X_test, self.y_test, self.s_test)print("4. 應用閾值調整...")final_metrics = self._apply_threshold_adjustment(adversarial_model)# 生成對比報告comparison = {'initial': initial_metrics,'reweighted': reweighted_metrics,'adversarial': adversarial_metrics,'final': final_metrics}return comparisondef generate_comprehensive_report(self, comparison_results):"""生成綜合報告"""report = """偏見緩解效果綜合報告===================各階段公平性指標對比:"""metrics_to_display = ['statistical_parity', 'equal_opportunity', 'disparate_impact']for metric in metrics_to_display:report += f"\n{metric}:\n"for stage, results in comparison_results.items():value = results[metric]if isinstance(value, dict):value = sum(value.values()) / len(value)  # 簡化顯示report += f"  {stage}: {value:.4f}\n"# 計算改善程度initial_fairness = comparison_results['initial']['statistical_parity']final_fairness = comparison_results['final']['statistical_parity']improvement = (initial_fairness - final_fairness) / initial_fairness * 100report += f"\n總體改善: {improvement:.1f}% 的偏見減少\n"return report# 使用示例
# pipeline = EndToEndBiasMitigation(model, X, y, sensitive_attr)
# results = pipeline.run_complete_pipeline()
# report = pipeline.generate_comprehensive_report(results)
# print(report)

五、實踐建議與最佳實踐

5.1 構建負責任AI系統的原則

  1. 多元化數據收集:確保訓練數據覆蓋所有相關群體
  2. 透明化文檔:記錄數據來源、標注過程和模型限制
  3. 持續監控:在生產環境中持續監控模型公平性
  4. 多方參與:包括領域專家、受影響群體代表在開發過程中

5.2 組織層面的實施框架

class OrganizationalBiasFramework:"""組織級偏見治理框架"""def __init__(self):self.policies = {}self.audit_logs = []self.mitigation_strategies = {}def define_fairness_policy(self, policy_name, metrics, thresholds):"""定義公平性政策"""self.policies[policy_name] = {'metrics': metrics,'thresholds': thresholds,'created_at': datetime.now()}def conduct_audit(self, model, dataset, policy_name):"""執行偏見審計"""policy = self.policies[policy_name]audit_result = {'timestamp': datetime.now(),'policy': policy_name,'results': {},'compliance': True}# 計算所有指標for metric in policy['metrics']:value = calculate_metric(metric, model, dataset)audit_result['results'][metric] = value# 檢查是否符合閾值要求threshold = policy['thresholds'][metric]if value > threshold:audit_result['compliance'] = Falseself.audit_logs.append(audit_result)return audit_resultdef implement_mitigation(self, strategy_name, technique, parameters):"""實施偏見緩解策略"""self.mitigation_strategies[strategy_name] = {'technique': technique,'parameters': parameters,'implemented_at': datetime.now(),'effectiveness': None}def generate_compliance_report(self):"""生成合規性報告"""compliant_audits = [a for a in self.audit_logs if a['compliance']]compliance_rate = len(compliant_audits) / len(self.audit_logs) if self.audit_logs else 0report = f"""組織AI公平性合規報告生成時間: {datetime.now()}==============================總審計次數: {len(self.audit_logs)}合規次數: {len(compliant_audits)}合規率: {compliance_rate:.1%}最近審計結果:"""for audit in self.audit_logs[-5:]:  # 顯示最近5次審計report += f"\n{audit['timestamp']}: {audit['policy']} - {'合規' if audit['compliance'] else '不合規'}"return report

結論:邁向公平可靠的AI未來

AI偏見問題不能僅靠技術解決,但技術是解決方案的重要組成部分。通過系統性的偏見檢測和緩解策略,我們可以顯著提高AI系統的公平性和可靠性。

關鍵要點總結:

  1. 檢測先行:在使用任何緩解技術前,必須全面評估模型偏見
  2. 多層次策略:結合預處理、處理中和后處理方法
  3. 持續監控:公平性不是一次性的目標,而是持續的過程
  4. 組織承諾:需要技術、流程和文化的共同支持

未來發展方向:

  1. 自動化偏見檢測:開發更智能的自動偏見檢測工具
  2. 可解釋性增強:更好地理解偏見產生的原因和機制
  3. 標準化評估:建立行業統一的偏見評估標準和基準
  4. 跨文化公平性:解決全球化AI系統中的跨文化偏見問題

通過采用本文介紹的技術和方法,開發者和組織可以構建更加公平、可靠的AI系統,為推動負責任AI發展做出貢獻。


點擊AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力80G大顯存按量計費靈活彈性頂級配置學生更享專屬優惠

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/diannao/98241.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98241.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98241.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Trae + MCP : 一鍵生成專業封面

每日一句 人生只有走出來的美麗&#xff0c; 沒有等出來的輝煌。 目錄 每日一句 前言 一.核心工具與優勢解析 二.操作步驟&#xff1a;從配置到生成廣告封面 前期準備&#xff1a;確認環境與工具版本 第一步. 獲取配置代碼 第二步&#xff1a;在 Trae 中導入 MCP 配置…

Eureka與Nacos的區別-服務注冊+配置管理

Eureka與Nacos的區別-服務注冊配置管理 以下是 Eureka 和 Nacos 的核心區別對比&#xff0c;幫你清晰理解它們的不同定位和特性&#xff1a; ?1. 核心定位? ?Eureka&#xff1a;?? ?純服務注冊與發現中心&#xff0c;源自 Netflix&#xff0c;核心功能是維護服務實例清單…

這才是真正懂C/C++的人,寫代碼時怎么區分函數指針和指針函數?

1.介紹 很多初中級開發者常常在這兩個術語之間感到困惑,分不清它們的定義、語法和應用場景,從而在實際編程中埋下隱患。本文旨在撥開迷霧,從概念定義、語法解析、核心區別及實戰應用四個維度,對函數指針與指針函數進行一次全面、深入的辨析,幫助您徹底厘清這兩個概念,并…

Go基礎(④指針)

簡單示例package mainimport "fmt"func main() {var num int 100var p *int &num // 指向int類型的指針fmt.Println(*p) // 解引用&#xff0c;輸出 100*p 200 // 通過指針修改原變量fmt.Println(num) // 輸出 200 }package mainimport "fmt…

java社交小程序源碼支持APP多端springboot部署與功能模塊詳解

構建一個支持 多端訪問、實時互動、商城交易 的綜合型應用&#xff0c;已成為眾多企業和開發團隊的共同目標。由 寵友信息技術有限公司 打造的 友貓社區&#xff0c;正是基于 Spring Boot 技術棧 的全端解決方案&#xff0c;既能支持 微信小程序、APP、PC管理后臺&#xff0c;又…

代理連接性能優化:提升網絡效率的關鍵技術與實踐

在當今數字化時代&#xff0c;代理連接性能優化已成為網絡架構設計中的關鍵環節。本文將深入探討如何通過技術手段提升代理服務器的響應速度、穩定性和資源利用率&#xff0c;幫助讀者構建高效可靠的代理網絡體系。 代理連接性能優化&#xff1a;提升網絡效率的關鍵技術與實踐 …

Rust 元組

簡介 元組可以由多種類型組成&#xff0c;長度固定。 創建元組 // 固定類型 let tup1: (i32, f64, u8) (500, 8.8, 1);// 不固定類型 let tup2 (500.99, 8.8, 1, 9.99);println!("{}", tup2.0);用模式匹配解構元組 let tup (500.99, 8.8, 1, 9.99); let (x, y…

突破閉集限制:3D-MOOD 實現開集單目 3D 檢測新 SOTA

【導讀】 單目 3D 目標檢測是計算機視覺領域的熱門研究方向&#xff0c;但如何在真實復雜場景中識別“未見過”的物體&#xff0c;一直是個難題。本文介紹的 3D-MOOD 框架&#xff0c;首次提出端到端的開集單目 3D 檢測方案&#xff0c;并在多個數據集上刷新了 SOTA。 目錄 …

Python爬蟲數據清洗實戰:從雜亂無章到整潔可用

小伙伴們&#xff0c;做爬蟲最頭疼的不是抓數據&#xff0c;而是抓回來那一堆亂七八糟的內容&#xff01;價格里混著符號、日期格式千奇百怪、還有重復和缺失的值&#xff0c;看著就頭大。別慌&#xff0c;咱們用Python幾招就能搞定。Pandas處理表格數據是真香&#xff0c;正則…

打工人日報#20250906

打工人日報#20250906 周六了&#xff01; 今天出門讀者特別痛&#xff0c;本來都想爽約了&#xff0c;不過忍下來了了&#xff0c;現在看來很值得&#xff01; 不過還是要好好吃早餐、和熱水&#xff01; 閱讀 《小米創業思考》 第一章 奇跡時代 看完了 就是快呀 好的產品 好的…

小型磨床設計cad+三維圖+設計說明書

摘 要 隨著現代加工技術的發展&#xff0c;各種各樣的加工技術得到了廣泛的應用&#xff0c;磨床在機械制造領域得到了廣泛的應用&#xff0c;本文經過查閱相關文獻&#xff0c;完成了一種小型磨床的結構設計。 本文設計的小型磨床其主要是由三部分組成的&#xff0c;第一部分…

音響皇帝BO,牽手全球第一AR眼鏡雷鳥,耳機黨坐不住了?

【潮汐商業評論/原創】自AI大模型技術實現突破以來&#xff0c;即引發一場終端革命&#xff0c;關于下一個智能終端入口&#xff0c;或者說關于下一代計算平臺&#xff0c;市場有過很多“狼來了”的聲音&#xff0c;大家紛紛猜測&#xff0c;在智能手機之后&#xff0c;究竟誰有…

中斷和異常

中斷和異常簡介 在計算機體系結構和操作系統中&#xff0c;中斷&#xff08;Interrupt&#xff09; 和 異常&#xff08;Exception&#xff09; 是CPU應對突發事件、實現多任務并發和錯誤處理的核心機制。二者均通過暫停當前任務、轉去執行特定處理程序來響應事件&#xff0c;但…

Fab資源快速導入UE

有時候在Epic啟動器導入進度會卡住可以直接使用ue內置Fab來導入資源 這樣是百分百能導入的

Python錯誤測試與調試——文檔測試

Doctest 通過解析文檔字符串&#xff08;docstring&#xff09;中的交互式 Python 代碼片段&#xff08;以 >>>開頭&#xff09;進行測試&#xff0c;驗證代碼輸出是否與預期一致。測試用例直接嵌入代碼中&#xff0c;實現“文檔即測試”核心語法&#xff1a;def func…

c#核心筆記

111&#xff0c;面向對象 1&#xff0c;面向過程編程&#xff1a;是一種以過程為中心的編程思想分析出解決問題所需要的步驟然后用函數把步驟一步一步實現使用的時候&#xff0c;一個一個依次調用。 2&#xff0c;面向對象編程&#xff1a;面向對象是一種對現實世界理解和抽象的…

【MySQL】從零開始了解數據庫開發 --- 初步認識數據庫

永遠記住&#xff0c;你的存在是有意義的&#xff0c; 你很重要&#xff0c; 你是被愛著的&#xff0c; 而且你為這個世界帶來了無可取代的東西。 -- 麥克西 《男孩、鼴鼠、狐貍和馬》-- 從零開始了解數據庫開發安裝MySQL什么是數據庫常見主流數據庫初步了解SQL語句存儲引擎安裝…

Altium Designer(AD24)切換工作界面為淺灰色的方法

??《專欄目錄》 目錄 1,概述 2,界面介紹 1,概述 本文演示AD24軟件黑色界面切換為淺灰色的方法。 2,界面介紹 第1步:點擊設置小圖標,然后點擊View 第2步:在UI Theme,點擊Current旁邊的Altium Dark Gtay ,在下拉選項中選擇Altium Light Gtay,然后點擊OK確認 第4步…

SDRAM詳細分析—07 存儲器陣列尋址

大家好,這里是大話硬件 這篇文章將分析實際SDRAM內部是如何進行尋址以及內存單元分布方式。 根據前面的內容,從小容量到大容量進行迭代分析。 1. 1bit容量 這個存儲單元只能存儲1個bit位。假設現在需要8bit內存容量顆粒,則需要8顆這樣的存儲器件。 2. 4bit容量 這個存儲…

【GitOps】Argo CD高級操作鉤子

Argo CD高級操作鉤子 文章目錄Argo CD高級操作鉤子資源列表一、Argo CD鉤子1.1、鉤子介紹1.2、構建的幾個執行階段1.3、鉤子刪除策略1.4、示例二、鉤子演示2.1、創建GitLab公共倉庫2.2、Argo CD創建Application2.3、同步&#xff08;SYNC&#xff09;資源列表 操作系統配置主機…