이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

컨벌루션 신경망의 계층 지정하기

새로운 컨벌루션 신경망(ConvNet)을 만들고 훈련시키기 위한 첫 번째 단계는 네트워크 아키텍처를 정의하는 것입니다. 여기서는 ConvNet 계층에 대해 자세히 알아보고 이들 계층이 ConvNet에서 어떤 순서로 나타나는지 설명합니다. 심층 학습 계층의 전체 목록과 이들 계층을 만드는 방법은 심층 학습 계층 목록 항목을 참조하십시오. 시퀀스 분류 및 회귀를 위한 LSTM 네트워크에 대해 알아보려면 장단기 기억 네트워크 항목을 참조하십시오. 사용자 지정 계층을 만드는 방법은 Define Custom Deep Learning Layers 항목을 참조하십시오.

네트워크 아키텍처는 포함된 계층의 유형 및 개수에 따라 달라질 수 있습니다. 포함된 계층의 유형 및 개수는 구체적인 응용 방법이나 데이터에 따라 달라집니다. 예를 들어, 범주형 응답 변수를 가지고 있다면 네트워크 끝부분에 소프트맥스 계층과 분류 계층이 있어야 하며, 연속형 응답 변수를 가지고 있다면 네트워크 끝부분에 회귀 계층이 있어야 합니다. 적은 수의 회색조 이미지 데이터를 학습하는 데는 컨벌루션 계층이 한 개 또는 두 개밖에 없는 크기가 작은 네트워크가 충분할 수 있습니다. 반면에, 수백만 개의 컬러 이미지로 구성된 복잡한 데이터의 경우에는 여러 개의 컨벌루션 및 완전 연결 계층이 포함된 보다 복잡한 네트워크가 필요할 수 있습니다.

모든 계층이 순차적으로 연결된 심층 네트워크의 아키텍처를 지정하려면 계층으로 구성된 배열을 직접 만드십시오. 예를 들어, 28x28 회색조 이미지를 10개 클래스로 분류하는 심층 네트워크를 만들려면 다음과 같이 계층 배열을 지정합니다.

layers = [
    imageInputLayer([28 28 1])  
    convolution2dLayer(3,16,'Padding',1)
    batchNormalizationLayer
    reluLayer    
    maxPooling2dLayer(2,'Stride',2) 
    convolution2dLayer(3,32,'Padding',1)
    batchNormalizationLayer
    reluLayer 
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];
layersLayer 객체로 구성된 배열입니다. 그런 다음 layers를 훈련 함수 trainNetwork의 입력값으로 사용할 수 있습니다.

모든 계층이 순차적으로 연결된 신경망의 아키텍처를 지정하려면 계층으로 구성된 배열을 직접 만드십시오. 계층이 입력값 또는 출력값을 여러 개 가질 수 있는 네트워크 아키텍처를 지정하려면 LayerGraph 객체를 사용하십시오.

이미지 입력 계층

imageInputLayer를 사용하여 이미지 입력 계층을 만듭니다.

이미지 입력 계층은 네트워크에 이미지를 입력하고 데이터 정규화를 적용합니다.

inputSize 인수를 사용하여 이미지 크기를 지정합니다. 이미지의 크기는 이 이미지의 높이, 너비, 색 채널 개수에 대응됩니다. 예를 들어, 회색조 이미지는 채널 개수가 1이고 컬러 이미지는 채널 개수가 3입니다.

컨벌루션 계층

2차원 컨벌루션 계층은 입력값에 슬라이딩 컨벌루션 필터를 적용합니다. convolution2dLayer를 사용하여 2차원 컨벌루션 계층을 만듭니다.

컨벌루션 계층은 다양한 구성요소로 구성됩니다.[1]

필터와 스트라이드

컨벌루션 계층은 입력 이미지 또는 직전 계층의 출력값의 부분 영역에 연결되는 뉴런으로 이루어집니다. 이 계층은 이미지를 스캔하면서 이러한 영역에 국한된 특징을 학습합니다. convolution2dLayer 함수를 사용하여 계층을 만들 때 filterSize 입력 인수를 사용하여 이러한 영역의 크기를 지정할 수 있습니다.

trainNetwork 함수는 각 영역에 대해 가중치와 입력값의 내적을 계산하고 편향 항을 더합니다. 이미지의 영역에 적용되는 가중치 세트를 필터라고 합니다. 필터는 각 영역에 대해 동일한 계산을 반복하면서 입력 이미지의 세로와 가로 방향을 따라 이동합니다. 즉, 필터는 입력값을 컨벌루션합니다.

