😶 초록 (Abstract)

- 최첨단성능을 달성하기 위해 Rectified activation units (rectifiers)는 필수적이다.
2가지 관점에서 image classification에 rectifier신경망을 도입한다.

① Parametric Rectified Linear Unit (PReLU)
  - overfitting의 적은 위험. &. 거의 계산적비용이 0에 수렴
  - Leaky ReLU처럼 작은 음의 기울기를 도입
  - 다만 차이점은 Leaky ReLU처럼 고정된 기울기가 아닌, 기울기의 학습이 가능하다.
  - 이는 신경망이 각 뉴런에 대해 최적의 음의 기울기를 학습할 수 있음을 의미

② Rectifier non-linearity를 특히나 고려하는 강력한 초기화방법의 도출
  - 이런 방법들을 통해 더 깊고 넓은 신경망과 매우 깊은 rectified model을 가능하게 한다.

PReLU에 기초하여 매우 높은 결과들을 달성하며 인간수준의 성능을 능가하는 성과를 얻었다.

 

 

1. 서론 (Introduction)

 CNN은 다양한 시각적 인식작업에서 효과적임을 증명하였다.
인식분류에 대해 성능향상의 엄청난 증거에 대해 강력한 모델에 대한 전략을 위해, 2가지 기술적 가이드라인을 제시한다.

① 증가된 복잡성, 확대된 width, 더 작은 stride, 새로운 non-linear activation, 정교한 층 설계로 training data를 fit한다.
 반대로 효과적인 정규화(regularization), 공격적인 데이터강화 및 대규모 data로 더 나은 일반화(generalization)이 달성된다.

- 이런 발전과정에서, rectifier neuron, 예를 들어 ReLU는 최근 심층신경망 성공의 핵심 중 하나이다.
이는 training에서 수렴을 가속화하고 기존의 "S자 unit"보다 더 나은 결과를 보여준다.

- 본 논문에서는 특히 정류기(rectifier)에 의해 구동되는 2가지 측면에서 신경망을 조사한다.
① PReLU: ReLU의 새로운 generalization
  - 이 활성화 함수는 정류기의 매개변수를 적응력있게 학습하고 무시할 수도 있는 추가적인 계산으로 정확도를 향상시킨다.

 매우깊은 rectified모델 훈련의 어려움

  - 정류기의 비선형성(ReLU / PReLU)를 명시적으로 모델링, 이론적 초기화방법을 도출.
  - 처음부터 직접 훈련된 심층신경망의 수렴을 도와 강력한 신경망구조의 탐색이 가능한 유연성확보가 가능.


- 우린 지금까지 보고된 바에 의하면, 처음으로 인간수준의 인식(5.1%)을 넘어서는 결과를 만들어냈다.

 

 

2. Approach

2.1. Parametric Rectifiers. (PReLU)

 Definition
- 공식분석을 하면, activation function을 다음과 같이 정의한다.

이때, yi는 i번째 channel의 비선형활성화함수 f의 입력값이다.
ai의 i는 다양한 channel에 걸쳐 비선형활성화함수(nonlinear activation)를 허용한다는 것을 나타낸다.

ai = 0일 때, 이것은 ReLU가 된다.
이때, ai가 학습가능한 파라미터라면, Eqn.(1)에서 언급한 바와 같이 Parametric ReLU가 된다.

또한 위의 식은 아래의 식과 동치이다.

만약 ai가 작고 고정된 값이라면, PReLU는 LReLU, 즉 Leaky ReLU가 된다. (ai = 0.01)
- LReLU는 zero gradient 즉, 기울기가 0이 되는 것을 피하기 위해 사용된다.
다만, LReLU가 ReLU에 비해 정확도에 미치는 영향이 미미하다는 것을 보여준다.[Rectifier nonlinearities improve neural network acoustic models. In ICML, 2013.]

[PReLU]
- LReLU와 달리, 우리가 사용하는 PReLU의 경우, 매우 작은 extra parameter를 사용한다.
- 이때, extra parameter수 = channel의 전체 수이기에 총 가중치 수를 고려하면 무시할만하다.

[channel-shared variant]
- 위의 activation function공식에서 계수는 한층의 모든 channel과 공유된다.
- 이런 변형은 각 층에 하나의 extra parameter만 도입한다.




• Optimization 

- PReLU는 역전파로 훈련되고, 다른 층과 동등하게 최적화된다.
- {ai} 공식의 update은 chain-rule을 기반으로 하며 하나의 층에 해당하는 ai의 기울기 공식은 아래와 같다.
- Ɛ은 목적함수(objective function)을 의미하며한다.

- 위의 식은 심층으로부터의 기울기전파 (gradient propagate)를 나타내는데, 활성화함수의 기울기를 의미 식이다.






 Comparision Experiments

 - 우리는 14개의 가중치 레이어를 사용하여 깊지만 효율적인 모델에 대해 비교를 수행했다.(표 1)
이 모델이 실험을 실현 가능하게 할 뿐만 아니라 매우 심층적인 모델의 범주를 나타내기에 충분하기에 선택한다.


- 기본적으로, 컨볼루션(convolutional) 계층과 처음 두 개의 FC.layer에 적용된 ReLU로 이 모델을 훈련시킨다.
10-view testing을 사용해 ImageNet 2012에서 top-1 and top-5 error
는 33.82% 및 13.34%이다(표 2).

- 그후 모든 ReLU를 PReLU로 대체하여 동일한 아키텍처를 처음부터 training한다(표 2).
top-1 error는 32.64%로 감소하며 이는 기존의 ReLU에 비해 1.2% 증가한 것이다.
표 2는 channel-wise / channel-shared PReLU가 서로 비슷한 성능을 발휘함을 보여준다.
channel-shared PReLU의 경우 ReLU와 비교하여 13개의 추가적인 extra parameter만 도입한다.
그러나 이 작은 수의 extra-parameter는 기존에 비해 1.1%만큼 뛰어넘음을 입증되는 중요한 역할을 한다.
이는 활성화 함수의 꼴을 적응력있게 학습하는 것의 중요성을 의미한다.


- 표 1은 또한 각 계층에 대한 PReLU의 학습된 계수를 보여준다.
표 1에는 두 가지 흥미로운 현상이 있다.

① 첫째, conv1의 계수는 0보다 생각보다 큰 (0.681 및 0.596)값을 갖는다.
  - conv1의 filter는 edge 및 texture detector 같은 Gabor 유사 필터가 대부분이다
  - 즉, 학습된 결과는 filter의 positive / negative response가 모두 반영됨을 보여준다.
  - 제한된 수의 filter(예: 64)를 고려할 때, 이는 저수준의 정보를 활용하는 더 경제적인 방법이라고 생각한다.

