회사에서 머신러닝에 대해서 프로젝트를 진행하고있다. 정확하게는 Scen Text Recognition을 진행하고있는데, 그 단계 이전에 Object Detection이 필요해서 먼저 Object Detection에 대해서 알아보도록 하자. 라고 하기전에 우선 머신러닝에 대한 모든 기본지식부터 알아본내용들을 아주 간단하게 정리했다.
머신러닝이 뭘까
우선 나는 시작부터 "머신러닝"이라는 것에 대한 정의부터 시작했다. 무엇이 머신러닝일까 흔히 사용하는 "딥러닝" 그리고 "AI"는 어떤 차이점이 있는지 찾아보았다.
그리고 위의 이미지로 한번에 정리되었다. 그렇지만 조금 더 찾아보았다
결국 머신러닝은 사람이 특징점 추출(Feature Extraction)과 분류(Classification)을 직접해야 모델을 만들 수 있지만, 딥러닝의 경우는 자동으로 특징점 추출 및 분류를 진행한다는 것에 차이점이 있다.
퍼셉트론이란?
퍼셉트론이란 내용을 많이 접하게되었다. 사실 접하게 된 계기는, 어떻게 input값을 넣어서 어떤 판단을 해서 어떻게 output이 나오게 되는가. 즉 원론부터 궁금해서 찾아보게 되었다.
컴퓨터의 경우에는 01. 이진수를 가지고 아주 많은 AND, OR, XOR, NOT 등등 연산자들로 계산을 해서 결과를 낸다. 그렇다면 머신러닝은 어떻게 결과를 내는걸까?
바로 퍼셉트론이라는 것에서 나온다.
퍼셉트론(Perceptron)은 인공 신경망의 한 종류로, 이진 분류를 위한 간단한 형태의 인공 뉴런이다. 퍼셉트론은 입력값과 가중치를 곱하여 합산하고, 이 합산값에 활성화 함수를 적용하여 출력값을 계산한다. 이 출력값은 임계치와 비교되어 결정을 내리게 된다.
퍼셉트론은 우리의 뇌에 들어있는 뉴런과 굉장히 비슷하다.
합성곱 신경망 (Convolutional Neural Network CNN)
합성곱 신경망은 이름이 앞에 Convolutional이 붙어있다. 실제로 전통적인 신경망에서 Convolutional Layer가 여러개 붙인 모양인데, Convolutional Layer를 통해 입력받은 이미지에 대한 특징을 추출하게 되기 때문이다.
그래서 Convolutional Layer가 뭘까
입력이미지에서 들어온 것을 Kernel(필터)를 통해서 특징을 추출하는것이 주요 역할이다. 그래서 그림에서 보면 Kernel이라는 것으로 Input의 이미지를 하나하나 특징을 추출해서 output으로 바꾸는 그림이다. 이게 너무 간략화되어있어서 다음 gif로 확실히 이해할 수 있을 것이다.
이렇게 만들고나면, Feature/Activation Map이라는 결과물이 나오게 된다. 그리고 Padding이라는 것을 통해 결과값의 소실을 막기 위해 입력값 주위로 0을 넣어서 결과값이 작아지는것을 방지하게 된다.
그렇다면 Max-Pooling은 뭘까?
max pool, 즉 큰 값이 다른 특징들을 대표한다는 개념이다. 그래서 위의 이미지에서 2X2 필터내의 값들 중 가장 큰 값을 추출하는 것이다.
마지막으로 Fully-Connected Layer는 무엇일까?
레이어의 출력을 평탄화(flattening) 하여 다음 스테이지에 입력될 수 있는 단일 벡터로 변환한다. 즉 앞에서 결과된 처리들이 2차원 배열일 것이다. (이미지는 2차원) 그래서 이 2차원배열을 1차원 배열로 풀어 표시한 후 분류가 수행이 된다.
또한 이미지를 잘 보면 with drop out이 적혀있는데, Drop out은 신경망의 과적합(Overfitting)을 방지를 위한 정규화 기법 중 하나로, 학습과정중에 랜덤하게 일부 뉴런을 비활성화 시켜 과적합을 방지한다.
그래서 왜 과적합이 문제가 되느냐, 모델의 훈련에만 너무 맞춰져있어서 새로운 데이터에 대한 일반화 성능이 저하될 수 있다. 즉 훈련데이터는 아주 100점이 나올 수 있지만, 새로운 데이터에 대해서는 성능이 하락할 수 있다는 뜻이다. 또한 모델의 복잡성이 증가하기 때문에 랜덤으로 뉴런신경망을 비활성화 시킨다.
이렇게 CNN이 탄생하게되고 이미지 머신러닝에 사용하게 된다.
CNN은 이미지 머신러닝에 특화되어있는 여러 인공신경망 구조이다. 그리고 CNN을 기반으로 객체검출(Object Detection) 알고리즘, R-CNN과 YOLO라는게 등장했다.
참고자료
https://excelsior-cjh.tistory.com/169
https://compmath.korea.ac.kr/deeplearning/Perceptron.html