오늘은 신경망 구성 방법 중 가장 많이 쓰이는 것에 대해 알아봤다.
들어가기 앞서 신경망에 대해서 조금 알아보자.
신경망이란?
- 머신러닝에 속한 딥러닝 알고리즘의 핵심
- 인간의 두뇌를 모티브로 하여 뉴런이 서로 간 신호를 보내는 방식을 모방한 것이다.
- Input Layer, 하나 이상의 Hidden Layer, Output Layer를 포함하는 노드 계층들로 구성되어 있다.
우선은 신경망 구성 방법 중 하나인 합성곱 신경망(CNN)에 대해 알아보자.
합성곱 신경망 (CNN : Convolutional Neural Networks)
- 컴퓨터 비전(CV : Computer Vision) 분야에서 많이 쓰이는 이미지 처리 방식
- 입력 데이터와 필터(Filter)의 각 요소를 서로 곱한 뒤 다 더하면 출력값이 되는 방식
- 얼굴 인식, 사물 인식 등의 이미지 처리에 대해 가장 보편적으로 많이 사용되는 네트워크 구조이다.
- CNN은 크게 합성곱 계층(Convolution Layer)과 완전연결 계층(Dense Layer), 풀링 계층(Pooling Layer)으로 구성되어 있다.
: 합성곱 계층 (Convolution Layer) : 이미지 데이터와 비교되는 패턴이 얼마나 일치하는가에 대한 확인을 하는 층
: 완전연결 계층 (Dense Layer) : 3차원 데이터를 입력층에 넣어주기 위해 1차원 데이터로 변환하는 층, 하지만 이렇게 될 경우 변환된 데이터는 공간적인 정보를 많이 잃게 된다.
: 풀링 계층 (Pooling Layer) : 합성곱 계층에서 특성 맵(Feature Map)의 중요 부분을 저장하는 역할을 하는 층

그림을 보면서 알아보자.
해당 3x3 필터를 가지고 입력 데이터로 들어온 값과 각 요소들을 곱한 뒤 곱해진 요소들을 전부 더하면 출력값이 된다.
입력 데이터와 필터의 계산 방식은 아래의 사진과 같이 진행된다.

CNN에서 합성곱 계층은 가장 중요한데, 합성곱 계층과 합성곱 계층에 사용되는 Filter, Stride, Padding에 대해 알아보자.
우선 다음 사진을 보면서 합성곱 연산 방식에 대해 설명을 해보겠다.

이미지와 같이 5x5 크기의 입력 데이터가 들어왔을 때, 3x3 필터를 사용하여 합성곱을 하면 3x3 크기의 특성 맵(Feature Map)을 만들 수 있게 된다.
해당 3x3 크기 내의 필터(Filter) 또는 커널(Kernel)을 한 칸씩 오른쪽으로 움직이며 합성곱 연산을 하는데, 이때 움직이는 간격을 스트라이드(Stride)라고 한다.
하지만, 이렇게 연산을 하게 된다면 합성곱의 특성상 출력값인 특성 맵(Feature Map)의 크기가 줄어들게 된다.
이러한 문제를 방지하기 위해서 패딩(Padding)이라는 여백을 줘서 Stride가 1일 경우에 입력값과 특성 맵의 크기가 같도록 다음 이미지와 같이 만들 수 있다.

위에서 언급된 Git 이미지처럼 1개의 필터를 사용하여 연산을 할 수도 있고, 2개 이상의 필터를 사용하여 CNN의 성능을 높일 수도 있다.
2개 이상의 필터를 사용하려면 3차원의 가로, 세로, 채널(x, y, z)의 축을 이룬 뒤 사용하면 된다.
CNN을 구성하기 위해서는 합성곱 계층 + 활성화 함수 + 풀링을 반복하며 핵심적인 특성들을 뽑아내게 되는데, 여기서 언급된 풀링이 있는 풀링 계층(Pooling Layer)은 특성 맵에 있는 중요 부분을 저장하는 역할을 한다.
해당 풀링 계층의 방식에는 Max Pooling과 Average Pooling 방식이 존재한다.
우선 Max Pooling의 예시를 보자.

해당 이미지와 같이 2x2 크기의 풀 사이즈(Pool Size)로 Stride가 2의 Max Pooling을 통과할 경우 2x2 크기의 특성 맵에서 가장 큰 값을 추출한다.
다음으로는 Average Pooling 방식의 예시이다.

Max Pooling에서 가장 큰 값을 추출했다면, Average Pooling에서는 2x2 크기의 특성 맵에서 해당 값들에 대한 평균값을 추출한다.
해당 풀링 계층을 지나면 특성 맵은 2차원의 특성을 갖게 되는데 다음으로 오는 완전연결 계층은 1차원의 특성을 가지기 때문에 연산이 불가능해진다.
따라서 평탄화 계층(Flatten Layer)을 사용하여 2차원으로 존재하는 특성 맵을 1차원으로 펼쳐주는 작업을 진행해줘야 한다.