② 둘째, channel-wise의 경우, 일반적으로 deeper conv.layer는 더 작은 계수를 갖는다.
  - 이는 activation이 점점 더 깊은 곳에서 점진적으로 "더 비선형적"이 된다는 것을 의미한다.
  - 즉, 학습된 모델은 초기 단계에서 더 많은 정보를 유지하는 경향이 있고 더 깊은 단계에서 더 차별화된다.

 

 

2.2. Initialization of Filter Weights for Rectifiers. (deep rectifier net)


 Foward Propagation Case


 Back Propagation Case


 Discussions
 





 Comparision with "Xavier" Initialization

 

 

2.3. Architectures

위의 조사는 다음의 Architecture에 대한 설계지침을 제공한다. 

- 우리의 baseline은 (표 3)의 19층 모델(A)이다. 더 나은 비교를 위해, 또한 VGG-19을 나열한다.
우리의 모델 A는 VGG-19에서 다음과 같이 수정된다.
  i) 첫 번째 층에서 filter size = 7×7와 strides = 2를 사용.
  ii) 가장 큰 2개의 특징맵(224, 112)의 다른 3개의 conv.layer를 더 작은 특징맵(56, 28, 14)으로 이동
      이때, 시간 복잡도(표 3, 마지막 행)는 더 깊은층이 더 많은 filter를 갖기에 거의 변하지 않는다.
  iii) 첫 FC.layer 이전에 공간 피라미드 풀링, (SPP)을 사용한다.
      이때, 피라미드는 총 63개의 bins에 대해 bin의 수가 7×7, 3×3, 2×2, 1×1인 4개의 level을 갖는다.


- 우리의 모델 A가 VGG에 보고한 VGG-19의 결과보다 더 나은 결과를 가지고 있다.
다만, 우리의 모델 A가 VGG-19보다 더 나은 아키텍처라는 증거는 없다는 것을 주목할 필요가 있다.
더 적은 규모의 확대를 사용한 이전 실험에서, 우리는 모델 A와 (SPP 및 초기화와) 재현된 VGG-19가 비교 가능하다는 것을 관찰했다.
A 모델을 사용하는 주된 목적은 더 빠른 실행속도를 위한 것이다.
시간 복잡도가 동일할 때, 큰 특징맵의 conv.layer의 실제 실행 시간은 작은 특징맵의 conv.layer보다 느리다.
4 GPU의 구현에서 모델 A는 mini-batch당 2.6초(128),
재현된 VGG-19는 4개의 Nvidia K20 GPU에서 3.0초 걸렸다.


- 표 3에서, 모델 B는 A의 더 깊은 버전으로 세 개의 extra conv.layer를 갖는다.
우리의 모델 C는 B의 더 넓은 버전(filter가 더 많음)으로 width는 복잡성을 상당히 증가시킨다.
이때, 시간 복잡도는 B의 약 2.3배이다(표 3, 마지막 행).
4개의 K20 GPU에서 A/B를 교육하거나 8개의 K40 GPU에서 C를 교육하는 데 약 3-4주가 걸린다.


- 깊이가 더 깊어진 모델은 정확도가 감소하거나 심지어 저하(degradation)되기 때문에 깊이 대신 모델의 폭(width)을 늘린다.
소규모 모델에 대한 최근 실험에서, 깊이를 공격적으로 증가시키면 포화되거나 정확도가 저하된다는 것이 밝혀졌다.
VGG 논문에서, 16, 19층 모델은 비교적 성능이 좋지만 
[M.D.Zeiler, M.Ranzato, R.Monga et. al]의 음성 인식 연구에서, 딥 모델은 8개 이상의 숨겨진 레이어(모두 fc)를 사용할 때 성능이 저하되었는데, 우리는 ImageNet의 더 큰 모델에서도 유사한 저하가 발생할 수 있다고 추측한다.

일부의 극도로 심층적인 모델의 training에서(표 3의 B에 3~9개의 레이어가 추가됨) training 및 test error rate가 처음 20epoch에서 모두 저하되었음을 발견했다
(다만, 제한된 시간으로 끝까지 실행되지 않았기에 이런 크고 지나치게 심층적인 모델이 궁극적으로 저하될 것이라는 확실한 증거는 아직은 없다).
이런 성능 저하의 가능성으로 대형 모델의 깊이를 더 이상 증가시키지 않기로 선택했다.


- 반면, 소규모 dataset에 대한 최근의 연구는 conv.layer의 parameter수가 증가함에 따라 정확도가 향상되어야 한다고 제안하는데, 이 숫자는 깊이와 너비에 따라 달라진다.
그래서 우리는 더 높은 용량의 모델을 얻기 위해 conv.layer의 width를 늘렸다.

- 표 3의 모든 모델은 매우 크지만, 심각한 overfitting은 관찰되지 않았는데, 아래에서 말할 것 처럼 전체 training에 걸쳐 사용되는 공격적인 data augmentation 덕분이라 생각한다..

 

 

 

 

 

3. Implementation Details

  Training
 - 우리의 훈련 알고리즘은 대부분 [AlexNet, VGGNet 등]을 따른다.
 resize된 image(shorter side is s, 픽셀당 평균의 차가 진행된 224x224 crop이 무작위로 샘플링됨) 
 scale은 VGG에 나오는 [256, 512] 범위에서 무작위로 jittering 된다.
 표본의 절반이 무작위로 horizontal flip이 진행되고 색상도 변경된다.



 - 미세 조정(fine-tuning) 중에만 scale jittering을 적용하는 VGG와 달리 training의 시작부터 적용한다.
또한, 얕은 모델을 사용하여 더 깊은 모델을 초기화하는 VGG와 달리, 
2.2절에 설명된 초기화 방법을 사용하여 매우 깊은 모델을 직접 훈련한다(Eqn.(14) 방정식을 사용).
training의 시작부터 끝까지 poor local optima를 피할 수 있어서 정확도를 향상시키는 데 도움이 될 수 있었다.



[중요한 나머지 hyper parameter 설정]
weight decay = 5e-4 (= 0.0005)
momentum = 0.9이다.
Dropout(0.5)는 처음 두 개의 FC.layer에서만 사용.
mini-batch size = 128로 고정.
learning rate = 1e-2, 1e-3 및 1e-4으로 오류가 발생할 때 전환.
모델 별 총 epoch수는 약 80.


 Testing
 - 우리는 SPP-net 논문에서 사용된 "특징맵에 대한 multi-view test" 전략을 사용한다.
VGG처럼 고밀도의 sliding window 방식을 사용해 이 전략을 추가로 개선한다.


 먼저 resize된 전체 image에 conv.layer를 적용, 최종 conv.특징맵을 얻는다.
  - 특징맵에서 각 14x14 window는 SPP-layer를 사용해 Pooling한다. 

 그 후, FC.layer가 Pooling된 특징에 적용되어 score를 계산한다.
  - 이는 horizontal flip image에서도 수행된다.
  - 모든 고밀도의 sliding window score는 평균화되며 그 후 여러 scale로 결과를 추가로 결합한다.


 Multi-GPU Implementation
 - 우리는 여러 GPU에 대한 병렬 훈련을 위해 AlexNet방식의 간단한 변형을 채택한다.
