2025年5月21日 星期三

模型是根據句中的哪段話判斷分類結果

 

#Transformer #BERT # Self -Attention  #Explainable AI  #LIME  #SHAP 

在NLP中的文章分類或句子的情緒判別中,模型分類結果符合預期,但如何得知到底是這句話或文章那句話或詞語決定了分類的結果 ? 


LIME 執行的結果


若使用的是Transformer 的BERT., 那可以透Attention weight distribution , 得知那模型主要關注了那一個字。但若分類模型不是BERT 這種具有Self -Attention 的機制,那作法可以用模型可解釋性 (Explainable AI) 的方法,,如LIME 或 SHAP ,他們會用分類模型結果去建立一個簡線性模型, 如Logistic Regression 的這種架構,Y=w1x1+w2x2+w3x3+....如此便可以透過這些權重值w1,w2,... 去了解每個字的重要性。









2025年1月10日 星期五

不平衡資料集: 使用 k-fold 交叉訓練


 
當樣本類別分佈很不平均時,如這樣, 如果無法使用data augumentation 增加少數離Minority)類別的樣本資料, 可以只有重抽樣的方法,避免模型訓練後只會偏向回答多數(Majority)類別的答案。 

Resampling 是指反覆地從訓練資料中抽取不同的樣本子集,並對每組子集重新訓練模型,減少模型的偏差。可以選擇 Bootstrap取樣法與 K-Fold 交叉驗證皆屬於重抽樣方法,其主要差異在於樣本子集的抽取方式:Bootstrap使用有放回的隨機抽樣,而 k-fold 交叉驗證則將資料分成 k 個不重疊的子集進行訓練與驗證。







  • 分割: 把訓練集(注意,這裡指的是除去最終測試集後剩下的數據)平均分成 k 個小集合(或稱為「摺」,folds)。
  • 迭代訓練與驗證: 針對這 k 個摺,重複以下步驟 k 次:
    • 訓練: 選取其中 k-1 個摺作為訓練數據來訓練模型。
    • 驗證: 用剩下那 1 個摺作為臨時的測試集(或驗證集),來評估模型的表現(例如計算準確率)。
  • 平均表現: k-摺交叉驗證最終報告的模型表現,是這 k 次驗證結果的平均值

  • 還以更進一步雙管齊下去修改模型的 Loss 函數,當模型對少數類別的判別錯誤時加重懲罰,加大它的Loss。 例如 logistic regression 的 Loss 函數 可以修改成這樣。






  • 2024年12月18日 星期三

     

    生成深度學習|訓練機器繪畫、寫作、作曲與玩遊戲 第二版
    Generative Deep Learning, 2nd Edition

    Page  203 

      X_T should have zero mean and unit variance 
     
    中文應為: 均值為 0 且單位變異數 I 

      unit variance  (If all variables are independent, Σ = I (identity matrix))

    I = Σ = [1 0 0 ...
                 0 1 0 ...
                 0 0 1 ...
                  . .. ... ...]







    2024年12月16日 星期一

    判別式AI與生成式AI

     

    生成式AI的崛起與發展

    生成式AI(Generative AI)在2022年底隨著ChatGPT的問世而廣受關注。ChatGPT展現出近乎自然的人類對話能力,讓許多人驚嘆AI技術的進展。如今,ChatGPT的功能已不僅限於文字對話,更可解讀圖片、PDF文件分析,並能提供內容摘要與深度分析。市場上類似的工具還包括Microsoft Copilot、Claude和Notebook LLM等。除了文字生成,AI技術也延伸至音樂創作和圖像生成領域。 在圖像生成領域已有非常成熟的平台,例如 Stable Diffusion、Midjourney和DALL-E等。

    判別式AI與生成式AI的本質差異

    相較於2019年主流的判別式AI(Discriminative AI)——專注於圖像分類或文本分類等任務,生成式AI面對的是更具挑戰性的問題。判別式AI主要解決P(y=k|x)的問題,即在已知條件x下,預測標籤y為k的機率,而無需了解x的整體分布。

    生成式AI則致力於估計P(x),即從觀察到的樣本x1, x2, x3...中推測整體的機率分布。這個任務的複雜度遠超過判別式AI。理解P(x)分布的重要性在於:如果我們能找到一個近似分布Q(x),使其接近真實分布P(x),那麼從Q(x)中採樣得到的新樣本x將與真實數據具有相似的特徵。

    舉例來說,在人臉生成的應用中,即使生成的面孔並不存在於原始訓練數據集中,但由於其符合真實人臉的分布特徵,因此看起來自然且真實,難以與真實人臉區分。這正是生成式AI的強大之處。


    生成式AI的技術發展史

  • Shift from GANs to Diffusion Models for image generation
  • Evolution from autoregressive models to large language models

  • 2022: Stable Diffusion released as open-source

    2023

    • GPT-4 released with multimodal capabilities
    • Claude (Anthropic) and Google's PaLM demonstrate advanced reasoning
    • Improved versions of Stable Diffusion (XL, 3)
    • Llama and Llama 2 released by Meta
    • Gemini announced by Google












    2024年10月8日 星期二

    描述常態分佈的特徵: 偏度與峰度




    對於常態分佈(可以Histogram 畫下來) ,除了mu (mean), sigma (variance), 還可以用 Skwness 及kurtosis 來描述, 此亦可以作為特徵。

    Skwness: 描述圖形是對稱分佈嗎? 還是左偏分佈 ? 或右偏分佈分佈? 



    偏度 k3k_3 的計算公式:

    Skewness=E[(Xμ)3]σ3\text{Skewness} = \frac{\mathbb{E}[(X - \mu)^3]}{\sigma^3}
    • 如果 k3>  0,分佈為正偏(右偏),資料分佈中有較多的數據點集中在低值區域,而右尾較長,代表有少數較大的數值偏離平均數使得 (X-u)的3次方後正更多.
    • 如果 k3 < 0,分佈為負偏(左偏),資料分佈中有較多的數據點集中在高值區域,而左尾較長,代表有少數較小的數值偏離平均數使得 (X-u)的3次方後負更多.



    峰度(Kurtosis)決定數值分布的同質性與異質性,越接近高狹峰表示越同質,越趨向低闊峰表示越異質。



    峰度 (Kurtosis) 的計算公式是:

    Kurtosis

    =1ni=1n(Xiμσ)4\text{Kurtosis} = \frac{1}{n} \sum_{i=1}^{n} \left(\frac{X_i - \mu}{\sigma}\right)^4


     標準常態分佈的峰度為 3.  為使標準常態分佈的峰度為 0,故會將原始峰度減去 3,從而更方便地比較其他分佈的峰度。也因此為峰度會有負值的原因。











     












    數據分佈的尾部厚度愈厚,表示有較多異常值(離峰較遠者),故按公式計算其峰值會較大。


    2024年10月5日 星期六

    多變量常態分佈 Normal Distribution

    Multinormal Distribution (多態性常態分佈)


    當K=1 時, 即是單維的常態分佈 f(x)


    若 u=0, covariane matrix= I  

    當K=2 時, 為雙變數的
    常態分佈 PDF f(x,y)










    2024年9月25日 星期三

    觀察資料的趨勢



    EDA 中觀察資料的趨勢

    針對Time Series Data 通常會觀察原始資料的趨勢(Trend), 季節性/週期性(Seasonality)的狀態或資料中的雜訊.



    但這些數據是怎麼取得的呢? 
    1. 趨勢線: 用原始資料的移動平均值(MA)作為長期走勢的觀察. (移動窗口可以自己設定) 
    2. 週期性 (Seaonality): 將原始資料減去趨勢線可以強調週期性的特徵
    3. 雜訊(Residual) :   原始資料減去趨勢線再減去週期性線, 剩下的值認定是噪訊(隨機波動)或短期的變化。

    可以自己用Python 完成或者利用 statsmodels 工具來完成。 statsmodels 本身提供許多不同統計模型和統計資料探索的函數。


    另外, 也可以計算ACF ( Autocorrelation)  , 自相關係數為原始資料 Xt 和 X的lagged  Xt+k計算相關係數,ACF 大小可以幫助我們了解數據中週期性的狀態。當lagged 越大 (即K愈大),ACF 通常會逐漸減少,特別是對於沒有長期相關性的數據而言。


    $$\rho_k = \frac{\sum_{t=k+1}^{n} (X_t - \bar{X})(X_{t-k} - \bar{X})}{\sum_{t=1}^{n} (X_t - \bar{X})^2}$$

    Note:$ \rho_0=1 $ 

    繪製出ACF圖, 若每隔 $i$ 之後都能看到這個峰值, 則可能存週期 $i$。序列資料可能有存在一個以上的週期,如每週會有一個週期, 而每季也有一個週期。 






    ACF圖( X軸為不同的lag k, Y軸為ACF值)

    底下ACF圖說明序列資料沒有存在週期性.


    --------------

    具有週期性的資料
     seasonal_pattern = 10 * np.sin(2 * np.pi * time / 12
     trend = 0.1 * time 
     noise = np.random.normal(0, 1, size=100
     data = seasonal_pattern + trend + noise






    ACF圖( X軸為不同的lag k, Y軸為ACF值)

    底下ACF圖說明序列資料存在一個週期性, 在Lag n*K 處都有差不多的峰值, 表示其週期性為 k