티스토리 뷰

* 참고 번역 사이트

https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/

 

* 초보자에게 콘볼루션 뉴럴 네트워크 소개하기(1)

 

 

소개

 

  콘볼루션 뉴럴 네트워크(Convolutional neural network, 이하 CNN). 약간 CS가 간간이 섞인 생물학과 수학과의 이상한 조합같이 들리지만, 이러한 네트워크들은 컴퓨터 비전 분야에서 가장 영향력 있는 혁신 중의 일부이다. 2012년은 신경망이 중요해지는 첫 번째 해였다. Alex Krizhevsky가 신경망을 사용하여 그 해 ImageNet 대회(매년 열리는 컴퓨터 비전 올림픽)에서 우승을 차지했기 때문이다. 분류 오차 기록을 26%에서 15%로 떨어뜨리며 놀라운 개선을 이루면서 말이다. 그 이후로, 다수의 회사들이 핵심으로 딥러닝(deep learning)을 사용하기 시작했다. Facebook은 신경망을 자동 태그 알고리즘을 위해 활용했고, Google은 사진검색, 아마존은 제품 추천, Pinterest는 집 개인화(home feed personalization) 그리고 Instagram은 검색 기반 시설을 위해 사용했다.

  그러나 거의 틀림없이 가장 인기 있는 활용사례로는 이미지 처리를 위함이다. 이미지 처리 내에서 이미지 처리를 위해 이러한 CNN을 어떻게 활용하는지 알아보자.

 

문제공간

 

  이미지 분류는 이미지를 입력하고 등급(고양이, 강아지 등) 또는 이미지를 가장 잘 묘사하는 등급의 확률을 내보내는 일이다. 인간에게 인식 문제는 우리가 태어나는 순간부터 배우는 첫 번째 기술이다. 그리고 성인으로 가면서 자연스럽게, 힘들이지 않고 찾아오는 것이다. 두 번 생각할 것 없이, 우리가 있는 환경과 우리 주변의 사물들을 빠르고 균일하게 인지한다. 우리가 이미지를 보거나 단순히 우리가 주변 세계를 볼 때 의식적으로 알아보는 것 없이도 즉각적으로 장면을 특징짓고 각 사물의 라벨을 준다. 패턴을 빠르게 인지하고, 이전 지식으로부터 일반화하고 다른 이미지 환경에 맞출 수 있는 이러한 기술들은 우리와 비슷한 기계와는 공유할 수 없는 것들이다.

투입물과 산출물

 

  컴퓨터가 이미지를 볼 때(이미지를 투입물로 받아들일 때), 픽셀(pixel) 값의 나열을 볼 것이다. 이미지의 해상도(resolution)과 크기에 따라 32 x 32 x 3 형식의 숫자들을 볼 것이다(3RGB 값을 의미한다). 그 논지를 알아듣게 만들기 위해 jpg 형식에서 컬러 이미지와 그것의 크기는 480 x 480으로 가졌다고 하자. 대표적인 대열은 480 x 480 x 3일 것이다. 이러한 숫자 각각은 그 점의 픽셀 강도를 묘사하는 0에서 255 까지의 주어진 값이다. 이러한 숫자들은 컴퓨터에 이용 가능한 유일한 산출물이다. 반면 우리가 이미지 분류를 수행할 때는 우리에게 의미 없는 것이다. 이러한 숫자의 나열을 컴퓨터에 제공하고, 특정 등급이 있는 이미지에 대한 확률을 설명하는 숫자를 출력해 낼 것이다(고양이일 확률 80%, 개일 확률 15%, 새일 확률 5% ).

 