conv.layer에 "데이터 병렬화 (data parallelism)"를 채택한다.
GPU들은 제1 FC층 이전에 동기화된되며, FC층의 순전파, 역전파가 단일 GPU에서 수행됩니다.
즉, FC층의 계산을 병렬화하지 않습니다. (FC층의 시간적 비용이 낮기에 병렬화가 필요가 없다.)
이는 AlexNet의 "모델 병렬화"보다 더 간단한 구현으로 이어진다.
게다가, 모델 병렬화는 필터 응답의 통신으로 인해 일부 오버헤드를 초래하며, 단일 GPU에서 FC층을 계산하는 것보다 빠르지 않다.


 - 우리는 카페 라이브러리의 수정에 대해 위의 알고리즘을 구현하며 정확도가 떨어질 수 있기에 mini-batch size(128)를 늘리지 않는다.
본 논문에서는 대형 모델의 경우, 4개의 GPU를 사용하여 3.8배의 속도 향상과 8개의 GPU를 사용하여 6.0배의 속도 향상을 관찰했다.

 

 

4.Experiments on ImageNet


 Comparision between ReLU. &. PReLU
 - 표 4는 대형 모델 A에서 ReLU와 PReLU를 비교한다. 이때, channel-wise버전에 PReLU를 사용한다.
공정한 비교를 위해 ReLU/PReLU 모델은 동일한 총 epoch 수를 사용해 training되며 learning rate도 동일한 epoch수를 실행한 후 전환된다.


 - 표 4는 세 가지 scale와 multi-scale간의 조합의 결과를 보여준다.
 jittering range[256, 512]에 있을 수 있기 때문에 최고의 single scale은 384이다.
multi-scale 조합의 경우, PReLU는 ReLU에 비해 top-1 오류를 1.05%, top-5 오류를 0.23% 감소시킨다.
이는 표 2와 표 4의 결과는 일관되게 PReLU가 소형 및 대형 모델을 모두 향상시킴을 보여준다.
이때, 이러한 향상은 계산 비용이 거의 없이 얻어진다.





 Comparision of Single-model Results
 - 다음으로 단일 모델 결과를 비교한다.
먼저 표 5에서 10-view test result를 보여주는데, 여기서 각 view는 224-crop이다.
VGG-16의 10-view result는 test를 기반으로 최고의 결과는 7.38%이다(표 5). 


 - 표 6은 multi-scale and multi-view나 dense 
test를 사용해 얻은 Single-model 결과의 비교를 보여준다.
결과는 MSRA로 표시되며 기본 모델(A+ReLU, 6.51%)은 VGG-19에 대해 보고된 최고의 기존 단일 모델 결과인 7.1%보다 이미 상당히 좋으며 이러한 이득이 주로 얕은 모델을 사전 훈련할 필요가 없는 종단 간 훈련 때문이라고 생각한다.


 - 또한, 우리의 최고 단일 모델(C, PReLU)은 5.71%의 top-5 error를 갖는데, 이 결과는 이전의 모든 다중 모델 결과보다 훨씬 더 우수하다(표 7).
A+PReLU와 B+PReLU를  비교하면, 우리는 19층 모델과 22층 모델이 비교적 성능이 좋다는 것을 알 수 있다.
반면에 폭을 늘리면(C vs. B, 표 6) 정확도가 향상될 수 있는데, 이는 모델이 충분히 깊으면 폭이 정확도의 필수 요소가 된다는 것을 시사한다.





 Comparision of Multi-model Results
 - 우리는 표 6의 모델을 포함하여 6개의 모델을 결합한다.
당분간 우리는 Architecture C만으로 모델을 훈련했으며 다른 모델들은 C보다 상당한 격차의 낮은 정확도를 가지고 있다.
우리는 더 적은 수의 강력한 모델을 사용함으로써 더 나은 결과를 얻을 수 있다고 추측한다.


 - 다중 모델 결과는 표 7에 나와 있는데, 우리의 결과는  testset에서 4.94%의 top-5 error를 갖는다.
testset의 label이 게시되지 않아서 ILSVRC 서버에 의해 평가된다.
우리의 결과는 ~26%의 상대적 개선을 나타내는 ILSVRC 2014 우승작(GoogLeNet, 6.66%)보다 1.7% 더 좋다.
이는 또한 최근 결과에 비해 상대적으로 최대 17%의 개선되었다(Baidu, 5.98%).





 Analysis of Results
 - 그림 4는 우리의 방법으로 성공적으로 분류된 몇 가지 validation image의 예를 보여준다.
정확하게 예측된 label 외에도 top-5 결과의 다른 네 가지 예측에도 주의를 기울인다.
이 네 개의 label 중 일부는 다른 object의 multi-object image이다.
예를 들어, "말-카트" 이미지(그림 4, 행 1, 콜 1)는 "mini-bus"를 포함하고 알고리즘에 의해 인식된다.
이 네 가지 label 중 일부는 유사한 class 사이의 불확실성 때문이다.
예를 들어, "coucal" 이미지(그림 4, 행 2, 콜 1)는 다른 조류 종의 라벨을 예측했다.


 - 그림 6은 testset의 결과(평균 4.94%)의 클래스당 top-5 error를 오름차순으로 표시한다.
