Data Science!/이론

[중고등학생도 이해할 수 있는 AI 이야기] CNN (합성곱 신경망) 1 - 커널, 채널, 합성곱 연산

양국남자 2023. 5. 30. 08:01

이번부터는 컨셉을 좀 바꿉니다.

 

조카 (이하 조): 그러니까 머신러닝이면 몸무게 같은 거 넣어서 포메랑 스피츠 구별하게 하는거고, 딥러닝이면 그냥 사진 던져줘서 우리가 배우듯이 배우게 하는거지? 아 근데 형, 컴퓨터가 포메하고 스피츠 구별하게 하려면 어떻게 코딩 해야되? 파이썬으로 if weight<3 : dog='pomeranian' 이렇게 코딩할건 아니잖아.

 

양 : 너가 직접적으로 분류 기준을 짜 넣 시점에서 머신러닝이 아니지. 코딩은 주로 파이썬을 자주 쓰는데, 우리는 텐서플로, 케라스, 파이토치를 가장 많이 써. 요즘은 파이토치가 가장 핫하지. 글래스고 대학교에서도 파이토치로 배웠어.

 

조 : 그러면 파이토치 공부해야겠네?

 

양 : 파이토치를 공부하기 전에 이게 어떻게 작동하는지 알면 텐서플로든, 케라스든 다 적용할 수 있겠지? 그럼 바로 CNN으로 들어가자. CNN은 Convolutional Neural Network 의 약자야. 우리말로는 합성곱 신경망. 신경망인 이유는 저번에 말했듯이 인간의 '신경계'를 본따서 만들어서 붙은거야.

 

조: 근데 합성곱이 뭐야?

 

양 : 고등학교에서 행렬 배웠지? 놀랍게도 그게 딥 러닝에 활용되.

(친구와 확인해 보니 요새는 빠졌다고 합니다)

 

조 : 행렬이랑 사진이랑 어떻게 관계가 있어?

 

양 : 사진처럼 복잡한 거 들어가기 전에, 먼저 문자인식같은 간단한 걸 해보자. 이거 척 봐도 한국어 'ㄱ' 과 'ㄷ'이지?

 

조 : 이걸 어떻게 컴퓨터에게 학습시킨다는거야?

3x3 행렬을 2x2 칸으로 압축시켰어.

 

양 : 얘네를 ㄱ은 [1,1,1,0,0,1,0,0,1], ㄷ은 [1,1,1,1,0,0,1,1,1] 로 1x9 행렬로 표현할 수도 있어. 하지만 이렇게 되면 칸들관의 관계를 표현하기 힘들지? 가령 예를 들면 ㄱ 에서 첫번째 칸은 1바로 앞칸과 연결된 건 보이는데, 밑칸과 연결되어 있는걸 알기엔 좀 애매하잖아? 그래서 얘를 더 작은 행렬로 바꿔줘.위의 예시에서는 그냥 줄이면서 각 칸에 있는 검정 칸의 숫자를 더했어. 왼쪽 위에서 오른쪽 아래로 가면서 두개 이어지고, 세개 이어지고, 이어지는 거 없고, 두개가 이어져 있으면 ㄱ 이다 라는 식으로 표현하는거지.

 

그리고 만일 더 큰 5x5 크기의 'ㄱ'같은 게 있다고 해봐. 그럼 얘도 [1,1,1,1,1,0,0,0,0,1...] 같은 딥따 긴 행렬로 만들어서 하기 애매하잖아. 그래서 처리하기 쉽게 3x3 으로 한번 줄이고, 2x2로 한번 줄이고, 나중에는 하나의 숫자로 줄여야지.

 

실제 딥 러닝에서는 좀 더 복잡해. 커널(kernel) 또는 필터(filter) 라는 다른 행렬을 가져와서  이미지를 처음부터 끝까지 겹치며 훑으면서  크기의 겹쳐지는 부분의 각 이미지와 커널의 원소의 값을 곱해서 모두 더한 값을 이걸 <합성곱> 이라고 하는거야. 

 

조 : 아놔 행렬 곱하기를 여기서 배워야되?

 

양 : 당연하지. 나중에 다시 훝겠지만, 머신러닝, 딥러닝은 수학으로 만들었어! 커널 이야기로 돌아가자면, 커널이 있으면 변별력이 생겨. 글쎄, 시험칠 때 킬러 문제 하나쯤 해야 진짜 공부 잘하는 애가 나오잖아? 얘도 똑같에.

 

형이 예시를 빠르게 생각하고 계산하기엔 시간이 좀 없어서 외국 사이트에서 퍼왔어. 저렇게 커널 필터를 적용하면, 하나의 값만 바뀌었는데도 손쉽게 찾을 수 있어.

 

조 : 귀찮은 거잖아!

 

양 : 어쨋건 그렇게 해가지고 마지막에 어떤 숫자가 나오면 이건 ㄱ 이다 이건 ㄷ 이다 이러는거야.

 

조 : 저번에 나왔던 강아지도 무슨 숫자가 나오면 포메, 무슨 숫자가 나오면 스피츠가 되는거야?

 

양 : 그건 맞아. 하지만 컬러 이미지 이야기를 하자면 좀 더 복잡해. 미술 시간에 빛의 삼원색 배웠었지?

 

 

조 : 미술도 배워야되 이런거 하려면?

 

양 : 미술은 몰라도 컴퓨터가 파일을 어떻게 저장하는지 알아두면 좋지. 이미지 파일은 32비트, 16비트 컬러, 256색, 흑백, 흑백 기반으로 회색 이미지를 만드는 그레이스케일 등이 있어. 아마 해상도 설정이나 제어판 가지고 놀아봤거나 그림판 가지고 놀았으면 이해가 어느정도 될거야

 

그레이스케일 이미지의 예시

조 : 이번엔 리트리버네? 맨날 강아지 씨리즈야?

 

양 : 그래서 또 강아지 할거야. 아까 포메 스피츠 물어봤지? 너도 알겠지만 스피츠는 우리나라 한정으로 다 흰색이야. 포메는 오렌지, 브라운, 화이트, 블랙탄, 초콜릿 등 여러가지 색상이 있고. 모든 색은 RGB, 즉 빨강, 초록, 파랑의 합성인 건 어느정도 알지? 딥러닝에서는 색상을 받을 때 채널이라고 해서 빨강은 레드채널, 초록은 그린채널 하는 식으로 따로 처리할 수 있어. 우리가 흰색이 아닌 강아지를 스피츠가 아니라고 생각할 수 있듯, 특정 채널에 결과가 흰색이 아니게 나오면 당연히 이건 스피츠가 아니라 추론할 수 있겠지?

 

조 : 이제 채널이 뭔지는 알겠으니까 다음에 또 하자. 채널 이야기에 강아지가 가득하니까 난 이제 강형ㅇ 유튜브 채널 볼거야. 같이 보실?