아래 이미지는 3x3 필터가 입력값을 스캔하는 것을 보여줍니다. 아래쪽 맵은 입력값을, 위쪽 맵은 출력값을 나타냅니다.

필터가 이동하는 스텝 크기를 스트라이드라고 합니다. 스텝 크기는 Stride 이름-값 쌍 인수를 사용하여 지정할 수 있습니다. 뉴런이 연결되는 국소 영역은 filterSize'Stride' 값에 따라 중첩될 수 있습니다.

아래 이미지는 3x3 필터가 스트라이드 2로 입력값을 스캔하는 것을 보여줍니다. 아래쪽 맵은 입력값을, 위쪽 맵은 출력값을 나타냅니다.

필터에 있는 가중치의 개수는 h * w * c입니다. 여기서 h는 필터의 높이이고, w는 필터의 너비이고 c는 입력값에 있는 채널의 개수입니다. 예를 들어, 입력값이 컬러 이미지인 경우, 색 채널의 개수는 3입니다. 필터의 개수는 컨벌루션 계층이 출력하는 채널의 개수를 결정합니다. 필터의 개수는 convolution2dLayer 함수에서 numFilters 인수를 사용하여 지정합니다.

팽창된 컨벌루션

팽창된 컨벌루션은 필터의 요소 사이에 삽입된 공간으로 인해 필터가 확장된 컨벌루션입니다. 팽창 인자는 'DilationFactor' 속성을 사용하여 지정합니다.

파라미터의 개수나 연산량을 늘리지 않으면서 계층의 수용 영역(입력값에서 계층이 볼 수 있는 영역)을 늘리려는 경우 팽창된 컨벌루션을 사용할 수 있습니다.

이 계층은 각 필터 요소 사이에 0을 삽입하여 필터를 확장합니다. 팽창 인자는 입력값 추출을 위한 스텝 크기 또는 이와 동등한 필터 업샘플링 인자를 결정합니다. 팽창 인자에 따라 필터 크기가 (Filter Size – 1) .* Dilation Factor + 1로 정해집니다. 예를 들어, 팽창 인자가 [2 2]인 3x3 필터는 요소들 사이에 0이 삽입된 5x5 필터와 같습니다.

아래 이미지는 2배만큼 팽창된 3x3 필터가 입력값을 스캔하는 것을 보여줍니다. 아래쪽 맵은 입력값을, 위쪽 맵은 출력값을 나타냅니다.

특징 맵

입력값을 따라 이동하는 필터는 컨벌루션에 대해 동일한 가중치 세트와 동일한 편향을 사용하여 특징 맵을 형성합니다. 각 특징 맵은 서로 다른 가중치와 서로 다른 편향을 사용한 컨벌루션의 결과입니다. 따라서 특징 맵의 개수는 필터의 개수와 같습니다. 컨벌루션 계층의 파라미터의 총 개수는 ((h*w*c + 1)*Number of Filters)입니다. 여기서 1은 편향입니다.

0 채우기

'Padding' 이름-값 쌍 인수를 사용하여 입력 이미지 테두리에 세로와 가로 방향으로 0 채우기를 적용할 수도 있습니다. 채우기는 이미지 입력값의 테두리에 더해지는 0으로 구성된 행 또는 열입니다. 채우기를 조정하여 계층의 출력 크기를 제어할 수 있습니다.

아래 이미지는 3x3 필터가 채우기 크기 1이 적용된 입력값을 스캔하는 것을 보여줍니다. 아래쪽 맵은 입력값을, 위쪽 맵은 출력값을 나타냅니다.

출력 크기

컨벌루션 계층의 출력 높이와 너비는 (Input Size – ((Filter Size – 1)*Dilation Factor + 1) + 2*Padding)/Stride + 1입니다. 전체 이미지를 완전히 덮으려면 이 값은 정수여야 합니다. 이러한 옵션을 조합한 결과로 이미지를 완전히 덮을 수 없게 되는 경우, 이미지의 오른쪽과 아래 가장자리를 따라 남는 부분이 기본적으로 컨벌루션에서 무시됩니다.

뉴런의 개수

출력 높이와 너비를 곱하면 특징 맵에 있는 뉴런의 총 개수 Map Size가 나옵니다. 컨벌루션 계층의 뉴런의 총 개수(출력 크기)는 Map Size*Number of Filters입니다.