우리의 결과는 113개 클래스에서 top-5 error가 0개로 이 클래스의 이미지는 모두 올바르게 분류된다.
top-5 error 가장 높은 3개 계층은 'letter opener'(49%), 'spotlight'(38%), 'restaurant'(36%)이다.
이 오류는 multiple/small object나 large class내의 분산(variance)으로 인해 발생한다.
그림 5는 이 세 클래스에서 우리의 방법에 의해 잘못 분류된 일부 예시 이미지를 보여준다.
단, 예측된 레이블 중 일부는 여전히 의미가 있다.


 - 그림 7에서, 우리는 우리의 결과(평균 4.94%)와 ILSVRC 2014(평균 8.06%)에서 우리의 경쟁 결과(평균 8.06%) 사이의 top-5 error rate의 class 당 차이를 보여준다. error rate은 824개 클래스에서 감소하고 127개 클래스에서 변경되지 않으며 49개 클래스에서 증가한다.




 Comparision with Human Performance from [https://arxiv.org/abs/1409.0575]
 - Russakovsky의 연구는 인간의 성능이 ImageNet에서 5.1%의 top-5 error를 달성한다했다.
이는 관련 클래스의 존재를 더 잘 알기 위해 validation image에 대해 잘 알고있는 인간에 의해 달성된다.
test image에 주석을 달 때 인간에게 특별한 인터페이스가 제공되며, 각 클래스 제목에는 13개의 extra train image row가 함께 제공된다.


 - 우리의 결과(4.94%)는 보고된 인간 수준의 성과를 초과한다.
우리가 아는 한, 우리의 결과는 이 시각적 인식 과제에서 인간을 능가하는 최초의 발표된 사례이다.
fine-grained recognition 및 class uwareness은 인간의 오류의 2가지 주요 유형이다.
Russakovsky의 연구에 따르면, 알고리즘은 fine-grained recognition(예: 데이터 세트에서 120종의 개)에서 더 나은 작업을 수행할 수 있다.
그림 4의 두 번째 행은 "coucal", "komondor" 및 "yellow lady's slipper"와 같이 우리의 방법으로 성공적으로 인식된 몇 가지 세밀한(fine-grained) 물체의 예를 보여준다.
인간은 이 물체들을 새, 개, 꽃으로 쉽게 인식할 수 있지만, 대부분의 인간이 그들의 종을 말하는 것은 사소한 일이 아니다.
부정적인 측면에서, 우리의 알고리즘은 특히 문맥 이해 또는 높은 수준의 지식이 필요한 경우(예: 그림 5의 "spotlight" 이미지)에 여전히 인간에게는 어렵지 않은 경우에도 실수를 한다.


- 우리의 알고리즘은 이 특정 dataset에서 우수한 결과를 산출하지만, 이것이 일반적으로 물체 인식에서 인간의 비전을 능가한다는 것을 나타내지 않는다.
Pascal VOC 과제 같은 기본적인 Object category(즉, 일상 생활에서 일반적인 객체 또는 개념)를 인식할 때, 기계는 여전히 인간에게 사소한 경우에도 명백한 오류를 가지고 있다.
그럼에도 불구하고, 우리는 우리의 결과가 시각적 인식에서 인간 수준의 성능과 일치하는 기계 알고리듬의 엄청난 잠재력을 보여준다고 믿는다







 

 

 

🧐 논문 감상_중요개념 핵심 요약

"Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification"
Rectified Linear Unit, 일명 ReLU에 대해 심층적으로 탐구한 후 ReLU를 소개하는 연구 논문으로 이 논문은 ReLU와 그 변형 함수들 즉, 비포화 비선형성(non-saturating non-linearity)의 함수들의 사용을 제안한다.

 

[핵심 개념]

1. 이 논문에서는 Sigmoid나 tanh 같은 다른 포화 비선형성(saturating non-linearity) 활성화 함수에 비해 심층 신경망 훈련을 개선하는 것으로 밝혀진 ReLU(Rectified Linear Unit) 활성화 함수를 소개했다.

2. 이 논문은 ReLU를 사용하면 다른 활성화 함수를 사용하는 신경망에 비해 교육 중에 더 빠른 수렴, ImageNet classification 작업에서 더 나은 일반화(generalization) 성능, 더 낮은 오류율로 이어질 수 있음을 보여주었다

3. 드롭아웃 정규화 및 배치 정규화를 포함하여 훈련 프로세스에 대한 몇 가지 수정 사항을 제안하여 심층 신경망의 성능을 더욱 향상시켰다.

4. ReLU, Dropout 및 Batch Normalization의 조합은 심층 신경망을 구축하기 위한 일반적인 방법이 되었으며 이후 많은 작업에서 사용되었다.

5. 이 논문은 보다 강력하고 효율적인 딥러닝 모델의 구축하기 위한 로드맵을 제공하여 심층 신경망 훈련을 위한 활성화 함수 및 기타 기술의 중요성을 보여주었다.

전반적으로 "Delving Deep into Rectifiers" 논문은 딥 러닝의 최신 기술을 발전시키는 데 중요한 역할을 했으며 이 분야에 지속적인 영향을 미쳤다.

 

 

😶 초록 (Abstract)

- ImageNet에서 120만개의 고해상도 image를 대상으로 1000개의 클래스를 분류하는 문제에 대해 좋은 결과를 내었음

- 6000만개의 parameter와 650,000여개의 뉴런 [5개의 CONV 층(maxpool), 3개의 FullyConnected 층(마지막은 1000개 클래스를 구분하는 softmax층)]으로 구성
- training을 빨리 하기 위해 포화되지 않은(non-saturating) 뉴런들과 효과적인 GPU를 사용
- overfitting을 줄이기(reduce)위해 dropout(매우 효과적으로 증명된 regularized method)을 사용

- ILSVRC-2012 대회에서 2등인 26.2%에 비해 15.3%의 error rate를 성취하였음
(Imagenet Large-scale Visual Recognition Challenge)

 

 

 

1. 서론 (Introduction)

- 현재 사물인식에서 기계학습(machine learning)방식의 사용은 필수적이다.
- 이를 위해 다음과 같은 방법으로 향상을 시키는데, 더 많은 데이터셋, 강력한 모델 및 더 좋은 과적합을 막는 기술등이 있다.
과거, MNIST와 같은 데이터들은 적은 양으로도 가능하였지만 현실에서는 상당히 다양하며(considerable variablility) 따라서 더 많은 training set을 필요로 하는 것은 필수불가결한 사항이 되어버렸다.

- 수많은 사물을 구분하려면 많은 학습능력을 지녀야 한다.
하지만, 사물인식의 거대한 복잡도의 문제는 ImageNet같은 거대한 dataset에서 명시될 수 없다는 점이다.

- 학습능력은 depth와 breadth를 다양화하면서 조정할 수 있는데, feedforward neural network와 비교했을 때, CNN은 더 적은 연결과 parameter를 갖기에 train하기 쉽고 이론적으로 최상의 효과를 약간의 단점만으로 낼 수 있다.

 

 

 

2. The Dataset

- ImageNet을 이용했는데, ImageNet은 22,000개의 카테고리, 1500만개의 라벨링된 고해상도의 사진으로 이루어져 있다.
- 따라서 image를 down-sample하여 해상도를 256X256으로 맞춰 image를 rescale하였다.
- raw RGB의 pixel로 train을 진행하였다.

 

 

 

3. The Architecture

 

3.1 ReLU Nonlinearity

- Deep CNN에서 tanh unit의 사용보다 ReLU의 사용이 훨씬 빠르다는 것을 알 수 있다.
이런 빠른 학습은 큰 데이터셋을 갖는 large한 모델에 매우 훌륭한 영향을 준다.
위 그림에 대한 설명이다.
- 실선: 4개의 Conv층 (with relu), 6배 더 빠르다.
- 점선: 4개의 Conv층 (with tanh)
- ReLu는 지속적인 학습의 진행으로 saturating neuron보다 더 빠르게 학습한다.
우리는 여기서 미리 포화된(large neural net)뉴런 모델을 굳이 경험할 필요가 없음을 알 수 있다.

 

 

3.2 Training on Multiple GPUs

- single GTX 580 GPU 코어는 메모리가 3GB이기에 훈련가능한 신경망의 최대크기가 제한된다.
- 따라서 2개의 GPU에 신경망을 흩어뜨리는 GPU병렬화(parallelization scheme)를 이용한다.
- 이때, 2개의 GPU net이 1개의 GPU net보다 훈련에 더 적은 시간이 걸리고 오류율도 1.2~1.7%정도 감소시켰다.

 

 

3.3 Local Response Normalization

- ReLU는 포화(saturating)방지를 위한 입력 정규화를 필요로 하지 않는 바람직한 특성을 갖는다.
- ReLU는 local 정규화 일반화에 도움이 된다.

- 위의 식은 다음과 같이 해석된다.

 
kernel i의 위치 (x,y)를 적용해 계산된 뉴런의 activity이다.
여기에 ReLU의 비선형성을 적용한다.
 
이때, 합은 동일한 공간위치에서 n개의 '인접한(adjecent)' kernel map에 걸쳐 실행된다. (N은 layer의 총 kernel수)
kernel map의 순서는 training이 시작하기 전에 임의로(arbitrary) 결정된다.
이런 반응정규화(response normalization)의 종류는 영감을 받은(inspired) 측면억제(lateral inhibition)형태를 구현,
이를 통한 다른 커널의 사용으로 계산된 뉴런 출력간의 large activity에 대한 경쟁(competition)을 생성한다.

상수 k, n, α, β는 validation set을 사용하여 값이 결정되는 hyper-parameter로 각각 k = 2, n = 5, α = 10-4, β = 0.75를 사용하며 특정 layer에서 ReLU의 비선형성을 적용한 후 이 정규화를 적용했다(3.5 참조).

Jarrett의 local contrast normalization과 비슷하지만 mean activity를 빼지(subtract)않았기에
우리의 이 정규화를 'brightness normalization'이라 더 장확하게 부를 것이다. 

 

 

3.4 Overlapping Pooling

CNN에서의 pooling layer는 동일한 kernel map에서 '인접한(adjacent)' 뉴런 그룹의 output을 summarize한다.
보편적으로 adjacent pooling으로 요약되면 unit들이 겹치지 않는다.
즉, pooling layer는 픽셀들 사이에 s만큼의 간격을 둔 pooling unit들의 grid로 구성되며, 각각은 pooling unit의 위치를 중심으로 한 크기(zxz)의 neighbor를 요약한다.
만약 위에서의 s를 s = z로 설정하면 CNN에서 일반적으로 사용되는 보편적인 local pooling을 얻을 수 있으며, s < z를 설정하면 overlapping pooling을 얻을 수 있다.

이때문에 전반적인 신경망에서 s=2나 s=3으로 사용하는 것이다.
또한 일반적인 training에서는 overlapping pooling이 있는 모델이 모델을 과적합하기가 약간 더 어렵다는 것을 알 수 있다

 

 

 

3.5 Overall Architecture

총 8개의 weight를 갖는 layer로 구성되어 있다.
5개의 CONV (convolution layer)
- 3개의 FC (Fully-connected layer) + 마지막은 1000개의 클래스를 구분하는 softmax층

이 모델은 다항식 logistic regression 분석목표를 최대화 하는데, 이는 예측분포(prediction distribution)하에서 올바른 label의 log확률(log-probability)의 training cases에 대한 평균(average)을 최대화하는 것과 같다.

2, 4, 5번째의 CONV의 kernel은 동일한 GPU에 있는 이전 layer의 kernel map에만 연결된다. (아래그림 참조)
3번째 CONV는 2번째 CONV의 모든 kernel map들과 연결되며 완전히 연결된 층의 뉴런은 이전 층의 모든뉴런들과 연결된다.

response-normalization층들은 1, 2번째 CONV를 따르며 3.4절에 기술된 종류의 MaxPooling은 response-normalization layer와 5번째 CONV layer를 모두 따른다.

ReLU의 비선형성은 모든 CONV와 FC의 출력에 적용되며 첫 번째 CONV은 11×11×3의 96개의 kernel을 가지며
224×224×3(150,528 차원)의 input image를  stride=4로 filtering을 진행한다.
(신경망의 뉴런수는 다음과 같다. 150,528-253,440–186,624–64,896–64,896–43,264–4096–1000)

2번째 CONV는 첫번째 CONV의 출력을 입력으로 받아 5×5×48의 256개의 kernel로 filtering을 진행하며
3번째 CONV는 3×3×256의 384개의 kernel을 두번째 CONV output과 연결하고
4번째 CONV는 3×3×192의 384개의 kernel로,
5번째 CONV는 3×3×192의 256개의 kernel로 filtering하며
3, 4, 5번째 CONV는 어떠한 간섭(intervening)pooling과 normalization layer없이 서로 연결된다.

또한 FC (Fully-Connected layer)는 각각 4096개의 뉴런을 갖는다.

 

 

 

 

 

 

4. Reducing Overfitting

4.1 Data Augmentation

① image translation. &. horizontal reflection
- image translation:
한 도메인의 입력 이미지를 다른 도메인의 해당 이미지로 변환하는 것
- 이 방법을 통해 train에 상호의존적일 수 있고 이런 scheme이 없었다면 overfitting의 어려움을 겪었을 것이다.

② altering intensities of the RGB channels
- ImageNet의 training set 전체의 RGB픽셀값에 PCA를 수행
- 각 train image에 해당 eigenvalues(고유값)에 비례하는 크기와 평균 0, 표준편차 0.1을 갖는 zero-mean Gaussian 분포(정규분포)에서 도출된 random변수를 곱해 나온 주요 구성요소의 배수를 추가한다.

- 따라서 RGB 픽셀 Ixy =[IR , IG , IB ]T에 아래 값을 추가한다. 
- 이때, pi와 yi는 각각 RGB pixel의 3x3 covariance(공분산)행렬의 i번째 eigenvector와 eigenvalue이며 αi는 이전에 설명한  random 변수이다. 각 αi는 해당 이미지가 다시 훈련에 사용될 때까지 특정 훈련 이미지의 모든 픽셀에 대해 한 번만 그려지며, 이 시점에서 다시 그려진다.

 

 

4.2 Dropout

- Dropout은 전진의 기여도를 없애고 역전파를 관여하지 못하게 하는 방식으로 많고 다른 뉴런들의 부분집합을 random하게 결합시키는데 유용하다.
- 0.5의 비율로 FC의 처음 2개의 layer에 적용하였으며 dropout이 없으면 상당한 과적합을 보여주었다.

 

 

 

 

 

5. Details of Learning

- Optimizer: SGD (Stochastic  Gradient  Descent), momentum = 0.9,  weight decay = 0.0005
- Batch size: 128

i는 반복횟수, v는 momentum변수, ε은 Learning rate(학습율),

<-- wi에서 평가된 w의 미분(derivative)의 i번째 batch Di의 평균으로 Loss function의 기울기을 의미한다.


<초기화>
표준편차가 0.01인 zero-mean Gaussian 분포로 각 층의 weight를 초기화
2,4,5 CONV층과 FC층은 상수 1로 , 나머지 층은 0으로 bias를 초기화

validation error가 개선되지 않으면 학습율을 10으로 나눔 (0.01로 초기화 하였으며 종료전에 3배정도 감소하였음)

 

 

6. Results

- ILSVRC-2010에 대한 결과의 요약은 다음과 같다.

신경망은 37.5%와 17.0%5의 상위 1위와 상위 5위의 테스트 세트 오류율을 달성하는 것을 볼 수 있다.

ILSVRC-2010 경쟁에서 달성된 최고의 성능은 서로 다른 기능에 대해 훈련된 6개의 spase coding 모델에서 생성된 예측을 평균화하는 접근 방식으로 47.1%와 28.2%였다.
그 이후 가장 잘 발표된 결과는 Fisher Vectors (FVS)에 대해 훈련된 두 분류기의 예측을 평균화하는 접근 방식으로 45.7%와 25.7%였으며 두 가지 유형의 조밀하게 샘플링된 특징으로부터 계산되었다.

- 또한  ILSVRC-2012 대회에서의 결과는 다음과 같다.

단락(paragraph)의 나머지 부분에서는 검증 및 테스트 오류율이 0.1% 이상 차이가 나지 않기 때문에 서로 교환하여 사용한다.


이 논문에서 설명한 CNN은 다음과 같은 성과를 거두었다
상위 5위 이내의 오류율 18.2%. 5개의 유사한 CNN의 예측을 평균하면 16.4%의 오류율을 얻었다.

- 마지막 pooling layer에서 추가적으로 6차 컨볼루션 레이어가 있는 CNN 하나를 교육하여 ImageNet Fall 2011 release (15M images, 22K categories)를 분류한 다음 ILSVRC-2012에서 "미세 조정(fine-tuning)"하면 16.6%의 오류율을 얻을 수 있다. 앞서 언급한 5개의 CNN으로 2011년 가을 전체 릴리스에서 사전 훈련된 2개의 CNN의 예측을 평균하면 15.3%의 오류율을 얻을 수 있다. 두 번째로 우수한 콘테스트 항목은 다양한 유형의 조밀하게 샘플링된 기능에서 계산된 FV에 대해 훈련된 여러 분류기의 예측을 평균화하는 접근 방식으로 26.2%의 오류율을 달성했다.

- 마지막으로, 우리는 또한 10,184개의 범주를 가진 Fall 2009 version of ImageNet에 대한 오류율을 보고한다
그리고 890만 장의 이미지가 있는데, 이 dataset에서 우리는 학습을 위해 이미지의 절반을 사용하고 테스트를 위해 이미지의 절반을 사용하는 문헌의 관례를 따른다.
확립된 testset이 없기 때문에, 우리의 분할은 반드시 이전 저자들이 사용한 분할과 다르지만, 이것은 결과에 크게 영향을 미치지 않으며 이 dataset에서 상위 1위와 상위 5위의 오류율은 67.4%와 40.9%이며, 위에서 설명한 순으로 달성되나 마지막 pooling layer에 비해 6번째 컨볼루션 계층이 추가된다. 이 데이터 세트에 대한 가장 잘 알려진 결과는 78.1%와 60.9%이다.

 

6.1 Qualitative Evaluations

이 그림은 신경망의 두 data-connected layer에 의해 학습된 Convolution kernel을 보여준다.
신경망은 다양한 frequency 및 orientation-selective kernels 뿐만 아니라 다양한 색상 blob들을 사용한 것 또한 알 수 있다.

3.5에서 설명한 제한된 연결의 결과로 두 GPU가 보여주는 전문화에 주목한다. GPU 1의 커널은 대부분 색상에 구애받지 않는 반면 GPU 2의 커널은 대부분 색상에 따라 다르기에 이러한 종류의 전문화는 모든 실행 중에 발생하며 특정 random weight 초기화(GPU의 모듈로 번호 변경)와 무관하다.


위 사진의 왼쪽은 다음과 같다.
- 8개의 테스트 이미지에 대한 상위 5개 예측을 계산하여 신경망이 무엇을 배웠는지 정성적으로 평가(qualitatively assess)한다.
- 이때, 진드기(mite)같이 중심을 벗어난 물체도 net로 인식할 수 있다는 점을 유의해야 한다.
(상위 5개의 label은 대부분 합리적인 것으로 보인다.)

위 사진의 오른쪽 첫 번째 열에 5개의 ILSVRC-2010 테스트 영상으로 나머지 열은 테스트 이미지의 특징 벡터로부터 유클리드 거리(Euclidean distance)가 가장 작은 마지막 숨겨진 레이어에서 특징 벡터를 생성하는 6개의 훈련 이미지를 보여준다.

- 두 이미지가 작은 Euclidean separation으로 특징 활성화 벡터(feature activation vectors)를 생성할 때, 신경망의 고수준이 유사하다 간주한다고 할 수 있다.

- 그림은 testset의 5개 이미지와 이 측정에 따라 각 이미지와 가장 유사한 training set의 6개 이미지를 보여주는데, 픽셀 수준에서 검색된 교육 이미지는 일반적으로 첫 번째 열의 query image의 L2에서 가깝지 않다.
예를 들어, 회수된 개들과 코끼리들은 다양한 포즈로 나타나며 우리는 보충 자료에서 더 많은 train image에 대한 결과를 제시한다.

- 두 개의 4096차원 실제 값 벡터 사이의 Euclidean distance 사용하여 유사성을 계산하는 것은 비효율적이지만, 이러한 벡터를 짧은 이진 코드로 압축하도록 auto-encoder를 훈련시킴으로써 효율적으로 만들 수 있다.
이는 image label을 사용하지 않기에 의미적으로(semantically) 유사한지 여부에 관계없이 edge들과의 유사한 패턴을 가진 이미지를 검색하는 경향이 있는 raw-pixel에 auto-encoder를 적용하는 것보다 훨씬 나은 이미지 검색 방법을 생성해야 한다.

 

 

 

 

 

 

7. Discussion

- 크고 깊은 CNN이 기록을 깨는 좋은 결과를 내는 것을 알 수 있다.
- 또한 중간층을 일부 삭제하더라도 성능이 떨어지는 것을 알 수 있듯, 깊이가 정말로 우리의 결과를 이룩하는데 중요하다는 것을 알 수 있다.

- 실험을 단순화하기 위해, 특히 label이 지정된 데이터의 양에서 그에 상응하는 증가를 얻지 않고 신경망의 크기를 크게 늘릴 수 있는 충분한 계산 능력을 얻는 경우에 도움이 될 것으로 예상했음에도 불구하고 unsupervised pre-training을 사용하지 않았다.

 

 

 

 

 

 

🧐 논문 감상_중요개념 핵심 요약

"ImageNet Classification with Deep Convolutional Neural Networks"
Alex Krizhevsky, Ilya Sutskever 및 Geoffrey Hinton이 2012년에 발표한 연구 논문으로 이 논문은 2012년 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)에서 최첨단 성능을 달성한 AlexNet이라는 심층 합성곱 신경망을 제안한다.

 

