2025年6月29日 星期日

AI時代的程式學習思維

 在 AI 時代學習程式設計,我認為我們應該建立一種全新的學習心態。像 ChatGPT 這類生成式 AI 工具,雖然已經被廣泛運用在編程中,但這並不表示我們可以完全依賴它。對初學者來說,最重要的是先培養獨立思考與動手實作的能力,透過親自寫程式來熟悉邏輯與架構。當有了一定基礎之後,再適時引入 AI 工具來協助學習與優化,才能真正建立起紮實的能力。

雖然 AI 功能越來越強大,但在處理複雜、非結構化的大型程式碼,或是在除錯過程中,仍然存在許多限制。因此,我們人類的優勢,應該更加著重於高層次的系統思考、問題分析,以及與他人協作與溝通的能力。

我鼓勵每位學習者,不只是把自己當成「寫程式的人」,而是要用「專案經理」的角色來看待自己的學習與應用。學會整合 AI 資源、分析問題、運用適當工具來解決真實世界的挑戰,這才是程式設計的真正價值所在。

至於資料結構與演算法,我更傾向將它們視為一種「解決問題的思維模式」,而不只是考試科目。像是 Google 地圖預測即時交通狀況,就是結合了資料結構、演算法與機器學習的應用範例,充分展現出這些基本功在現實世界中的重要性。

在這個 AI 快速演進的時代,邏輯思考依然是學習程式的核心,我們也必須不斷調整自己的學習方式,與時俱進,才能真正掌握未來的關鍵能力。




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 函數 可以修改成這樣。