평탄화 계층에서 평탄화 작업을 마친 뒤 통과하면 완전연결 계층에서 행렬 곱셈이 가능하게 되고, 완전연결 계층 + 활성화 함수 형태의 반복을 통해 노드의 개수를 축소시키다가 마지막에 Softmax 활성화 함수를 통화하고 결과를 출력하게 된다.
다음은 CNN의 기본 기능과 활용 예시, 종류에 대해 알아보자.
기본 기능
: 물체 인식 (Object Detection) : 컴퓨터 비전에서 가장 중요하며 사진 이미지에서 각 객체를 정확하게 인식하는 것, 대표적으로는 YOLO가 있다.
: 이미지 분할 (Segmentation) : 각 오브젝트에 속한 픽셀들을 분리하는 것, 스마트폰의 카메라 초점 기능을 생각하면 된다.
활용 예시
: 자율주행 물체인식 : Camera, Rader, LiDAR 등을 이용하여 객체를 인식하고 Image Classification 및 Localization을 확인한다, 사람의 생명과 직접적인 연관이 있기 때문에 100%에 가까운 인식률과 정확도를 요구한다.
: 자세 인식 (Pose Detection) : 사람을 Detect 하고 인체의 각 부분의 위치를 파악하여 자세를 인식하는 것
: 화질 개선 (Super Resolution) : 이미지에서 각 특성(Feature)을 인식한 뒤 고화질로 추론하는 것
: Style Transfer : 이미지의 다양한 스타일을 입히기 위해 해당 이미지에 있는 각 요소를 인식하는 것
: 사진 색 복원 (Colorization) : 이미지의 각 부분을 인식하여 흑백 사진을 컬러 사진으로 변환하는 것
CNN의 종류
: AlexNet (2012) : Dropout과 Image Augmentation 기법을 효과적으로 사용한 첫 합성곱 신경망
: VGGNet (2014) : 파라미터의 개수가 많고 깊이가 깊은 모델
: GoogLeNet (=Inception V3) (2015) : 하나의 계층에 다양한 종류의 필터, 풀링을 도입하여 개별 계층을 확장시키는 모듈
: ResNet (2015) : 기울기(Gradient)가 잘 진행될 수 있도록 지름길(Shortcut)을 만들어주는 방법
CNN 기반의 딥러닝 모델을 학습시키려면 많은 수의 데이터가 필요한데, 해당 데이터셋을 만들려면 돈과 시간이 많이 필요하게 되므로 많은 어려움이 있다.
해당 어려움을 해결하기 위해 사용하는 전이 학습(Transfer Learning)이라는 방법이 존재한다.
전이 학습 (Transfer Learning)
- 과거에 문제를 해결하면서 얻은 경험을 토대로 그것과 유사한 문제를 해결하도록 신경망을 학습시키는 방법
- 학습 속도가 비교적 빠른 편이고 정확하며, 상대적으로 적은 데이터셋을 가지고 좋은 결과를 낼 수 있다.
앞서 언급된 신경망 구성 방법으로 CNN에 대해 알아보았다.
다음으로는 순환 신경망(RNN)과 생성적 적대 신경망(GAN)에 대해 알아보자.
순환 신경망 (RNN : Recurrent Neural Networks)
- 은닉층이 순차적으로 연결되어 순환 구조를 이루는 인공신경망의 한 종류
- 자연어(음성, 문자 등)와 같은 순차적으로 등장하는 데이터 처리에 적합한 모델
- 길이에 상관없이 입력과 출력을 받아들일 수 있는 구조이기 때문에, 다양하고 유연한 구조를 만들 수 있는 장점이 있다.

순환 신경망에서 문자에 대한 입력을 받고 완성될 수 있도록 뒤에 이어지는 문자를 출력하여 순차적인 문자열을 만들어 낼 수 있게 하려면 다음과 같은 구조를 이뤄야 한다.

생성적 적대 신경망 (GAN : Generative Adversarial Network)
- 서로 적대되는 관계의 2가지 모델(생성, 판별)을 동시에 사용하는 기술
: Generator : 0을 1로 만들기 위해서 타겟(Target)인 1과 예측의 차이인 손실을 줄이기 위해 역전파(Backpropagation)를 이용해 Weight를 조정해준다.
: Discriminator : 1은 1로, 0은 0으로 판별할 수 있도록 해야 하며, 생성된 모델에서 Real과 Fake 이미지를 둘 다 학습하여 예측과 타겟의 차이인 손실을 줄여준다.
→ 해당 모델이 대립(Adversarial)하면서 발전한 뒤 Epoch이 지날 때마다 랜덤 이미지가 점점 정교해지는 것(Generative)을 볼 수 있다.
GAN을 이용한 예시로는 다음과 같은 것들이 있다.
: CycleGAN, StarGAN, CartoonGAN, DeepFake, BeautyGAN, Toonify Yourself

-
오늘로서 마지막 머신러닝 강의가 끝이 났다.
처음 보는 머신러닝에 대해 알아보는 시간이 되었고, 이제 앞서 공부한 것들을 토대로 다음 일정이 시작된다.
이제 머신러닝 강의를 들으며 배운 내용들을 가지고 머신러닝 팀 프로젝트가 진행되기 때문이다.
해당 블로그에서는 아직 머신러닝에 대한 이론을 다뤘지만, 이번 머신러닝 강의를 진행하면서 실습도 진행했기에 해당 실습들을 가지고 더 나아가 발전된 실습을 하게 될 것 같다.
이제는 계속 팀 프로젝트가 진행되기 때문에 팀원들과 함께 열심히 프로젝트를 만들어봐야겠다.
:D
'TIL 및 WIL > TIL (Today I Learned)' 카테고리의 다른 글
| [TIL] 2022.05.19 (사물인식 머신러닝 - 팀 프로젝트1) (0) | 2022.05.19 |
|---|---|
| [TIL] 2022.05.18 (인스타 UI 복습, 사물인식 머신러닝 - 팀 프로젝트0) (0) | 2022.05.18 |
| [TIL] 2022.05.16 (Machine Learning, 머신러닝2) (0) | 2022.05.17 |
| [TIL] 2022.05.13 (Machine Learning, 머신러닝1) (0) | 2022.05.13 |
| [TIL] 2022.05.12 (Git-Github, 머신러닝0) (0) | 2022.05.12 |