[핵심 개념]

1. Convolutional Neural Networks
Convolutional 및 Subsampling 층의 여러 layer로 구성된 Deep CNN Architecture와 Fully-Connected layer를 제안한다.

2. Rectified Linear Units(ReLU)
이 논문은 Sigmoid 및 tanh와 같은 기존 활성화 함수보다 더 간단하고 효율적인 ReLU 활성화 함수의 소개 및 활용을 진행한 최초의 논문이기에 더욱 중요하다고 볼 수 있다.

3. Local Response Normalization(LRN)
이 논문은 일종의 측면 억제(lateral inhibition)를 제공하여 일반화 성능을 개선하는 데 도움이 되는 LRN이라는 정규화 유형을 제안한다.

4. Dropout
이 논문은 과적합을 방지하기 위해 훈련 중에 일부 뉴런을 무작위로 제거하는 드롭아웃이라는 정규화 기술을 소개하였다.

5. Data Augmentation
이 논문은 training set의 크기를 늘리고 model의 견고성을 늘ㄹ리기 위해 random crop, vertical flip같은 기술을 사용했다.

6. State-of-the-Art Performance (최신 성능)
이 논문은 ILSVRC 2012 분류 작업에서 최신 성능을 달성하여 이전 방법보다 훨씬 뛰어난 성능을 보여준다.

