공부 기록장
[논문 읽기] : ResNet(Deep Residual Learning for Image Recognition) 본문
-논문 용어-
"i.e."는 "in essence", "in other words"
"e.g."는 "example given"
[요약]
깊은 네트워크를 학습시키기 위해 위해 잔차 학습(residual learning) 제안한다.
CNN 모델에 잔여 학습을 적용시켰더니, layer가 많아질수록 CNN 모델보다 성능이 향상됨을 확인.
잔차 학습 프레임워크를 통해 깊은 인공신경망을 학습시키는 과정을 더 쉽게 만들었다.
VGG 신경망에 비해 더 깊지만 복잡도가 낮고 성능은 더욱 뛰어난 신경망이다. (ImageNet과 CIFAR-10을 바탕으로 한 실험에서 더욱 향상된 성능을 보여준다.)
2015년 ImageNet 분류 대회에서 1등을 했다.
ResNet은 더욱 깊은 신경망으로 학습할 수 있다는 점에서 이미지 분류뿐만 아니라 객체 검출이나 Semantic Segmentation와 같은 분야에서도 좋은 성능을 보인다.
핵심 아이디어 : 잔여 블록 (Residual Block)
-> 잔여 블록의 실질적인 역할은 하나의 네트워크에 대해서 최적화(optimization) 난이도를 낮추어 주는 것
-> relu : activation function
1. 소개 (Introduction)
인공신경망의 깊이는 굉장히 중요한 요소로 작용하고 많은 인공신경망 모델들이 깊은 학습 신경망으로 성능을 향상한다. 하지만 인공신경망이 깊어지면 깊어질수록 더 성능이 좋아지는 것은 아니다(degradation problem). 단순하게 여러 겹의 레이어(layer)를 쌓는 것은 gradient(기울기 값?)가 사라지는 등의 문제를 초래한다. 이러한 문제의 해결책으로 네트워크의 가중치 값들을 초기에 적절하게 초기화해서 학습에 문제가 없도록 하는 것이다.
Degradation Problem은 단순히 overfitting(과잉학습으로 인해 실데이터와의 오차가 증가하는 현상, 과적합)에 의한 것이 아니다. 또한 이러한 문제는 training error(학습 데이터에 대해 발생하는 에러?)를 증가시킬 수 있다.
이 논문은 신경망의 레이어가 깊어짐에 따라 생길 수 있는 문제들을 종합적으로 다루고 있다.
즉 Degradation Problem을 해결하기 위해 Residual framework(ResNet)를 제안한다.
F(x) = H(x) - x에서 F(x)가 0이 되도록, 즉 H(x)가 x가 되도록 학습시키는 게 더 쉽다.
F(x) + x -> "shortcut connections" (="skip connections"라 불리기도 함..)
이 논문에서는 그냥 shortcut connection이 identitiy mapping(입력 = 출력인 mapping)으로 사용될 수 있다고 본다. ResNet의 깊어질수록 성능이 좋아지는 것은 특정 데이터셋에 국한된 것이 아니며, 다양한 분야에 적용이 가능하다.
학습함에 따라 H(x)가 아닌 F(x)를 학습하게 된다.
2. 관련 연구 (Related Work)
잔차를 이용한 학습은 이전에도 꾸준히 연구되어 왔었다....
3. 깊은 잔차 학습
1) 잔차 학습
H(x)를 학습하는 것보다 F(x)를 학습할 때 학습 난이도가 쉬워진다.
(이러한 공식을 살짝 다른 방식으로 학습시킨 것이 성능 면에서 차이가 난다는 것이 직관적으로는 이해가 안될 수 있음.. -> 사실 지금 이해 안 됨..)
항상 모든 레이어에서 이전 입력값을 출력 값에 더해주어 기본적인 매핑을 항상 수행할 수 있도록 해 학습 난이도를 줄일 수 있다. identity mapping을 이용해서 residual function(residual function을 새로 정의해서 사용)이 잔여 정보만을 학습하도록 하는 것이 더 좋은 성능을 보인다. 이전 레이어의 x를 보존하고 추가적으로 필요한 정보를 학습하는 방식으로 작동된다.
2) Identity mapping by shortcuts
x와 F(x), 즉 input과 output이 일치하지 않으면 x에 Ws를 곱해주어 사용할 수 있다.
단일 weight로 구성했을 때에는 성능 면에서 뛰어나지 않다. F(x)의 형태는 유동적(weight 값 중첩해 이용 가능)으로 사용 가능하기도 하고 그런 형태가 유의미한 성능을 보인다.
3) 네트워크의 구조
위 사진에서 맨 오른쪽이 잔차 학습을 이용한 신경망을 표현한 그림이다.
입출력 차원이 다른 것을 맞추기 위해 shorcut connection이 추가된 구간을 점선으로 표시했다.
4) 수행(구현?)
.....
4. 시도/실행
1) ImageNet을 이용한 분류
Plain Network : 깊게 레이어를 쌓았을 때가 얕게 쌓았을 때보다 더 성능이 안 좋아졌음
table 2. -> ResNet이 shortcut connection이 더해졌다(x)뿐인데도 성능이 좋아진 걸 볼 수 있다. 수렴 속도도 빠르다.
Identity vs Projection shortcuts 비교해봄.
세 가지 경우로 나누어 실험 진행.
A) zero-padding shortcut을 이용해 차원을 증가 + identity mapping 사용
B) 차원이 증가될 때에만 projection shortcut 사용
C) 모든 shortcut을 projection shortcut으로 사용
=> C)가 가장 성능이 좋았지만 나머지와 차이가 적어서 필수적으로 필요한 정도의 성능 개선이라 판단, 기본적으로 identity shortcut을 통해 성능이 충분히 개선 가능하다고 결론.
- Bottleneck architecture
identity shortcut이 bottleneck 디자인을 더욱 효율적이게 만든다.
-----------------------------------------------------------------------------------------------------------------------------------
* CNN(Convolutional Neural Networks) 모델이란?
딥러닝에서 주로 이미지나 영상 데이터를 처리할 때 쓰이며,
이름에서 알 수 있다시피 Convolution이라는 전처리 작업이 들어가는 Neural Network 모델
CNN을 활용하기 시작한 이유 -> DNN(Deep Neural Network)의 문제점 때문에
DNN은 1차원 형태의 데이터를 사용하는데, 이미지가 입력값이 되는 경우 이것을 flatten 시켜 한 줄의 데이터로 만든다. 이 과정에서 이미지의 공간적/지역적 정보가 손실이 되고 추상화 과정 없이 바로 연산으로 넘어가기 때문에 효율적이지 못하다.
CNN은 이미지를 날 것의 그대로 받아 공간적/지역적 정보를 유지한 채 특성들의 계층을 빌드업한다. DNN과 다르게 이미지 전체가 아닌 부분을 본다. 부분을 봄으로써 이미지의 한 픽셀과 주변 픽셀들의 연관성을 살린다.
● Convolution의 작동원리
: 입력으로 받아지는 이미지가 예를 들어 5x5 단위의 픽셀로 구성되어 있다면, 우리는 이 2차원 이미지를 5x5 행렬로 표현할 수 있다. 입력 이미지와 그보다 작은 필터(3X3) 커널이 있으면 우리는 이 입력값 이미지의 모든 영역에 같은 필터를 반복 적용해 패턴을 찾아 처리한다. 필터를 이용한 연산처리를 하는 것인데 Inner Product(행렬 내적)라는 연산이 사용된다. 이 과정을 거치면 결괏값의 크기가 3x3으로 줄어드는 문제가 발생한다. 이에 대한 해결방안으로 Zero Padding을 이용해 0으로 구성된 테두리를 이미지 가장자리에 감싸 주고 내적을 하여 문제를 해결할 수 있다. (7x7행렬(zero padding 된 행렬)을 3x3 행렬 커널을 이용해 convolution 하면 결과가 5x5 행렬이 된다.)
Stride는 필터를 얼마만큼 움직여 주는가 인데, stride 값은 1이 일반적이다. stride 값은 1보다 클 수 있는데, 커질수록 결과값 이미지의 크기가 작아진다.
관련 참조:
**ANN(Artificial Neural Network) == 신경망(Neural Network) 이란?
간략히 신경망(Neural Network)이라고도 한다. 딥러닝은 인공신경망이 발전한 개념이다. 인공신경망인 뉴럴 네트워크는 뉴런들을 여러 개 쌓아서 만들 수 있다. layer 1, 2, 3 가 있으면 각각 입력층 은닉층, 출력층으로 구성된다.
1958년 Frank Rosenblatt에 의해 제안된 퍼셉트론(Perceptron)이라는 선형 분류기를 제안했다. 이는 입력과 가중치들의 곱을 모두 더해 활동화 함수에 적용해 이 값이 0보다 크면 1, 0보다 작으면 -1을 출력하는 구조였다. 많은 사람들이 퍼셉트론을 이용해 진짜 인간을 모방한 인공지능을 구현할 수 있을 것이라 기대하지만 수학적으로 그 한계가 증명되면서 기대가 사그라드는 '인공지능의 겨울'이 시작된다.
1986년에 퍼셉트론의 한계를 극복한 MLP(Multi-Layer Perceptron) 다층 퍼셉트론이 제시된다. 은닉 계층이라는 중간계층을 추가하는 방식으로 여러 퍼셉트론을 층으로 쌓아 선형 분류의 한계를 극복한다.
하지만, 퍼셉트론을 여러 층으로 쌓을수록 학습하기 어려운 문제가 발생하는데, 역전파 알고리즘(Backpropagation Algorithm)을 제안해 이러한 문제를 해결한다.
역전파 알고리즘은 순방향(Feed Forward) 연산 후에 예측값과 정답 사이의 오차를 후방으로 다시 보내며 학습시키는 방법이다.
AND, OR, NOT 연산자를 활용해 XOR 연산을 수행할 수 있다. XOR 연산은 둘 중 하나만 1일 때 1이고, 둘 다 0이거나 1인 경우에는 0을 출력하는 연산이다.