컴퓨터가 무엇을 하길 원하는가

 

  문제가 무엇이고, 투입물(input)과 산출물(output)이 무엇인지 알기 때문에, 이를 접근하는 법을 생각해보자. 컴퓨터가 무엇을 하길 원하는 건 주어진 모든 이미지를 구별하고 개를 개로 만들거나 고양이를 고양이로 만드는 특별한 특징들을 알아낼 수 있도록 하는 것이다. 이는 우리 속에서도 무의식적으로 진행하는 프로세스이다. 개 사진을 볼 때, 발 또는 네 다리 같이 사진이 구별할만한 특징을 가진 것처럼 구별할 수 있는 것이다. 유사한 방법으로 컴퓨터는 이미지 분류를 가장자리나 곡선같이 낮은 수준의 특징을 보고, 그리고 나서 일련의 콘볼루션 층을 통해 더 추상적인 개념으로 세움으로서 수행할 수 있다. 이것은 CNN이 하는 것에 대한 일반적인 개괄이다. 구체적으로 들어가 보자.

 

생물학적 연결

 

  그러나 우선 첫 번째로 약간의 배경지식이 필요하다. 당신이 CNN(Convolutional Neural Networks)용어를 처음 들었을 때, 아마 신경과학 또는 생물학과 관련된 무언가로 생각했을 수도 있는데, 그렇다면 당신이 맞을 것이다. 그 일부이다. CNN은 시각령(視覺領)(visual cortex)으로부터 생물학적 영감을 취한다. 시각령(視覺領)은 시각 부분의 특정 지역에 민감한 세포의 작은 지역을 가지고 있다. 이러한 아이디어는 HubelWiesel1962년에 했던 (몇몇 개별 신경 세포가 뇌에서 특정 방향의 모서리(?, edge) 존재에서만 반응을 한다는 것을 보여준) 놀라운 실험에서 확장되었다. 예를 들어 일부 뉴런들은 수직 가장자리에 노출되거나 수평적 또는 대각 가장자리에 보여질 때 타버렸다. HubelWiesel은 이러한 뉴런 모두 원주건축(columnar architecture)에서 조직되고 그리고 서로 시각 인지를 제공한다는 걸 발견했다. 특정 일을 갖는(특수한 성질을 보는 시각령에서 뉴런 세포) 시스템 내에 특화된 성분에 대한 아이디어는 기계 또한 사용하는 것이고, CNN에 기초이다.

* 시각령(視覺領) : 시신경으로부터 흥분을 받아들이는 대뇌 피질의 부분

 

구조

 

  구체적으로 돌아가보자. CNN이 하는 것에 대한 더 자세한 개요를 말하자면, 당신이 이미지를 보고, 그것을 일련의 콘볼루션적인(나선형의?), 비선형적인, pooling(downsampling) 그리고 완벽히 연결된 층을 통해 통과되고, 산출물을 얻게 된다. 우리가 전에 말했던 것처럼, 산출물은 단일 등급(class) 또는 이미지를 가장 잘 묘사하는 등급(class)들의 확률일 수도 있다. 지금, 어려운 부분은 이러한 각 층들이 하는 것을 이해하는 것이다. 그래서 가장 중요한 것으로 들어가 보자.

 