전반적으로 이 논문은 Convolution신경망, ReLU 활성화 함수 및 데이터 증강의 사용과 같은 딥 러닝의 몇 가지 중요한 개념을 소개하고 까다로운 컴퓨터 비전 작업에서 최첨단 성능을 달성하는 데 있어 그 효과를 입증했다.

 

 

 

 

 

 

🧐  논문을 읽고 Architecture 생성 (with tensorflow)

import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, Flatten, Dense, Dropout

def AlexNet(input_shape, num_classes):
    input_layer = Input(shape=input_shape)
    
    # first convolutional layer
    x = Conv2D(96, kernel_size=(11,11), strides=(4,4), padding='valid', activation='relu')(input_layer)
    x = MaxPooling2D(pool_size=(3,3), strides=(2,2))(x)
    x = Dropout(0.25)(x)
    
    # second convolutional layer
    x = Conv2D(256, kernel_size=(5,5), strides=(1,1), padding='same', activation='relu')(x)
    x = MaxPooling2D(pool_size=(3,3), strides=(2,2))(x)
    x = Dropout(0.25)(x)
    
    # third convolutional layer
    x = Conv2D(384, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu')(x)
    x = Dropout(0.25)(x)
    
    # fourth convolutional layer
    x = Conv2D(384, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu')(x)
    x = Dropout(0.25)(x)
    
    # fifth convolutional layer
    x = Conv2D(256, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu')(x)
    x = MaxPooling2D(pool_size=(3,3), strides=(2,2))(x)
    x = Dropout(0.25)(x)
    
    # flatten the output from the convolutional layers
    x = Flatten()(x)
    
    # first fully connected layer
    x = Dense(4096, activation='relu')(x)
    x = Dropout(0.5)(x)
    
    # second fully connected layer
    x = Dense(4096, activation='relu')(x)
    x = Dropout(0.5)(x)
    
    # output layer
    output_layer = Dense(num_classes, activation='softmax')(x)
    
    # define the model with input and output layers
    model = tf.keras.Model(inputs=input_layer, outputs=output_layer)
    
    return model
model = AlexNet(input_shape=(224,224,3), num_classes=1000)
model.summary()
Model: "model"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 input_12 (InputLayer)       [(None, 224, 224, 3)]     0         
                                                                 
 conv2d_281 (Conv2D)         (None, 54, 54, 96)        34944     
                                                                 
 max_pooling2d_59 (MaxPoolin  (None, 26, 26, 96)       0         
 g2D)                                                            
                                                                 
 dropout_21 (Dropout)        (None, 26, 26, 96)        0         
                                                                 
 conv2d_282 (Conv2D)         (None, 26, 26, 256)       614656    
                                                                 
 max_pooling2d_60 (MaxPoolin  (None, 12, 12, 256)      0         
 g2D)                                                            
                                                                 
 dropout_22 (Dropout)        (None, 12, 12, 256)       0         
                                                                 
 conv2d_283 (Conv2D)         (None, 12, 12, 384)       885120    
                                                                 
 dropout_23 (Dropout)        (None, 12, 12, 384)       0         
                                                                 
 conv2d_284 (Conv2D)         (None, 12, 12, 384)       1327488   
                                                                 
 dropout_24 (Dropout)        (None, 12, 12, 384)       0         
                                                                 
 conv2d_285 (Conv2D)         (None, 12, 12, 256)       884992    
                                                                 
 max_pooling2d_61 (MaxPoolin  (None, 5, 5, 256)        0         
 g2D)                                                            
                                                                 
 dropout_25 (Dropout)        (None, 5, 5, 256)         0         
                                                                 
 flatten_9 (Flatten)         (None, 6400)              0         
                                                                 
 dense_25 (Dense)            (None, 4096)              26218496  
                                                                 
 dropout_26 (Dropout)        (None, 4096)              0         
                                                                 
 dense_26 (Dense)            (None, 4096)              16781312  
                                                                 
 dropout_27 (Dropout)        (None, 4096)              0         
                                                                 
 dense_27 (Dense)            (None, 1000)              4097000   
                                                                 
=================================================================
Total params: 50,844,008
Trainable params: 50,844,008
Non-trainable params: 0
_________________________________________________________________

 

 

 

 

 

🧐   Neural Network _ concept

🤫 Neural Network
perceptron에서 단지 층이 여러개 늘어난 것 뿐이지만, XOR 문제처럼 하나의 perceptron으로 해결하기 어려웠던 문제를 해결할 수 있다. 다수의 뉴런을 사용해 만든 것을 인공신경망(artificial neural network)라 하며, 줄여서 신경망(neural network)라 한다. 이런 신경망은 아래와 같은 모양으로 되어있는데, 이때 은닉층(hidden layer)의 깊이가 깊은 것을 이용한 학습방법을 Deep Learning이라 한다.

신경망: 입력층에서 은닉층으로 값을 전달하는 함수는 vector-to-vector함수
딥러닝: 함수는 vector-to-scalar함수( 벡터를 구성하는 데이터값들이 개별적으로 자유롭게 활동)

input layer(입력층): inputdata의 featurenode의 개수 = feature의 개수이다.
output layter(출력층): node개수 = 분류하려는 class의 개수이며 이때, 각 클래스의 score 중 가장 높은값을 갖는 class를 최종적으로 선정한다.

 

 

🧐   back propagation  (오차 역전파)

🤫 오차 역전파 (back propagation)

다층 퍼셉트론(multi-perceptron)에서 최적값을 찾아가는 과정은 오차역전파(back propagation)방법을 사용한다.

역전파라는 말처럼 역전파는 출력층-은닉층-입력층 순서대로 반대로 거슬러 올라가는 방법이다.

오차역전파를 통해 오차를 기반으로 가중치(weight)를 수정한 후 더 좋은 성능을 내도록 모델을 개선한다.

 



🤫 back propagation 과정

 1) weight 초기화
 2) forward propagation을 통한 output 계산
 3) Cost function 정의, 1차 미분식 구하기. => 실제값 t에 대해,  ([t-z]^2) / 2
 4) back propagation을 통한 1차 미분값 구하기
 5) 학습률(learning rate)설정 후 parameter(weight, bias) update
 6) 2 ~ 6의 과정 반복

 

 

