딥러닝 모델에는 사실 다양한 종류가 있는데, 나는 우선 프로젝트를 위해 이미지 처리를 중점적으로 공부할 것이라
이미지 처리에 핵심적으로 활용되는 CNN모델에 대해서 공부하게 되었고 정리해보고자 한다.
기존의 기계학습과 분류 기술에 대해서는 다양한 모델과 방법이 있었고, 처리하려는 프로젝트 성향에 따라서 일일이 모델과 방법을 분석하고 골라야 하는 과정을 겪어야 했다. 그렇다고 이 선택한 모델과 방법들이 최적화 되지 않은 경우도 있었던 것이 문제였다.
그리고 각 모듈들을 개별적으로 테스트해야 하는 과정도 겪어야 했었다.
(feature Extraction / Classifier)
이런 과정에서 딥러닝이 머신러닝 방법 중 하나로 떠오르면서 많은 변화가 생기게 된 것.
딥러닝은 Artificial neuron 즉, 인간의 뇌, 뉴론이 학습하는 과정을 모방한 학습 방법을 도입한 것이다.
별도로 모델과 방법을 고안할 필요가 없으며, 각 모델을 개별적으로 테스트할 필요 없이 전체의 시스템을 구축해서 한꺼번에 학습하는 것이 가능해 진 것이다.
-> 전체를 하나의 시스템으로 한꺼번에 학습이 가능하다는 장점이 가장 돋보였다.
오 또 나온 XOR problem....
배타적 진리표에 따라서, 신경망을 바탕으로 한 학습방법이 실제로는 더 복잡하고 계산대로 나오지 않는 경우가 많기 때문에,
실생활에서는 드러맞지 않을 수도 있다며 신경망 학습에 대한 맹점이 드러난적이 있었던 것.
이를 해결하기 위해
학습의 정확도를 높이기 위해 히든레이어라고 추가 함수 즉 , 계산 과정을 학습 레이어에 추가한 것.
하나의 히든 레이어일 경우, 연산이 너무복잡해서 이를 해결해주기 위해서 레이어를 여러 단계로 늘려주게 된 것.
확실히 이로 인해 해당 함수들이 linear 하지 않고 다양한 방식이 나오게 된다.
그리고 정확도를 위해 다양한 케이스를 학습하고 다시 역전파법으로 되돌아가면서 확인하는 과정을 거치면서
신경망 학습에 대한 논의가 이루어짐
하지만 레이어가 추가 되면서 오히려 더 복잡해지고 결과가 부정확해짐.
역전파법 또한, 레이어가 복잡해지면서 문제가 발생하게 된다.
이에 대한 문제에 대한 해결은 데이터가 넘쳐나고 컴퓨팅 속도가 발전하게 되면서,
사전 훈련법이 등장하게 되었고 본격적으로 딥러닝이라는 용어를 쓰게 되는 것.
이렇게 인공뉴론을 활용하는 딥러닝에서도 다양한 세부적인 방식이 나오는데, 이 중 하나가 CNN이다.
CNN = Convolutional Neural Networks
이미지의 특징을 반복적으로 분석하고 사전훈련시키고 그 결과를 인공신경망으로 보내서, 그 데이터에 대해 학습을 시키게 되는 것.
초창기에 CNN을 개발한 분들이 고양이가 보는 것마다 자극 받는 뇌의 위치가 다른 것을 보고 아이디어를 얻어 CNN을 만들었다고 한다.
즉, image 전체를 보는 것이 아니라 부분을 보는 것이 핵심 아이디어. 이 ‘부분’에 해당하는 것을 filter.
즉, convolutional의 개념과 인공뉴론학습망의 개념이 합쳐진것!
convolutional에 대한 이해를 하는 것이 가장 핵심일 듯 하다
talkingaboutme.tistory.com/entry/DL-Convolution%EC%9D%98-%EC%A0%95%EC%9D%98
주로 이미지와 영상 학습 및 분류에 해당 개념이 잘 활용된다.
medium.com/@hobinjeong/cnn-convolutional-neural-network-9f600dd3b395
talkingaboutme.tistory.com/entry/DL-Convolutional-Neural-Network%EC%9D%B4%EB%9E%80?category=538748
나는 아직은 본격적으로 deep하게 해당 분야에 파고들 목적은 아니므로, 프로젝트에 대비하여 전반적인 이해만을 위해
이정도로만 참고문서들을 통해 정리해두고자 한다.
내가 생각하는 CNN을 요약해서 정리해보려 한다.
CNN = Convolution(합성) + NN(신경망)
-> 여기서 convolution은 실제 수학에서 학문적으로 사용하는 개념과는 많이 달라서 여기서는 딥러닝 자체의 새로운 개념으로 이해하는 것이 좋을 것 같다는 의견이 많다.
-> 하지만 딥러닝에서 굳이 합성이라는 용어를 쓴 점은 그냥 넘어가면 안될것 같다는 생각이 들었다.
이에 대한 해답은 참고 블로그들에서 설명하는 사례와 그림들을 통해 파악할 수 있었다.
이미지 또한 픽셀들의 모임이므로 우리가 학습하려는 이미지를 7X7로 보고, 이 데이터를 이루는 더 작은 단위를 3X3으로 보자.
왼쪽의 그림이 주어진 이미지를 슬라이딩하면서 학습하는 과정이다.
슬라이딩? 흠 유튜브에서 가끔 볼 수있는, 기계가 그림위를 슬라이드하듯 스쳐지나가며 하나하나 인식하는 영상을 생각하면 된다.
이렇게 3X3을 기준으로 슬라이드 하며 학습하면, output으로 5X5의 학습층이 하나 만들어진다. 이러한 학습층이 겹겹이 만들어지면서 위에서 언급한 다수의 레이어가 생성되고,
점차 점차 작아지면서 최종적으로 부합하는 데이터를 환산하게 된다.
이러한 사전 훈련법을 통해서 최종적인 output을 또 가공하고 학습하면서
"머신러닝 즉 기계학습"이 이루어 지는 것이다.
이렇게 인풋된 하나의 이미지를 "합성곱"이라는 수학적 개념을 통해서, filter 단위로 분석하면서 층을 생성하면서, 딥러닝의 핵심인 인공신경망에 대한 개념을 활용하는 것이다.
위의 그림이 합성층을 만들어 가며 훈련되는 과정에서 나오는 아웃풋들에 대한 모식이다.
CNN모델은 특히나 이미지, 영상 처리에 활용된다고 하는데, 이는 이미지나 영상은 우리 눈에는 1차원으로 보일뿐, 실제로
컬러 구성으로 인해 다양한 층으로 구성되어있으며,
이미지나 영상이 픽셀이라는 단위로 구성되어있다는 점이 CNN의 합성곱 방식과 잘 맞기 때문에
활용되는 것이 아닐까 추측하며 정리해본다!
공부하면서 내가 정리한 개념에 오류가 있을 경우 계속해서 수정해나갈 예정!
'Data' 카테고리의 다른 글
[Intro]딥러닝_기본적인 기능(동영상 처리) (0) | 2020.11.26 |
---|---|
딥러닝 이미지 처리_투명도/ 이미지 합성 (0) | 2020.11.26 |
open cv module 에러 (0) | 2020.11.26 |
딥러닝 이미지처리_패키지 설치 (2) | 2020.11.07 |
머신러닝? 딥러닝? 무엇일까? (0) | 2020.11.07 |