LLM筆記(五)概率論

1. 隨機變量與概率分布:模型輸出的基礎

在LLM中,隨機變量最直觀的體現就是模型預測的下一個token。每個時刻,模型都會輸出一個概率分布,表示詞匯表中每個token可能是"下一個詞"的概率。

直觀理解

想象模型在處理句子"我喜歡北京的"后需要預測下一個詞。此時,模型會為詞匯表中的每個候選token分配一個概率:

  • “天安門”:0.3
  • “故宮”:0.25
  • “美食”:0.2
  • “文化”:0.15
  • 其他詞:0.1

這個分布通過softmax函數從模型的logits輸出轉換而來:

# logits是模型輸出的未歸一化對數概率
logits = model(input_ids)[:, -1, :]  # 獲取最后一個位置的logits
probabilities = torch.softmax(logits, dim=-1)  # 轉換為概率分布

深層意義

概率分布不僅讓模型能夠進行采樣生成,還能反映模型的不確定性程度。分布的形狀(是否集中、平坦或有多個峰值)揭示了模型對當前預測的信心程度。

2. 條件概率:語言模型的核心

LLM是自回歸(autoregressive)模型,即通過計算條件概率 P ( x t ∣ x < t ) P(x_t | x_{<t}) P(xt?x<t?) 來生成序列。整個序列的聯合概率分解為一系列條件概率的乘積:

P ( x 1 , x 2 , … , x T ) = ∏ t = 1 T P ( x t ∣ x < t ) P(x_1, x_2, \dots, x_T) = \prod_{t=1}^T P(x_t | x_{<t}) P(x1?,x2?,,xT?)=t=1T?P(xt?x<t?)

實際運作方式

當模型生成文本時,每一步都依賴于前面已生成的所有內容:

  1. 第一步: P ( x 1 ) P(x_1) P(x1?) - 生成第一個token(無條件)
  2. 第二步: P ( x 2 ∣ x 1 ) P(x_2|x_1) P(x2?x1?) - 基于第一個token生成第二個
  3. 第三步: P ( x 3 ∣ x 1 , x 2 ) P(x_3|x_1,x_2) P(x3?x1?,x2?) - 基于前兩個token生成第三個

以此類推,形成條件概率鏈。

例子說明

假設模型在生成一個句子:

  • 首先生成"我"(假設概率為0.1)
  • 然后基于"我"生成"喜歡"(條件概率為0.3)
  • 接著基于"我喜歡"生成"學習"(條件概率為0.2)

整個序列"我喜歡學習"的聯合概率為:0.1 × 0.3 × 0.2 = 0.006

這種條件概率框架使LLM能夠捕捉語言的上下文依賴性,這是它們強大能力的關鍵所在。

3. 最大似然估計:訓練的統計基礎

LLM訓練的核心目標是最大化訓練數據的似然概率,等價于最小化負對數似然(即交叉熵損失):

L ( θ ) = ? ∑ t log ? P θ ( x t ∣ x < t ) \mathcal{L}(\theta) = -\sum_{t}\log P_\theta(x_t | x_{<t}) L(θ)=?t?logPθ?(xt?x<t?)

為什么使用對數?

對數變換有幾個重要優勢:

  • 將乘法轉換為加法,避免小數值相乘導致的數值下溢
  • 使優化過程更加穩定
  • 與信息論中的交叉熵概念直接對應

訓練示例

考慮訓練過程中的一個小批量文本:“我愛北京天安門”:

def compute_loss(model, tokens):# tokens: [batch_size, sequence_length]logits = model(tokens[:, :-1])  # 預測除最后一個token外的所有位置targets = tokens[:, 1:]  # 目標是下一個token# 計算每個位置的負對數似然loss = F.cross_entropy(logits.view(-1, vocab_size), targets.view(-1),reduction='none')# 返回平均損失return loss.mean()

通過最小化這個損失函數,模型參數θ將被調整以增大訓練數據的概率,從而"學習"語言的統計模式。

4. 期望與方差:衡量模型行為

期望值 E [ f ( X ) ] \mathbb{E}[f(X)] E[f(X)] 和方差 Var [ X ] \text{Var}[X] Var[X] 在LLM中有多種應用:

期望的應用

  1. 評估指標計算:計算平均驚訝度(negative log-likelihood)或平均困惑度

    # 計算平均驚訝度
    def average_surprisal(model, text):tokens = tokenize(text)log_probs = model.log_probs(tokens)return -log_probs.mean().item()
    
  2. 信息提取:在多次采樣中提取"穩定"信息

    # 通過多次采樣獲取穩定答案
    responses = [model.generate(prompt) for _ in range(10)]
    

方差的應用

  1. 不確定性量化:高方差表示模型對某些預測的不確定性高

    # 計算預測方差
    logits = model(input_ids)
    probs = F.softmax(logits, dim=-1)
    entropy = -torch.sum(probs * torch.log(probs), dim=-1)  # 高熵≈高方差≈高不確定性
    
  2. 多樣性控制:在生成時,可以基于方差調整采樣策略

方差和期望共同幫助我們理解模型的統計行為,不僅在評估模型性能時有用,也為生成策略提供了理論指導。

5. 貝葉斯定理:從先驗到后驗

雖然傳統LLM訓練不直接使用貝葉斯方法,但貝葉斯思想在多個方面得到應用:

P ( θ ∣ D ) ∝ P ( D ∣ θ ) P ( θ ) P(\theta | D) \propto P(D | \theta)P(\theta) P(θD)P(Dθ)P(θ)

實際應用

  1. 參數正則化:權重衰減可看作對參數的高斯先驗

    # L2正則化(權重衰減)
    loss = task_loss + weight_decay * sum(p.pow(2).sum() for p in model.parameters())
    
  2. 小樣本學習:少樣本(few-shot)提示可視為后驗更新

    • 沒有示例時,模型使用先驗P(θ)
    • 提供few-shot示例后,模型更新為后驗P(θ|少量示例)
  3. 推理校準:后驗調整可以改善模型預測

    # 簡單的后驗校準示例
    def calibrate_probabilities(probs, temperature=1.0, label_smoothing=0.0):# 溫度縮放scaled_logits = torch.log(probs) / temperaturecalibrated = F.softmax(scaled_logits, dim=-1)# 標簽平滑(混合均勻先驗)if label_smoothing > 0:uniform = torch.ones_like(calibrated) / calibrated.size(-1)calibrated = (1 - label_smoothing) * calibrated + label_smoothing * uniformreturn calibrated
    

貝葉斯框架為我們提供了整合先驗知識和更新置信度的強大工具,這在微調、遷移學習和不確定性建模中特別有價值。

6. 采樣方法:平衡確定性與創造性

生成文本時,我們需要從模型的概率分布中采樣。不同采樣策略影響生成文本的多樣性和質量:

溫度采樣

調整溫度T可以控制分布的平滑度:
P T ( x ) ∝ P ( x ) 1 / T P_T(x) \propto P(x)^{1/T} PT?(x)P(x)1/T

def temperature_sampling(logits, temperature=1.0):# temperature=0會變成貪婪搜索# temperature<1使分布更尖銳(更確定)# temperature>1使分布更平坦(更多樣)scaled_logits = logits / temperatureprobs = F.softmax(scaled_logits, dim=-1)next_token = torch.multinomial(probs, num_samples=1)return next_token
  • 溫度接近0:貪婪搜索,總是選最高概率詞
  • 溫度為1:保持原始分布
  • 溫度大于1:增加低概率事件的采樣機會

Top-k與Nucleus采樣

這些方法通過截斷分布尾部來減少低質量樣本:

def top_k_sampling(logits, k=50):# 只保留概率最高的k個tokenvalues, indices = torch.topk(logits, k)probs = F.softmax(values, dim=-1)next_token = indices[torch.multinomial(probs, num_samples=1)]return next_tokendef nucleus_sampling(logits, p=0.9):# 保留累積概率達到p的最小token集合sorted_logits, sorted_indices = torch.sort(logits, descending=True)cumulative_probs = torch.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1)# 找到第一個累積概率超過p的位置sorted_indices_to_keep = cumulative_probs <= p# 在某些情況下,我們至少保留一個tokenif torch.sum(sorted_indices_to_keep) == 0:sorted_indices_to_keep[0] = Trueindices_to_keep = sorted_indices[sorted_indices_to_keep]logits_to_keep = logits[indices_to_keep]probs = F.softmax(logits_to_keep, dim=-1)next_token = indices_to_keep[torch.multinomial(probs, num_samples=1)]return next_token

