글의 흐름
< 머신러닝 >
1. 머신러닝 회귀와 분류
2. 회귀 모델
3. 분류 모델
4. 데이터 인코딩/ 피처스케일링/ 교차검증
5. 주요 머신러닝 모델 소개
< 딥러닝 >
1. 그래프 모델 개념 및 신경망 기본 구조 소개
2. 전방향 연산, 가중치 초기화, 배치 기반 연산학습. Regularization 기본 개념
3. 신경망에서 학습의 의미, 역전파 기본 개념 및 chain Rule 을 이용한 학습
4. RBM 구축 과정, 수학이론, 구현 연습
5. CNN 개념 << 현위치
6. 다양한 딥러닝 모델 소개
그동안 전통적인 프로그램이 Rules, Data 를 통해 Answer 을 출력하는 과정이었다면 ( 예를 들어 2*x=y 와 x의 값들을 주면 y값이 출력됩니다 )
머신 러닝은 Answers와 Data를 통해 Rules를 출력하는 과정입니다.
그럼 Rules를 찾는 방법은 무엇일까요? 그 중 하나가 CNN 방식입니다.
CNN이란?
Convolutional Neural Network 의 약자로 기존 Neural Network는 1차원으로 변경 후 넣어주어야 하므로, 공간정보가 손실되었습니다.
그러나 CNN같은 경우 convolution 연산을 통해 공간 정보를 보존 가능하게 학습 시킬 수 있게 됩니다.
convoultion 연산은 신호 및 시스템이나 공학수학에서 필수적으로 다루는 개념이니 검색해보시길 바랍니다. 시간이 되면 따로 정리해보겠습니다.
ex) 그림과 같이 INPUT 그림을 생각해보면 각 픽셀의 공간적 위치에 따라 A가 정해집니다. 그러나 기존 Neural Network ( 즉 Deep Neural Network는 이를 그저 1차원의 쭉 기다란 배열로 바꾸게 되므로 공간정보를 담지 못합니다. Convolution Neural network는 Convolution이라는 연산을 통해 공간적인 특징까지 담을 수 있게 되는 것입니다.
CNN의 원리
raw 이미지와 conv 연산을 통해 feature map을 생성합니다.
다음과 같이 이미지는 숫자로 이루어져 있습니다. 예를 들면 RGB 3가지로 한 픽셀을 나타낼 수 있습니다, (255,0,0) 이와 같이 각 픽셀마다 색깔을 숫자로 변경할 수 있습니다.
그 숫자들을 위와 같은 방식처럼 필터라는것을 이용해서 숫자들을 곱해줍니다. 여기서는 3*3 필터를 사용했습니다. 그럼 특정부분은 강화되서 보이고 특정부분은 약화되서 보입니다.
여기서 필터가 움직이는 간격을 stride 라고 하는데 위에서 stride는 1이 됩니다. 1칸씩 움직이니까요.
여기서 문제가 생깁니다.
convoultion 방식으로 계산을 하게 되면, map 이 계속해서 작아지게 됩니다.
따라서 주변에 0을 채워넣는 padding 이라는 것이 필요합니다.
3차원의 경우 다음과 같이 계산합니다.
Activation 함수 - feature map을 만든 후, 곧바로 convoultion Layer 에 넣는 것이 아니라 Activation 함수를 거친 후 다음 layer 에 넣어줍니다. 이는 parameter 의 overfitting을 억제하고, Data를 비선형으로 바꾸어 정확도를 높입니다. 이 역시 어려운 내용이라 일단 있다고 생각하고 넘어가겠습니다.
계산되면 해당 특징을 잘 나타낼 수 있는 값들만 FC layer (Fully connected) 에 넣기 위해 Pooling을 계산합니다.
pooling layer- 데이터의 공간적인 특성을 유지하면서 크기를 줄여주는 층입니다. 특정위치에서 큰 역할을 하는 특징을 추출하거나, 전체를 대변하는 특징을 추출할 수 있는 장점이 있는 pooling layer 을 사용합니다. 또한 overfitting problem 역시 해결할 수 있습니다
Max Pooling 방식 - 해당 그리드에서 가장 큰 값 이용
Average Pooling 방식 - 각 그리드에 속한 값들의 평균 이용
Fully-connected layer을 통해 평탄화 작업을 거쳐 출력을 냅니다. Flattened 라고 합니다.
그 후 최종으로 softmax 에서 결과값을 출력합니다. 여기서는 하나의 input이 하나의 logits에 들어가야 합니다.
전체적인 과정을 복기하면 이렇습니다. convolution 과 pooling 을 반복하고 fully- connected layer로 평탄화 한 후 softmax를 이용해 결과값을 출력합니다.

이렇게 반복 수행을 통해 weight (가중치) 수행이 조정됩니다. 입력이 어떤 출력이 되도록 weight 값을 조종하는 것을 learning 이라고 하는 것입니다.
이 어려운걸 그냥 전부 코드로 구현하기보다 텐서플로우 같은 도움을 받아 구현하게 됩니다. 머신러닝을 공부하는 동안 차근차근 정리해보겠습니다. 이 게시물 또한 계속해서 수정해서 매끄럽게 다져보겠습니다.
혹시 틀린 부분이나 궁금한 점이 있다면 편하게 답글 달아주세요.
시간 나시면 마음 눌러주시면 감사하겠습니다.
푸키였습니다~
'전동기 개념 정리 > machine learning' 카테고리의 다른 글
[Machine learning] 머신러닝 분류(2) 머신러닝의 배치 학습과 온라인 학습 (0) | 2024.02.06 |
---|---|
[machine learning] 머신러닝이란? 머신러닝 분류(1) 머신러닝의 회귀와 분류 (1) | 2024.01.27 |
[machine learning ] 캐글 사용법 (2) | 2024.01.26 |