🧐   activation function  (활성화 함수)

🤫 활성화 함수 (activation function)
활성화 함수는 input, weight, bias로 계산되어 나온 값에 대해 해당 노드를 활성화 할 것인지를 결정하는 함수이다.


🤫 활성화 함수의 종류
계단 함수(step function): 0을 기점으로 출력값은 0과 1, 두가지 값만 갖는 특징이 있다. 

(다만 0에서 미분불가능이라는 단점이 존재)


부호 함수(sign function): 계단함수와 비슷하지만 0을 기점으로 -1, 0, 1 세 값을 갖는 특징이 있다.


Sigmoid function: 1/(1 + exp(-x)) 로 0과 1사이 값을 출력한다.

   다만 단점이 존재하는데, 바로 vanishing gradient problem이다.

   Vanishing gradient problem: 학습하는 과정에서 미분을 반복하면 gradient값이 점점 작아져 소실될 가능성이 있다.

   이 문제는 미분값이 0에 가까워지고 이는 최종적으로 학습속도가 느려질 수 있다.

 
Hyperbolic tangent (tanh): (exp(x) - exp(-x)) / (exp(x) + exp(-x))

    0~1사이인 sigmoid함수를 변형한 함수로 tanh함수는 -1 ~ 1사이의 범위를 갖는다.


