---
# System prepended metadata

title: 征途從此開始(probably

---

# 征途從此開始(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
對一系列操作的定義
![image](https://hackmd.io/_uploads/Sy_bE_hXJg.png)

### 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之中，作為模型的參考依據
![image](https://hackmd.io/_uploads/H1vtPdn71l.png)


此外，在他們的Trainning dataset中
包含著一系列的不同操作
![image](https://hackmd.io/_uploads/HytbuOnQyl.png)

### CC-Score
簡單來說
就是對於每一項的動作做出一個評估方式
舉例來說:
滑鼠分為 動作模式 滑鼠動作 按哪顆按鍵 按下去的座標是否在我們要求的範圍內
文字和鍵盤輸入分為 單獨按下 一同按下 consistancy?
至於對於一整項task的評估
則是看整體sequence的完成度以及匹配度等等等

![image](https://hackmd.io/_uploads/B1Aecdh71e.png)
![image](https://hackmd.io/_uploads/Hk8b9On7yg.png)

# 【生成式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提升最大

![image](https://hackmd.io/_uploads/Hyg7Of8yxx.png)

### Zero offload
將模型大部分參數(或是幾乎全部)放至CPU內，單純使用GPU去做運算
這樣可以使用較低階的GPU進行訓練(?)
但是缺點是 GPU與CPU之間的傳輸速度沒有GPU與GPU之間傳輸那麼快
會導致訓練速度大幅下降
![image](https://hackmd.io/_uploads/SkT4KzUygl.png)

## Activations

## kernel
單純表達說kernel的運行速度(?
![image](https://hackmd.io/_uploads/HJ5jFMIJeg.png)

## Flash Attention Algorithm
將計算attention的function壓縮成一個來加速(?
![image](https://hackmd.io/_uploads/SJae5GU1eg.png)

平常將資料放在CPU的RAM內，需要用到的時候再加載進GPU來運算
![image](https://hackmd.io/_uploads/ByAHcfUkee.png)


# 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]這樣，看不太出他們之間的關聯
![image](https://hackmd.io/_uploads/H1GiYwukxe.png)

### Word Embedding
將字畫在圖上，每一個vector變成有點像是座標的東西
可以根據在graph上的位置等等資訊，判斷出這兩個字之間是否相近
![image](https://hackmd.io/_uploads/SJOz9Pdklx.png)

此外還有一些其他的東西也是使用這樣的輸入.....

### Output 是什麼?
在輸出中，可能會跟輸入是相同的數量，也可能只剩下一個，或是更多
這邊則是主要討論第一種
![image](https://hackmd.io/_uploads/r1VqhI0Jxg.png)


### Sequence Labeling
普通的模型是對input去做output
正常來說同樣的input會獲得同樣的output
但是在某些情況下
像是I saw a saw
saw這個單字在不同的位置有不同的語意
也就是input中有所謂的"前後順序"需要做為考量
![image](https://hackmd.io/_uploads/r1HjT8Ckxl.png)

## Self attention原理
讓input的輸出，可以考慮到"整個"全部的輸入內容，來做輸出

### 用公式表達出兩兩input之間的關聯性
對自己以及對別人，分別乘以$W^q$和$W^k$
至於為什麼要用兩個不同的矩陣，因為要讓這個關聯是單向的而非雙向
![image](https://hackmd.io/_uploads/H1EUA8A1le.png)

### 加上Activation function
範例是使用soft-max
![image](https://hackmd.io/_uploads/SkqZWPRJee.png)

### 對每一個$a^n$加上attention score
將每一個值乘以一個$W^v$得到一個attention score
把他們全部都加起來
如果誰的關聯性最大
理論上來說 加起來的數字$b^1$會比較接近於它
:::success
所有的b都是同時算出來的
::: 
![image](https://hackmd.io/_uploads/BJai-DA1xx.png)

### 一圖流
![image](https://hackmd.io/_uploads/rJN6zvAyxg.png)

### Multi-head self attention
如果你想要表達幾個不同類型的關聯
可以讓$W^q$$W^k$$W^v$分別有兩個(或多個)
來得到多個不同的關聯score
![image](https://hackmd.io/_uploads/HJgv7PCyxe.png)

### Position encoding
前面所提到的self attention
仔細想一下其實就會發現，他只能表示input之間的聯繫
但並沒有所謂的"順序"
也就是誰是第一個 誰是第二個
對他們而言，所有的都是在同一個距離內
因此，若是需要對他加入順序和距離的概念，就需要用到這個做法

將每個input加上一個$e^i$
也就是位置的矩陣
這個矩陣可以是自己決定的
有各種各樣的決定方法
![image](https://hackmd.io/_uploads/BJVVEDR1xg.png)

### Truncated self attention
self attention也可以不用每次都讀取全部的關聯
也可以只做一定範圍內的關聯也是可以的
![image](https://hackmd.io/_uploads/rJGvBDRJll.png)

## Self attention 和其他技術的比較

### Self attention 和 CNN
self attention的概念其實和CNN很像
差別只在於CNN有點像是truncated self attention
也就是限制一定範圍內的資訊
![image](https://hackmd.io/_uploads/HyWTBw01el.png)

實際上也有論文證明說CNN其實就是self attention的一種
![image](https://hackmd.io/_uploads/S1Ez8PAyxe.png)


### Self attention 和 R
RNN的概念像是把上一層的輸出
作為下一層的輸入，這樣一直下去
input的資料是線性的，是循序的

而Self attention則是將所有的Input做平行處理，同時算出來
效率會比較高

就算RNN可以做雙向RNN，可以同時顧慮到前後的相關性，但RNN會有一個問題是 離現在輸出越遠(一開始的輸入)，很可能會漸漸的被模型忘記，失去特徵。
而self attention則是一開始就是將所有的input放在一起去處理，也就沒有所謂的忘記一回事。

圖片下面的這篇文章
則是告訴你self attention加上什麼東西，其實就可以變成RNN
![image](https://hackmd.io/_uploads/rJ7ULP0Jgl.png)

### Self attention 用在Graph上
![image](https://hackmd.io/_uploads/HkXjwDC1xl.png)


# 使用n8n建立自動工作流(以影片生成為例)(windows11)
連結:https://www.youtube.com/watch?v=oIoW1WgZe-A&t=726s

## 1.創建n8n workspace(使用docker)

### 1.1安裝docker
連結: https://www.docker.com/
![image](https://hackmd.io/_uploads/HJfojfQ-gx.png)
可直接使用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

完成後應該會出現這樣的字:
![image](https://hackmd.io/_uploads/rJtnS7X-eg.png)
就可以將這段網址輸入到網頁中，打開n8n workspace
![image](https://hackmd.io/_uploads/H16eUmm-le.png)

此外，在docker desktop中也會有顯示container運行中
![image](https://hackmd.io/_uploads/SJoQI77bex.png)
(綠燈代表運行中)


## 2.使用LLM模型生成內容(以gemini為例)
我使用的是自行輸入主題，自動生成標題，內容和關鍵字的類型

### 2.1 輸入主題
先拉取一個輸入模塊，使用form(表單)作為輸入格式
![black](https://hackmd.io/_uploads/SyT08QXWlg.png)

參數我是這樣設定，後續可以自行更改:
![image](https://hackmd.io/_uploads/HkEIPmX-ex.png)
:::warning
URL那邊是n8n自行產生的，請不要更改，我也不知道會不會炸
:::

### 2.2 增加AI Agent模塊
點擊+新增模塊 選AI Agent
![black](https://hackmd.io/_uploads/ByeYum7Wxl.png)
![black](https://hackmd.io/_uploads/SkPadQQWxl.png)

變數按照我這樣設定:
Prompt裡面的內容你可以自己下，看你想要製作什麼樣的內容
我是希望內容盡量彈性為主，所以下的比較簡略
![image](https://hackmd.io/_uploads/HkGlKmXZel.png)

然後點擊Add option-->System Message添加系統提示詞
我是這樣填寫的:
![image](https://hackmd.io/_uploads/SkNSYmX-ll.png)
:::warning
建議都讓AI模型將資料以json的方式來傳遞，有一個標準的資料格式可以讓我們模型串接更加簡單和方便
此外，你要附加什麼其他的資訊看你，但我範例所使用的這三個東西都必須要有且和我相同，後面會用到
:::

完成後會像這樣:
![image](https://hackmd.io/_uploads/ByWJ9mXWgx.png)

### 2.3 AI Agent 輸入輸出格式定義以及API串接
你的模塊沒意外的話會長這樣:
![image](https://hackmd.io/_uploads/S1AV5XQZle.png)
我們要開始定義他的輸入與輸出

首先，選擇你的Chat Model
你會需要一個Gemini的credential(也就是API)
![image](https://hackmd.io/_uploads/rkAM3XQ-gg.png)
![image](https://hackmd.io/_uploads/B1NN3QXZxx.png)
去Gemini官網登入後選擇一個你喜歡的模型(我這邊使用的是Gemini-2.5-flash)
將Host 和API Key複製過來就可以了
![image](https://hackmd.io/_uploads/SyJK3QmZlg.png)


然後在AI Agent的Tool那邊新增一個模塊(Structure output parser)，定義好輸出的格式:
![black](https://hackmd.io/_uploads/S1PshXmWeg.png)
![image](https://hackmd.io/_uploads/ByRlom7-ge.png)

最後的成品會長這樣:
![image](https://hackmd.io/_uploads/S1_z6XmZgg.png)


## 3.MoneyPrinterTurbo套件安裝&使用
首先，去以下連結將MoneyPrinterTurbo下載
https://github.com/harry0703/MoneyPrinterTurbo

### 3.1 參數調整
在MoneyPrinterTurbo資料夾中找到這個檔案:
![image](https://hackmd.io/_uploads/B1QG07mZgg.png)

複製一份，重命名為config.toml
然後將subtitle有關的內容複製一份放到[app]底下
![image](https://hackmd.io/_uploads/BJotCQ7Zeg.png)

### 3.2 部署MoneyPrinterTurbo
進入到資料夾內，開啟cmd，依序輸入以下指令:
docker pull python:3.11-slim-bullseye
docker compose up --build

全部跑完之後就會有一個本地網址:
![image](https://hackmd.io/_uploads/BkegH147-le.png)

把他打開就會看到MoneyPrinterTurbo的web頁面
![image](https://hackmd.io/_uploads/BypwkVXZee.png)
:::info
其實這個套件本身就可以自己生成影片和字幕讓你上傳
不過我這裡主要的目標是使用n8n工作流達到一鍵生成的目的
:::

### 3.3 API部署
找到右上角這個小角，把它展開
![black](https://hackmd.io/_uploads/HJDQxNXWxg.png)

![image](https://hackmd.io/_uploads/rydrxVXbxg.png)
這裡一樣需要獲取兩個模型的API key
如何獲取的部分就自行去找吧，很簡單
Gemini的可以跟前面用同一個API key
pexel則是申請一下帳號就可獲得

### 3.4 試用
完成之後可以升成一個影片嘗試看看
輸入主題後自動生成內容:
![image](https://hackmd.io/_uploads/rJvXZVQZge.png)

設定可以參考我的設置，你可以自行調整:
![image](https://hackmd.io/_uploads/ry_SbNQ-xl.png)
![image](https://hackmd.io/_uploads/SyN8WNQWlg.png)
![image](https://hackmd.io/_uploads/H1NvW4QWgl.png)

完事之後點最下面的生成
![image](https://hackmd.io/_uploads/r1KubE7bge.png)

他會開始跑一大堆的東西，慢慢等待
![image](https://hackmd.io/_uploads/rJ0iZVQ-ll.png)

最後出現成果
![image](https://hackmd.io/_uploads/r1U7MVXWgl.png)

## 4.將模型生成內容接入MoneyPrinterTurbo一鍵生成影片

## 5.將影片輸出至youtube

# CTM

