DNN, CNN, RNN을 활용한 파이썬 딥러닝 실무 강좌의 맛보기 강의입니다.
딥러닝의 알고리즘은 크게 세 가지로 부분에서 볼 수가 있고요 심층신경망에 해당되는 딥뉴럴 네트워크 DNN이죠 그것까지 지금 살펴봤고 그다음에 합성곱신경망 이미지에 아주 특화되어 있는 알고리즘이 있습니다 합성곱신경망이고요 CNN이라 부르고 컨볼루션 뉴럴 네트워크라고 부릅니다 합성곱신경망은 특히 이미지에 대해서 이미지를 잘 분류하는 알고리즘으로 굉장히 유명한 알고리즘이기 때문에 반드시 좀 익혀 두셔야 되고 알고 계셔야 되는 부분이 있는데요 사실은 우리가 갖고 있는 그 DNN 심층신경망 다층 퍼셉트론의 한계가 있었어요 어떤 한계가 있냐면 심층신경망은 계산 과정이 복잡하고 많은 자원들이 필요하고요 그 다음에 계산 시간도 오래 걸리는데 이미지를 학습을 시켰더니 같은 이미지라도 이미지 내 물체 위치가 조금만 달라도 동일한 이미지인데도 불구하고 다르게 파악하는 경우도 좀 생겼고요 그래서 다층 퍼셉트론의 한계가 바로 이미지에서 봉착이 된거죠 이미지는 잘 구분을 못하던데 이렇게 사람은 충분히 보고 음 개같애 고양이같애 금방 나오는데 형태가 이렇게 여러가지 연산을 하고 층을 많이 쌓아도 형태를 파악하지 못하더라 좀 문제점이 있다라고 해서 이거를 이제 시각화 이미지를 약간 특성화 시켜서 알고리즘을 좀 만든 딥러닝 알고리즘 바로 CNN이에요 그래서 합성곱신경망이라고 얘기를 하고요 합성곱신경망의 구조를 보시면 이런 이미지가 들어오잖아요 제가 자동차를 인풋으로 넣는데 사진이에요 사진이 뭐 어떤 사이즈든 인풋이 들어오면 이거를 저희가 어떻게 하냐면 이 특징, 이 사진들의 특징을 잡아내려고 은닉층으로 히든 레이어 있죠 은닉층으로 심층신경망을 쌓는 대신에 뭐를 쌓느냐 바로 합성곱층을 쌓는 거예요 합성곱층을 이용하는 거죠 은닉층으로 그리고 중요한 게 하나 있는데요 합성곱층을 이용해서 이미지의 특성을 파악해요 그리고 이 이미지가 자동차구나 예를 들면 강아지구나 고양이구나 이런 식으로 구분하는 건 역시 클래시피케이션 우리가 배웠던 딥러닝을 가져다가 분류 모델, 딥러닝의 분류 모델이 있죠 여러 개를 분류하면 당연히 뭐를 써야 되겠어요? 다중 분류를 하면서 저희가 소프트맥스를 써야 되겠죠 그래서 여전히 소프트맥스가 뒤에 붙여지는 활성함수로 출력층에 우리가 배웠던 딥러닝을 버리는 게 아니고요 딥러닝이 뒤에 붙는 거고 은닉층으로 어떤 걸 넣느냐 합성곱층을 집어넣어 주는 거다 라고 생각하시면 조금 더 이해도가 편하실 것 같아요 이렇게 그래서 합성곱층은 뭐하는 건데 그러면 이미지의 특성을 좀 잘 파악할 건데 이미지 특성을 잘 파악한다는 것은 뭐냐면 그 저희가 사실은 필터를 필터란 용어가 나오는데 이 필터란 용어를 처음 들으신 분은 없어요 왜냐하면 여러분 셀카 다 찍으시죠 셀카 찍으면서 뽀샵을 하시잖아요 그리고 약간 필터링을 하죠 여러 가지 방법으로 필터링을 하고 그런 기술들이 좀 있으시잖아요 그거하고 똑같다고 생각하면 돼요 이 이미지에 필터를 조그만 걸 대서 얘를 슬라이딩 윈도우라고 해서 이렇게 옆으로 옆으로 옆으로 넘기는 거예요 넘겨가면서 전체 이미지를 부분적으로 보는 거죠 부분적으로 보면서 부분적인 특징들을 파악해서 이미지의 특성을 잘 파악하는 것들이 바로 합성곱이다 왜냐하면 이 가중치를 마치 곱해서 더해서 하는 것처럼 이 필터의 값을 가지고 쭉 슬라이딩을 하면서 이렇게 쭉 밀면서 하나하나씩 하나하나씩 밀면서 특성을 파악하는 거기 때문에 저희가 합성곱이라고 얘기를 하는 거예요. 그래서 그런 그림이 바로 이런 그림이고요. 물론 합성곱층에는 합성곱만 있는 건 아니고요. 얘를 또 줄이는 여러 가지 방법이 또 있어요. 그래서 여러 가지 층이 좀 쌓긴 하지만 기본적으로 합성곱층은 뭐 하는 거냐? 이 이미지의 특성을 지역적으로 지역적인 특성을 잘 파악하기 위해서 쓰는 층이다 라고 생각하시면 좋겠습니다 합성곱층을 대고 그리고 이렇게 나온 결과 가중치 값을 가지고 다시 우리가 뭐한다? 다중분류를 하는 classification 분류를 플러스 알파로 딥러닝의 DNN을 붙여서 하는 거기 때문에 지금까지 배웠던 거를 버리는 게 아니에요 그대로 가져와서 특징 파악하는 층만 은닉층을 조금 더 쌓은 거다 라고 보시면 되겠습니다 다시 한번 정리를 해볼까요? CNN은 Convolution Neural Network, 합성곱이라고 얘기하고요. 이미지 인식의 강력한 성능을 발휘하는 알고리즘이고요. 이미지나 영상을 입력을 받고 특징을 잘 추출할 수 있는 모델입니다. 그래서 합성곱신경망 이미지 전체를 계산하는 게 아니고요. 1차원으로 세우는 게 아니니까 이미지 자체를 받아서 아까 필터를 이용해서 돌리는 거예요. 필터를 계속 슬라이딩 하면서 특징들을 파악해낸다고 보시면 돼요. 아주 이미지의 국소적인 부분을 계산함으로 인해서 시간과 자원을 절약해요. 이미지의 세밀한 부분까지. 필터 하나 가지고 계속 돌리는 거거든요. 우리가 딥러닝을 할 때보다도 파라미터 수가 굉장히 적어짐을 알 수가 있어요. 그럼에도 불구하고 성능이 좋다면 굉장히 좋은 모델인 거죠. 그래서 지금까지 히트가 된 모델인 거고 이미지 그러면 CNN 써야지 라는 게 기본적인 거라고 보시면 좋겠습니다. 그래서 입력된 이미지의 특징을 추출하기 위해서 저희가 아까 필터, 같은 말 마스크, 같은 말 윈도우, 같은 말 커널을 도입하는 기법을 바로 CNN이라고 보시면 되겠습니다. 합성곱신경망 CNN을 다시 도식화해서 설명을 간단히 한번 더 드려볼게요. 입력층을 저희가 설계를 하고 그다음에 출력층이 나오는 출력층은 우리가 아직도 분류하는 문제예요. 다중 분류의 문제인 거고요. 그래서 이 사이에 은닉층을 쌓는데 우리는 이번에는 DNN으로 히든 레이어를 쌓는 게 아니고 합성곱층하고 렐루, 역시 은닉층이기 때문에 렐루 함수를 쓰고요. 역시 이거 풀링층이라 그래서 합성곱층에서 우리가 데이터의 이미지의 특성을 파악해온단 말이에요. 필터를 이렇게 슬라이딩 도어로 돌리면서 그리고 이렇게 우리가 특징을 추출해온 것을 얘를 조금 간략하게 줄이는 층이 풀링층이거든요. 그래서 이게 축약시키는 층이에요. 이런 층 두 개로 보통 이루어졌는데 이런 것들이 여러 번 일어날 수 있어요 은닉층을 여러 번 쌓을 수 있는 것처럼 그래서 이 중괄호의 뜻은 뭐냐면 여러 번 반복될 수 있다 이런 뜻이라고 보시면 되겠습니다 이 두 개의 세트가 반복될 수 있다고 보시면 좋을 것 같고요 그리고 이렇게 특징을 추출했어요 어쨌든 특징을 추출했으면 그리고 나서 우리가 분류 작업이 붙는 거니까 뒤에 DNN이 붙는 거예요 그러니까 앞쪽은 CNN으로 은닉층을 쌓고 그리고 맨 끝에는 결국은 DNN을 통해서 분류를 하는 건데 다중 분류죠 여러 개 중에 하나 분류한다고 해서 다중 분류 작업이 일어나면 되는 거니까 당연히 활성함수로 출력층에 소프트맥스를 여전히 써야 되는 상황인 거죠 그래서 다시 한 번 말씀드리면 컨볼루션하고 풀링층을 묶어서 여러 번 반복될 수 있는데 데이터 특징을 추출하는 역할을 하는 거고요 이 은닉층은 그 다음에 완전연결층을 통해서 우리가 어떻게 하냐? 이거를 연결해줘야 되는 통로, 다시 말하면 컨볼루션층, 합성곱층을 지나서 덴스 레이어, 다시 말하면 완전연결층이 돼야 우리가 말하는 소프트맥스 함수로 뭘 할 수 있어요? 출력을 만들 수가 있는데, 출력을 분류할 수가 있는데 얘는 n차원일 거고, 예를 들면 2차원이면 얘가 1차원으로 만들어야 되니까 1차원이 아닌 차원을 1차원으로 만든 함수 중에 플래튼을 실습 시간에 공부를 했어요 플래튼은 망치로 두들겨서 편편하게 편다 이런 뜻인데 플래튼이라는 함수를 통해서 1차원으로 얘들을 다 1차원으로 만든 다음에 그리고 얘를 연결시키는 거예요 중간 과정에 들어갈 거고요 그래서 이 연결된 가중치 값을 다 계산하는 것을 1차원으로 만들어서 그 값들을 출력층에서 소프트맥스 함수를 통해서 뭐하죠? 이제 다중 분류를 하게 되겠죠 이렇게 됩니다 그게 이제 함수적으로 보면 데이터 입력되면 여기 Convolution 2D라는 함수가 Keras에서 제공되고 있는데 합성곱층을 말하는 거고요 얘를 약간 그 내용을 축약시켜서 축소시키는 층이 바로 이제 Max Pooling 2D가 있어요 이 2D는 2차원이라는 뜻입니다 2차원 데이터를 가지고 한다 이렇게 보시면 될 것 같고 이렇게 만들어진 데이터는 2차원이잖아요 근데 1차원으로 플래튼을 이용해서 덴스 1차원으로 만든 거죠 만들어서 다 연결시킨 다음에 이거를 저희가 소프트맥스를 통해서 결과가 출력하는 그런 형태가 바로 컨볼루션 신경망이다, CNN이다 보시면 되겠습니다 우리가 배웠던 DNN이 버려지지 않고 뒷부분에 그대로 추가되는 거예요 그대로 추가돼서 앞부분만 그럼 조금 저희가 합성곱신경망과 풀링층 또는 기타 등등 필터가 어떻게 슬라이딩이 되는지 어떤 역할을 하는지 뭐 그런 거에 관해서 공부를 하게 되면 컨볼루션에 대한 이해가 쉽게 되실 것 같습니다 완전연결층과 컨볼루션층, 다시 말하면 CNN과 DNN에 대해서 다시 한번 비교 설명을 좀 해드리면요. DNN은 Fully Connected Neural Network이라고 해서 모든 층들, 입력층과 은닉층과 출력층 사이가 완전 연결되어 있죠. Fully Connected 되어 있는 층인 거고요. 그리고 이 컨볼루션층, CNN 같은 경우에는 예를 들어 이미지 그대로 2차원 이미지면 여기 이미지를 받아다가 컨볼루션 층과 컨볼루션 층을 이렇게 두 개 정도 쌓고 맥스풀링이라고 해서 맥스풀링은 해당되는 구역에서 최대값을 가져오는 게 맥스풀링인데요 어쨌든 이런 데이터를 특징적인 것만 좀 지역적인 특징을 잘 추출하는 합성곱층과 풀링층을 합성곱층으로 합성곱층을 쌓은 것입니다. 그리고 맨 뒤에 풀리 커넥티드라고 해서 다시 붙는 것입니다. 분류의 목적으로 했던 것입니다. 분류 목적의 이미지 분류니까요. DNN이 했던 부분이 뒤에 추가가 돼서 결과가 나오는 것을 가지고 있다고 보시면 좋을 것 같습니다. 딥러닝에 해당되는 DNN의 완전 연결층의 단점은 완전 연결층이니까 모두 다 풀리 커넥티드 되어 있어야 되는 것을 갖고 있기 때문에 입력층부터 시작해서 모든 층이 다 1차원 배열 형태예요. 그러다 보니까 2차원 이상으로 되어 있는 이미지나 영상 같은 것들은 잘 받아들이지 못하죠. 2차원의 데이터를 이렇게 MNIST 그림처럼 28x28 사이즈였잖아요. 그래서 이거를 저희가 곱하기 해서 1차원으로 바꾼 게 784였잖아요. 이렇게 노드 횟수 개수를. 이렇게 바꿔서 해야 되기 때문에 이렇게 데이터를 바꾸면 원래 데이터의 특징을 잃어버리죠. 이미지가 원래 갖고 있는 고유한 특징이니까. 예를 들면 이 선 뒤에 이 선이 올 거야라는 이 특징들 이런 것들을 일렬로 세우면서 다 잊어버리는 거죠 그래서 지역적으로 공간적으로 가지고 있는 지역이나 공간적으로 갖고 있는 정보를 손실해버리는 그런 단점을 갖고 있어서 파라미터 수는 되게 많지만 이렇게 은닉노드 수를 이렇게 많이 늘리니까요 파라미터 수는 많이 필요하고 은닉층의 수도 많이 필요하지만 오히려 비효율적으로 정답을 잘 못 찾는 이미지 문제에서 좀 취약한 문제점이 좀 드러났죠 그런데 컨볼루션은 이미지 그대로 가져온 거예요 그리고 얘 특징을 파악할 때 필터라는 조그마한 창 같은 거가 있어요 윈도우나 필터 같은 거 이거를 이렇게 돌려요 이렇게 마치 그 셀로판 종이 있잖아요 그런 종이를 그 큰 그림에 갖다 대서 돋보기 보듯이 이런 식으로 돋보기 모양으로 써서 모든 데이터 이미지로 돌아다니면서 지역적인 특징을 좀 파악하는 거죠 이 필터를 이용한다는 게 핵심 포인트인 거고요 그래서 이렇게 되면서 지역적으로 아까는 못했던 이 공간의 정보, 지역의 정보를 유지하는 게 가장 큰 특징이라 이미지에 특화되어 있는 층이다라고 보고요 완전연결층에 비해서는 이 필터를 공용으로 쓰기 때문에 파라미터 수가 되게 급속하게 줄어듭니다 그런 면에서 굉장히 효율적인 이미지 분류하는 측면에서는 컨볼루션층이 갖고 있는 장점이 많다 이렇게 보시면 될 것 같습니다 이제부터는 컨볼루션 신경망 CNN 구조를 조금 더 자세히 들여다볼 건데요 입력층이 있고요 저희는 필터를 마련해 내긴 하지만 특징을 추출해내는 합성곱층과 풀링층이 들어와 있고, 뒤에 분류를 하기 위해서 완전연결층이 들어와 있고, 출력층이 들어와 있는 것을 확인할 수 있습니다. 처음에는 입력층이죠. 입력 이미지가 들어오는 거고요. 그리고 이미지 차원은 3차원 데이터 내지는 2차원 데이터, 만약에 3차원 데이터라는 얘기는 저희가 뭐냐면, 높이, 너비, 가로, 세로가 있고요. 채널이 들어오기 시작해요. RGB 컬러가 들어오잖아요. 채널이 3개가 되는 거예요. 그래서 만약에 흑백이면 채널이 1개가 되는 거죠. 그래서 아까 우리 MNIST 그림 같은 경우는 숫자 5가 있다 그러면 흑백 그레이라고 말씀드렸죠. 원래 데이터가 28 곱하기 28 곱하기 1인 거예요. 흑백이니까. 그런데 이게 컬러로 들어왔다. 이렇게 되면 컬러 이미지는 채널이 3이 되기 때문에 3차원 데이터로 28 곱하기 28 곱하기 3 이렇게 RGB 컬러로 합성곱층은 3차원 데이터로 들어옵니다. 합성곱층은 두 가지가 필요합니다. 하나는 커널, 아까 얘기했던 필터가 필요합니다. 조그맣게 있던 필터 있죠. 여기 보시면 입력층에 필터를 대고 슬라이딩 윈도우로 슬라이드를 밀듯이 밀고 다니면서 특징을 파악하는 거예요. 그래서 이게 커널인데요. 이 커널로 준비하셔야 돼요 그래서 이미지 모든 영역을 훑으면 특성을 추출하는 거고요 이게 핵심인 거죠 추출된 결과물들이 특성맵에 결과가 나오는 거죠 결과로 나오는 게 특성맵이라는 것이 합성곱층을 지나고 나면 특성맵이 만들어지는 거고요 보통은 커널 크기는 3x3, 5x5 이런 크기로 적용됩니다 그래서 이 사이즈가 3x3, 5x5 가로, 세로 필터의 크기가 말하는 거예요 3x3, 5x5 이런 식으로 준비가 되고 3x3을 좀 많이 쓰는 것 같아요 더 크게도 써봤는데 이게 더 효율적이라 그래서 경험적으로 3x3을 많이 쓰는 것 같습니다 그리고 스트라이드는 뭐냐면 전체 이미지가 있잖아요 이미지를 여기 커널이 내지는 필터가 밀고 다닐 텐데 밀고 다닐 때 특성을 파악하기 위해서 필터가 지정 간격으로 순차적으로 움직여 줘야 되거든요 보통은 1이에요 1, 한 칸씩 그냥 움직이는 걸로 한 칸씩 그래야 제대로 이미지를 파악할 수 있고 만약에 이게 3이다 그러면 많이 건너뛰는 거죠 그러면 계산 속도는 빠르겠지만 특성이 제대로 잡히지 않으니까 기본은 거의 1 정도로 한 칸씩 미는 것 같아요 한 칸씩 스트라이드라고 보시면 되겠어요 그래서 합성곱층에서 꼭 필요한 구성요소가 바로 커널이 있어야 되고 필터를 저희가 가지고 있어야 되고 필터를 얼마씩 밀고 다니면서 특징을 저희가 추출할 거냐 그 스트라이드도 우리가 정해줘야 된다고 보시면 좋을 것 같습니다 그리고 풀링층을 좀 뒤에서 얘기할 건데 풀링층 같은 경우에는 여기서 나오는 특징 맵 있죠 이걸 조금 더 축소시켜서 대표적인 것만 예를 들면 이미지 같은 거는 개냐 고양이냐 이렇게 가린다면 3차원 데이터를 다시 뭐로 바꾸는 거죠 저희가 1차원으로 바꿔주는 완전 연결층을 통해서 구분을 하는 classification 분류를 하는 작업을 하게 된다 이렇게 보시면 될 것 같습니다