這些采樣方法直接影響生成文本的質量,是LLM應用中的關鍵決策點。溫度和采樣策略的選擇取決于任務要求:

  • 事實性問答:低溫度,偏好確定性高的輸出
  • 創意寫作:較高溫度,允許更多樣的輸出
  • 代碼生成:通常使用較低溫度但帶nucleus采樣,平衡正確性和多樣性

7. 馬爾可夫性:序列依賴的表示

雖然Transformer架構理論上可以考慮任意長的上下文,但實際上,LLM仍然是一種強化版的馬爾可夫模型:當前token的生成依賴于固定長度窗口內的歷史。

馬爾可夫性與上下文窗口

標準馬爾可夫模型假設:
P ( x t ∣ x < t ) = P ( x t ∣ x t ? k , … , x t ? 1 ) P(x_t | x_{<t}) = P(x_t | x_{t-k}, \ldots, x_{t-1}) P(xt?x<t?)=P(xt?xt?k?,,xt?1?)

LLM則擴展為:
P ( x t ∣ x < t ) = P ( x t ∣ x m a x ( 1 , t ? C ) , … , x t ? 1 ) P(x_t | x_{<t}) = P(x_t | x_{max(1,t-C)}, \ldots, x_{t-1}) P(xt?x<t?)=P(xt?xmax(1,t?C)?,,xt?1?)

其中C是上下文窗口長度(如GPT-3為2048,Claude 3為200k+)。

有限記憶的影響

上下文窗口限制導致的問題包括:

  • 無法引用超出窗口的信息
  • 長文檔理解中的一致性挑戰
  • 對長文本生成的連貫性約束

這種有限馬爾可夫性質啟發了許多改進方向,如長上下文模型、外部內存機制、檢索增強等。

8. 蒙特卡洛估計:基于采樣的評估

蒙特卡洛方法通過多次隨機采樣來估計統計特性,在LLM中有重要應用:

應用場景

  1. 不確定性估計:通過多次采樣估計預測的置信區間

    def estimate_confidence_interval(model, prompt, n_samples=100):# 生成多個回答responses = [model.generate(prompt) for _ in range(n_samples)]# 分析回答的分布(例如,對于是/否問題)yes_count = sum(1 for r in responses if "是" in r[:10])confidence = max(yes_count, n_samples - yes_count) / n_samplesreturn confidence
    
  2. 多樣性度量:評估生成結果的多樣性

    def measure_diversity(model, prompt, n_samples=10):responses = [model.generate(prompt) for _ in range(n_samples)]# 計算生成文本之間的平均相似度similarities = []for i in range(n_samples):for j in range(i+1, n_samples):sim = compute_similarity(responses[i], responses[j])similarities.append(sim)return sum(similarities) / len(similarities)
    
  3. 集成預測:整合多次預測結果以提高準確性

    def ensemble_prediction(model, prompt, n_samples=10):predictions = [model.generate(prompt) for _ in range(n_samples)]# 可以通過投票、平均或更復雜的方法整合結果return most_common(predictions)
    

蒙特卡洛方法幫助我們更好地理解模型行為的統計特性,特別是在處理高度不確定或多樣化輸出的場景中。

9. 隨機過程與序列建模:統計依賴的捕捉

語言生成可視為一種離散時間隨機過程,LLM通過自注意力機制捕捉這一過程中的統計依賴:

自注意力與隨機過程

Transformer的自注意力機制計算:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk? ?QKT?)V

這實際上是在估計序列中各位置之間的統計依賴強度。注意力權重可以解釋為:位置j對預測位置i的影響程度。

深層統計依賴

LLM通過多層注意力捕捉復雜的統計依賴:

  • 淺層可能關注局部語法模式
  • 深層可能捕捉全局語義依賴
  • 多頭注意力則并行捕捉不同類型的依賴關系

這種分層設計使LLM能夠學習句法、語義和篇章層面的統計規律,從而生成連貫且有意義的文本。

10. 校準:確保概率預測的可靠性

模型校準衡量預測概率與實際頻率的一致性:

校準重要性

假設模型以90%的置信度預測某些事實,如果模型校準良好,這些預測約90%應該是正確的。

