Category: Uncategorized

  • 「練功文 – 圖片分類使用卷積神經網路深度學習」

    我又學會 machine learning (ML) 一項技術 – 卷積神經網路 (convolutional neural network / CNN) 深度學習 (deep learning / DL)✌️ CNN DL 是 2012 年爆紅的一項技術,適合作圖片分類。首先是 AlexNet 的 CNN 達到當時一項挑戰的最低的錯誤率,後來陸續出現許多 CNNs,差異在 DL models 的結構(主要是模型各 NN 層是如何組合、堆疊)。 我實作的是用 PyTorch 做一個簡易的 CNN – TinyVGG. 作 ML 首先要有資料,我使用的是 CIFAR-10 圖片資料集,它有 10 個圖片分類。接著就照 TinyVGG 模型的層結構去堆疊 NN 層,用到的有 Conv2d, ReLU, MaxPool2d, Flatten, Linear。Conv2d 用於提取圖片中…

  • 「Machine Learning – 從線性二元分類器至多元分類器」

    之前我寫的一篇 deep learning 文章,在描述為模型加入非線性特性的描述不是完全正確(不好意思,當時學藝不精😅 ),目前已隱藏文章。這篇文章來說明之前不對的點。 之前我誤以為 machine learning (ML) 中的線性 (linear) 模型只能作二元分類 (binary classification),但其實能作多元分類 (multiclass classification)。如圖,是用線性模型 作 3 元分類。 無論是 2 元或多元分類,只要一資料集中,不同類別資料群的分佈滿足一定的空間隔離條件,就能用線性模型作分類。 什麼空間隔離條件?以 2 維平面來說,若在 n > 2 群資料之間找到 「n 條線相交於一點」,那麼就能將平面切成 n 個隔離的平面,就能用線性模型作分類。以圖為例,平面被切成 3 個隔離平面,可用線性模型分類 3 的類別資料群。對 3 維空間,空間隔離條件是 n 個平面相交於「一線」。 以上隔離條件如何由數學式得知?首先由平面坐標 (x1, x2) 中,2 元線性分類器開始作說明,它的線性模型數學式:y = w1 * x1 + w2 * x2 +…

  • 「Machine Learning 練基本功 – 用 PyTorch GPU 加速作 Linear Regression」

    我認為這個 linear regression machine learning (ML) 作品不是什麼很強大的應用程式,而是練習 ML 的基本功,對於跨入 ML 領域卻很重要,因為更強大的 ML 與這基礎有許多相通之處,比如 ML 的流程: data, train, loss, optimize, eval。 Linear regression ML 與強大的 ML,最大差異在於 AI 模型的複雜度,如 CNN, diffusion, transformer,這可是一巨大的門檻,尤其是後 2 者要用到的數學非常多🥲 我打算下一步先挑戰較簡單的 CNN. 我是看這部 PyTorch 免費教學:https://www.youtube.com/watch?v=V_xro1bcAuA目前看了 1/3,再自己用 PyTorch 實作 linear regression ML,並用 FastAPI 製作成後端應用程式。 程式原始碼:https://github.com/MrMYHuang/demo_pytorch_ml 現今 AI 的進步太快了,令我感到不學不行。如果不知道 AI 能做什麼,可以去一些論壇(如 reddit) 看別人的分享。光是看別人的分享就很驚人了,比如我最近看到有「開源」 1T LLM…

  • 「用 LoRa 洗腦 LLM – 我是海賊王!」

    學 AI 以來,有一個領域我有心理障礙 – 訓練模型。這領域不容易跨進去,因為背景數學, machine learning (ML) 知識要很充足、訓練資料要完整、硬體設備要強大。所以相對於 「AI 應用」,學習 「AI 模型訓練」我認為門檻頗高的。 但想跨入 AI 產業,我看了許多工作,滿多都要求要會訓練模型,所以還是得面對它一下😅 好在,不用怕,這個時代有 LLM AI 能開外掛,能越級打怪去做之前自己做不到的事。遇到困難不用怕,有 LLM 可以問。 我花了一天的研究,終於能調較 LLM。我選的基底開源 LLM 是 Llama 3.1 8B,使用 low rank fine tuning (LoRa FT)。LoRa 的好處在於,它不訓練參數很多的基底 LLM,而是掛上一個小參數的 adapter,對新的資料進行訓練。好處在於節省大量計算時間。 在訓練 LoRa 的過程,我遇到一些問題,比如:1. 我不清楚原始資料要轉成什麼格式灌給 LLM、執行一半會出現數值錯誤。後來參考網路上的範例格式,再學習如何使用 pandas 轉換與清 (clean) 資料解決。2. LLM 訓練完輸入提示詞,但輸出看不出有受新訓練資料影響,令人不解整支訓練程式哪裡有誤。後來憑著我所學的 ML 知識判斷,最可能是「新資料訓練不足」,就下猛藥灌 1000 筆我是海賊王的資料洗腦 LLM。結果終於看到 training…

  • 「自架文字生成影片 AI – ComfyUI + Wan 2.2」

    昨天本來在研究 AI 文字生成語音的應用,意外看到阿里巴巴開源的文字生成影片 (text to video, T2V) 模型 – 通義萬相 Wan 2.2, 畫質很不錯,就來研究看看要如何在本機使用。T2V AI 就是輸入文字提示詞,AI 就依提示詞的描述生成影片。 我發現有一款 app – ComfyUI 可以使用 Wan 2.2,我就在我的 MacBook M1 Pro MAX 64GB (MPS GPU 加速) 筆電上架設。不過一開始沒有很順利,遇到 3 個較大的問題。 問題 1,生成跑一半出現 MPS 不支援 fp8 e4m3fn 的錯誤:這是因為現今主流運行 AI model 加速的 GPU 是 nVIDIA,而不是 Apple MPS. 例如 PyTorch 這個 GPU 加速軟體,目前僅部分實作 MPS…

  • 「自架 (self-hosted) AI Coding 代理人伺服器 – llama.cpp server」

    今天又在 reddit 上研究 AI 新技術,看有什麼新東西可學,看到一套 LLM 工具 – llama.cpp 又有新東西推出,我就來研究一下。 然而我已一段時間沒觀注 llama.cpp 的發展,所以有一些資訊落後。我才知道 llama.cpp 也有 API server,相容 OpenAI API。這令我感興趣,因為目前 AI 工具之間主流的串接方式之一就是 OpenAI API。 比如我之前看一份教學,學會使用 LM Studio API server (相容 OpenAI API) 與 qwen-code 串接,在本機執行自架的 AI coding agent,它可以幫我在本機上生成程式,作程式碼的新增、修改,而且免付費使用一些 AI coding 服務商的 API。 那 LM Studio 已經有 LLM API server 的功能,還有需要其它類似的工具嗎?還是有!因為多一種選擇,較有彈性。特別是我在用 LM Studio 作 AI coding 時,遇到一個寫檔…

  • 「語音轉文字 AI – Whisper」

    又完成一支 AI app 作品 – 「使用 Whisper 作語音轉文字 (speech to text, STT)」。或許大部分人對語音轉文字的應用已用得習以為常,覺得不是什麼新技術,但對我這開發者而言是頗興奮的。因為過去常用的語音轉文字服務大多是閉源 (close source) 的,也就是某一家公司用非公開的語音轉文字模型在提供轉換服務,如此就可能會有一些限制,比如串接服務須付費使用、有隱私洩漏的疑慮(因為語音資料要傳給某公司的服務作處理)。 Whisper 是 OpenAI 開源的 STT AI 模型,可以在自己的電腦上運作,避開上述閉源 STT 服務的限制👍 我用它寫了一支全端 app,前端是 web 介面,作為語音輸入,再用 WebSocket 傳輸語音串流給後端 Python 程式。停止錄音後,後端會將整個音檔交給 Whisper 作轉寫 (transcribe) 文字,再透過 WebSocket 將轉寫文字傳回前端顯示。如 demo 影片(有聲音)所示。(目前僅測試英語辨識,中文還要再研究😅) 之所以會想練習寫這支 app,是因為我發覺現在 AI 語言模型 (LLM, VLM) 的應用愈來愈廣,但要讓這些用到文字輸入的應用使用起來更好用,「語音輸入」相對於「文字輸入」更具親和力!所以值得學會如何打通語音輸入這個環節。 程式原始碼:https://github.com/MrMYHuang/audio_transcriber

  • 「大語言模型 App 的保護模型 – LLM Guard」

    通用的大語言模型 app 要上線給一般人使用,就要考量一些保護問題,避免被濫用(例如之前發生的捷運的 AI 客服被使用者要求寫程式😆)、甚至生成危險訊息(暴力、恐怖、負面思想)😱 有一門 AI 研究就是在訓練一種 LLM, 專門推論使用者輸入,並作出危險呈度分類,它叫 LLM Guard. 有了 LLM Guard, 我們可以用它來保護助理型的 LLM,避免它被下達使用者輸入的不安全的指令。所以整個 AI 後端程式的設計,最前端用 LLM Guard 對使用者輸入作審合,安全的輸入才交給下一級助理 LLM,不安全的就直接擋掉、回覆拒絕處理訊息。 我花了一點時間,完成上述的 demo 全端程式,其中保護型 LLM 使用阿里巴巴開放的千問 Qwen3Guard-Gen-0.6B,助理型 LLM 使用 DeepSeek-R1-Distill-Qwen-1.5B. 請看 demo 影片。 程式原始碼:https://github.com/MrMYHuang/demo_llm_guard

  • 「視覺語言模型 – Vision LM」

    我之前接觸的 AI 語言模型應用,限於文字輸入/輸出類型,也就是 LLM (large language model). 但我認為多學一些語言模型類型,對於未來要做更多樣的應用會有所幫助,比如我這次挑戰的視覺語言模型 (vision LM)。 有此動機,是看到別人設計的 AI workflow 利用非文字輸入的語音轉文字 AI 作前端,再與 LLM 串接,如此一來就能用語音操縱 LLM! 因此激勵我學習不同輸入類型的 LM。 我這次挑戰的項目,是用圖片作為輸入AI 助理語言模型,再依指示輸出文字。我選的 VLM 是許多人在用的阿里巴巴開放模型 – 千問 (Qwen3 VL),前後端程式則是由我之前寫的另一個全端專案 demo_langchain_vec 改寫而成。 在開發過程,有使用 ChatGPT 輔助開發,不過一開始跑不起來,記憶體不足。後來上網研究才知道是輸入圖片解析度太高,要 downscale,所以程式要設限制。修正後就能跑了。 後來我將前後端程式依舊打包成 docker images,再使用 docker compose 一鍵啟動所有 containers。結果後端的 VLM 執行卻異常緩慢,根本不能用。後來才想起 container 要存取 nVIDIA GPU 要有特殊設定這件事,但我的電腦是 MacBook Pro 的 Apple Silicon MPS…

  • 「程式可觀察性 – Observability」

    最近在看了一些 AI 文章,注意到有一件事出現多次,就是在探討 AI 應用程式 (apps) 的可觀察性,它是軟體工程的一部分。身為一位什麼都要懂的軟體工程師,來挑戰這個主題吧。 應用程式的可觀察性就是是否能觀察程式運作時的各項數值。比如一項功能是由多個元件串聯執行,若想分析各項元件的執行順序、消耗時間,就需在程式加上記錄這些資訊的程式,上述是一種觀察類型 – trace. 還有 2 種常見的觀察類型:metric, log. 可觀察性在軟體工程中是建議早期規劃的。因為一旦程式上線,使用者開始使用,那麼可能一些開發、測試階段沒遇到的 bugs/issues 就開始出現,這時若沒有任何可觀察的程式運作訊息,對 bugs/issues 就束手無策。接下來只能再補回觀察程式碼,重新上線,但如此一來就會花較多時間,因為需要第 2 批使用者觸發新版程式 bugs/issues,產生觀察訊息,才有除錯的線索 但如此一來可能就會流失較多客戶。 AI apps 也需面臨上線後才出現的 bugs/issues,比如有部分使用者反應 apps 運作很慢。這時有 traces 可查的話,就能分析是 AI apps 的哪一個元件太耗時。AI apps 還有一些要考量的 issues,如 model drift, token count. 接著我就動手實作將我之前寫的一支語意搜尋 backend app https://github.com/MrMYHuang/demo_langchain_vec 加入 trace 觀察,使用的 trace 標準是 OpenTelemetry OTLP,並使用 Jaeger UI 呈現…