ReLU 함수 (Rectified Linear function): max(x, 0)로 앞선 함수들과 다르게 상한선이 없다는 특징이 있다.

Leaky ReLU 함수: a <= 1일 때, max(x, ax)로 보통 a는 0.01값을 갖는다.

항등함수(identity function, linear function): x로 입력값과 출력값이 동일하다.

     주로 regression문제에서 최종 출력층에 사용되는 활성화 함수.

softmax function: exp(x) / Σ(exp(x))

     주로 classification최종 출력층에 사용되는 활성화 함수.

     다만 위의 식을 그대로 사용할 경우, overflow발생의 가능성 때문에 아래와 같이 사용한다.

     exp(x + C) / Σ(exp(x + C))

     이때, 상수 C는 일반적으로 입력값의 최댓값을 이용한다.

 

     또한 softmax는 결과가 0~1사이이기에 이를 확률에 대응하여 해석할 수 있다.(입력이 크면 확률도 크다는 비례관계.)

     즉, 어떤 값이 가장 크게 출력될 지 예측가능하다.

 

 

 

 

🧐   batch normalization 

🤫 batch size란?

batch 크기는 모델 학습 중 parameter를 업데이트할 때 사용할 데이터 개수를 의미한다.
사람이 문제 풀이를 통해 학습해 나가는 과정을 예로 들면, batch 크기는 몇 문제를 한 번에 쭉 풀고 채점할지를 결정하는 것이다.
예를 들어, 총 100개의 문제가 있을 때, 20개씩 풀고 채점한다면 batch 크기는 20이다.

이를 이용해 딥러닝 모델은 batch 크기만큼 데이터를 활용해 모델이 예측한 값과 실제 정답 간의 오차(conf. 
손실함수)를 계산하여 optimizer가 parameter를 업데이트합니다. 






🤫batch normalization
layer의 값의 분포를 변경하는 방법으로 평균과 분산을 고정시키는 방법이다.
이를 이용하면 gradient 소실문제를 줄여 학습 속도를 향상시킬 수 있다는 장점이 존재한다.

 

Mini-batch mean, variance를 이용해 정규화(normalize)시킨 후 평균 0, 분산 1의 분포를 따르게 만든다. N(0, 1^2)

 

이때, scale parameter γ와 shift parameter β를 이용해 정규화시킨 값을 Affine transformation을 하면 scale and shift가 가능하다.











🤫 normalization?   standardization?  Regularization? 

Normalization

 

  • 값의 범위(scale)를 0~1 사이의 값으로 바꾸는 것
  • 학습 전에 scaling하는 것
    • 머신러닝에서 scale이 큰 feature의 영향이 비대해지는 것을 방지
    • 딥러닝에서 Local Minima에 빠질 위험 감소(학습 속도 향상)
  • scikit-learn에서 MinMaxScaler

Standardization

  • 값의 범위(scale)를 평균 0, 분산 1이 되도록 변환
  • 학습 전에 scaling하는 것
    • 머신러닝에서 scale이 큰 feature의 영향이 비대해지는 것을 방지
    • 딥러닝에서 Local Minima에 빠질 위험 감소(학습 속도 향상)
  • 정규분포를 표준정규분포로 변환하는 것과 같음
    • Z-score(표준 점수)
    • -1 ~ 1 사이에 68%가 있고, -2 ~ 2 사이에 95%가 있고, -3 ~ 3 사이에 99%가 있음
    • -3 ~ 3의 범위를 벗어나면 outlier일 확률이 높음
  • 표준화로 번역하기도 함
  • scikit-learn에서 StandardScaler



Regularization

  • weight를 조정하는데 규제(제약)를 거는 기법
  • Overfitting을 막기위해 사용함
  • L1 regularization, L2 regularizaion 등의 종류가 있음
    • L1: LASSO(라쏘), 마름모
    • L2: Lidge(릿지), 원

 

 

🧐   Drop Out 

🤫 드롭 아웃 (Drop out)

신경망의 모든 노드를 사용하지 않는 방법으로 신경망에서 일부 노드를 일시적으로 제거하는 방법이다.

이때, 어떤 노드를 일시적으로 제거할 것인지는 무작위로 선택하는데, 이 방법은 연산량을 줄여 overfitting(과적합)을 방지할 수 있다.

 

 

+ Recent posts