def expected_calibration_error(probs, correct):"""計算預期校準誤差probs: 預測概率correct: 對應的正確與否標記(0/1)"""# 將概率分成幾個binn_bins = 10bins = np.linspace(0, 1, n_bins + 1)bin_indices = np.digitize(probs, bins) - 1ece = 0for bin_idx in range(n_bins):# 找到落在這個bin中的預測mask = bin_indices == bin_idxif not np.any(mask):continuebin_probs = probs[mask]bin_correct = correct[mask]# 計算這個bin中的平均概率和準確率avg_prob = np.mean(bin_probs)avg_acc = np.mean(bin_correct)# 加權絕對誤差ece += np.abs(avg_prob - avg_acc) * (np.sum(mask) / len(probs))return ece

校準方法

  1. 溫度縮放:通過除以溫度參數調整logits
  2. Platt縮放:學習線性變換校準概率
  3. 模型集成:多個模型預測結合可提高校準性

良好的校準對于許多應用至關重要,如醫療診斷、金融預測和自動決策系統,因為它們需要依賴模型不僅給出正確答案,還要準確報告自己的確定性。

11. 似然比與對比評估:模型比較的工具

似然比是比較兩個概率模型的強大工具:

P model1 ( x ) P model2 ( x ) \frac{P_{\text{model1}}(x)}{P_{\text{model2}}(x)} Pmodel2?(x)Pmodel1?(x)?

實際應用

  1. 對抗訓練:通過似然比區分真實vs生成文本

    def discriminator_loss(real_data, generated_data, model1, model2):# 計算似然比,用于區分真實數據和生成數據real_log_probs_1 = model1.log_probs(real_data)real_log_probs_2 = model2.log_probs(real_data)real_ratio = torch.exp(real_log_probs_1 - real_log_probs_2)gen_log_probs_1 = model1.log_probs(generated_data)gen_log_probs_2 = model2.log_probs(generated_data)gen_ratio = torch.exp(gen_log_probs_1 - gen_log_probs_2)# 優化目標:增大真實數據的比值,減小生成數據的比值loss = -torch.mean(torch.log(real_ratio)) - torch.mean(torch.log(1 - gen_ratio))return loss
    
  2. 模型選擇:比較不同模型對數據的擬合能力

    def compare_models(test_data, model_a, model_b):log_probs_a = model_a.log_probs(test_data)log_probs_b = model_b.log_probs(test_data)# 如果比值>1,則模型A更適合數據log_ratio = log_probs_a - log_probs_breturn log_ratio.mean()
    
  3. 傾向性得分:用于評估生成偏好

    def calculate_preference_score(model, prompt_a, prompt_b):completion = model.generate(prompt_a)# 計算完成后的文本在兩個不同提示下的對數概率log_prob_a = model.conditional_log_prob(completion, prompt_a)log_prob_b = model.conditional_log_prob(completion, prompt_b)# 返回傾向性得分return log_prob_a - log_prob_b
    

似然比是評估和比較概率模型的強大工具,在模型選擇、假設檢驗和對抗學習中都有廣泛應用。

概率論視角的綜合應用

這些概率論概念不是孤立的,而是形成了一個連貫的理論框架,支撐著LLM的各個方面:

  1. 從訓練到推理的完整流

    • 模型定義:條件概率分布 P ( x t ∣ x < t ) P(x_t|x_{<t}) P(xt?x<t?)
    • 訓練目標:通過最大似然估計優化參數
    • 推理方法:通過各種采樣策略從概率分布中生成樣本
    • 評估標準:困惑度、校準誤差等概率度量
  2. 不確定性的系統處理

    • 表示:概率分布的熵
    • 傳播:通過采樣和蒙特卡洛方法
    • 量化:方差、置信區間
    • 通信:校準的概率輸出
  3. 概率框架的實際價值

    • 提供理論基礎解釋模型行為
    • 指導采樣策略的選擇
    • 啟發新的訓練和推理方法
    • 評估模型性能的系統標準

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

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

相關文章

LeetCode-滑動窗口-找到字符串中所有字母異位詞

