---
# System prepended metadata

title: Image Classification
tags: [Master 2024]

---

---
title: '[Layout] Two columns'
---

# CNN

卷積神經網絡 (Convolutional Neural Networks, CNNs) 是一種深度學習模型，廣泛應用於影像辨識、物件偵測等計算機視覺任務。CNN的設計模仿了人類視覺系統中的神經元網絡，並使用卷積運算來提取圖像的空間和層次特徵。

## CNN架構

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

>圖片來源:https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/    

## 卷積層 (Convolutional Layer)
這是CNN的核心層，透過filters提取局部特徵。每個filter用來捕捉圖像不同的特徵，例如邊緣、紋理、顏色等。卷積操作會針對圖像的每一部分進行計算，產生稱為feature map的輸出，並將該輸出傳遞至下一層。

卷積過程還包括zero padding是在輸入數據的邊界添加零值，可以防止特徵圖尺寸隨層級縮小，保持原始圖像的大小。

![image](https://hackmd.io/_uploads/HJ6uYPGZye.png)
>圖片來源：https://cs231n.github.io/convolutional-networks/

以圖像的每一點為中心，取周遭 N x N 格的點構成一個filter，每一格給予不同的權重，計算內積，當作這一點的output，再移動至下一點以相同方式處理，至圖像的最後一點為止。所有filter計算出的結果形成一個Feature map。

## 激活函數 (Activation Function)
ReLU（Rectified Linear Unit）是常用的**非線性**激活函數，可以抑制負值，增加模型的非線性能力。

## 池化層 (Pooling Layer)
池化層通過壓縮特徵圖來減少計算量和**過度擬合**。最常見的池化方法是**Max Pooling**，將滑動窗口中的最大值取出並保留到特徵圖中，這樣可以強化重要特徵。
:::success
**過度擬合（Overfitting）**:通常表示模型的泛化能力不佳。意指模型在訓練資料上表現良好，但在現實生活中的資料上表現不佳。
:::

![image](https://hackmd.io/_uploads/r1XN5vf-kl.png)
>圖片來源:https://adeshpande3.github.io/

若滑動視窗大小設為2，『滑動步長』(Stride) 也為 2，則資料量就降為原本的四分之一，但因為取最大值，它還是保留局部範圍比對的最大可能性。


## 全連接層 (Fully Connected Layer)
該層將前面層的輸出展平成一維數組，並進行分類。CNN的最後一層通常是softmax層，用來輸出最終分類概率。

## CNN的特點和優勢
CNN能夠自動學習圖像中的重要特徵，並逐層提取從低層到高層的特徵，這使得它特別適合於圖像識別等任務。
* 參數共享（Parameter Sharing）
filter在圖像上滑動時，會應用相同的一組權重來生成特徵圖。可以減少參數數量，同時保持了圖像的空間結構。
* 局部連接（Local Connectivity）
卷積層中的每個神經元只與輸入圖像中的一小部分區域相連接，而不是與整個輸入圖像相連。可以捕捉局部特徵，同時減少計算量，從而提高了網絡的效率。

## CNN的挑戰
* 計算複雜性：CNN的層數較多，參數量大，導致計算複雜度高，訓練和推理過程需要大量的時間和資源。
* 數據需求：CNN需要大量且多樣化的訓練數據。如果訓練數據集較小或不平衡，可能會導致過度擬合或模型泛化能力不足。
* 池化層的缺點：池化層可能會丟失大量有價值的信息，忽略局部與整體之間的關聯性。
* 平移不變性：CNN對於特徵的平移不變性可能會導致它無法識別特徵之間的精確關係。

## 參考資料
>https://ithelp.ithome.com.tw/m/articles/10191820
>https://youtu.be/OP5HcXJg2Aw?si=NoAqLq1y64QxLWZI

# RNN
RNN（Recurrent Neural Network，循環神經網絡）是一種用於處理**序列數據**的神經網絡架構。與傳統的前饋神經網絡不同，RNN具有內部記憶能力，能夠處理和預測序列中的時間依賴性。

## RNN的基本概念
![image](https://hackmd.io/_uploads/Sy7C3DfZyx.png)
>圖片來源：https://aws.amazon.com/tw/what-is/recurrent-neural-network/

輸入層（Input Layer）：RNN 的輸入是序列數據，每個時間步都會輸入一個數據片段（例如單詞或時間點數值）。
隱藏層（Hidden Layer）：隱藏層中的神經元會將前一個時間步的狀態與當前輸入結合，以生成當前的隱藏狀態。這種結構使得 RNN 能夠記住序列中先前的信息。
輸出層（Output Layer）：最終的隱藏層狀態會經過輸出層生成每個時間步的輸出。

![image](https://hackmd.io/_uploads/ByrZ6wM-yx.png)
![image](https://hackmd.io/_uploads/BkA-pPfZJx.png)
圖中的 A 代表激活函數(Activation Function)，負責處理輸入 X𝑡 代表第 𝑡 時間的輸入，RNN 會將當前的狀態 X𝑡 與前一步的隱藏狀態 h𝑡−1結合以生成當前的隱藏狀態 h𝑡。激活函數則是使用 tanh。

## 常見的 RNN 類型
* 一對一
圖像分類
* 一對多
圖像摘要:給定一張圖片作為輸入，RNN 會根據圖片內容生成一連串的文字描述。
音樂生成：給定一個音符或和弦的起始點，RNN 可以生成一段完整的旋律序列。
* 多對一
情感分析:透過一段文字判斷是正面或負面的情緒。
文本分類:透過一段文字判斷郵件是垃圾郵件或一般郵件。
* 多對多
機器翻譯
* 同步多對多(每個輸入對應到一個輸出，並且輸入和輸出序列的長度相同)
影片分類:透過一段影片，分辨當下的每個時間點是在做伏地挺身，伸展還是瑜珈等動作。

## RNN的特點和優勢
* 處理序列數據：RNN能夠有效處理和預測序列數據中的**時間依賴性**。
* 記憶能力：RNN可以記住之前的輸入信息，這對於需要上下文信息的任務非常有用。

## RNN的挑戰
* 梯度消失和梯度爆炸：在反向傳播過程中，隨著時間步的增加，梯度可能會變得非常小或非常大，這會導致模型難以訓練或無法收斂
* 長期依賴問題：RNN在處理長序列數據時，難以捕捉到長期依賴關係。隨著序列長度的增加，早期信息對後續輸出的影響會逐漸減弱
* 計算成本高：由於RNN需要逐步處理序列數據，計算成本較高。

## 參考資料
>https://ithelp.ithome.com.tw/m/articles/10303823
