---
# System prepended metadata

title: 人工智慧：啥是數位代理人
tags: [' 大三筆記', 人工智慧]

---

---
tags: 人工智慧, 大三筆記
---

# 人工智慧：啥是數位代理人

## 智慧代理人 (Intelligent Agents)
* 代理人透過 **感測器** 感知 **環境** 變化
* **環境** 變化時，啟動 **執行器**，進行某種 **行動**


<img src='https://hackmd.io/_uploads/r1Gl1a83yl.png' height=300>

### 常見名詞解釋
* 代理人 (Agents)：具智慧的電腦程式
* 感測器 (Sensor)：用來感知環境的裝置
* 知覺 (Percept)：代理人感測器的資料輸入
* 知覺序列 (Percept sequence)：感測器一段時間內收到的一連串資料輸入，通常用來決定代理人的行動
* 環境 (Environment)：代理人所處的世界
* 狀態 (State)：環境在某特定時間的情況
* 執行器、制動器 (Actuator)：代理人影響環境的裝置，用來執行 **行動**
* 行動 (Action)：代理人透過制動器進行的動作
* 效能 (Performance)：衡量代理人是否達成目標的標準，通常透過 [目標函數](##效能測量) 來評估

---

### 代理人的功能
代理人行為依賴某種數學模型，演算法及程式
* 功能
    * 完成特定 AI 功能
    * 以感測器序列資料為輸入
    * 判斷環境狀態，以一序列行動為輸出
* 工程師設計 AI 演算法，寫成 AI 程式，以完成代理人功能

---

### 代理器的結構
Agent = Architecture (結構) + Program (程式)
* 結構：計算裝置、感測器、制動器
* 代理器程式：
    * Input：目前的感測資料
    * Input for Agent function：整個感測器資料序列

#### 簡單的代理器程式：Table-Driven-Agent
```python=
def TableDrivenAgent(percept) -> Action:
    global percepts # A sequence of percepts
    global table # A table of actions, indexed by percepts
    
    percepts.append(percept)
    action = table[percepts]
    return action
```
> 每次收到一個新的感測資料 `percept`，程式會將感測資料紀錄 (Line 5) 並查表回傳相應的行動 (Line 6 & 7)

雖然查表法很有效，但該程式所需的記憶體可能會無窮大：
$$
\begin{aligned}
    P&=\text{The set of possible percepts}\\
    T&=\text{Lifetime of the agent}\\
    S&=\text{Size of the lookup table}\\
\end{aligned}
$$
P 為一組感知序列的大小，T 為代理人生命週期 (一共會收到幾次感知序列)
在這個情況下，我們 Lookup table 的大小 S 為：
$$
    S=\Sigma^T_{t=1}\lvert P \rvert^t
$$
看起來還行？我們以簡單的下棋為例
$$
\begin{aligned}
    P&=10\\
    T&=150\\
    S &\approx 10^{150}
\end{aligned}
$$
~~這記憶體使用量夠我載 GTA 10 了~~，而且範例甚至不是玩圍棋
<img src='https://hackmd.io/_uploads/SkDohEK3Jx.png' height=150>
因此，如何製作短小精幹的 AI Agent，是一門很重要的課題

#### AI 的關鍵挑戰技術
如何製作出 **容易擴充** 的 **理性** 代理人程式
* 程式碼越小越好
* 不需要大量的 table entries

---

### 代理器程式種類

#### 簡單反射型代理人 (Simple reflex agents)
* 使用當前的感知來做決定，不會在乎之前的感知歷史
* 規則形式：condition-action，根據符合當前條件的規則來行動
* 最簡單有效，但很智障
    * 無法適應環境變化
* 適用環境：[完全可觀察的環境](####藏的深不深)
    * 因為不考慮歷史資訊，因此無法在 **部分可觀查** 環境下運作

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

#### 基於模型的反射型代理人 (Model-based reflex agents)
* 對環境世界有一定的了解
* 有兩個重要因素
    * **內部狀態**：依賴感知歷史
    * **模型**：了解「環境的事情如何發生」
* 依賴兩種知識
    * 環境如何變化
    * 行動如何影響整個環境
* 使用環境：[部分可觀察的環境](####藏的深不深)

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

#### 目標導向代理人 (Goal-based agents)
* 目前環境的資訊永遠不充足
* 以 **目標評估** 來補上缺乏的資訊
* 代理人根據一個明確目標來決策，以 **搜尋與規劃** 來選擇最佳行動，以更接近並達成目標

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

#### 效用導向代理人 (Utility-based agents)
* 相較於目標導向，增加了一個 **偏好程度** 指標
* 代理人會選擇具 **最佳期望效用** 的行動

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

#### 學習代理人 (Learning agents)
* 能夠學習、分析效能，並尋找提高性能的方法
* 具有四項基本功能
    * 學習元件 (Learning element)：負責學習
    * 效能元件 (Performance element)：選擇對應的行動
    * 批評者 (Critic)：給予學習元件反饋
    * 問題產生器 (Problem generator)：負責建議一些新的操作，以從中學習新知識

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

---

## 效能測量
使用一 **目標函式 (objective function)** 來測量效能
* 以最佳化後的 **效能** 定義代理人是否運作成功
* 代理人制定一連串行動後，由目標函式量測最佳化效能，以此判斷代理人是否成功
* 不同的 AI 程式需要不同的目標函式

## 理性
定義：能夠最大化地完成事先所定義的目標

### 理性的代理人 (Rational Agents)
* **決策最佳化**：使用效能測量公式定義成功與否
* **環境的事先知識**：代理器必須有環境的先備知識
* **明確的行動類別**：行動必須 **可執行**
* **感測器資料**：感測資料須 **隨時更新**

當一個代理器滿足以上定義，並可根據最新的感測器序列，輸出具最大效能的行動序列，即為理性的代理人
> * 你在考試的時候 **看到 (感測器資料)** 一個題目，你以將 **分數最大化 (決策最佳化)**、和你昨晚複習的 **先備知識** 作為考量，進而 **選擇 (行動類別)** 出一個你認為正確的答案。
> * 如果你能夠做到以上這些，那恭喜你，我的朋友，你是一個合格的理性代理人 (?

### 無所不知代理人 (Omniscience Agents)
* 每個行動類別的輸出事先已知
* 不會有其他結果輸出
* 不存在
* 不是理性的代理人
    > 無所不知代理人不會透過決策來優化結果

---

## 自動化 (Autonomy)
### 自動化的意義
* **學習以前的感測資料**：用以建立更棒的決策模型
* **知識隨時間變化**：用新的感測資料修補歷史經驗的缺失


### 自動化的反例：時鐘
* 沒有感測器輸入
* 根據固定演算法運行
* 沒有學習能力
<img src='https://hackmd.io/_uploads/BJplwv_hkx.png' height='100'>

---

## 任務環境
任務環境是 AI 問題的集合
* 理性代理器是問題的答案
* 任務環境定義解決問題所需的代理器

### 任務環境的定義 - PEAS 描述
* 效能目標 (Performance)
* 環境 (Environment)
* 執行器 (Actuators)
* 感測器 (Sensors)
![image](https://hackmd.io/_uploads/B1pWOw_21l.png)

### 任務環境的特性
#### 藏的深不深
* 完全可觀察 (Fully observable)
    * 感測器啥都看得到
    * 感測器資料與行動決策有關
    * 下棋

* 部分可觀察 (Partially observable)
    * 環境只有部分可觀察
        > 感測器帶有雜訊、資料不完整
    * 玩牌

#### 你確定嗎
* 確定的 (Deterministic)
    * 根據現在的感測器資料及行動決定下個環境狀態
* 隨機的 (Stochastic)
    * 環境可能受隨機因素影響，因此當前行動無法完全決定下一個狀態
    * 自動駕駛
<img src='https://hackmd.io/_uploads/S1ddkdd2kx.png' height='100'>

#### 分段還連續
* 片段的 (Episodic)
    * 兩個片段的決策間彼此無關
    * 環境較簡單：代理器不須往前思考
    * 影像分類、醫學診斷
* 連續的 (Sequential)
    * 目前的行動將會影響未來的決策
    * 自動駕駛、下棋

#### 動態還靜態
* 靜態 (Static)：環境不隨時間變化
* 動態 (Dynamic)：環境隨時間變化
* 半動態 (Semidynamic)：環境不隨時間變化，但代理器效能隨時間變化

#### 連續還離散
* 離散 (Discrete)
    * 狀態類別數是有限的
    * 可清楚定義所需的感測資料及行動類別
    * 下棋
* 連續 (Continuous)
    * 無限個狀態類別
    * 自動駕駛

#### Why are you single
* 單一代理器 (Single agent)
    * 數獨
    *  crossword 填詞遊戲
* 多代理器 (Multiagent)
    * 井字遊戲
    * 西洋棋 - 兩個代理人
    * 電競遊戲 - 多代理人競爭環境 (Competitive multiagent environment)
    * 自動駕駛代理人 - 多代理人合作環境 (Cooperative multiagent environment)
<img src='https://hackmd.io/_uploads/ry0hJuu21x.png' height=100>


#### 知之為知之不知為不知，是隻豬也
* 已知
    * 執行 Action 的結果已知
    * 下圍棋
* 未知
    * 代理人需要學習如何執行 Action 才有好結果

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

---