[음악] 앞에서는 CNN과 컨볼루션 연산을 조금 말씀드렸는데요, 이번 시간에는 컨볼루셔널 뉴럴 네트워크의 중요한 두 연산인 컨볼루션을 마저 다 설명하고, 풀링에 대해서. 두 가지를 설명하도록 하겠습니다. 앞에서 말씀드린 대로, 컨볼루셔널 뉴럴 네트워크는 로컬 피처를 뽑아내서 그 로컬 피처를 비교하는 방식으로, 로컬 피처를 프로세싱하는 방식으로 이미지를 처리한다고 말씀드렸고, 그 로컬 피처를 찾아내기 위해서 컨볼루션이라는 연산을 쓴다는 것까지 앞에서 말씀드렸습니다. 앞에서 남아 있던 설명에 대해서, 오늘 더 앞에서는 컨볼루션의 신테틱한, 문법적인 기계적인 연산에 대해서 말씀드렸는데요, 오늘은 이 컨볼루션의 의미. 이게 뭐냐? 왜 이런 값이 나오고 이 값의 뜻이 뭐냐? 살펴보고, 그다음 풀링에 대해 살펴보겠습니다. 그리고, 컨볼루션을 조금 더 확장한, 컬러 이미지. 채널이 많은 경우에 어떻게 하는가, 그것에 대해서도 말씀드리겠습니다. 자, 여기가 지난 시간에 말씀드린 컨볼루션의 결과고요. 그래서 말씀드린 대로, 이렇게 생긴 작은 사각형, 마스크/커널/필터라고 불리는 이것을 이용해서, 이 주어진 이미지를 쫙 스캔한다. 스캔했더니 이런 이미지가 나왔다고 말씀드렸죠? 재미있는 것은, 이게 입력이고 이게 출력이죠? 입력과 출력을 비교해보면, 마스크 사이즈가 얼마죠? 3x3이죠. 마스크 사이즈가 3x3일 때 봤더니 어떻게 되죠? 여기가 출력의 이렇게 해서 한 줄씩, 쭉 해서 한 줄씩 빠져나가죠? 만약 여러분이 여기를 마스크 사이즈를 5x5로 하면 어떻게 될까요? 5x5로 한다는 얘기는 여기가 이렇게 해서 이렇게. 판이 여기에 놓인다는... 물론 이것도 5x5로 확장되어야 하겠죠, 당연히. 이렇게 될 겁니다. 그러면 출력 사이즈가 어떻게 될까요? 여기 센터 포인트에 값을 적기 시작하니까, 여기서부터 값이 적히겠죠? 그래서 필터 사이즈가 5x5가 되면 출력에, 이렇게 두 줄씩 쭉 빠져나가요. 출력에 이렇게 두 줄씩. 쭉 빠져나갑니다. 출력이 이렇게 두 줄씩 쭉 빠져나가고 가운데만 남게 되죠? 그래서 기억하실 게 뭐냐. 입력의 사이즈와 출력의 사이즈가 어떤 관계가 있냐면, 바로 필터의 사이즈에 따라 바뀌게 된다. 예를 들어 입력이 8x8이었는데 여러분이 3x3 매트릭스를 사용하면 출력이 얼마 나오죠? 6x6이 나오고요. 이건 여러분이 3x3 필터를 썼을 때 얘기고요. 만약 여러분이 5x5 필터를 쓰면, 8x8이 들어가서 얼마가 나오죠? 상하좌우 다 두 줄씩 빠져나가서 4x4 이미지가 나오겠죠? 이렇게 해서, 여러분이 이 필터 사이즈와 그 입력 출력 사이즈 간의 관계도 참고하시면 되겠습니다. 이 필터를 가지고 쭉 스캔하면 출력 이미지. 이 출력의 크기가 이렇게 약간씩 바뀌게 된다는 것도 같이 기억해 주시면 되겠고요. 자 그런데 여기에서 '어, 나는 이런 거 싫어.' '8x8이 들어가서, 나오는 것도 8x8이 나오면 좋겠어.' 물론 제가 의미는 말씀드리지 않고 지금 기계적인 계산만 말씀드리고 있어요. 8x8 이미지가 들어가서 나오는 것도 8x8 이미지가 나오면 좋겠어. 이럴 때는 어떻게 하냐면, 제로 패딩이라는 것을 할 수 있어요. 제로 패딩은 옵션인데요. 무슨 얘기냐면, 원래 이미지의... 맨 겉의 한 줄씩, 사실은 없죠? 여기는 사실은 이미지가 없어요. 사실은 이미지가 없는데, 이 겉의 이미지가 하나씩 있다고 가정을 하는 거예요. 이미지가 한 줄씩. 그냥 추가죠. 버추얼리. 쭉 돌아서 한 줄씩 더 있다. 이걸 제로 패딩이라고 해요. 그래서, 여러분은 이렇게 해서 제로 패딩을 한다, 라고 생각하시면 됩니다. 그래서 제로 패딩이랑 옵션을 넣으면, 원래 주어진 이미지에 원래는 없던 한 줄씩을 더 0으로 채워넣은 다음에, 그다음에 컨볼루션을 하는 거예요. 그러면 어떻게 되죠? 컨볼루션을 하니까, 여기에 이렇게 해서... 이렇게 해서, 여기서부터 시작이 되겠죠? 그다음 센터 포인트. 이 자리니까, 여기에 뭐가 들어가겠죠? 다 하면 0이네요. 0이 들어갈 것이고. 그다음에 옆으로 한 칸 이렇게 쉬프트해서 하면 이것도 0이네요. 0. 그다음에 또 이걸 한 칸 쉬프트해서 하면 -1이 나오죠? -1 이렇게 채워가면, 전체가 쭉 하고 이렇게 채워지겠죠? 이렇게 하면 여러분이 사이즈가 똑같게, 8x8이 들어가서 8x8이 나올 수가 있습니다. 이걸 원한다면 여러분은 어떤 옵션을 써라? 제로 패딩이라는 옵션을 써라, 라는 겁니다. 그래서 제로 패딩을 이용하면, 입력과 출력의 사이즈를 동일하게 맞출 수 있다는 것이죠. 물론 여러분이 5x5를 사용했다고 치면, 필터의 사이즈가 5x5예요. 그럼 제로 패딩을 몇 줄 해야 할까요? 두 줄 해야 되겠죠? 다 0, 0, 0, 0... 해가지고. 제로 패딩을 두 줄 하면 됩니다. 제로 패딩을 한 줄 하니, 두 줄 하니... 중요하지 않아요. 여러분이 사이즈를 맞추고 싶냐 아니냐에 따라 제로 패딩을 한다 안 한다를 생각하시면 되겠습니다. 그래서, 컨볼루션의 제로 패딩이라는 옵션까지 말씀드렸고요, 이제 컨볼루션의 시맨틱, 의미에 대해서 좀 말씀드릴게요. 자, 여기를 잘 살펴보면, 이게 출력이죠? 출력을 보면 출력이 다 음수도 양수도 있고 한데, 여기는 왜 3이고 여기는 왜 4야? 도대체 3의 의미는 뭐고, 4의 의미는 뭐냐... 도대체 이 출력값... 도대체 이 출력값을 내가 어떻게 이해해야 하는 거냐. 이건 그림이고. 도대체 이 필터는 또 뭐야? 하는 생각이... 이건 뭐 그림이니까 이해하실 거고. 이 필터는 뭐고 도대체 이 출력은 내가 어떻게 이해해야 돼? 라는 그 의미에 대해 말씀드릴게요. 자, 여기는 왜 3이고 여기는 왜 4냐? 라는 질문에 답하겠습니다. 이 원본 이미지, 어디에서 나온 거죠? 바로 이 파란 영역에서 3이 나온 거죠? 이것을 여기에 탁 얹어놓고 계산하면 이 값이 나오고. 이것을 이 빨간 지점에 얹어놓고 계산하면 -4라는 녀석이 나와요. 자, 이걸 보시고 눈썰미가 있으신 분은, 눈썰미가 있으신 분은 이걸 좀 알아채셨을 것 같은데요. 자, 어떤 느낌이죠? 알아채셨나요, 무슨 의미인지? 일단 파란색을 한번 보도록 하죠. 파란색을 보면 어떤가요? 아... 1, 1, 1, 1, 1. 여기도 1, 1, 1, 1, 1. 그다음 -1, -1자리. 여기는? -1자리. -1자리. 어... 느낌 오시죠? 네. 바로 로컬 패턴. 로컬 피처. 로컬 패턴을 찾아낸 거예요. 다시 말씀드리면, 이 필터가 뭘 하는 거죠? 이 필터, 마스크, 커널이라고 불리는 얘가 뭘까요? 내가 찾고 싶은 로컬 피처의 또는 로컬 패턴의 데피니션에 '나는 이렇게 생긴 로컬 피처를 찾고 싶어.' 여러분이 찾고 싶은 로컬 피처가 있죠? 그걸 어디에다 그려 넣는다? 필터라고 불리는 작은 사각형에 그려 넣는다, 라는 거예요. 아... '난 이렇게 생긴 로컬 피처를 찾고 싶어.' 그러면 그 로컬 피처의 모양대로 필터를 만드시면 돼요. 물론, 저는 간단하게 1, -1만 사용해서 여러분이 쉽게 이해하시겠지만, 사실 이 필터 디자인은 그리 간단하지는 않아요. 그래서 0도 쓰고 1도 쓰고 굉장히 복잡하게, 다양하게... 이 컨볼루션 연산은 사용한 지 한참 되어가지고요. 굉장히 다양한 기법들이 개발되었는데. 저는 로컬 피처에 대해서 이 필터를 어떻게 디자인하는지 설명은 하지 않겠습니다. 지금은 간단하게 1, -1, 0. 이 정도만 가지고 설명할 거고. 1은 1이 있어야 한다, -1은 1이 있으면 안 된다... 뭐 이렇게 굉장히 프리미티브하게만 설명할 거예요. 사실은 그것보다도 훨씬 더 복잡한 이야기가 있어야 되기는 하지만, 그냥 현재는 그 정도 설명만으로도 충분하기 때문에, 그냥 그 정도만 하고 넘어가겠습니다. 그래서 필터라는 건, 여러분이 찾고 싶은 로컬 피처의 데피니션에 해당하는 거다, 라는 거고, 이 데피니션을 가지고 쫙 훑은 거죠. 그림을 쫙 훑고 났더니, 어떤 일이 생긴다? 여기서 땅! 하고 100% 매치가 됐죠? 바로 그 로컬 피처하고 땅! 하고 100% 매치가 되면 굉장히 큰 양수가 나와요, 양수가. 그리고 쭉 보시면 양수가 어디어디 있죠? 여기도 양수가 좀 있죠? 원래 자리를 찾아가 볼까요? 여기에서 나온 거죠? 여기를 보면 이거랑 이거랑 비교해보면, 한 군데 다르기는 하지만, 거의 일치하는 로컬 패턴이 발견됐죠? 그래서 2라는 거예요. 이게 무슨 얘기냐. 당신이 찾고 싶은 로컬 피처가, 당신이 원하는 로컬 피처가, 여기에도 있고 여기에도 있기는 한데 좀 약하게 있어요. 그다음 1의 자리는 되게 많네요. 여기 여기는 아주 약하게 아주 약하게 로컬 피처들이 발견되고 있어요, 라는 정보를 바로 주는 거예요. 피처들이, 당신이 찾고 싶은 피처가 여기 여기에 있고, 약하게는 여기 여기 여기에 나타나고 있어요, 라고 말하는 겁니다. 그래서 이걸 아웃풋이라고 하지 않고, 이걸 뭐라고 부르냐면 피처 맵이라고도 불러요. 피처 맵. 왜 그렇죠? 로컬 피처가 어디 어디에 있는지 표시하고 있잖아요, 피처 맵에요. 그래서, 여러분이 찾고 싶은 로컬 피처가, 원래의 그림, 원래의 그림... 원래의 그림, 여기, 여기, 여기, 여기, 여기...에 나타나고 있어요, 라는 걸 보여주는 그림이라서, 바로 이 출력을 피처 맵이라고 부르는 거죠. 자 그러면 마이너스 값도 마저 보도록 하겠습니다. 여기도 마이너스를 보면 어떻죠? 아니 여기 1이 있어야 되는데 0이 있고... 그죠? 청개구리 패턴이죠? 1이 있으면 안 된다고 했는데, 1이 여기 있죠? 1이 있으면 안 된다고 했는데 1이 여기 있어 버렸어요. 그죠? 완전히 청개구리 패턴이에요. 그러니까, 당신이 찾는 패턴 없어, 또는 완전히 그것과 반대되는 패턴 있어, 라고 되면 마이너스 값이 여기 이렇게 튀어나오게 돼요. 그러니까, 여기는 당신이 원하는 패턴이 있어, 원하는 패턴 있어, 여기는 원하는 패턴 없어, 없어, 없어, 없어, 원하는 패턴 여기저기 여기저기 여기저기 여기저기 없어, 없어, 없어, 를 표시하고 있어요. 그러니까 아까 말씀드린 대로, 이 피처 맵이라고 말하면 딱 맞는 말이 되는 거죠. 당신이 원하는 패턴이 여기저기 여기저기에 있고 당신이 원하는 패턴이 여기저기 여기저기에는 없어, 라고 이렇게 표시를 해주는 것이 컨볼루션 연산이 되겠습니다. 컨볼루션은 아까 말씀드린 대로 바로 로컬 피처를 찾아내는 연산이다, 라고 생각하시면 되겠고, 커널/필터/마스크라고 불리는 얘는 바로 그 로컬 피처에 대한 데피니션, 정의를 말하는 거고요, 그다음에 여기 나오는 출력은 그 로컬 피처, 로컬 패턴이 어디 어디에 나타나는가를 보여주는 애이기 때문에, 바로 이것의 이름을 피처 맵이라고 부른다는 겁니다. 그리고 또 하나는, 이 피처 맵 중에서, 피처... '이것이 있다'가 중요해요, '없다'가 중요해요? 물론 없다도 중요한 정보지만, 우리는 로컬 피처를 찾고 싶은 거지, 그 로컬 피처가 어디에 없나를 알고 싶은 건 아니잖아요. 그래서 잘 보시면 여기에서 어떤 게 더 유용한 정보냐, 하면 양수만 더 유용한 정보가 되죠. 양수만. 양수만 유용한 정보가 되어서, 양수는 그냥 내버려두고 음수를 샥! 이렇게 0으로 바꿔주는 연산을 합니다. 그래서 이렇게 했는데, 여기서 뭘 바꾼다? 예. 여기에 음수를 0으로 바꿔주는 이런 연산을 하는 것이 스레숄드고요. 여기까지를 컨볼루션이라고 하는 경우도 있고, 여기까지를 컨볼루션이라고 하는 경우도 있어요. 그건 여러분이 상황에 따라서 적당히 이해하시면 됩니다. 그래서 여기까지가 컨볼루션, 혹은 스레숄드까지가 컨볼루션이라고 생각하시면 되겠습니다. 그런데 지금까지는 전혀 뉴럴넷과 상관없는 얘기를 제가 열심히 했는데, 어디서 뉴럴넷 냄새가 나지 않아요? 자, 여기에서 1로 넘어가는 것. 이거 뉴럴넷 냄새 나지 않아요? 여기에서 1로 넘어가는 것. 뭐죠? 렐루. ReLU. Rectified Linear Unit. 이것이 뭐죠? x가 어떻게 되죠? 렐루 x가 이렇게 해서, x가 양수면 양수고, x가 음수면 0. 음수를 다 뭘로 바꿨죠? 0으로 바꾼 게, 제가 지금 뭐하고 있는 거죠? 네, 렐루 연산을 하고 있죠? 어, 렐루 연산을 하고 있네. 물론 제가 지금 설명은 조금 앞뒤를 바꿔서 하는 설명이긴 해요. 마치... 예, 그런데, 일단은 뭐 이렇게 이해하셔도 상관없겠습니다. 어, 봤더니, 뉴럴넷하고 전혀 상관이 없어 보이는 애에서 뉴럴넷 냄새가 나요. 어, 렐루 연산을 하네? 그다음에 여기가 뭐죠? 컨볼루션 연산이에요. 컨볼루션 연산을 보면 어떻게 되죠? 입력, 웨이트, 입력, 웨이트, 입력, 웨이트, 써메이션. 그런 느낌이 나는 수식이잖아요? 이게, 그런 얘기가... 그게 그거라는 뜻이 아니고. 뉴럴넷에서 봤던 입력, 웨이트, 입력, 웨이트, 입력, 웨이트, 써메이션하고 뭔가 유사한 수식이 들어가 있네요? 입력, 웨이트, 입력, 웨이트, 입력, 웨이트, 써메이션, 렐루가 들어가 있네요? 물론, 이게 뉴럴넷이라는 얘기는 아녜요. 결국은, 뉴럴넷입니다. 그런데 상당히 뉴럴넷 같은 냄새가 나고 있죠? 네. 아, 지금까지 말한 설명이 곧 무엇이다? 예. 우리가 지금까지 사용하고 있던 뉴럴넷하고 결국은 같은 얘기다, 라는 결론에 도달하게 됩니다. 중간중간에 계속 뉴럴넷 냄새가 나고 있죠. 그냥, 참고하시면 되겠습니다. 그래서, 일단 여기까지 말씀드리고요. 그다음에 컨볼루션을 우리가 지금은 이 이미지가 흑백인 경우만 생각을 했는데, 이미지가 흑백이죠? 흑백이 아니고 이미지가 컬러일 수도 있잖아요. 이미지가 컬러일 때도 분명히 로컬 패턴을 찾아야 되겠죠? 로컬 패턴을 찾아야 되면, 그때는 어떻게 하냐면, 컬러 영상 처리에 대해서 말씀드릴게요. 컬러 영상은 채널이 여기는 소위 '판'이죠. 그림판. 그림판이 하나만 있지만, 흑백에서는. 컬러 영상에는 그림판이 몇 개 존재해요? 3개가 존재해요. 제가 판이라고 했지만 뭐라고 부르냐? 채널이라고 해요, 채널. 그래서 컬러 영상 하나는, 이거 조금... 헷갈리시면 안 돼요. 컬러 이미지 1개는 뭘로 구성되어 있죠? R.G.B. 우리 다 아시죠? 예? 3 채널로 구성되어 있는 겁니다. 3 채널로 구성이 되어 있다. 꼭 기억하세요. 제가 말씀드리고 싶은 건, 이미지와 채널의 관계를 설명하고 싶은 거예요. 한 개의 이미지에는 채널이 몇 개 있을 수 있다? 여러 개 있을 수 있다는 겁니다. 물론, 이 채널을 독립해서, 이 첫 번째 판만 뚝! 떼어가지고 오면, 이 자체로 이미지예요. 그래서, 여러분이 아, 컬러 이미지는 세 개의 이미지로 구성됐다, 이런 식으로 말하면 안 되고, 컬러 이미지 하나는 세 개의 채널로 구성되어 있다, 세 개의 채널이 뭉쳐서 하나의 이미지가 되는 겁니다. 물론 채널을 뚝, 떼어서 여기에 갖다 놓으면 이 자체로도 이미지가 되기는 해요. 맞아요. 또 이 채널을 뚝, 떼어서 가져오면 이 자체로 이미지가 되기는 하지만, 얘들이 이렇게 묶여 있을 때는 얘들을 '이미지'라고 하지 않고, 채널, 채널, 채널이라고 부르고, 그 세 개의 채널이 묶여서 하나의 컬러 이미지가 된다, 라고 말한다는 겁니다. 아니 뭐, 이렇게 이해하면 어떻고 저렇게 이해하면 어때요. 저도 RGB가 있는 거 알아요, 하실 텐데, 이 용어가 헷갈리면, 이 다음부터 서로 커뮤니케이션이 잘 안 됩니다. 그렇죠? 그래서 커뮤니케이션을 위해서 용어를 맞추는 겁니다. 자, 그래서 여러분이 컬러 영상을 가지고 있다고 치면, RGB 3 채널이 있을 거고요, 자, 3 채널에서 존재하는, 컬러 영상에서 존재하는 로컬 패턴을 어떻게 찾아내냐, 하면, 똑같이 이것은 이미지입니다. 이미지가 3 채널이면, 꼭 기억하세요, 이미지가 3 채널이죠? 그럼, 이건 필터예요, 필터도 꼭 3 채널로 구성되어 있어야 합니다. 그러니까 입력, 그림의 채널 수와 필터의 채널 수는 꼭 같아야 된다. 물론 나중에 더 확장된 CNN으로 가면 그럴 필요는 없는 경우도 있는데, 지금은 베이직한 얘기를 하고 있기 때문에, 입력이 3 채널이면, 필터도 3 채널로 구성되어야 한다. 꼭 기억하세요. 그래서, RGB 3 채널 입력에 대해서 컨볼루션을 하려면, 필터도 3 채널이 나와야 되고요. 그건 어떻게 계산하냐? 간단합니다. 이걸 이렇게 샥! 하고 펼쳐가지고, 그냥 얘들끼리, 첫 번째, 첫 번째 채널끼리 컨볼루션. 두 번째 채널끼리 컨볼루션, 세 번째 채널끼리 컨볼루션한 다음에, 걔들의 값을 싸그리 써메이션, 덧셈을 해서 8이라고 말을 하면, 그것이 바로 3 컬러 영상을 위한 컨볼루션이 되겠습니다. 그러니까 되게 간단하죠? 컬러 영상도 간단합니다. 컬러 영상에 대한 컨볼루션은 말씀드린 대로, 이렇게 필터마저도 3 채널로 구성이 되어야 한다. 이건 의미가 바뀌지 않아요. 이건 의미가 뭐라고 그랬죠? 로컬 패턴, 로컬 피처죠. 로컬 패턴. 로컬 피처의 데피니션이에요. 이 데피니션은 누가 만들어야 될까요? 당연히 여러분이 만들어야 되겠죠. 개/고양이를 구분할 때 개/고양이를 구분하기 위한 로컬 피처가 뭐가 있을까? 뭘 쳐다보면 개는 개라고 할 수 있고, 뭘 쳐다보면 고양이는 고양이라고 할 수 있을까? 여러분이 고민하셔서 로컬 피처, 로컬 패턴을 여기다 정의하셔야 돼요. 그러니까 컬러 영상에 대한 로컬 피처를 정의하려면 3 채널을 다 정의해야 되니까, 좀 많이 피곤하겠죠. 많이 피곤하겠죠. R, G, B 채널을 다 정의해야 되니까, 좀 피곤할 겁니다. 피곤해요. 이렇게 정의된 로컬 피처를 가지고, RGB 컬러 영상에 대해서 아까 말한 대로 쭉, 쭉, 스캔하면 된다. 스캔을 어떻게 한다? 스캔할 때 이렇게. 이 계산. 채널끼리, 채널끼리 컨볼루션한다. 아까 말씀드린 대로. 채널끼리 컨볼루션을 해서 그것에 덧셈을 해서 만들어낸다. 그래서, 이걸 쫙 하고 만들어냈더니 똑같이 이런 출력이 나오겠죠? 이 출력도 마찬가지로 피처 맵이 되겠죠? 이것에 대한 해석은 전혀 바뀌지 않아요. 왜 안 바뀌냐, 똑같죠? 이렇게 정의된 로컬 피처가 여기, 여기, 여기, 여기에 있고. 여기, 여기, 여기, 여기에는 없다. 이 로컬 피처가 있다, 없다를 표현해주는 맵이다, 라는 것. 그 의미가 바뀌지는 않습니다. 그래서, 컬러 영상일 때도 꼭 기억하세요. 입력의 채널과 필터의 채널 수는 반드시 같아야 한다는 거고요. 자, 조금만 더 생각해보면, 그런데 입력의 채널이 꼭 RGB 3 채널일 필요가 있을까요? 예를 들면 여러분이 병원에 갔어요. 여러분이, 그러면, 이렇게 사람, 전문가가 눈으로 보잖아요? 눈으로 보는 건 뭐예요? RGB, 3 채널을 보는 거고... X레이로 봤어요. 그러면 여러분이 가시광선으로도 관찰하고... X레이도 관찰하고, MRI도 관찰하고, MRI 사진이 있으니까. 어떤 똑같은 영역을 MRI로도 찍고, X레이 사진도 찍고, 휴대폰으로 사진도 찍고, RGB. 그다음에 또 뭐가 있을까요? 중력파 사진도 찍어볼까요? 말은 안 되지만, 예를 들면. 또 다른 사진도 찍고 하면, 이렇게 쭉 쌓일 수 있잖아요. 그래서 반드시 입력의 채널이 반드시 3 채널이 아니어도 돼요. 입력 채널이 10 채널, 20 채널, 아니면 100 채널까지도 갈 수 있어요. 물론, '아니, 도대체 가시광선에다가, X레이에다가, MRI 말고 또 뭐가 있지?' 라고 생각하겠지만, 뭐 까짓거 확장하기로 마음만 먹는다면 100 채널까지 확장해도 전혀 문제가 안 된다는 뜻이죠. 그래서 입력이 100 채널이면 필터도 100 채널이 된다. 입력이 100 채널이면 필터도 100 채널이어야 된다는 겁니다. 자, 그러면 이게 출력이에요. 출력은 채널이 어떻게 나올까요? 출력의 채널 수. 출력의 채널 수는 어떻게 되죠? 출력의 채널 수는 어떻게 됩니까? 출력의 채널 수는 여러분이 3 채널, 3 채널로 컨볼루션했어요. 이 판이, 이 판이 몇 장이 나오죠, 무조건? 한 장 나와요. 여러분이 100 채널, 100 채널 가지고 컨볼루션을 쫙 했어요. 나오는 건, 채널 수, 이 판이 몇 장 나오죠? 무조건 한 장이 나와요. 그것도 많이 헷갈려 해요, 익숙지 않은 분들은. 입력의 채널 수와 필터의 채널 수는 반드시 같아야 된다. 그거랑 상관없이, 출력은 무조건 한 채널이 생성이 된다. 그 이유는, 이게 뭐라고 그랬죠? 피처 맵이라고 했잖아요, 피처 맵. 이게 피처 맵이라고 했으니까, 맵은 한 장만 나와야죠. 맵이 여러 장 나오면 안 되죠. 이 피처, 맵이니까. 한 장만 나와야 되죠? 꼭 기억하세요. 입력의 채널 수와 출력의 채널 수는 같아야 된다. 입력의 채널 수와 출력의 채널 수와 상관없이, 아, 입력의 채널 수와 필터의 채널 수와는 상관없이, 무조건 출력의 채널 수는 한 장이 된다. 제가 잘못 말한 것 같네요. 입력의 채널 수와 필터의 채널 수는 무조건 같아야 된다. 그것과 상관없이, 출력은 무조건 채널 수가 하나다, 라는 것. 기억하시기 바랍니다. 자, 이것에 대해서 실제로 한번 컨볼루션을 해봤어요. 컨볼루션을 해봤더니, 이렇게 되면 어떻게 되죠? 쭉 해보니까? 이 입력에다가 이 필터를 적용해... 이 필터는 뭐냐면, 호리젠탈 라인을 찾아내는 필터예요. 물론 이걸 보시면서 '어? 왜 1, 0, -1로 하면 왜 호리젠탈 라인을 잡아내는 필터가 돼요?'에 대해서는 설명하지 않겠습니다. 제가 이 필터를 어떻게 정의하나는 설명하지 않기로 했죠. 그냥, 호리젠탈 라인을 찾아내는 필터다, 라고만 하고 넘어가기로 하죠. 이 필터를 가지고 여기를 쫙 스캔해서 나온 것이 이거예요. 뭐? 피처 맵이에요. 오... 피처 맵이 상당히 이상한 그림이 나올 줄 알았는데 그건 아니네요. 이 필터 통과한 애도 상당히 사람이 이해할 만은 하네요. 네, 맞아요. 이걸 또 다시 출력을, 출력을 또 뭐라고 할 수도 있죠? '이미지'라고도 할 수 있죠? 네, 그래요, 이미지라고도 할 수 있어요. 그래서 컨볼루션은, 어떤 연산이라고 할 수 있죠? 이미지가 들어가서 이미지를 출력하는 연산이라고도 이해할 수 있어요. 그런데 이미지가 이미지이기는 하지만, 이것이 어떤 특별한 의미를 갖는 이미지이기는 하지만, 컨볼루션은 이미지가 들어가서 이미지가 나옵니다, 라고 이해해도 큰 문제는 없겠습니다. 자, 그럼 어떤 이미지가 나왔는지 한번 보도록 하죠. 왜 여기는 검정색이고, 여기는 왜 하얀색이죠? 여기는 왜 하얀색이죠? 여기? 여기는 왜 하얀색이고 여기는 검정색이 나왔을까요? 아까 말씀드렸죠. 이건 뭐라고 그랬죠? 피처 맵이죠. 검정색이란 게 뭐죠? 원본 이미지 여기. 원본 이미지 여기. 여기겠죠? 여기에 뭐가 없다? 이 로컬 패턴이 존재하지 않는다. 0. 0이 검정색이잖아요. 0이 검정색이잖아요. 이것의 이미지가 '어, 신기하네...'가 아니고, '왜 여기에 검정색일까요, 왜 0일까요?'는 원본 이미지의 이 자리, 해당되는 지점이죠? 이 자리에 뭐가 없다? 이 자리에 호리젠탈 라인이 없기 때문에 이 자리에 0이 나오는, 다시 말하면 호리젠탈 라인 없다, 없다, 없다, 없다, 없다... 없다를 표시하고 있는 거죠. 여기는 호리젠탈 라인이 있다, 있다, 있다...죠. 그래서 1이 나온 겁니다. 그래서, 원본 이미지 이 자리. 여기죠 여기? 예, 이 자리. 이 자리에 가면 거기에 뭐가 있다? 호리젠탈 라인이 있잖아요. 그래서, 그 자리에는 호리젠탈 라인이 있으니까, 거기에는 1 해서, 이쪽 피처 맵에 1이 나온 겁니다. 아시겠죠? 그래서, 이 피처 맵을 보면 여러분이 바로 이 로컬 패턴이 원본 이미지의 해당 자리에 있었구나 없었구나를 판단할 수 있고, 그런데, 이 아웃풋마저도 사실은 인간이 보아하니 뭐처럼 보인다? 이미지라고 말할 수 있겠다, 라는 것도 잘 기억하시기 바랍니다. 그래서, 컨볼루션의 출력이 대단히 이상한 게 나오는 게 아니고, 이미지, 어떤 특정한 의미를 갖는 것이기는 하지만, 이미지가 나오는 거야, 라고 이해해도 문제되지는 않겠습니다. 여기까지가 컨볼루션이고요, 그다음이 풀링이라는 연산인데요, 풀링은 뭐냐면, 간단해요. 그 피처 맵, 출력이죠? 컨볼루션의 결과입니다. 컨볼루션의 결과인 이 피처 맵에 서브 샘플링, 그러니까 해상도... 이게 그림이라고 했잖아요. 그림의 해상도를 줄이는 거예요. 다운 샘플링하는 거죠, 서브 샘플링. 그러니까 8x8 그림을 얼마로 줄인 거죠? 8x8 그림을 4x4로 줄이는 거 있죠? 사이즈를 이렇게 슈링크시키는 거. 그것이 풀링이라는 연산이 되겠고요. 풀링은 간단합니다. 8x8를 4x4로 줄이려면 간단하죠. 여기 있는 네 점을 한 점으로 바꾸고, 여기 있는 네 점을 한 점으로 바꾸고, 여기 있는 네 점을 한 점으로 바꾸고, '근데 왜 1이에요? 평균값 0.25가 되는 게 좋을 것 같은데.'라고 생각하는 사람도 있죠? 여기 네 점을... 왜 1이에요? 0.25 아닌가요? 평균으로 가야 할 것 같은데... 라고 생각하시면 여러분은 에버리지 풀링을 쓰시는 거예요. 이렇게 해서 평균값으로 가겠다, 하면 에버리지 풀링이고요. 저는 지금 무슨 풀링을 했죠? 맥스 풀링을 했어요. 맥스 풀링. 네 개의 맥스 값. 네 개의 맥스 값을 보내면 맥스 풀링이 되는 거고, 네 개의 평균을 여기에 쓰면 에버리지 풀링이 되는 거죠. 그래서 여러분은 맥스 풀링, 에버리지 풀링, 또는 더 확장한, 이걸 일반화시키면 Lp 풀링이라고 있는데요, 잘 사용하지 않습니다. 거의 99% 맥스 풀링을 사용해요, 에버리지 풀링보다는. 신기하죠? 에버리지 풀링이 더 상식적인 것 같은데, 왜 맥스 풀링을 쓸까요? 라고 생각하실 텐데, 그 이유를 말씀드리면, 일단 이 의미를 생각해 보시면 돼요. 이 의미가 뭐였죠? 로컬 피처가 있다, 예요. 로컬 피처가 있다. 있다. 있다. 여기도 뭐죠? 로컬 피처가 있다죠. 이걸 0.25로 가면 어떻게 되죠? 로컬 피처가 0.25개 있다잖아요. 그런데 여기 이 해당 자리 안에는 로컬 피처가 0.25개 있나요, 하나 있나요? 하나 있잖아요. 그러니까 해당되는 지점, 이 해당 지점에 로컬 피처가 하나가 있다. 그 해당 되는 여기에 로컬 피처가 하나 있잖아요, 하나. 그렇죠? 네. 그래서 그런 식으로 해서 이 로컬 피처의 의미를 생각하면 에버리지보다는 맥스가 조금 더 부합합니다. 그러나 크리티컬하게 맥스와 에버리지가 차이를 만들어내지는 않아요. 물론 맥스가 조금 더 좋기는 하지만 에버리지 쓰면 푹 떨어지는데 맥스 쓰면 확 올라가고 이런 일은 생기지 않는다. 그런데 보통 맥스를 많이 사용한다는 겁니다. 자, 그러면 '풀링을 왜 해요?' 라고 질문을 하겠죠. 앞에서 말한 컨볼루션은 왜 하죠? 로컬 피처를 찾아내기 위해서 로컬 피처를 찾아내기 위해서 컨볼루션을 한다면, 풀링은 왜 하냐, 말씀드리면, 간단해요. 이미지 사이즈가 바뀌었어요. 바뀌면 뭐가 되죠? 이 이후로 진행되는 계산에서 유리하겠죠? 그림 크기가 줄어들었으니까. 그림 크기가 줄어들었으니까 훨씬 더 유리하겠죠? 그래서 계산량을 세이브할 수 있어요. 그다음에 재미있는 것. 그림은요, 256x256을 그것의 반인 128x128로 줄였다고 해서, 전혀 새로운 그림이 되나요? 제 사진을, 256x256 사진으로 찍은 다음에 그걸 128x128로 확 줄이면, 저를 알아보기에 심각한 영향이 생기나요? 그렇지 않죠? 이미지는 그림을 줄여도 정보 손실이 크지 않아요. 정보 손실이 크게 일어나지 않고요, 없지는 않겠지만. 크게 일어나지 않고, 그 다음에 사이즈가 1/4로 줄었기 때문에, 그 이후로 일어나는 계산에서 엄청난 세이브를 얻을 수 있어요. 그래서 그런 목적으로 풀링을 사용합니다. 그러니까 이 이후에 일어나는 계산량을 줄이기 위한 거죠. 그래서 첫 번째, 왜 풀링을 쓰냐? 말씀드린 대로 계산량을 줄이기 위해서, 혹은 이 이후에 나타나는 파라미터의 양을 줄이기 위해서... 같은 얘기인데 하여튼 이 이후에 일어나는 계산을 더 용이하게 하기 위해서고요. 두 번째 특징은 조금 더 쉬프트 인베리언트한 피처, 다시 말해 조금 더 모어 로버스트한 피처 맵을 얻어내기 위한 것이다, 라고도 말을 하는데요, 무슨 얘기냐면, 이건 좀 간단히 말씀드리겠습니다. 이 효과는 미미하다고 볼 수도 있어서 간단히 말씀드릴게요. 예를 들면, 이 그림이 있고요. 그다음에 이 그림이 있어요. 이 그림이 있어요. 두 그림이 같아 보이나요, 달라 보이나요? 두 그림이 다릅니다, 라고 말하면 여러분은 컴퓨터고요, 같은 그림인데요, 라고 말하면 여러분은 사람이죠. 생각해보세요. 그림이 있는데 한 픽셀 밑으로 내려갔어요. 누가 그 한 픽셀을 인지할 사람이 어디 있어요. 1024x1024 그림이 한 픽셀 밑으로 내려갔어. 그 두 개를 구분해낼 사람이 어디 있어요. 컴퓨터는 구분하죠. 당연히 다르죠. 그러나 사람에게는 똑같은 그림이에요. 그 얘기를 하고 싶은 겁니다. 이 그림과 이 그림을, 분명히 사람은 같은 그림이라고 인식할 텐데, 컴퓨터로 비교해보면 다른 그림이에요. 왜냐하면 컴퓨터는 픽셀 바이 픽셀로 비교할 테니까. 픽셀 바이 픽셀로 비교하면. 실제로 비교해보면요, 여기 1인데 여기 1인 거 찾아라, 그러면 딱 네 군데밖에 없어요. 딱 네 군데. 1인데 1인 곳. 어디죠? 여기네요. 여기랑 여기 해서, 1인데 1인 곳 찾으면 네 군데밖에 없어요. 아니, 픽셀은 8x8=64, 64개가 있는데, 0은 빼고 픽셀 투 픽셀로 일치하는 게 4개밖에 없어요. 같은 그림이에요, 다른 그림이에요? 당연히 다른 그림이죠. 그러니까, 컴퓨터로 처리할 때 얘는 다른 그림이라고 말할 가능성이 굉장히 농후한 거예요. 여기에서 컨볼루션을 했어요. 컨볼루션. 컨볼루션을 했어요. 컨볼루션을 해서 얻어진 피처 맵이에요. 피처 맵. 피처 맵을 이렇게 얻어냈습니다. 더 재미있는 것은, 피처 맵, 피처 맵을 비교해보면 일치하는 게 하나도 없어요. 녹색이 하나도 없죠? 그러면 로컬 피처까지 뽑아냈는데 얘랑 얘랑 같은 그림이라고 말하기가 점점 어려워지는 거죠. 왜냐하면 같은 게 하나도 없으니까. 그런데, 여기서 풀링하고 여기서 풀링한 다음에 이 두 개를 비교해보면, 0가 아닌 값이 일치하는 부분을 따져보면 이만큼이나 존재해요. 신기하죠? 풀링을 했기 때문에, 이만큼의 네... 예를 들면, 여기죠? 이만큼의 점과 이만큼의 점이 풀링돼서 들어가니까, 한두 픽셀 움직여도 맥스 풀링하면 값이 크게 안 바뀔 것 아니에요? 네. 그래서, 풀링하고 나면 이것과 이걸 비교해보면 자그마치 여섯 군데가 같아요. 토탈 픽셀이 몇 개? 16개가 있는데 그중에 6개가 같아, 예요. 같은 그림일까요, 다른 그림일까요? 같은 그림일 가능성이 상당히 크겠죠. 예. 그래서 훨씬 더 이 두 그림이 같다는 것을 우리가 확인하는 게 훨씬 더 수월하죠. 그래서 바로 그 얘기입니다. 쉬프트 인베리언트. 모어 로버스트 피처 맵을 만들어낸다는 얘기가 바로 이 얘기가 되겠고요. 그래서 풀링을 사용하면 이후에 나오는 계산량을 줄일 수가 있고, 그다음에 훨씬 더 로버스트한 피처 맵을 만들어서 이 이후에 진행되는 계산에 대해서 더 도움을 줄 수 있다. 그런 장점으로 풀링을 사용합니다. 그래서 컨볼루션과 풀링 두 가지를 말씀드렸는데, 이 두 가지 중에서 이 두 가지가 반드시 필요하지는 않아요. 느낌 봐서는 뭐는 빠져도 될 것 같죠? 풀링은 빠져도 돼죠. '나는 컴퓨터 많아.' 그러면 풀링 안 해도 되죠? 컴퓨터 많으니까. 계산량 안 줄여도 되잖아요. 로버스트 피처 맵. 있으면 좋지만 필요없어, 라고 할 수도 있는 것 아니겠어요? 그쵸? 그래서, 컨볼루션과 풀링 중에서 뭐는 없어도 되냐, 라고 하면 풀링은 없어도 돼요. 그러니까 컨볼루션만 가지고도 짤 수 있어요. 물론 풀링이 그렇다고 해서 완전히 필요없는 건 아니지만, 둘 중에서 하나만 고른다고 하면 컨볼루션을 골라야 된다, 라는 얘기입니다. 컨볼루션 연산이 빠지면, 컨볼루셔널 뉴럴 네트워크에서 컨볼루션이 빠지면 앙꼬 없는 찐빵이 되겠죠? 그래서 컨볼루션은 꼭 있어야 되는 거고, 풀링은 옵셔널이다, 라고 생각하시면 되겠습니다. 자 그래서 오늘 두 연산, 컨볼루션과 풀링에 대해서 말씀드렸고요, 그다음 컨볼루션이 어떤 연산이고 그 의미가 무엇인지, 풀링이 어떤 연산이고 그 의미가 무엇인지 잘 기억하시기 바랍니다. [음악]