LeetCode-滑動窗口-找到字符串中所有字母異位詞 ?? 關于專欄&#xff1a;專欄用于記錄 prepare for the coding test。 文章目錄 LeetCode-滑動窗口-找到字符串中所有字母異位詞&#x1f4dd; 找到字符串中所有字母異位詞&#x1f3af;題目描述&#x1f50d; 輸入輸出示例&am…

PostgreSQL 初體驗

目錄 一、PostgreSQL 1. 簡介 2. 特點 &#xff08;1&#xff09; 開源免費&#xff08;Open Source&#xff09; &#xff08;2&#xff09;標準兼容&#xff08;SQL Compliance&#xff09; &#xff08;3&#xff09; 豐富的數據類型&#xff08;Data Types&#xff09…

05_核支持向量機

描述 核支持向量機&#xff08;通常簡稱為SVM&#xff09;可以推廣到更復雜模型的擴展&#xff0c;這些模型無法被輸入空間的超平面定義。 SVM 的核心思想是找到一個最優的超平面&#xff0c;將不同類別的數據分開。這個超平面不僅要能夠正確分類數據&#xff0c;還要使得兩個…

Java + 鴻蒙雙引擎:ZKmall開源商城如何定義下一代B2C商城技術標準?

在 B2C 電商領域持續革新的當下&#xff0c;技術架構的優劣成為決定商城競爭力的核心要素。ZKmall開源商城以其創新融合的 Java 與鴻蒙雙引擎&#xff0c;為下一代 B2C 商城技術標準勾勒出全新藍圖&#xff0c;在性能、兼容性、拓展性等關鍵維度實現了重大突破。 一、Java 技術…

關于 Web 漏洞原理與利用:3. CSRF(跨站請求偽造)

一、原理&#xff1a; 利用用戶登錄態偽造操作 CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站請求偽造&#xff09;是攻擊者“借刀殺人”&#xff0c;借用用戶瀏覽器中已有的登錄狀態&#xff0c;誘導用戶完成攻擊者指定的操作。 1. 基本機制分解 1&#xf…

【HTML5】【AJAX的幾種封裝方法詳解】

【HTML5】【AJAX的幾種封裝方法詳解】 AJAX (Asynchronous JavaScript and XML) 封裝是為了簡化重復的異步請求代碼&#xff0c;提高開發效率和代碼復用性。下面我將介紹幾種常見的 AJAX 封裝方式。 方法1. 基于原生 XMLHttpRequest 的封裝 XMLHttpRequest。其主要特點如下…

C++ - 網絡編程之初始連接(Winsock2 概述、初始連接案例、初始連接案例解讀)

一、Winsock2 概述 Winsock2&#xff08;Windows Sockets 2&#xff09;是微軟提供的 Windows 平臺網絡編程庫 二、初始連接案例 1、Server #include <winsock2.h> #include <ws2tcpip.h> #include <iostream>#pragma comment(lib, "ws2_32.lib&quo…

Spring Cloud Gateway深度解析:原理、架構與生產實踐

文章目錄 前言一、概述二、核心架構設計及設計原理2.1 分層架構模型網絡層&#xff08;I/O模型&#xff09;核心處理層 2.2 核心組件協作流程路由定位階段過濾器執行階段 2.3 響應式編程模型實現Reactor上下文傳遞背壓處理機制 2.4 動態路由設計原理2.5 異常處理體系2.6 關鍵路…

游戲開發實戰(一):Python復刻「崩壞星穹鐵道」嗷嗚嗷嗚事務所---源碼級解析該小游戲背后的算法與設計模式【純原創】

文章目錄 奇美拉項目游戲規則奇美拉(Chimeras)檔案領隊成員 結果展示&#xff1a; 奇美拉項目 由于項目工程較大&#xff0c;并且我打算把我的思考過程和實現過程中踩過的坑都分享一下&#xff0c;因此會分3-4篇博文詳細講解本項目。本文首先介紹下游戲規則并給出奇美拉檔案。…

說一下響應狀態碼有哪些?

HTTP響應狀態碼分類(RFC 7231標準) 1. 1xx(信息類) 臨時響應,表示請求已被接收,需要繼續處理 100 Continue:客戶端應繼續發送請求體 101 Switching Protocols:服務器同意升級協議(如WebSocket) 102 Processing(WebDAV):服務器正在處理但未完成 2. 2xx(成功類)…

Linux多進程 寫時拷貝 物理地址和邏輯地址

