Category: Uncategorized

  • 「練功文 – Elasticsearch Vector Search」

    這是一個之前作語意搜尋 (semantic search) 的作品的改版。主要的改動是將向量資料庫改成 Elasticsearch vector database,另外還支援 debugpy & VS code Python debugger。 原始碼:https://github.com/MrMYHuang/demo_langchain_es 之所以會想改用 Elasticsearch,是看到有些職缺有需求,而自己也想挑戰自己不熟的技術。我先照著這個入門教學影片學習:https://youtube.com/playlist?list=PL_mJOmq4zsHbcdoeAwNWuhEWwDARMMBta&si=WHGsnQx6VjmQ6-dM從中我學到 Elasticsearch 一項的技術 – 全文檢索 (full text search),它的原理很容易懂,就好比「一本書的索引」。我們都知道書的索引要怎麼用,比如想找某個專有名詞出現在書本的第幾頁,就會去查索引。書本的索引的結構就是一堆「某個名詞出現在書本哪幾頁」的對照,而 Elasticsearch full text search 也是利用文字的索引來快速搜索文件!只不過後者是記錄「文字出現在哪幾個文件,它們的文件 IDs」。 Elasticsearch 也跟上 AI 的浪潮,支援一項 LLM AI 應用的重要元素 – vector database。它可以作語意搜尋再搭配 LLM 作 retrival augmented generation (RAG) 的應用。我的這個作品就是 demo 與 Elasticsearch vector database 作串接。 不過 Elasticsearch 其實還有一項重要優勢:它的分散式處理能力。這一點才是它獨特、強大之處。不過我目前還沒做到這一塊😅就先聊到這裡。

  • 「研究筆記 – Transformer 深度學習模型」

    昨天開始挑戰學習近年來爆紅的 LLM (large language model) 背後原理 – transformer deep learning model。 其實我之前有稍微看過 Wikipedia 上 transformer 講解,結果看到一堆超長的文章與數學,只好放棄,挑戰失敗😅 昨天想到如果有影片教學應該會較容易懂,就到 YouTube 搜了一下,並找點擊率高的影片,就是 3Blue1Brown 這系列的 3 部:https://youtu.be/wjZofJX0v4M?si=ykj9XakqJ-MU9NW9https://youtu.be/eMlx5fFNoYc?si=dR7MT45IAu6kuYUZhttps://youtu.be/9-Jl0dxWQs8?si=Q-Jgph37PAAtauKU這教學做得真不錯,講者會用淺顯的例子作講解 transformer 的各部分的用意。不過講者也坦白 transformer 還有一些部分很難解釋。這一點我非常理解,因為機器學習往往處理的問題是「不清楚的模型」,只能退而求其次用經驗與試誤法找出的次佳模型。即便是次佳模型,往往也難解釋其中由試誤法找出的部分。 所以我認為學習 ML 模型要有對於模型可解釋呈度的認知:最好能完美解釋一個複雜模型,但是少數天才才能做的事。我們如果花了很多力氣卻無法完美解釋,可以退而求其次、不求完美,但盡可能的「自圓其說」。也就是雖然沒有嚴謹的證明解釋完全正確,但能用一些例子說得有其道理,無嚴重瑕疵,那可能就是一個當時最好的解釋。甚至可能未來找到的完美解釋是基於此不完美解釋的修正!(例如古典力學) 以下就是我看了 YT 頻道 3Blue1Brown 講解 transformer 架構後,我的心得:完整 transformer 架構分成 encoder, decoer. 我只詮釋爆紅的 GPT LLM 所用到的 decoder. Transformer decoder 會先將輸入的文字切成 tokens(比如 1 個英文單字或中文單詞對應 1 個 token),再將各…

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

    我又學會 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