예를 들어, 입력 이미지가 32x32x3 컬러 이미지라고 가정하겠습니다. 필터가 8개이고 필터 크기가 5x5인 컨벌루션 계층의 필터당 가중치 개수는 5 * 5 * 3 = 75이고, 계층의 파라미터의 총 개수는 (75 + 1) * 8 = 608입니다. 스트라이드가 각 방향에서 2이고, 크기가 2인 채우기를 지정하면 각 특징 맵은 16x16 크기를 가집니다. (32 – 5 + 2 * 2)/2 + 1 = 16.5인데 이미지의 오른쪽과 아래쪽의 가장 바깥에 더해진 0 채우기 중 일부가 버려졌기 때문입니다. 마지막으로, 계층의 뉴런의 총 개수는 16 * 16 * 8 = 2048입니다.

이러한 뉴런으로부터 얻어진 결과는 보통 ReLU(Rectified Linear Unit)와 같은 비선형 형태를 통과합니다.

파라미터에 대해 알아보기

컨벌루션 계층을 정의할 때 이름-값 쌍 인수를 사용하여 계층의 학습률과 정규화 옵션을 조정할 수 있습니다. 이러한 옵션을 지정하지 않은 경우, trainNetworktrainingOptions 함수로 정의된 전역 훈련 옵션을 사용합니다. 전역 및 계층 훈련 옵션에 대한 자세한 내용은 파라미터를 설정하고 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.

계층 개수

컨벌루션 신경망은 하나 또는 여러 개의 컨벌루션 계층으로 이루어질 수 있습니다. 컨벌루션 계층의 개수는 데이터의 양과 복잡도에 따라 달라집니다.

배치 정규화 계층

batchNormalizationLayer를 사용하여 배치 정규화 계층을 만듭니다.

배치 정규화 계층은 미니 배치에서 각 입력 채널을 정규화합니다. 컨벌루션 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 컨벌루션 계층과 비선형 계층(예: ReLU 계층) 사이에 배치 정규화 계층을 추가하십시오.

배치 정규화 계층은 먼저 각 채널에서 미니 배치의 평균을 뺀 값을 미니 배치의 표준편차로 나누어 각 채널의 활성화 결과를 정규화합니다. 그런 다음 입력값을 학습 가능한 오프셋 β만큼 이동하고 학습 가능한 스케일링 인자 γ만큼 스케일링합니다. β와 γ 또한 학습 가능한 파라미터로, 네트워크 훈련 중에 업데이트됩니다.

배치 정규화 계층은 네트워크 전체에 전파되는 활성화 값과 기울기 값을 정규화하여 네트워크 훈련을 보다 쉬운 최적화 문제로 만들어 줍니다. 이를 십분 활용하려면 학습률을 늘려볼 수 있습니다. 최적화 문제는 상대적으로 쉬우므로 파라미터 업데이트 값이 더 클 수 있고 네트워크가 더 빠르게 학습할 수 있습니다. L2 정규화와 드롭아웃 정규화를 줄여볼 수도 있습니다. 배치 정규화 계층에서 훈련 중 특정 이미지의 활성화 결과는 동일한 미니 배치에 어떤 이미지가 나타나는지에 의해 좌우됩니다. 이러한 정규화 효과를 십분 활용하려면 각 훈련 Epoch 전에 훈련 데이터를 섞어 보십시오. 훈련 중에 데이터를 섞는 빈도를 지정하려면 trainingOptions'Shuffle' 이름-값 쌍 인수를 사용하십시오.

ReLU 계층

reluLayer를 사용하여 ReLU 계층을 만듭니다.

ReLU 계층은 입력값의 각 요소에 대해 0보다 작은 값은 모두 0으로 설정하는 임계값 연산을 수행합니다.

컨벌루션 계층과 배치 정규화 계층 뒤에는 보통 ReLU(Rectified Linear Unit)와 같은 비선형 활성화 함수가 옵니다. 이 함수는 ReLU 계층으로 지정됩니다. ReLU 계층은 각 요소에 대해 입력값이 0보다 작으면 모드 0으로 설정하는 임계값 연산을 수행합니다. 이 연산은 다음과 동일합니다.