如果不采用寫時拷貝技術 直接fork子進程 會發生什么&#xff1f; 如上圖所示 橙色為父進程所占內存空間 綠色為子進程所占內存空間。 如果子進程只是需要做出一點點和父進程不一樣的 其余和父進程均為相同 第一 就會出現復制開銷比較大&#xff1b;第二占用內存空間 所以 …

【TTS回顧】Bert-VITS2深度解析:融合BERT的多語言語音合成模型

一、基本介紹 Bert-VITS2是基于VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的改進版本,通過整合BERT語義編碼能力,顯著提升了語音合成的自然度和表現力。項目地址:https://github.com/fishaudio/Bert-VITS2 語種自然度相似度流…

win11下docker 的使用方案

Windows 11 Docker 使用方式對比 特性Docker Desktop (使用 WSL 2 后端)直接在 WSL 2 中安裝 Docker Engine安裝與易用性極簡&#xff0c;一鍵安裝&#xff0c;提供直觀的 GUI 界面 管理容器、鏡像、卷等相對復雜&#xff0c;需手動在 Linux 環境中安裝 Docker Daemon 并配置G…

配合本專欄前端文章對應的后端文章——從模擬到展示:一步步搭建傳感器數據交互系統

對應文章&#xff1a;進一步完善前端框架搭建及vue-konva依賴的使用&#xff08;Vscode&#xff09;-CSDN博客 目錄 一、后端開發 1.模擬傳感器數據 2.前端頁面呈現數據后端互通 2.1更新模擬傳感器數據程序&#xff08;多次請求&#xff09; 2.2&#x1f9e9; 功能目標 …

牛客網NC209794:使徒襲來

牛客網NC209794:使徒襲來 題目背景 問題分析 數學建模 設三位駕駛員的戰斗力分別為 a, b, c已知條件&#xff1a;a b c n (n為輸入的正整數)目標&#xff1a;求 a b c 的最小值 解題思路 根據算術-幾何平均值不等式(AM-GM不等式)&#xff0c;對于任意正實數a, b, c&a…

動態規劃之爬樓梯模型

文章目錄 爬樓梯模型LeetCode 746. 使用最小花費爬樓梯思路Golang 代碼 LeetCode 377. 組合總和 Ⅳ思路Golang 代碼 LeetCode 2466. 統計構造好字符串的方案數思路Golang 代碼 LeetCode 2266. 統計打字方案數思路Golang 代碼 爬樓梯模型 爬樓梯模型是動態規劃當中的一個經典模型…

【每天一個知識點】湖倉一體(Data Lakehouse)

“湖倉一體”&#xff08;Data Lakehouse&#xff09;是一種融合了數據湖&#xff08;Data Lake&#xff09;與數據倉庫&#xff08;Data Warehouse&#xff09;優勢的新型數據架構。它既繼承了數據湖對多類型數據的靈活存儲能力&#xff0c;也具備數據倉庫對結構化數據的高效查…

Linux | mdadm 創建軟 RAID

注&#xff1a;本文為 “Linux mdadm RAID” 相關文章合輯。 略作重排&#xff0c;未整理去重。 如有內容異常&#xff0c;請看原文。 Linux 下用 mdadm 創建軟 RAID 以及避坑 喵??&#xfecc;?? Oct 31, 2023 前言 linux 下組軟 raid 用 mdadm 命令&#xff0c;multi…

Unity自定義shader打包SpriteAtlas圖集問題

Unity打包圖集還是有一些坑的&#xff0c;至于圖集SpriteAtlas是什么請參考我之前寫的文章&#xff1a;【Sprite Atlas】Unity新圖集系統SpriteAtlas超詳細使用教程_spriteatlas 使用-CSDN博客 問題&#xff1a; 今天碰到的問題是&#xff0c;shader繪制的時候&#xff0c;因…

如何用 OceanBase 的 LOAD DATA 旁路導入進行大表遷移

前言 在日常工作中&#xff0c;我們時常會遇到需要將某個大數據量的單表進行遷移的情況。在MySQL中&#xff0c;針對這樣的大表&#xff0c;我們通常會選擇先將原表導出為csv格式&#xff0c;然后利用LOAD DATA語法來導入csv文件&#xff0c;這種方法相較于mysqldump在效率上有…