# 征途從此開始(probably # ScreenAgent : A Vision Language Model-driven Computer Control Agent 連結:https://arxiv.org/abs/2402.07945 ## 核心概念: ScreenAgent, an entirely automated agent designed to handle continuous screen operations. 讓這個Agent可以通過辨識螢幕的截圖,去對電腦做出一系列的操作,包括但不限於滑鼠點擊,鍵盤輸入等等等等 他們提供了一種新的dataset 稱之為ScreenAgent dataset 可以通過一系列的操作去控制windows或是linux的系統 並且包含了對於成果的評估方式 他們使用強化學習(Reinforcement learning)作為訓練方式 通過這framework,讓他們的VLM模型可以操控電腦螢幕,觀察並且做出一些特定的工作與行動 ## Computer Control Environment ### Action space 對一系列操作的定義  ### State space 將目前的Screenshot視為現在的STATE 會不斷地收集<目前>的狀態以及<做出動作後>的狀態 ### Reward function 這點會對於要做的事情而改變 ## Control pipeline 為了去做出模型 他們將模型的行動分為幾個不同的控制階段 ### Planning phase 基於目前的截圖來 將情形以common knowledge以及computer knowledge能夠理解的方式分解 ### Acting phase 模型會基於先前的分析,將指令以JSON的方式發出,並且交給我們建立好的環境來執行 ### Reflecting phase 在行動過後,根據行動之後的內容的After screeonshot來分析,確認是否做出調整 這樣的phase給模型提供了更多的彈性 ## ScreenAgent Dataset & CC-Score 簡單來說,他們創造出一種模式 利用目前的task,通過GPT辨認給出回應,再以人工的方式去選擇最後的Action 並且將這個過程記錄在 RLHF Pair之中,作為模型的參考依據  此外,在他們的Trainning dataset中 包含著一系列的不同操作  ### CC-Score 簡單來說 就是對於每一項的動作做出一個評估方式 舉例來說: 滑鼠分為 動作模式 滑鼠動作 按哪顆按鍵 按下去的座標是否在我們要求的範圍內 文字和鍵盤輸入分為 單獨按下 一同按下 consistancy? 至於對於一整項task的評估 則是看整體sequence的完成度以及匹配度等等等   # 【生成式AI時代下的機器學習(2025)】助教課:利用多張GPU訓練大型語言模型—從零開始介紹DeepSpeed、Liger Kernel、Flash Attention及Quantization 連結: https://www.youtube.com/watch?v=mpuRca2UZtI&t=747s ## 核心概念: 大型語言模型需要的資源過多,一張GPU難以負荷,故通過資源分配的方式實行加速和利用硬體設備,以多個GPU達成訓練的目的 這裡主要介紹的是DeepSpeed,Zero offload, fused kernel以及Liger Kernel的方式 來達成使用多張GPU來平行運算模型和分攤運算壓力提升效能的目的。 ## Parameters, gradients and optimizer states 模型往往太大,難以塞進一張GPU內,因此將模型切片,各自放在不同的GPU內,並且通過GPU之間的連接,來達成目的。 ### DeepSpeed 分別有zero-1 zero-2 zero-3三種模式 Zero-1將Optimizer切片放入各個GPU Zero-2將LLM 32bit以及gradient切片 Zero-3將LLM 16bit切片 其中,以Zero-1提升最大  ### Zero offload 將模型大部分參數(或是幾乎全部)放至CPU內,單純使用GPU去做運算 這樣可以使用較低階的GPU進行訓練(?) 但是缺點是 GPU與CPU之間的傳輸速度沒有GPU與GPU之間傳輸那麼快 會導致訓練速度大幅下降  ## Activations ## kernel 單純表達說kernel的運行速度(?  ## Flash Attention Algorithm 將計算attention的function壓縮成一個來加速(?  平常將資料放在CPU的RAM內,需要用到的時候再加載進GPU來運算  # Self-Attention(李宏毅) 連結: 上:https://www.youtube.com/watch?v=hYdO9CscNes 下:https://www.youtube.com/watch?v=gmsMY5kc-zw ## 核心概念:如何使用模型處理vector sequence的問題 普遍模型都是一個一個資料輸入(vector) 但如果今天輸入的是一串的vector,需要一次性對這個vector去做處理,該怎麼做? ex: 給一句話,給這句話做翻譯(每一個字視為一個vector,一整句話就是一個vector sequence) ### One-hot encoding 一個字對應一個col,創造一個長到足以將全部的單字都存下來的vector來代表每一個單字,但是沒辦法看出單字與單字之間的聯繫 ex: cat 和 dog都是動物,但是在vector上可能只能表達[1,0]和[0,1]這樣,看不太出他們之間的關聯  ### Word Embedding 將字畫在圖上,每一個vector變成有點像是座標的東西 可以根據在graph上的位置等等資訊,判斷出這兩個字之間是否相近  此外還有一些其他的東西也是使用這樣的輸入..... ### Output 是什麼? 在輸出中,可能會跟輸入是相同的數量,也可能只剩下一個,或是更多 這邊則是主要討論第一種  ### Sequence Labeling 普通的模型是對input去做output 正常來說同樣的input會獲得同樣的output 但是在某些情況下 像是I saw a saw saw這個單字在不同的位置有不同的語意 也就是input中有所謂的"前後順序"需要做為考量  ## Self attention原理 讓input的輸出,可以考慮到"整個"全部的輸入內容,來做輸出 ### 用公式表達出兩兩input之間的關聯性 對自己以及對別人,分別乘以$W^q$和$W^k$ 至於為什麼要用兩個不同的矩陣,因為要讓這個關聯是單向的而非雙向  ### 加上Activation function 範例是使用soft-max  ### 對每一個$a^n$加上attention score 將每一個值乘以一個$W^v$得到一個attention score 把他們全部都加起來 如果誰的關聯性最大 理論上來說 加起來的數字$b^1$會比較接近於它 :::success 所有的b都是同時算出來的 :::  ### 一圖流  ### Multi-head self attention 如果你想要表達幾個不同類型的關聯 可以讓$W^q$$W^k$$W^v$分別有兩個(或多個) 來得到多個不同的關聯score  ### Position encoding 前面所提到的self attention 仔細想一下其實就會發現,他只能表示input之間的聯繫 但並沒有所謂的"順序" 也就是誰是第一個 誰是第二個 對他們而言,所有的都是在同一個距離內 因此,若是需要對他加入順序和距離的概念,就需要用到這個做法 將每個input加上一個$e^i$ 也就是位置的矩陣 這個矩陣可以是自己決定的 有各種各樣的決定方法  ### Truncated self attention self attention也可以不用每次都讀取全部的關聯 也可以只做一定範圍內的關聯也是可以的  ## Self attention 和其他技術的比較 ### Self attention 和 CNN self attention的概念其實和CNN很像 差別只在於CNN有點像是truncated self attention 也就是限制一定範圍內的資訊  實際上也有論文證明說CNN其實就是self attention的一種  ### Self attention 和 R RNN的概念像是把上一層的輸出 作為下一層的輸入,這樣一直下去 input的資料是線性的,是循序的 而Self attention則是將所有的Input做平行處理,同時算出來 效率會比較高 就算RNN可以做雙向RNN,可以同時顧慮到前後的相關性,但RNN會有一個問題是 離現在輸出越遠(一開始的輸入),很可能會漸漸的被模型忘記,失去特徵。 而self attention則是一開始就是將所有的input放在一起去處理,也就沒有所謂的忘記一回事。 圖片下面的這篇文章 則是告訴你self attention加上什麼東西,其實就可以變成RNN  ### Self attention 用在Graph上  # 使用n8n建立自動工作流(以影片生成為例)(windows11) 連結:https://www.youtube.com/watch?v=oIoW1WgZe-A&t=726s ## 1.創建n8n workspace(使用docker) ### 1.1安裝docker 連結: https://www.docker.com/  可直接使用desktop版本 但後續n8n的container建立會使用cmd執行 ### 1.2在docker上開啟n8n workspace 開啟cmd後依序輸入以下指令: docker volume create n8n_data docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n -e N8N_DEFAULT_BINARY_DATA_MODE="filesystem" docker.n8n.io/n8nio/n8n 完成後應該會出現這樣的字:  就可以將這段網址輸入到網頁中,打開n8n workspace  此外,在docker desktop中也會有顯示container運行中  (綠燈代表運行中) ## 2.使用LLM模型生成內容(以gemini為例) 我使用的是自行輸入主題,自動生成標題,內容和關鍵字的類型 ### 2.1 輸入主題 先拉取一個輸入模塊,使用form(表單)作為輸入格式  參數我是這樣設定,後續可以自行更改:  :::warning URL那邊是n8n自行產生的,請不要更改,我也不知道會不會炸 ::: ### 2.2 增加AI Agent模塊 點擊+新增模塊 選AI Agent   變數按照我這樣設定: Prompt裡面的內容你可以自己下,看你想要製作什麼樣的內容 我是希望內容盡量彈性為主,所以下的比較簡略  然後點擊Add option-->System Message添加系統提示詞 我是這樣填寫的:  :::warning 建議都讓AI模型將資料以json的方式來傳遞,有一個標準的資料格式可以讓我們模型串接更加簡單和方便 此外,你要附加什麼其他的資訊看你,但我範例所使用的這三個東西都必須要有且和我相同,後面會用到 ::: 完成後會像這樣:  ### 2.3 AI Agent 輸入輸出格式定義以及API串接 你的模塊沒意外的話會長這樣:  我們要開始定義他的輸入與輸出 首先,選擇你的Chat Model 你會需要一個Gemini的credential(也就是API)   去Gemini官網登入後選擇一個你喜歡的模型(我這邊使用的是Gemini-2.5-flash) 將Host 和API Key複製過來就可以了  然後在AI Agent的Tool那邊新增一個模塊(Structure output parser),定義好輸出的格式:   最後的成品會長這樣:  ## 3.MoneyPrinterTurbo套件安裝&使用 首先,去以下連結將MoneyPrinterTurbo下載 https://github.com/harry0703/MoneyPrinterTurbo ### 3.1 參數調整 在MoneyPrinterTurbo資料夾中找到這個檔案:  複製一份,重命名為config.toml 然後將subtitle有關的內容複製一份放到[app]底下  ### 3.2 部署MoneyPrinterTurbo 進入到資料夾內,開啟cmd,依序輸入以下指令: docker pull python:3.11-slim-bullseye docker compose up --build 全部跑完之後就會有一個本地網址:  把他打開就會看到MoneyPrinterTurbo的web頁面  :::info 其實這個套件本身就可以自己生成影片和字幕讓你上傳 不過我這裡主要的目標是使用n8n工作流達到一鍵生成的目的 ::: ### 3.3 API部署 找到右上角這個小角,把它展開   這裡一樣需要獲取兩個模型的API key 如何獲取的部分就自行去找吧,很簡單 Gemini的可以跟前面用同一個API key pexel則是申請一下帳號就可獲得 ### 3.4 試用 完成之後可以升成一個影片嘗試看看 輸入主題後自動生成內容:  設定可以參考我的設置,你可以自行調整:    完事之後點最下面的生成  他會開始跑一大堆的東西,慢慢等待  最後出現成果  ## 4.將模型生成內容接入MoneyPrinterTurbo一鍵生成影片 ## 5.將影片輸出至youtube # CTM
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up