113 年 國立成功大學製造資訊與系統研究所丙組《計算機概論》
第 A.1 題5 分
A. Cyber Physical System Concepts: (10%)
A.1 What is a Cyber-Physical System (CPS), and how does it integrate computational
elements with physical processes? (5%)
登入後即可作答並保存紀錄。
本題主要在探討資訊物理系統 (Cyber-Physical System, CPS) 的基本定義及其構成要素。
核心概念: 資訊物理系統 (CPS) 是指整合計算、網路與實體過程的系統。計算元件透過感測器(Sensors)收集實體世界的資訊,透過網路進行處理與分析,再透過致動器(Actuators)反饋至實體世界,形成一個閉迴路或開迴路的操作。
第 A.2 題5 分
A. Cyber Physical System Concepts: (10%)
A.2 Provide an example of a Cyber-Physical System and explain its benefits. (5%)
登入後即可作答並保存紀錄。
本題要求舉例說明資訊物理系統 (CPS) 的應用,並解釋其效益。
核心概念: 資訊物理系統 (CPS) 的應用廣泛,從智慧製造到智慧交通,其核心效益在於提升效率、可靠性、安全性與使用者體驗。
詳解:
一個常見的資訊物理系統 (CPS) 應用是智慧電網 (Smart Grid)。
在智慧電網中,感測器遍佈於發電廠、輸配電線路、變電站及用戶端,用於監測電力流量、電壓、電流、溫度等參數。這些數據透過通訊網路即時傳輸至中央控制系統。中央控制系統利用這些數據,結合先進的演算法,進行電力負載的預測、調度最佳化、故障偵測與排除。此外,智慧電表也讓用戶端能監控自身用電情況,並可能參與需求反應機制。
第 B.1 題5 分
B. Human Computer Interaction Concepts: (10%)
B.1 Define Human-Computer Interaction (HCI) and explain its importance in the design of
interactive systems. (5%)
登入後即可作答並保存紀錄。
本題旨在釐清人機互動 (Human-Computer Interaction, HCI) 的定義及其在互動系統設計中的重要性。
核心概念: 人機互動 (HCI) 是一門研究人與電腦之間互動的學科,其目標是設計出更易用、有效且令人愉悅的互動系統。
詳解:
人機互動 (HCI) 是一門跨學科領域,專注於研究人類使用者與電腦系統之間的互動。它涉及使用者(Human)、電腦(Computer)以及他們之間的互動方式(Interaction)。HCI 的研究不僅僅是關於技術本身,更強調使用者在與系統互動時的體驗、行為、認知及感受。
HCI 在互動系統設計中的重要性體現在:
- 提升使用者滿意度與生產力: 設計良好的 HCI 能讓使用者更容易學習和使用系統,進而提高他們完成任務的效率和滿意度。反之,糟糕的 HCI 可能導致使用者感到挫折、疲勞,甚至放棄使用。
第 B.2 題5 分
B. Human Computer Interaction Concepts: (10%)
B.2 Discuss the difference between user interface (UI) and user experience (UX). (5%)
登入後即可作答並保存紀錄。
本題要求區分使用者介面 (UI) 與使用者體驗 (UX) 的差異。
核心概念: UI 關注的是產品的外觀與互動方式,而 UX 則涵蓋了使用者與產品互動時的整體感受與體驗。
詳解:
使用者介面 (User Interface, UI) 主要指的是使用者與產品或系統互動的「接觸點」。它包含使用者與之互動的視覺元素和互動方式,例如按鈕、圖標、佈局、色彩、字體、響應速度等。UI 的目標是讓介面看起來吸引人、易於理解,並且使用者能夠直觀地進行操作。簡而言之,UI 是關於「看起來如何」以及「如何操作」。
使用者體驗 (User Experience, UX) 則是一個更廣泛的概念,它涵蓋了使用者與產品或服務互動的「整體感受」。這包括使用者在使用產品前、使用中以及使用後的整體印象。UX 關注的是使用者在使用產品時的感受、態度、滿意度、效率,以及他們是否能夠成功地達成目標。UX 設計的目標是確保使用者在整個互動過程中獲得積極、順暢、有價值且令人愉悅的體驗。
第 C.1 題5 分
C. Sensor Networks Concepts: (10%)
C.1 Define a sensor network and explain its primary purpose. (5%)
登入後即可作答並保存紀錄。
本題旨在定義感測網路 (Sensor Network) 並闡述其主要目的。
核心概念: 感測網路是由大量分散式感測器節點組成的網路,用於監測物理環境並收集數據。
詳解:
感測網路 (Sensor Network) 是一種由數量眾多、小型、低功耗的感測器節點組成的無線網路。這些感測器節點通常被部署在一個區域內,用於探測和監測該區域的物理或環境條件,例如溫度、濕度、光照、壓力、運動、聲音、污染物等。每個感測器節點通常包含一個或多個感測器、一個微處理器、一個記憶體、一個通訊模組(如無線收發器)以及一個電源(通常是電池)。
感測網路的主要目的包括:
- 環境監測與數據採集: 這是感測網路最核心的功能。透過部署大量感測器,可以在廣泛的區域內、長時間地、細粒度地收集環境數據,這是在傳統方法下難以實現的。
第 C.2 題5 分
C. Sensor Networks Concepts: (10%)
C.2 Explain why there is a trade-off between data accuracy and communication overhead
in sensor networks. (5%)
登入後即可作答並保存紀錄。
本題要求解釋感測網路中數據準確性與通訊開銷之間的權衡關係。
核心概念: 在感測網路中,為了提高數據的準確性,通常需要更頻繁的採樣、更複雜的數據處理或更精確的感測器,這些都可能增加通訊的負擔;反之,為了降低通訊開銷,可能需要簡化數據或減少通訊頻率,從而影響準確性。
詳解:
在感測網路中,數據準確性 (Data Accuracy) 和 通訊開銷 (Communication Overhead) 之間存在著顯著的權衡關係,這主要是由於感測網路的資源限制(如低功耗、低頻寬)以及數據的特性所致。
提高數據準確性的原因與其對通訊開銷的影響:
- 更頻繁的採樣: 為了捕捉快速變化的物理現象或獲得更精確的數據,感測器節點需要更頻繁地進行數據採樣。每次採樣後,都需要將數據傳輸出去,這直接增加了數據傳輸的次數和總量,從而增加了通訊開銷。
- 更高解析度的數據: 使用更精確的感測器或採集更高解析度的數據(例如,從 8 位元提升到 16 位元)可以提高數據的準確性,但這也意味著每個數據點的資料量更大,傳輸相同數量的數據點需要更多的頻寬或時間,增加了通訊開銷。
- 數據融合與後處理: 為了提高整體數據的準確性,感測器節點可能需要執行本地的數據融合(例如,將多個感測器的讀數進行平均或加權平均)或更複雜的數據壓縮/編碼算法。這些計算過程本身會消耗更多能量,且融合後的數據可能仍然需要傳輸,或者需要傳輸原始數據以供後端進一步處理,這也可能間接增加通訊的負擔。
第 D.1 題5 分
D. Programming Language Concepts: (10%)
D.1 Differentiate between a high-level programming language and a low-level
programming language. Provide examples of each. (5%)
登入後即可作答並保存紀錄。
本題要求區分高階程式語言與低階程式語言,並各舉例說明。
核心概念: 高階程式語言抽象程度高,接近人類語言,易於理解和編寫;低階程式語言抽象程度低,接近機器語言,更貼近硬體。
詳解:
程式語言可以根據其抽象程度和與硬體的接近程度,大致分為高階程式語言和低階程式語言。
高階程式語言 (High-Level Programming Language):
- 特點:
- 抽象程度高,較少涉及硬體細節(如記憶體管理、CPU 寄存器)。
- 語法結構更接近人類自然語言(如英文),易於學習、閱讀和編寫。
- 通常具備自動記憶體管理(如垃圾回收機制)。
- 具有較強的可移植性,同一份程式碼可以在不同的作業系統和硬體架構上運行,只需重新編譯或解釋。
- 開發效率高,程式設計師可以專注於解決問題的邏輯,而不是硬體操作。
- 例子:
- Python
- Java
- C++
- C#
- JavaScript
- Ruby
低階程式語言 (Low-Level Programming Language):
- 特點:
第 D.2 題5 分
D. Programming Language Concepts: (10%)
D.2 Explain the difference between a compiler and an interpreter in the context of
programming languages. List the programming language skills that you have and describe
how they are converting from high level code to machine-readable instructions. (5%)
登入後即可作答並保存紀錄。
本題要求解釋編譯器 (Compiler) 與直譯器 (Interpreter) 的差異,並描述個人具備的程式語言技能及其高階程式碼轉換為機器指令的過程。
核心概念: 編譯器一次性將高階程式碼轉換為機器碼;直譯器逐行執行高階程式碼。
詳解:
編譯器 (Compiler) 與直譯器 (Interpreter) 的差異:
| 特性 | 編譯器 (Compiler) | 直譯器 (Interpreter) |
|---|---|---|
| 轉換方式 | 將整個高階程式碼一次性翻譯成機器碼(或中間碼)。 | 逐行(或逐語句)讀取並執行高階程式碼。 |
| 輸出 | 生成獨立的可執行檔(機器碼或位元組碼)。 | 不生成獨立的可執行檔,直接執行。 |
| 執行速度 | 程式執行速度快(因為已翻譯成機器碼)。 | 程式執行速度相對較慢(因為每次執行都需要即時翻譯)。 |
| 除錯 | 除錯較困難,錯誤訊息可能不夠精確,難以定位。 | 除錯較容易,錯誤訊息通常能精確指出問題所在。 |
| 記憶體使用 | 編譯階段可能需要較多記憶體,但執行時較有效率。 | 執行時需要同時載入程式碼和直譯器,記憶體使用較高。 |
| 移植性 | 生成的可執行檔通常是平台相關的,但中間碼(如 Java 的位元組碼)可移植。 | 程式碼本身是可移植的,但需要相應的直譯器在目標平台上運行。 |
| 應用範例 | C, C++, Java (編譯為位元組碼), Go, Rust | Python, JavaScript, Ruby, PHP, Shell Script |
個人程式語言技能與高階程式碼轉換過程:
(請注意:以下內容是基於一個假設的考生情況,實際應由考生根據自身情況填寫。)
第 E.1 題5 分
E. Algorithms and Data Structure Concepts: (30%)
E.1 Differentiate between time complexity and space complexity in the context of
algorithm analysis. (5%)
登入後即可作答並保存紀錄。
本題要求區分演算法分析中的時間複雜度與空間複雜度。
核心概念: 時間複雜度衡量演算法執行時間的成長趨勢;空間複雜度衡量演算法佔用記憶體空間的成長趨勢。
詳解:
在演算法分析中,我們通常使用時間複雜度和空間複雜度來評估演算法的效率和資源消耗。這兩種複雜度都是用大 O 符號 (Big O notation) 來表示,它描述了演算法的性能隨著輸入規模 的增大而如何成長。
- 時間複雜度 (Time Complexity):
- 定義: 時間複雜度衡量一個演算法執行所需要的時間資源,通常是表示為輸入規模 的函數。它並非計算確切的執行時間(因為這取決於硬體、編譯器等因素),而是關注演算法執行步驟數隨著輸入規模的成長趨勢。
- 表示: 通常用 來表示,其中 是輸入規模 的一個函數。例如, 表示常數時間, 表示對數時間, 表示線性時間, 表示平方時間, 表示指數時間。
- 目的: 幫助我們選擇在不同規模輸入下表現最佳的演算法。例如,對於大規模數據,我們傾向於選擇時間複雜度較低的演算法。
- 範例: 遍歷一個包含 個元素的陣列,需要訪問每個元素一次,其時間複雜度為 。
第 E.2 題5 分
E. Algorithms and Data Structure Concepts: (30%)
E.2 Explain the concept of Big O notation. How is it used to analyze the efficiency of
algorithms? (5%)
登入後即可作答並保存紀錄。
本題要求解釋大 O 符號 (Big O notation) 的概念,以及它如何用於分析演算法的效率。
核心概念: 大 O 符號是一種數學符號,用於描述一個函數(在此指演算法的執行時間或空間需求)的漸進上界,以表示演算法的效率如何隨著輸入規模的增大而「最壞情況下」成長。
詳解:
大 O 符號 (Big O Notation) 的概念:
大 O 符號是一種用來描述函數(特別是演算法的執行時間或空間複雜度)在輸入規模 趨近於無窮大時,其成長趨勢的數學符號。它提供了一種標準化的方式來比較不同演算法的效率,特別關注其「最壞情況」下的性能。
更精確地說,如果一個演算法的執行時間函數 滿足 對於所有足夠大的 都成立(其中 是一個正常數),那麼我們說 的時間複雜度是 。這裡的 是一個簡單的函數,例如 等。
大 O 符號的重點在於:
- 漸進分析 (Asymptotic Analysis): 它關注的是當輸入規模 非常大時,演算法性能的成長趨勢,忽略常數因子和低階項。
- 上界 (Upper Bound): 大 O 符號描述的是最壞情況下的執行時間或空間需求。
- 簡化: 它提供了一種簡潔的方式來表達複雜的函數,使我們能夠專注於演算法的關鍵性能特徵。
如何使用大 O 符號分析演算法的效率:
- 確定輸入規模 : 識別演算法處理的輸入的大小,這通常是輸入數據的元素數量。
第 E.3 題5 分
E. Algorithms and Data Structure Concepts: (30%)
E.3 Provide an example of a linear data structure. How does it differ from a non-linear data
structure? (5%)
登入後即可作答並保存紀錄。
本題要求舉例說明線性資料結構,並解釋其與非線性資料結構的差異。
核心概念: 線性資料結構的元素之間存在一對一的線性關係;非線性資料結構的元素之間存在一對多或多對多的關係。
詳解:
線性資料結構 (Linear Data Structure):
在線性資料結構中,數據元素是依序排列的,每個元素(除了第一個和最後一個)都直接連接到其前一個和後一個元素。元素之間的關係是線性的,即「一個接一個」。
線性資料結構的例子:
- 陣列 (Array): 數據元素在記憶體中是連續儲存的,可以透過索引直接訪問。元素之間是按順序排列的。
- 鏈結串列 (Linked List): 每個元素(節點)包含數據和指向下一個節點的指標。元素之間透過指標串聯起來,形成一個鏈。
- 堆疊 (Stack): 一種後進先出 (LIFO) 的結構,元素只能在頂端進行插入 (push) 和刪除 (pop) 操作。
- 佇列 (Queue): 一種先進先出 (FIFO) 的結構,元素在隊頭進行刪除,在隊尾進行插入。
非線性資料結構 (Non-linear Data Structure):
在非線性資料結構中,數據元素的排列方式不一定是線性的。一個元素可能與多個其他元素產生關聯,數據元素之間的關係可以是「一對多」或「多對多」。
非線性資料結構的例子:
- 樹 (Tree): 數據元素以層級結構組織,每個節點可以有多個子節點。例如,二元樹 (Binary Tree)、B-Tree 等。
- 圖 (Graph): 由節點 (頂點) 和連接節點的邊 (線) 組成,節點之間的關係可以是任意的,沒有特定的順序或層級。
線性與非線性資料結構的差異:
| 特徵 | 線性資料結構 | 非線性資料結構
第 E.4 題5 分
E. Algorithms and Data Structure Concepts: (30%)
E.4 What is the purpose of sorting algorithms? Provide an example of a sorting algorithm. (5%)
登入後即可作答並保存紀錄。
本題要求說明排序演算法的目的,並舉例一個排序演算法。
核心概念: 排序演算法的目的是將一個數據集合按照特定順序(遞增或遞減)重新排列,以便於後續的搜尋、處理或分析。
詳解:
排序演算法的目的 (Purpose of Sorting Algorithms):
排序演算法是電腦科學中最基本且最常見的演算法之一。其主要目的是將一個包含多個數據元素的集合(如陣列、列表)按照預定義的順序(通常是數值大小或字母順序的遞增或遞減)進行重新排列。
排序的主要目的與效益包括:
- 提高搜尋效率: 排序後的數據集合,可以顯著提高搜尋操作的效率。例如,在已排序的陣列中使用二元搜尋 (Binary Search) 的時間複雜度可以達到 ,遠快於在未排序陣列中使用線性搜尋的 。
- 簡化數據處理: 許多其他演算法或數據結構的實現,都需要數據是排序過的。例如,合併兩個排序列表、尋找眾數 (mode)、計算中位數 (median) 等。
- 方便數據分析與展示: 排序可以使數據更易於閱讀、理解和分析。例如,按銷售額排序的產品列表可以清楚地展示哪些產品最暢銷,這對於決策制定非常重要。
- 實現特定功能: 某些應用場景,如顯示排行榜、按時間順序排列的日誌記錄等,都直接依賴於排序。
排序演算法的例子:
選擇排序 (Selection Sort):
選擇排序是一種簡單的排序演算法。它的基本思想是:
- 在未排序的數據子列中,找到最小(或最大)的元素。
- 將其與未排序子列的第一個元素交換位置。
- 重複上述步驟,直到整個列表排序完成。
第 E.5 題5 分
E. Algorithms and Data Structure Concepts: (30%)
E.5 Describe the concept of a hash table. How does it achieve efficient data retrieval? (5%)
登入後即可作答並保存紀錄。
本題要求描述雜湊表 (Hash Table) 的概念,以及它如何實現高效的數據檢索。
核心概念: 雜湊表是一種利用雜湊函數將鍵 (Key) 映射到儲存位置(索引)的資料結構,實現平均 的插入、刪除和檢索操作。
詳解:
雜湊表 (Hash Table) 的概念:
雜湊表(也稱為雜湊映射 Hash Map)是一種非常高效的資料結構,用於儲存鍵值對 (Key-Value Pair)。它的核心思想是利用一個稱為雜湊函數 (Hash Function) 的特殊函數,將鍵 (Key) 轉換成一個整數,這個整數作為索引(或稱為雜湊值 Hash Value)指向儲存陣列(通常稱為桶 Bucket 或槽 Slot)中的位置,從而直接存取對應的值 (Value)。
雜湊表的組成部分:
- 鍵 (Key): 用於唯一識別和查找數據的標識符。
- 值 (Value): 與鍵關聯的實際數據。
- 雜湊函數 (Hash Function): 一個將鍵映射到儲存陣列索引的函數。好的雜湊函數應具備以下特性:
- 確定性 (Deterministic): 對於相同的鍵,總是產生相同的雜湊值。
- 高效性 (Efficient): 計算雜湊值所需的時間應盡可能短。
- 均勻分佈性 (Uniform Distribution): 盡可能將鍵均勻地分佈到儲存陣列的各個槽中,減少衝突。
- 儲存陣列 (Array/Buckets): 用於實際儲存鍵值對的數據結構,通常是陣列。
雜湊表如何實現高效的數據檢索 (Efficient Data Retrieval):
雜湊表的效率主要體現在其平均時間複雜度上。通過一個好的雜湊函數,插入、刪除和檢索操作的平均時間複雜度可以達到 。
第 E.6 題5 分
E. Algorithms and Data Structure Concepts: (30%)
E.6 Explain the difference between breadth-first search (BFS) and depth-first search (DFS)
algorithms. (5%)
登入後即可作答並保存紀錄。
本題要求解釋廣度優先搜尋 (BFS) 和深度優先搜尋 (DFS) 這兩種圖形遍歷演算法的差異。
核心概念: BFS 從起始節點開始,逐層向外遍歷,先訪問離起始節點近的節點;DFS 則沿著某一分支深入探索,直到盡頭再回溯。
詳解:
廣度優先搜尋 (Breadth-First Search, BFS) 和深度優先搜尋 (Depth-First Search, DFS) 是兩種常用於遍歷圖 (Graph) 或樹 (Tree) 的演算法。它們的主要區別在於遍歷的順序和所使用的輔助數據結構。
1. 廣度優先搜尋 (Breadth-First Search, BFS):
- 遍歷策略: BFS 是一種「層層遞進」的遍歷方式。它從起始節點開始,首先訪問起始節點本身,然後訪問與起始節點直接相連的所有鄰居節點,接著訪問這些鄰居節點的所有未訪問過的鄰居節點,依此類推。它總是先訪問距離起始節點較近的節點,再訪問距離較遠的節點。
- 數據結構: BFS 通常使用佇列 (Queue) 來管理待訪問的節點。
- 將起始節點加入佇列。
- 當佇列不為空時,從佇列的隊頭取出一個節點。
- 訪問該節點。
- 將該節點所有未訪問過的鄰居節點加入佇列的隊尾。
- 應用:
- 尋找圖中兩個節點之間的最短路徑(在無權圖中)。
- 尋找連通分量。
- 網路爬蟲。
- 垃圾回收(標記-清除算法)。
- 複雜度:
- 時間複雜度:,其中 是節點數, 是邊數。
- 空間複雜度:,在最壞情況下,佇列可能需要儲存所有節點。
2. 深度優先搜尋 (Depth-First Search, DFS):
- 遍歷策略: DFS 是一種「深入探索」的遍歷方式。它從起始節點開始,選擇一個鄰居節點,然後沿著這個分支不斷深入探索,直到無法再深入(即遇到已訪問過的節點或沒有未訪問過的鄰居)。此時,它會回溯到上一個節點,並選擇另一個未訪問過的鄰居節點繼續深入探索。
- 數據結構: DFS 通常使用堆疊 (Stack) 來管理待訪問的節點(或者透過遞迴來隱式使用函數呼叫堆疊)。
- 將起始節點壓入堆疊。
- 當堆疊不為空時,從堆疊的頂部彈出一個節點。
- 訪問該節點。
- 將該節點所有未訪問過的鄰居節點壓入堆疊。
第 F.1 題5 分
F. AI Concepts: (30%)
F.1 Describe the difference between supervised and unsupervised learning. Provide
examples of tasks suitable for each. (5%)
登入後即可作答並保存紀錄。
本題要求描述監督式學習 (Supervised Learning) 和非監督式學習 (Unsupervised Learning) 的差異,並各舉例說明適用任務。
核心概念: 監督式學習使用帶有標籤的數據進行訓練,目標是預測或分類;非監督式學習使用無標籤數據,目標是發現數據中的結構或模式。
詳解:
機器學習中的學習範式主要分為監督式學習、非監督式學習和強化學習。這裡我們比較監督式學習與非監督式學習。
1. 監督式學習 (Supervised Learning):
- 定義: 在監督式學習中,訓練數據包含輸入特徵 (Input Features) 和對應的輸出標籤 (Output Labels)。學習演算法的目標是學習一個從輸入到輸出的映射函數,以便能夠準確地預測新數據的輸出。可以將其比喻為「有老師指導」的學習。
- 訓練數據: ,其中 是輸入特徵, 是對應的真實標籤。
- 主要任務:
- 分類 (Classification): 預測數據屬於哪個離散類別。
- 例子: 郵件垃圾分類(標籤:垃圾郵件/非垃圾郵件)、圖像識別(標籤:貓/狗/汽車)、疾病診斷(標籤:患病/健康)。
- 迴歸 (Regression): 預測一個連續數值的輸出。
- 例子: 房屋價格預測(輸入:房屋面積、地段等;輸出:價格)、股票價格預測、氣溫預報。
- 分類 (Classification): 預測數據屬於哪個離散類別。
- 優勢: 當有足夠的、標記準確的訓練數據時,監督式學習模型通常能達到很高的預測準確度。
- 挑戰: 獲取大量標記數據的成本可能很高,且標籤的品質直接影響模型性能。
2. 非監督式學習 (Unsupervised Learning):
- 定義: 在非監督式學習中,訓練數據只包含輸入特徵,而沒有對應的輸出標籤。學習演算法的目標是從數據本身發現隱藏的結構、模式或關係。可以將其比喻為「自己探索」的學習。
- 訓練數據: ,其中 僅為輸入特徵。
- 主要任務:
- 分群 (Clustering): 將數據分成若干個具有相似特徵的群組。
- 例子: 客戶分群(根據購買行為將客戶分成不同群體以進行精準行銷)、社交網路分析(找出社群)、圖像分割。
- 分群 (Clustering): 將數據分成若干個具有相似特徵的群組。
第 F.2 題5 分
F. AI Concepts: (30%)
F.2 What is overfitting in machine learning? Please provide a method and explain how it
prevents overfitting. (5%)
登入後即可作答並保存紀錄。
本題要求解釋機器學習中的過度擬合 (Overfitting) 現象,並提供一種防止過度擬合的方法。
核心概念: 過度擬合是指模型在訓練數據上表現極好,但在未見過的測試數據上表現較差的現象。防止過度擬合的方法有多種,例如正則化 (Regularization)。
詳解:
過度擬合 (Overfitting) 的概念:
過度擬合發生在一個機器學習模型過於複雜,以至於它不僅學習了訓練數據中的真實模式,還學習了數據中的雜訊 (noise) 和隨機波動。結果是,模型在訓練集上能夠完美地擬合數據,甚至能記住訓練樣本的細節,但在面對新的、未見過的數據時,其預測能力卻很差。
可以想像成一個學生為了考試而死記硬背課本上的所有例子,包括例題的錯誤和特殊情況。這樣他在做課本上的例題時可以拿到滿分,但一旦遇到稍微變化一點的題目,他就無法回答了。
過度擬合的表現:
- 訓練集上的準確率很高,而測試集(或驗證集)上的準確率較低。
- 模型的複雜度(例如,決策樹的深度、神經網路的層數或參數數量)可能過高。
防止過度擬合的方法:
有許多方法可以緩解或防止過度擬合,其中一種常見且有效的方法是正則化 (Regularization)。
正則化 (Regularization):
正則化是一種在模型的損失函數 (Loss Function) 中加入懲罰項 (Penalty Term) 的技術,用來約束模型的複雜度。這個懲罰項通常與模型參數的大小成正比。當模型參數越大,代表模型的複雜度越高,受到的懲罰就越大。通過最小化帶有懲罰項的損失函數,模型在追求擬合訓練數據的同時,也會傾向於選擇參數值較小的模型,從而降低模型的複雜度,避免過度擬合。
常見的正則化類型:
- L1 正則化 (Lasso Regularization): 在損失函數中加入參數絕對值之和作為懲罰項。
- 損失函數變為:
- L1 正則化傾向於將一些不重要的參數的權重縮小到零,從而實現特徵選擇 (Feature Selection)。
- L2 正則化 (Ridge Regularization): 在損失函數中加入參數平方和作為懲罰項。
第 F.3 題5 分
F. AI Concepts: (30%)
F.3 What is the purpose of activation functions in neural networks? Provide examples of
common activation functions. (5%)
登入後即可作答並保存紀錄。
本題要求解釋神經網路中激活函數 (Activation Function) 的作用,並舉例常見的激活函數。
核心概念: 激活函數引入非線性,使得神經網路能夠學習複雜的模式;否則,多層神經網路的組合將退化為單層線性模型。
詳解:
激活函數 (Activation Function) 在神經網路中的作用:
神經網路由多層的神經元組成,每一層的輸出作為下一層的輸入。在一個神經元中,通常會執行兩個主要操作:
- 加權求和: 將輸入數據與對應的權重相乘後求和,並加上一個偏置項 (bias)。這是一個線性操作:。
- 激活函數: 將線性操作的結果 通過一個非線性函數 進行轉換,得到該神經元的輸出 。
激活函數的主要作用是:
- 引入非線性 (Introduce Non-linearity): 這是激活函數最核心的作用。如果神經網路中沒有激活函數,或者只使用線性激活函數,那麼無論有多少層,整個神經網路的輸出都將是輸入的線性組合。這意味著多層神經網路的表達能力將退化為一個單層的線性模型,無法學習和模擬複雜的非線性關係,例如圖像識別、語音處理等任務。激活函數將非線性引入到網路中,使得神經網路能夠逼近任何複雜的函數(通用近似定理 Universal Approximation Theorem)。
- 控制神經元的輸出範圍: 某些激活函數(如 Sigmoid, Tanh)可以將輸出限制在一個特定的範圍內(例如 0 到 1,或 -1 到 1),這有助於穩定訓練過程,並在某些應用中(如輸出層用於概率預測)非常有用。
- 影響梯度傳播: 激活函數的選擇會影響反向傳播過程中梯度的計算和傳播。某些激活函數(如 ReLU)的設計可以緩解梯度消失 (Vanishing Gradient) 問題,有助於訓練更深的神經網路。
常見的激活函數範例:
- Sigmoid 函數 (Logistic Sigmoid):
- 公式:
第 F.4 題5 分
F. AI Concepts: (30%)
F.4 Name popular programming languages used in AI development. Explain why Python
is widely used in the field. (5%)
登入後即可作答並保存紀錄。
本題要求列出 AI 開發中常用的程式語言,並解釋 Python 廣泛使用的原因。
核心概念: Python 因其語法簡潔、生態系豐富、函式庫眾多,成為 AI 領域的首選語言。
詳解:
AI 開發中常用的程式語言:
在人工智能 (AI) 和機器學習 (ML) 的開發中,有多種程式語言被廣泛使用,但有一些語言因其特性和生態系而脫穎而出:
- Python: 毫無疑問是目前 AI 和 ML 領域最主流的語言。
- R: 在統計分析和數據科學領域非常流行,也用於機器學習。
- Java: 在企業級應用、大數據處理(如 Hadoop 生態系)和一些機器學習框架中有應用。
- C++: 通常用於性能要求極高的場景,例如遊戲 AI、高效能計算、底層機器學習庫的實現(許多 Python 庫底層就是 C++ 寫的)。
- Julia: 一種較新的語言,專為高性能數值計算和數據科學設計,被認為是 Python 和 C++ 的潛在競爭者。
- Lisp / Prolog: 在早期 AI 研究(符號 AI)中佔有重要地位,現在較少用於主流的機器學習,但在特定領域仍有應用。
Python 廣泛使用的原因:
Python 之所以能在 AI 領域取得如此巨大的成功,主要歸功於以下幾個關鍵因素:
- 語法簡潔易學 (Simple and Readable Syntax): Python 的語法設計清晰,接近自然語言,易於學習和編寫。這使得研究人員和開發者能夠快速實現想法,專注於演算法本身,而不是被複雜的語法所困擾。
- 龐大且活躍的生態系 (Rich Ecosystem): Python 擁有一個極為豐富的開源函式庫和框架,專門為數據科學、機器學習和深度學習而設計。
- 數據處理與分析: NumPy (數值運算), Pandas (數據處理與分析)。
第 F.5 題5 分
F. AI Concepts: (30%)
F.5 What is Natural Language Processing (NLP), and what are its applications in AI? (5%)
登入後即可作答並保存紀錄。
本題要求解釋自然語言處理 (NLP) 的概念,並說明其在 AI 中的應用。
核心概念: 自然語言處理 (NLP) 是 AI 的一個分支,旨在讓電腦能夠理解、解釋和生成人類語言;其應用廣泛,涵蓋語音辨識、機器翻譯、情感分析等。
詳解:
自然語言處理 (Natural Language Processing, NLP) 的概念:
自然語言處理 (NLP) 是人工智能 (AI) 的一個重要領域,它關注如何讓電腦能夠理解、解釋、處理和生成人類所使用的自然語言(如中文、英文、日文等)。NLP 的目標是彌合人類溝通與電腦理解之間的鴻溝,使電腦能夠像人類一樣處理和理解語言的細微差別、語義、語法和上下文。
NLP 結合了電腦科學、人工智能和計算語言學的知識。它涉及多個層面的任務,包括:
- 語法分析 (Syntactic Analysis): 分析句子的結構,確定單詞之間的關係(如詞性標籤、句法結構)。
- 語義分析 (Semantic Analysis): 理解單詞和句子的意義,確定其含義。
- 語用分析 (Pragmatic Analysis): 理解語言在特定上下文中的含義,包括意圖、說話者的情感等。
NLP 在 AI 中的應用:
NLP 在現代 AI 系統中扮演著至關重要的角色,其應用範圍極為廣泛:
- 機器翻譯 (Machine Translation): 如 Google Translate, DeepL 等,能夠自動將一種語言翻譯成另一種語言。
第 F.6 題5 分
F. AI Concepts: (30%)
F.6 What are TensorFlow and PyTorch? How are they used in the development of AI
models? (5%)
登入後即可作答並保存紀錄。
核心觀念
本題考查兩個主流深度學習框架:
- TensorFlow
- PyTorch
它們都不是單一的 AI 模型,而是用來建立、訓練、評估與部署 AI 模型的軟體框架。核心功能包括:
- 張量(Tensor)運算
- 自動微分(Automatic Differentiation)
- 神經網路模型建構
- 損失函數與最佳化器
- GPU/TPU 加速
- 模型訓練、評估與部署
深度學習模型通常以參數 表示,透過訓練資料 最小化損失函數:
其中:
- :輸入資料
- :正確答案或標籤
- :由參數 所決定的模型
- :損失函數
- :訓練後得到的最佳參數
TensorFlow 與 PyTorch 會協助程式設計者完成前向傳播、損失計算、梯度計算及參數更新:
其中 是學習率, 是損失函數對模型參數的梯度。
TensorFlow 是什麼?
TensorFlow 是由 Google 主導發展的開源機器學習與深度學習框架。其名稱中的 Tensor 指的是多維陣列資料結構,Flow 則表示資料在運算圖中的流動。
TensorFlow 的主要特色如下:
1. 以張量進行數值運算
TensorFlow 使用張量表示輸入資料、模型參數及中間運算結果。例如:
- 純量: 維張量
- 向量: 維張量
- 矩陣: 維張量
- 影像批次:通常可表示為 維張量
彩色影像常見的資料形狀為:
例如 表示一次處理 張大小為 的 RGB 影像。
2. 支援自動微分
TensorFlow 能記錄模型中的運算,並自動計算損失函數對各參數的梯度,因此不需要人工推導每一層的微分公式。
3. 可建構神經網路
TensorFlow 通常搭配 Keras API 使用。Keras 提供較高階的模型建構方式,可建立:
- 全連接神經網路
- 卷積神經網路(CNN)
- 循環神經網路(RNN)
- Transformer
- 自動編碼器
- 生成式模型
4. 支援模型部署
TensorFlow 除了訓練模型,也支援將模型部署至不同環境,例如:
- 伺服器
- 網頁瀏覽器
- 行動裝置
- 邊緣裝置
- GPU/TPU
因此 TensorFlow 特別適合需要完整生產環境與跨平台部署的 AI 應用。
PyTorch 是什麼?
PyTorch 是由 Meta 主導發展的開源機器學習與深度學習框架。它同樣以張量為基本資料結構,提供自動微分、神經網路模組、GPU 加速及模型訓練功能。
PyTorch 的主要特色如下:
1. 動態計算圖
PyTorch 通常採用「執行時建立計算圖」的方式。程式執行到哪裡,運算圖就建立到哪裡,因此模型結構可以依照輸入資料或條件動態改變。
這種設計使 PyTorch 具有:
- 程式碼較接近一般 Python 邏輯
- 除錯較直觀
- 適合研究新模型
- 容易處理變動長度或條件式運算
2. 自動微分系統
PyTorch 使用 autograd 記錄張量運算並計算梯度。只要張量設定需要梯度,系統便能沿著計算圖進行反向傳播。
3. 模組化模型設計
PyTorch 以 torch.nn.Module 作為神經網路模組的基礎。使用者可以將模型分成多個層或子模組,並透過 Python 類別描述模型的前向傳播流程。
4. 適合研究與原型開發
PyTorch 的彈性高,常被研究人員與學術界用於:
- 新型神經網路架構
- 自然語言處理
- 電腦視覺
- 強化學習
- 生成式 AI
- 大型語言模型
PyTorch 也支援模型匯出與部署,例如透過 TorchScript、ONNX 或其他推論工具將模型放入實際應用。
TensorFlow 與 PyTorch 如何用於 AI 模型開發?
AI 模型開發通常可分為以下流程。
1. 準備資料
首先蒐集並整理訓練資料,例如影像、文字、聲音或表格資料,再進行:
- 清理錯誤資料
- 正規化數值
- 轉換資料格式
- 建立標籤
- 分割訓練集、驗證集與測試集
框架可透過資料載入器及批次處理機制,將資料分批送入模型。
2. 建立模型
使用 TensorFlow/Keras 或 PyTorch 定義模型結構。例如,一個簡單的分類模型可表示為:
模型可能包含:
- 輸入層
- 線性層或卷積層
- 啟動函數
- 正規化層
- 輸出層
3. 前向傳播
將輸入資料 傳入模型,得到預測結果 :
4. 計算損失
將預測結果與正確標籤 比較。例如分類問題常使用交叉熵損失:
其中 是類別數, 是正確標籤, 是模型對第 類的預測機率。
5. 反向傳播與參數更新
框架自動計算:
再由最佳化器更新模型參數: