--- 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