f(x)={x,x00,x<0.

ReLU 계층은 입력값의 크기를 변경하지 않습니다.

이 밖에도 일부 응용 사례에서 이와 다른 연산을 수행해 네트워크 정확도를 개선할 수 있는 또 다른 비선형 활성화 계층들이 있습니다. 활성화 계층 목록은 활성화 계층 항목을 참조하십시오.

교차 채널 정규화(국소 응답 정규화) 계층

crossChannelNormalizationLayer를 사용하여 교차 채널 정규화 계층을 만듭니다.

채널별 국소 응답(교차 채널) 정규화 계층은 채널별 정규화를 수행합니다.

이 계층은 채널별 국소 응답 정규화를 수행합니다. 이 계층은 보통 ReLU 활성화 계층 뒤에 옵니다. 이 계층은 각 요소를 특정 개수의 이웃 채널에 있는 요소들(정규화 윈도우에 포함된 요소들)을 사용하여 얻은 정규화 값으로 바꿉니다. 즉, trainNetwork는 입력값의 각 요소 x에 대해 다음 식을 사용하여 정규화 값 x'를 계산합니다.

x'=x(K+α*sswindowChannelSize)β,

여기서, K, α, β 는 정규화의 하이퍼파라미터이고, ss는 정규화 윈도우에 포함된 요소들의 제곱합입니다[2]. crossChannelNormalizationLayer 함수의 windowChannelSize 인수를 사용하여 정규화 윈도우의 크기를 지정해야 합니다. Alpha, Beta, K 이름-값 쌍 인수를 사용하여 하이퍼파라미터도 지정할 수 있습니다.

위 정규화 식은 [2]에 제시된 식과 약간 다릅니다. alpha 값에 windowChannelSize를 곱하면 동일한 식을 얻을 수 있습니다.

최댓값 및 평균값 풀링 계층

최댓값 풀링 계층은 입력값을 직사각형 풀링 영역으로 나누고 각 영역의 최댓값을 계산하여 다운샘플링을 수행합니다. maxPooling2dLayer를 사용하여 최댓값 풀링 계층을 만듭니다.

평균값 풀링 계층은 입력값을 직사각형 풀링 영역으로 나누고 각 영역의 평균 값을 계산하여 다운샘플링을 수행합니다. averagePooling2dLayer를 사용하여 평균값 풀링 계층을 만듭니다.

풀링 계층은 다운샘플링을 위해 컨벌루션 계층 뒤에 오므로, 뒤에 오는 계층으로의 연결 개수가 줄어듭니다. 풀링 계층은 스스로 학습을 수행하지는 않으나 뒤에 오는 계층에서 학습할 파라미터의 개수를 줄여줍니다. 과적합을 방지하는 데도 도움이 됩니다.

최댓값 풀링 계층은 입력값의 직사각형 영역의 최댓값을 반환합니다. 직사각형 영역의 크기는 maxPoolingLayerpoolSize 인수에 의해 결정됩니다. 예를 들어, poolSize[2,3]이면 이 계층은 높이가 2이고 너비가 3인 영역의 최댓값을 반환합니다. 평균값 풀링 계층은 입력값의 직사각형 영역에 대한 평균 값을 출력합니다. 직사각형 영역의 크기는 averagePoolingLayerpoolSize 인수에 의해 결정됩니다. 예를 들어, poolSize가 [2,3]이면 이 계층은 높이가 2이고 너비가 3인 영역의 평균 값을 반환합니다.

풀링 계층은 입력값을 가로와 세로 방향으로 스텝 크기만큼 스캔합니다. 스텝 크기는 'Stride' 이름-값 쌍 인수를 사용하여 지정할 수 있습니다. 풀 크기가 스트라이드보다 작거나 같은 경우, 풀링 영역은 중첩되지 않습니다.

비중첩 영역(Pool Size와 Stride가 같음)에서, 풀링 계층의 입력값이 nxn이고 풀링 영역 크기가 hxh인 경우, 풀링 계층은 h만큼 영역을 다운샘플링합니다[6]. 즉, 컨벌루션 계층의 채널 1개에 대한 최댓값 풀링 계층 또는 평균값 풀링 계층의 출력값은 n/hxn/h이 됩니다. 중첩되는 영역에서, 풀링 계층의 출력값은 (Input Size – Pool Size + 2*Padding)/Stride + 1이 됩니다.

드롭아웃 계층

dropoutLayer를 사용하여 드롭아웃 계층을 만듭니다.

드롭아웃 계층은 주어진 확률에 따라 입력 요소를 무작위로 0으로 설정합니다.

이 계층은 훈련 시점에 드롭아웃 마스크 rand(size(X))<Probability로 주어진 확률에 따라(X는 계층 입력) 입력 요소를 무작위로 0으로 설정한 후에 나머지 요소를 1/(1-Probability)만큼 스케일링합니다. 이 연산은 각 반복 사이에 기본 네트워크 아키텍처를 효율적으로 변경시키고 네트워크가 과적합되지 않도록 합니다[7], [2]. 수치가 높을수록 훈련 중에 배제되는 요소가 많아집니다. 예측 시점에는 계층의 출력값이 입력값과 동일합니다.

최댓값 또는 평균값 풀링 계층과 비슷하게 이 계층에서는 학습이 이루어지지 않습니다.

완전 연결 계층

fullyConnectedLayer를 사용하여 완전 연결 계층을 만듭니다.

완전 연결 계층은 입력값에 가중치 행렬을 곱한 다음 편향 벡터를 더합니다.

컨벌루션 계층과 다운샘플링 계층 뒤에는 하나 이상의 완전 연결 계층이 옵니다.

이름에서 알 수 있듯이 완전 연결 계층의 모든 뉴런은 직전 계층의 모든 뉴런에 연결됩니다. 이 계층은 이전 계층이 이미지에서 학습한 특징(국소 정보)들을 조합하여 보다 큰 패턴을 식별합니다. 분류 문제의 경우, 마지막 완전 연결 계층은 특징들을 조합하여 이미지를 분류합니다. 이러한 동작으로 인해 네트워크의 마지막 완전 연결 계층의 outputSize 인수가 데이터 세트의 클래스 개수와 같게 됩니다. 회귀 문제의 경우, 출력 크기는 응답 변수의 개수와 같아야 합니다.

완전 연결 계층을 만들 때 관련 이름-값 쌍 인수를 사용하여 계층의 학습률과 정규화 파라미터를 조정할 수도 있습니다. 이러한 파라미터를 조정하지 않은 경우, trainNetworktrainingOptions 함수로 정의된 전역 훈련 파라미터를 사용합니다. 전역 및 계층 훈련 옵션에 대한 자세한 내용은 파라미터를 설정하고 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.

완전 연결 계층은 입력값에 가중치 행렬 W를 곱한 다음 편향 벡터 b를 더합니다.

계층의 입력값이 시퀀스인 경우(예: LSTM 네트워크), 완전 연결 계층은 각 시간 스텝에서 독립적으로 동작합니다. 예를 들어, 완전 연결 계층의 직전 계층이 크기가 DxNxS인 배열 X를 출력하는 경우, 완전 연결 계층은 크기가 outputSizexNxS인 배열 Z를 출력합니다. 시간 스텝 t에서 Z의 대응되는 요소는 WXt+b입니다. 여기서 Xt는 X의 시간 스텝 t를 나타냅니다.

출력 계층

소프트맥스 및 분류 계층

소프트맥스 계층은 입력값에 소프트맥스 함수를 적용합니다. softmaxLayer를 사용하여 소프트맥스 계층을 만듭니다.

분류 계층은 상호 배타적인 클래스를 갖는 다중 클래스 분류 문제에 대해 교차 엔트로피 손실을 계산합니다. classificationLayer를 사용하여 분류 계층을 만듭니다.

분류 문제에서 소프트맥스 계층과 그 뒤의 분류 계층은 마지막 완전 연결 계층 뒤에 와야 합니다.

출력 유닛 활성화 함수는 다음과 같은 소프트맥스 함수입니다.

yr(x)=exp(ar(x))j=1kexp(aj(x)),

여기서 0yr1이고 j=1kyj=1입니다.

다중클래스 분류 문제에서 소프트맥스 함수는 마지막 완전 연결 계층 뒤에 오는 출력 유닛 활성화 함수입니다.

P(cr|x,θ)=P(x,θ|cr)P(cr)j=1kP(x,θ|cj)P(cj)=exp(ar(x,θ))j=1kexp(aj(x,θ)),

여기서 0P(cr|x,θ)1이고 j=1kP(cj|x,θ)=1입니다. 그리고, ar=ln(P(x,θ|cr)P(cr)), P(x,θ|cr)은 주어진 샘플 클래스 r에 대한 조건부 확률이고, P(cr)은 클래스 사전 확률입니다.

소프트맥스 함수는 정규화된 지수라고 알려져 있으며, 로지스틱 시그모이드 함수의 다중클래스 일반화로 간주되기도 합니다 [8].

일반적인 분류 네트워크에서 분류 계층은 소프트맥스 계층 뒤에 와야 합니다. 분류 계층에서 trainNetwork는 다음과 같이 소프트맥스 함수에서 값을 가져와서 1-of-K 코딩 체계에 대한 교차 엔트로피 함수를 사용하여 각 입력값을 K개의 상호 배타적인 클래스 중 하나에 할당합니다[8].

loss=i=1Nj=1Ktijlnyij,

여기서 N은 샘플의 개수이고, K는 클래스의 개수이고, tij는 i번째 샘플이 j번째 클래스에 속한다는 표시자이고, yij는 클래스 j의 샘플 i에 대한 출력값인데, 이 경우에는 소프트맥스 함수에서 가져온 값이 됩니다. 즉, 이것은 네트워크가 i번째 입력값을 클래스 j에 연결할 확률입니다.

회귀 계층

regressionLayer를 사용하여 회귀 계층을 만듭니다.

회귀 계층은 회귀 문제의 손실을 평균 제곱 오차의 절반을 취한 값으로 계산합니다. 일반적인 회귀 문제에서 회귀 계층은 마지막 완전 연결 계층 뒤에 와야 합니다.

단일 관측값에 대해 평균 제곱 오차는 다음과 같이 표현됩니다.

MSE=i=1R(tiyi)2R,

여기서 R은 응답 변수의 개수이고, ti는 목표 출력값이고, yi는 i번째 응답 변수에 대한 네트워크의 예측값입니다.

이미지 및 sequence-to-one 회귀 네트워크의 경우, 회귀 계층의 손실 함수는 R에 의해 정규화되지 않은, 예측된 응답 변수의 평균 제곱 오차의 절반입니다.

loss=12i=1R(tiyi)2.

image-to-image 회귀 네트워크의 경우, 회귀 계층의 손실 함수는 R에 의해 정규화되지 않은, 각 픽셀에 대해 예측된 응답 변수의 평균 제곱 오차의 절반입니다.

loss=12p=1HWC(tpyp)2,

여기서 H, W, C는 각각 출력값의 높이, 너비, 채널 개수를 나타내고, p는 t와 y의 각 요소(픽셀)를 선형적으로 참조합니다.

sequence-to-sequence 회귀 네트워크의 경우, 회귀 계층의 손실 함수는 R에 의해 정규화되지 않은, 각 시간 스텝에 대해 예측된 응답 변수의 평균 제곱 오차의 절반입니다.

loss=12Si=1Sj=1R(tijyij)2,

여기서 S는 시퀀스 길이입니다.

훈련 시에 소프트웨어는 미니 배치에 있는 관측값에 대해 손실 평균을 계산합니다.

참고 문헌

[1] Murphy, K. P. Machine Learning: A Probabilistic Perspective. Cambridge, Massachusetts: The MIT Press, 2012.

[2] Krizhevsky, A., I. Sutskever, and G. E. Hinton. "ImageNet Classification with Deep Convolutional Neural Networks." Advances in Neural Information Processing Systems. Vol 25, 2012.

[3] LeCun, Y., Boser, B., Denker, J.S., Henderson, D., Howard, R.E., Hubbard, W., Jackel, L.D., et al. ''Handwritten Digit Recognition with a Back-propagation Network.'' In Advances of Neural Information Processing Systems, 1990.

[4] LeCun, Y., L. Bottou, Y. Bengio, and P. Haffner. ''Gradient-based Learning Applied to Document Recognition.'' Proceedings of the IEEE. Vol 86, pp. 2278–2324, 1998.

[5] Nair, V. and G. E. Hinton. "Rectified linear units improve restricted boltzmann machines." In Proc. 27th International Conference on Machine Learning, 2010.

[6] Nagi, J., F. Ducatelle, G. A. Di Caro, D. Ciresan, U. Meier, A. Giusti, F. Nagi, J. Schmidhuber, L. M. Gambardella. ''Max-Pooling Convolutional Neural Networks for Vision-based Hand Gesture Recognition''. IEEE International Conference on Signal and Image Processing Applications (ICSIPA2011), 2011.

[7] Srivastava, N., G. Hinton, A. Krizhevsky, I. Sutskever, R. Salakhutdinov. "Dropout: A Simple Way to Prevent Neural Networks from Overfitting." Journal of Machine Learning Research. Vol. 15, pp. 1929-1958, 2014.

[8] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.

[9] Ioffe, Sergey, and Christian Szegedy. "Batch normalization: Accelerating deep network training by reducing internal covariate shift." preprint, arXiv:1502.03167 (2015).

참고 항목

| | | | | | | | | | | | | | |

관련 항목


[1] Image credit: Convolution arithmetic (License)