첫 번째 층 수학 부분

 

  CNN의 첫 번째 층은 항상 Convolutional Layer이다. 당신이 확실히 기억할 첫 번째는 이런 conv(이제 약자를 쓰겠다) layer가 무엇인가 이다. 전에 언급한 대로, 투입물(input)32 x 32 x 3의 픽셀 값 배열이다. conv layer를 설명하는 최고의 방법은 이미지의 좌측 위쪽부분을 넘어 비추는 섬광을 상상하는 것이다. 섬광이 5 x 5 부분을 비추는 그러한 빛이 있는데 그러면 투입물 이미지의 모든 부분에 걸쳐 미끄러지는 섬광을 상상해보자. 기계학습 용어로는 이러한 섬광을 filter(또는 neuron 또는 kernel이라고도 일컫는다)라고 불리고 그걸 너머 비추는 지역을 receptive(수용) field라고 부른다. 현재 filter는 숫자의 나열로 있는데(이 숫자들은 weight 또는 parameter로 불린다). 매우 중요한 부분이 있다면, filter의 깊이는 투입물(여기서 수학이 확실히 작동한다)의 깊이와 같아야 한다. 그래야 이 filter의 차원이 5 x 5 x 3이 된다. 이제, filter가 들어있는 첫 번째 위치를 예로 들어보자. 좌측 상단에 있을 것이다. filter가 투입물(input) 이미지 주변으로 미끄러지면서, 또는 convolving하면서 filter 안에 값들은 원래의 이미지 픽셀 값들과 곱한다(요약하자면 element wise multiplications 계산하는 것). 이러한 곱(multiplication)은 모두 압축해서 보여준다(수학적으로 말하자면, 이는 총 75 곱일 것이다). 그래서 지금 당신은 단일 숫자를 갖게 된다. 기억해야 할 것은, 이 숫자는 단지 필터가 이미지 좌측 상단에 대한 대표이다. 이제 우리는 투입량에서 모든 위치에 대한 이런 프로세스를 반복한다. (다음 단계는 필터를 오른쪽으로 1단위, 그리고 나서 오른쪽으로 1단위 등으로 이동할 것이다). 투입량에서 모든 특별한 위치는 숫자를 제공한다. 모든 위치를 넘어 필터를 미끄러뜨려 넣은 후에, 당신은 28 x 28 x 1 배열의 숫자들이 남겨진 걸 발견할 것이고 이를 activation map(활성화 지도) 또는 feature map(특징 지도)라고 부른다. 28 x 28 배열을 가진 이유는 5 x 5 필터가 32 x 32 투입 이미지에 맞출 수 있는 784개의 다른 위치가 있기 때문이다. 이러한 784 숫자는 28 x 28 배열에 매핑된다.

  투입물 양 주변을 휘감고 활성화 지도를 생산하는 5 x 5 필터의 시각화

 

  (Quick Note: 위의 것을 포함한, 내가 사용한 이미지 몇 개는 훌륭한 책인 “Neural Networks and Deep Learning”이라는 책(Michael Nielsen )에서 가져왔다. 강력 추천한다.)

 

  현재 우리는 5 x 5 x 3 필터를 사용한다. 그리고 나서 산출물 양은 28 x 28 x 2가 될 것이다. 더 많은 필터를 사용함으로써, 공간적 차원을 더 잘 보존할 수 있다. 수학적으로 이는 conv layer에서 이뤄지는 것이다.

 

첫 번째 층 높은 수준의 관점

 

  그러나, 이런 conv는 실제로 높은 수준에서 하는 것임을 말해보자. 이러한 필터 각각은 feature identifiers(특징 식별자)로 간주될 수 있다. 내가 특징을 말할 때, straight edges, simple color 그리고 curve 같은 것을 말하는 것이다. 모든 이미지가 서로 공통점을 가진 가장 단순한 특징을 생각해보자. 첫 번째 필터는 7 x 7 x 3이고, 이는 curve detector(곡선 탐지기)일 것이다. (이번 부분에서는 필터가 3 단위 깊이에 있고, 이미지와 필터의 최상위 깊이 조각만을 고려하는 사실은 무시하자, 단순함을 위해.) 곡선 탐기기처럼 필터는 픽셀 구조를 가질 것이며, 이 픽셀 구조 안에서 곡선의 그림자가 있는 수치형 값이 더 높아질 것이다(우리가 얘기하는 이러한 필터는 단순히 숫자로서 얘기함을 기억하자).

 

  이제 이를 수학적으로 시각화해보자. 투입물 양의 좌측 상단에 이러한 필터를 가지고 있을 때 그 지역에서 필터와 픽셀 값 사이의 곱을 계산한다. 우리가 분류하고자 하는 이미지의 예를 들어서 좌측 상단 모서리에 필터를 놔보자.

 

  우리가 해야 할 것은 이미지 원래의 픽셀 값과 함께 필터에서 값들을 곱하는 것임을 명심하자.  

  기본적으로, 투입 이미지 안에, 일반적으로 필터가 나타내고 있는 곡선과 닮은 모양이 있다면, 서로 더해진 모든 곱들은 큰 값으로 나타날 것이다. 현재 필터가 이동할 때 어떤 일이 일어나는지 살펴보자.

 

  값이 매우 낮다! 이는 이미지 부분에서 곡선 탐지기 필터에 반응하는 어떠한 것도 없었기 때문이다. 이러한 conv layer의 산출물(output)은 활성화 지도(activation map)라는 걸 기억하라. 그래서 하나의 필터 conv의 단순한 사례에서(그리고 만약 필터가 곡선탐지기라면), 활성화 지도는 그 사진에서 곡선이 가능성이 높은 지역을 보여줄 것이다. 이러한 예에서 28 x 28 x 1 활성화 지도의 좌측 상단 값은 6600일 것이다. 이렇게 높은 값의 의미는 필터를 활성화 시키도록 하는 투입물 양(volume)에서 곡선이 어느 정도로 있을 가능성을 말한다. 활성화 지도에서 우측 상단 값은 0일 것인데, 왜냐하면 투입물에서 필터를 활성화시킬 어떠한 것도 없기 때문이다(더 단순히 말해서, 원래의 이미지 지역에서는 곡선이 없을 것이다). 단순히 하나의 필터라는 것임을 잊지 말라. 이는 단지 밖으로, 오른쪽으로 곡선을 이루는 선을 감지할 필터이다. 우리는 왼쪽으로 곡선을 이루거나 직선(straight edge)으로 이루는 선에 대한 다른 필터를 가질 수 있다. 필터가 많을수록, 활성화지도의 깊이는 더 깊어지고, 우리가 투입물 양에 대한 정보를 더 얻게 된다.

 

