다층 퍼셉트론(MLP)은 이미지 분류를 위한 중요한 모델 중 하나입니다. 이 모델은 다양한 층과 활성화 함수를 통해 구성되어 있으며, 효율적인 학습을 위해 손실 함수와 옵티마이저도 함께 사용됩니다. 본문에서는 MLP의 구조와 핵심 요소들을 자세히 살펴보겠습니다.
1. MLP 구조
MLP에서 사용되는 다양한 층과 활성화 함수에 대해 설명합니다. 다층 퍼셉트론(MLP)는 지도학습을 사용해 이미지를 분류하는 모델입니다. MLP는 세종류의 층으로 이루어져 있습니다. Input 층의 크기는 x_train의 크기와 맞아야하고 Dense 출력 층의 크기는 y_train의 크기와 맞아야합니다.
- Input : 네트워크의 시작점, 네트워크의 입력 데이터 크기를 튜플로 정의합니다.
- Flatten : 입력을 하나의 벡터로 펼칩니다. Dense 층이 다차원 배열이 아니라 평평한 입력을 받기 때문입니다. 다른 종류의 층은 입력으로 다차원 배열을 사용하므로, 언제 Flatten 층을 사용하는지 이해하려면 층마다 필요한 입력과 출력의 크기를 알아야합니다.
- Dense : 기본적인 신경망 구성요소로 이 층의 유닛은 이전 층의 모든 유닛과 연결됩니다. 연결마다 하나의 가중치가 동반됩니다. 유닛의 출력은 이전 층에서 받은 입력값과 가중치를 곱하여 더한 값입니다. 그 다음 활성화 함수를 통과하여 다음 층으로 전달됩니다. 활성화함수는 신경망이 복잡한 합수를 학습하는데 중요한 역할을 하며, 활성화함수가없으면 입력을 선형적으로 조합한 값만 출력하게 됩니다.
활성화 함수는 대표적으로 렐루, 시그모이드, 소프트맥스 세가지가 있습니다.
- 렐루(ReLU) : 입력이 음수이면 0을 그 이외에는 입력과 동일한 값을 출력합니다. 리키렐루(LeakReLU) : 리키렐루는 입력이 0보다 작으면 입력에 비례하는 작은 음수를 반환합니다.
- 시그모이드(sigmoid) : 출력을 0~1 로 조정하고 싶을 때 유용합니다. 이진분류 문제나 샘플이 하나 이상의 클래스에 속할 수 있는 다중 레이블 문제에서 사용합니다.
- 소프트맥스(softmax) : 전체 출력의 합이 1이 되어야 할 때 사용합니다. 샘플이 하나의 클래스에만 속해야하는 다중 분류 문제에서 사용합니다.
2. 손실함수와 옵티마이저
손실함수
신경망이 예측 출력과 정답을 비교하는데 사용합니다. 샘플마다 하나의 수치를 반환하고 값이 클 수록 샘플에 대한 수행 결과가 좋지 않다는 의미입니다. 가장 많이 사용하는 세가지 손실함수는 평균제곱오차(MSE), 범주형 크로스 엔트로피(categorical cross-entropy)와 이진 크로스 엔트로피(binary cross-entropy)입니다.
- 평균제곱오차 : 회귀문제
- 범주형 크로스 엔트로피 : 여러 클래스 중 하나에 속해야하는 분류 문제
- 이진 크로스 엔트로피 : 여러 클래스에 속할 수 있는 다중 레이블 분류 문제
옵티마이저
손실함수의 그래디언트를 기반으로 신경망의 가중치를 업데이트 할 때 사용하는 알고리즘입니다.
- Adam : 안정적인 옵티마이저 중 하나는 Adam(Adaptive Moment Estimation)입니다. 일반적으로 Adam의 옵티마이저의 기본 매개변수는 바꿀 필요 없고 학습률(learning rate)만 변경하면 됩니다. 학습률이 클 수록 한번의 훈련에서 가중치를 크게 바꿉니다. 학습률이 크면 초기에는 훈련 속도가 빠르지만 훈련이 불안정하고 손실함수의 전역 최솟값을 찾지 못할 가능성이 있습니다.
- RMSProp : 다른 옵티마이저는 RMSProp를 많이 사용하고, Adam과 마찬가지로 매개변수를 조정할 필요가 없습니다.
3. 모델 훈련
네트워크 가중치를 작고 랜덤한 수로 초기화하고 연속된 훈련 스텝을 수행합니다. 훈련 스텝마다 하나의 이미지 배치가 네트워크를 통과하고 오차가 역전파되어 가중치를 업데이트합니다. batch_size는 훈련 스텝마다 몇 개의 이미지로 배치를 만들지 결정합니다. 배치 크기가 클 수록 그래디언트 계산은 안정적이지만 각 훈련 스텝의 속도는 느려집니다. 전체 데이터셋을 사용해 훈련 스텝마다 그래디언트를 계산하는 작업은 너무 시간이 오래 걸리고 계산 비용이 많이 듭니다. 일반적으로 32 ~ 257 사이의 배치 크기를 사용하고 최근엔 훈련이 진행됨에 따라 배치 크기를 증가시키는 방법을 권장하고 있습니다.
- batch size : 훈련 스텝마다 전달될 샘플의 개수
- epochs : 전체 훈련데이터에 대해 반복하여 훈련할 횟수
- shuffle : True 이면 훈련 스템마다 배치를 훈련 데이터에서 중복을 허용하지 않고 랜덤하게 추출함
MLP는 다양한 층과 활성화 함수를 활용하여 이미지 분류를 수행하는 중요한 모델입니다. 적절한 손실 함수와 옵티마이저를 선택하고 모델을 효과적으로 훈련시키는 것이 중요합니다. 이를 통해 더 나은 성능과 정확도를 얻을 수 있습니다.
'취미' 카테고리의 다른 글
[멀티모달] 달리2(DALL-E2) 이해하기 (0) | 2024.02.15 |
---|---|
[딥러닝] 합성곱 신경망(convolution) 딥러닝 기초 (0) | 2024.02.14 |
[YOLO] Yolov8 이미지에서 표 영역 탐지하는 법 (0) | 2024.02.13 |
[segmentation] SAM(segment-anything Model) 알고리즘 사용법 (0) | 2024.02.03 |
[Github] 깃허브로 협업하는 방법 (0) | 2024.01.30 |