일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 레파지토리
- repo
- go
- pip
- QT_QPA_PLATFORM_PLUGIN_PATH
- Python
- 영상스트리밍
- Windows
- docker
- 자원측정
- go.mod
- APT
- apt-get
- 파이썬
- psutil
- asyncio
- Hyper-V
- 자식프로세스
- dockercontainer
- Replication
- Thread
- 스트리밍
- python3.9
- 주식
- 가상화 중첩화
- Finance
- golang
- BATCH
- mariadb
- FastAPI
- Today
- Total
검색하기귀찮아서만든블로그
[ML] CNN 알고리즘에 대한 이해와 고찰 본문
인공지능 알고리즘 중 쉽게 접근할 수 있는 CNN 알고리즘에 대하여 개념을 다시 정리하고 이해하기 위해 포스팅을 하게 되었다. 정확하지 않은 정보가 있을 수 있지만 전반적인 이해를 위해 직접 내용을 정리해본다.
CNN(Convolutional Neural Network) 이미지 분석용 뉴럴 알고리즘이다. 인공 지능은 원본 이미지를 그대로 학습하게 될 경우 원본과 완벽하게 일치하는 이미지만 인식할 수 있기 때문에 특징점을 추출하여 유사한 이미지를 군집화하는 개념으로 동작하게 된다. CNN은 필터 합성곱을 통하여 인풋 이미지의 특징점 맵 (축소, 압축) 을 생성하고 군집화하기 위해 만들어진 알고리즘이다.
CNN 은 FNN (Fully- connected multi layered Neural Network) 신경망의 문제점을 보완하여 신경망을 구성하기 위해 만들어졌다. FFN 은 2차원 이미지를 1차원 배열로 만들어 처리되기 때문에 인접 이미지에 대한 특징점 분석에 한계가 있다. CNN은 2차원 행열을 사용한 필터와 합성곱 연산을 통하여 특징점을 생성하기 때문에 인접 픽셀과 연관성을 유지할 수 있는 장점이 있다.

CNN 은 원본 이미지(좌) 와 필터(중)의 합성곱을 통하여 특징점 맵(우)을 생성한다. 합성곱 계산 시 한 칸씩 이동하며 계산한다. stride 가 1이면 한 칸씩 이동하며 합성곱을 수행하고 stride가 2이면 두 칸씩 이동하며 합성곱을 수행한다고 보면 된다. stride 가 커지면 아웃풋 특징점 맵의 크기는 더 작아진다.

앞서 기술한 바와 같이 합성곱을 하게되면 아웃풋으로 사이즈가 줄어든 특징점 맵을 얻게 된다. 대게 CNN을 이용한 신경망을 작성할 때 다중 CNN 알고리즘을 사용하게 되는데 이렇게 되면 특징점 맵이 점점 더 작아지게 된다. 이를 보완하기 위해 Padding을 사용하게 되었다. 보통 CNN에서 Zero Padding 기법을 사용한다. 인풋 원본 이미지 가장자리에 0으로 값을 채워서 인풋을 사이즈를 증가시킨 후에 필터와 합성곱 하는 방식이다.

신경망을 통하여 만들어진 특징점 맵은 Sub Sampling을 통하여 더 작은 크기의 이미지로 만들어 준다. 이것을 Pooling 이라고 한다. Pooling은 Max pooling, Average pooling 등이 있고 주어진 사이즈 내에서 가장 큰 값, 평균값으로 크기를 축소시킨다고 보면 된다.

CNN 신경망 예시를 보면 합성곱, 풀링을 통하여 생성된 특징점 맵을 군집화 한다. 군집화는 FC (fully connected layer)를 통하여 1차원 배열 형태로 만들게 되는데 이렇게 만들어진 특징점 결과물은 분류작업을 위해 활성화 함수를 통하여 군집화 된다. CNN 알고리즘 후 수행하는 일련의 작업을 히든레이어라고 칭한다.

활성화 함수는 이미지와 같은 비선형 데이터를 군집화하는 기능을 수행한다. FC를 통한 1차원 배열 형태의 데이터들은 활성 함수를 통하여 군집화 되고 최종 이미지를 판단하는 아웃풋으로 만들어진다. 활성 함수는 weight (이득) 와 bias (편항)를 조정하며 학습하게 된다. 주로 2개 이상 분류할 때 Relu를 많이 사용하고 3개 이상 군집화할 때 Softmax 활성화 함수를 사용한다. 통상적으로 선형 활성화 함수와 비선형 활성화 함수와 조합해서 사용해야 신경망을 깊게 구성할 수 있다.
예) ReLU + Softmax
'개발' 카테고리의 다른 글
[mariadb] replication (0) | 2023.06.17 |
---|---|
[Docker] mariadb 컨테이너 구축 (0) | 2023.06.17 |
[ML] MNIST 모델 학습 (0) | 2022.11.28 |
[Python] FinanceData 활용기 (3) (0) | 2022.09.29 |
[Python] FinanceData 활용기 (2) (0) | 2022.09.28 |