Disclaimer: 내가 이 부분에서 서술한 필터는 conv동안 진행하는 수학을 설명하기 위한 주요 목적을 위해 단순화시킨 것이다. 밑의 사진에서 훈련된 네트워크에서 첫 번째 conv 층에 대한 필터의 실제 시각화의 몇몇 사례들을 볼 것이다. 그럼에도 불구하고, 주요 논쟁이 똑같이 남아있다. 첫 번째 층에 필터들은 그것들이 찾고 있는 명확한 특징이 투입물 양에 있을 때 투입물 이미지 주변을 휘감고 활성화시킨다(또는 높은 값으로 계산한다).

  (Quick Note: 위의 이미지는 스탠포드의 CS 231N 강의(Andrej Karpathy and Justin Johnson)에서 나왔다. CNN에 대해 더 깊이 알고 싶은 사람에게 추천한다.)

 

네트워크를 통해 더 깊게 들어가기

 

  전통적인 convolution neural network architecture(건축?)에서, 이러한 conv layer 사이에 배치된 다른 층들이 있다. 나는 이러한 층들에 대해 많은 것을 공부하고 그들의 기능과 효과에 대해 이해하기를 매우 장려하지만, 일반적인 관점에서 그것들은 네트워크의 탄탄함을 개선시키고, 과적합을 제어하는 데 도움을 주는 차원의 보존과 비선형성을 제공한다. 전통적인 CNN architecture는 이러한 것과 같을 것이다.

  그러나 마지막 층은 중요한 것으로 추후에 다룰 것이다. 다시 돌아가 그동안 배워왔던 것을 돌아보자. 우리는 첫 번째 conv layer에서 필터가 감지하도록 고안된 것에 대해 얘기했다. 이러한 필터들은 모서리나 곡선같이 낮은 수준의 특징들을 감지한다. 상상하는 것처럼, 이미지가 사물 형태인지 아닌지 예측하기 위해 손, 발 또는 귀 같이 높은 수준의 특징(features)들을 인식할 수 있도록 네트워크가 필요하다. 그래서 첫 번째 conv layer 이후에 네트워크의 산출물이 무엇인지에 대해 생각해보자(5 x 5 x 3 필터 세 가지를 사용한다고 가정한다). 또 다른 conv layer를 조사할 때, 첫 번째 conv layer의 산출물은 2번째 산출물(output)의 투입물(input)이 된다. 이제, 시각화하기 약간 더 어려워졌다. 우리가 첫 번째 layer()에 대해 얘기할 때, 투입물(input)은 단지 원래 이미지였다. 그러나 우리가 2번째 conv layer를 얘기할 때는, 투입물이 첫 번째 layer에서 나온 활성화 지도()이다. 그래서 투입물의 각 층은 기본적으로 특정 낮은 수준 특징들이 나타나는 기존 이미지의 위치를 나타낸다. 이제 일련의 필터를 그 위에(2conv layer를 거쳐 지나가는) 적용할 때, 산출물은 더 높은 수준의 특징을 나타내는 활성화가 될 것이다. 이러한 특징 유형들은 반원(곡선과 직선의 조합인) 또는 정사각형(여러 직선의 조합)일 수도 있다. 네트워크와 더 많은 conv 층들을 조사하면서 더욱 더 복잡한 특징을 가진 활성화 지도를 얻는다. 네트워크의 끝 무렵에는 이미지에 친필이 있을 때 활성화하는 필터와 당신이 분홍색 물체를 볼 때 활성화하는 필터를 어느 정도 가질 수 있다. 만약 ConvNets에서 필터를 시각화하는 데 더 많은 정보를 얻고 싶다면, Matt ZeilerRob Fergus가 훌륭한 연구 보고서<해당 사이트 참고>를 내놓았다. Jason Yosinski 또한 유투브(https://www.youtube.com/watch?v=AgkfIQ4IGaM)에서 시각적인 프레젠테이션을 제공한다. 또다른 알아둘 흥미로운 것은 네트워크로 깊이 갈수록, 필터는 더욱 더 큰 수용 분야를 가지기 시작하는 것이다. 이는 필터들이 기존 투입물 양의 더 큰 분야로부터(이를 얻는 또 다른 방법은 픽셀 공간의 더 큰 지역에 더 반응하는 걸 얻는다?) 정보를 고려할 수 있다는 뜻이다.

 

완전히 연결된 층

 

  우리가 이렇게 높은 수준의 특징을 감지할 수 있으므로, 네트워크 끝에 완전히 연결된 층을 붙이면 금상첨화이다. 이러한 층은 기본적으로 투입물 양(산출물이 이에 앞서 conv 또는 ReLU 또는 pool layer 가운데 어느 것이든)과 산출물을 N차원의 벡터로 취한다. 여기서 N은 프로그램이 선택해야 할 등급의 숫자를 의미한다. 예를 들어, 만약 당신이 숫자 분류 프로그램을 원한다면, N10일 수 있다. 왜냐하면 10개의 숫자가 있기 때문이다. N차원의 벡터에서 각각의 숫자는 특정 등급의 확률을 나타낸다. 예를 들어, 숫자 분류 프로그램에서 결과 벡터가 [0 .1 .1 .75 0 0 0 0 0 .05]라고 한다면, 이는 이미지가 1일 확률이 10%, 이미지가 2일 확률이 10%, 이미지가 3일 확률이 75%, 이미지가 9일 확률이 5%(메모: 산출물을 나타낼 수 있는 다른 방법도 있지만, 나는 단지 softmax 접근을 보여주는 중이다)인 것이다. 이렇게 완전히 연결된 층이 작동하는 방식은 이전 층(높은 수준 특징의 활성화 지도를 나타내야 한다는 걸 기억한다)의 산출물을 보고 어떤 특징이 가장 특정 등급과 연관되는지 결정한다. 예를 들어, 프로그램이 몇몇 이미지가 개라는 걸 예측한다면, 발 또는 네 다리 등과 같이 높은 수준의 특징을 나타내는 활성화 지도에서 높은 값을 가질 것이다. 이와 비슷하게, 새를 예측한다면, 날개 또는 부리 같이 높은 수준의 특징을 나타내는 활성화 지도에서 높은 값이 나올 것이다. 기본적으로 FC 층은 높은 수준의 특징이 특정 등급과 가장 강하게 연관 짓는 것을 보고, 특정한 가중치를 부여한다. 그래야 가중치와 이전 층 사이에 곱을 계산할 때, 다른 등급에 대한 올바른 확률을 구할 수 있다.

 

훈련(별칭: 이를 작업하도록 만드는 것)

 

  현재, 내가 고의적으로 언급하지 않은 신경망의 한 가지 요소가 있는데, 아마도 가장 중요한 부분일 것이다. 읽는 동안 많은 궁금증들이 있었을 것이다. 첫 번째 conv 층에서 필터가 직선과 곡선을 어떻게 찾을까? 완전히 연결된 층(the fully connected layer)이 활성화 지도가 무엇을 보는지 어떻게 알까? 각 층에서 필터는 값이 무엇을 가지는 지 어떻게 알까? 컴퓨터가 필터 값(또는 가중치)를 조정할 수 있는 방법은 바로 backpropagation이라 불리는 훈련 프로세스를 통해서 이다.

 

  backpropagation으로 들어가기 전에, 한 단계를 반드시 밟고, 신경망이 작동하기 위해 무엇이 필요한지 얘기해봐야 한다. 우리 모두 태어나는 순간에, 우리 마음은 깨끗했다. 무엇이 고양이인지, 개인지, 새인지 알지 못했다. 유사한 방식으로 CNN이 시작하기 전에는 가중치 또는 필터 값이 무작위로 된다. 필터는 직선과 곡선을 찾는 걸 알지 못한다. 더 높은 층에서 필터는 발과 부리 찾는 것을 알지 못한다. 그러나 나이가 들수록 부모님과 선생님들이 우리에게 다른 사진과 이미지를 보여주고 이에 해당하는 라벨을 알려준다. 이미지와 라벨을 알려주는 이런 아이디어는 CNN이 조사하는 훈련 프로세스이다. 이를 더 자세히 알아보기 전에, 수 천 개의 개, 고양이, 새 이미지를 가진 training 세트를 가지고 각 이미지가 있는 동물이 무엇인지 알려주는 라벨이 있다고 해보자. backprop으로 되돌아가자.

 

  그래서 backpropagation4가지 뚜렷한 부분으로 나뉠 수 있는데, 바로 the forward pass, the loss function, the backward pass 그리고 the weight update이다. the forward pass 동안, 우리가 기억하는 것처럼 32 x 32 x 3 배열의 숫자를 가진 훈련용 이미지를 가지고, 그것을 전체 네트워크로 보내버린다. 첫 번째 훈련 사례에서, 모든 가중치 또는 필터 값이 무작위로 초기화되었기 때문에, 산출물은 아마도 [.1 .1 .1 .1 .1 .1 .1 .1 .1 .1] 같을 것이고, 이는 기본적으로 특별히 어떠한 숫자를 선호하지 않은 그런 산출물이다. 현재 가중치에서 네트워크는 낮은 수준의 특징을 찾을 수 없거나 분류가 무엇일지에 관해 어떠한 합리적인 결론을 내릴 수 없다. 이는 backpropagationloss fuction 부분으로 들어간다. 우리가 지금 사용하는 것은 훈련(training) 데이터라는 것을 잊지 말자. 이 데이터에는 이미지와 라벨 둘 다 들어가 있다. 예를 들어 첫 번째로 투입된 이미지가 3이라고 해보자. 이 경우 라벨은 [0 0 0 1 0 0 0 0 0 0]일 것이다. loss function(손실 함수)는 많은 다른 방식에서 정의될 수 있지만 공통된 부분(정의)MSE(mean squared error, 평균 제곱 오차)(실제-예측)값에 제곱을 취하고 1/2를 곱한 것이다.

  변수 L이 그 값과 같다고 해보자. 상상하는 거처럼, 손실(loss)은 처음에 여러 훈련 이미지에 대해 매우 높을 것이다. 그래서 이를 직관적으로 생각해보자. 우리는 예측된 라벨(ConvNet의 산출물)이 훈련 라벨과 같은 점에 도달하고 싶어한다(이는 네트워크가 예측을 올바르게 했다는 걸 의미한다). 거기에 도달하기 위해서, 우리가 가진 손실(loss)의 양을 최소화하고 싶다. 미적분학에서 단순히 최적화 문제로 이를 시각화함으로써 어떤 투입물(우리의 경우에는 가중치)이 네트워크 손실(또는 오차)에 직접적으로 기여하는가를 찾고 싶다.

- 손실 최소화를 시각화하는 한 가지 방법은 3-D 그래프를 고려하는 것이다. 3-D 그래프에서는 신경망(neural net)의 가중치(명백히 2 가중치보다 높지만 단순하게 가자)는 독립변수이고 종속변수는 손실(loss)이다. 손실 최소화 작업은 가중치를 조절함으로써 손실을 낮추는 것이다. 시각적 용어로는, 오목한 기울기의 물체에서 가장 낮은 점으로 도달하는 것이다. 이를 위해서는 가중치에 대하여 손실의 파생(시각적 용어: 모든 방향에서 기울기를 계산함)을 취해야 한다.

 

  이는 수식으로 dL/dW의 값과 같다. 여기서 W는 특정 층의 가중치이다. 현재 네트워크를 통해 backward pass를 수행하고 싶어 하는데 이는 손실에 가장 기여하는 가중치가 무엇인지 결정하고, 가중치를 찾아서 손실이 줄어들 수 있게 그것들을 조정하는 것이다. 이러한 파생을 계산할 때 마지막 단계인 가중치 갱신(weight update)으로 간다. 경사의 방향을 변화시키도록 필터들의 모든 가중치를 취해서 그것들을 갱신시킨다.

  학습률(learning rate)은 프로그래머가 선택한 파라미터이다. 높은 학습률이 의미하는 것은 가중치 갱신이 더 큰 단계로 이뤄진다는 것을 말하고, 이는 모델이 최적의 가중치 집합에 수렴하는 시간을 줄이는 것이다. 그러나 너무 큰 학습률은 매우 크고, 최적점에 도달하기에 정확하지 않은 점프(jump)를 야기할 수 있다.

  - 높은 학습률의 결과 : 점프가 매우 크고, 손실을 최소화시킬 수 없다.

 

  forward pass, loss function, backward pass 그리고 parameter update의 프로세스는 일반적으로 epoch 하나로 불린다. 이 프로그램은 각 훈련 이미지를 위해 고정된 수의 epoch에 대한 프로세스를 반복할 것이다. 마지막 훈련 사례에 대해 parameter 갱신이 끝나면, 네트워크는 충분히 훈련되어야 한다. 그래야 층들의 가중치가 올바르게 조정된다.

 

검사

 

  마침내, CNN 작업이 어떻든지 보기위해 다른 집합의 이미지와 라벨을 가지고(훈련과 검사 사이를 두 번 더블딥(double dip)할 수 없다!) CNN을 통해 이미지를 보낸다. 산출물과 사실을 완전히 비교하고 우리의 네트워크가 잘 작동했는지 보자.

 

어떻게 회사들은 CNN을 사용할까

 

  Data, data, data. 마법의 4문자 단어(data)를 많이 가진 회사들은 대회 나머지 기간에 내재하는 장점을 가진다. 당신이 네트워크에 줄 수 있는 훈련 데이터가 많을수록 훈련 반복을 더 많이 할 수 있고, 가중치 갱신을 더 할 수 있으며, 생산에 있어서 네트워크를 더 잘 조정할 수 있다. Facebook(그리고 instagram)은 현재 가지고 있는 수십억 사용자들의 사진 모두를 가지고 있고, Pinterest은 사이트에 있는 500pin 정보를 활용하고, Google은 검색 데이터를 이용할 수 있고 그리고 Amazon은 매일 구매되는 수백만 제품들로부터 데이터를 활용할 수 있다. 그리고 그들이 어떻게 데이터를 사용하는 지 이면에 있는 그런 마법(CNN)을 이제 우리는 안다.

 

Disclaimer

 

  이번 포스트가 CNN을 이해하는 데 좋은 출발점이 되어야 하지만, 그렇다고 포괄적인 개요는 결코 아니다. 이번 포스트에서 논의되지 않은 것들은 비선형(nonlinear), pooling layer 뿐만 아니라 필터 크기, 걸음, padding 같은 네트워크의 hyperparameter가 있다. 네트워크 건축(architecture), 배치 정규화(batch normalization), vanishing gradient(없어지는 경계(?)), dropout, 초기화 설정 기술(initialization techniques), non-convex optimization, 손실함수 선택(choices of loss functions), 데이터 증가, 정규화 방법, 계산적 고려(computational considerations), modifications of backpropagation 같은 주제 그리고 그 외에도 아직 논의되지 않은 것들이 있다.

댓글