기울기 소실(Vanishing Gradient)이란?

기울기 소실은 오차 역전파과정에서, 출력층에서 멀어질 수록 Gradient 값이 매우 작아지는 현상을 말한다.

 

기울기 소실의 원인?

-> 기울기 소실은 활성화 함수의 기울기와 관련지어 설명할 수 있다.

아래 Sigmoid 함수를 예시로, 아래 그림을 보면서 이해해보자.

 

Sigmoid

왼쪽은 시그모이드, 오른쪽은 도함수이다.

오른쪽 그림을 보면, Sigmoid 함수의 미분 값은 입력값이 0일때 가장 크지만, 0.25에 불과하고, x값이 크거나 작아짐에 따라 기울기는 거의 0에 수렴한다.

따라서, 역전파 과정에서 Sigmoid 함수의 미분값 (1보다 작겠지?)가 곱해지면 곱해질 수록 Gradient값이 매우 작아질 수 밖에 없다. (더불어 e(자연상수) 또한 근사값으로 계산해야하기 때문에 오차까지 쌓이게 된다.)

tanh 함수

ranh의 경우, 0을 기준으로 출력값이 -1~1 (시그모이드는 0~1)로 2배 늘어났다. 하지만 여전히 시그모이드와 같은 이유로 인해 기울기 소실이 발생한다.

 

ReLU 함수

ReLU함수의 경우 입력값이 양수일 경우, 그 값에 상관없이 항상 그 값과 동일한 미분 결과값을 뱉게된다.(1)

-> 역전파 과정에서 기울기 소실이 되지 X + 연산속도가 빠르다(sigmoid는 자연상수 존재 ..!)

한계점 -> 음수의 경우 항상 미분값이 0이기 때문에 입력값이 음수일 경우 그 부분에 대해서 다시 회생할 수 없음

-> 이를 죽어간느 RELU (Dying ReLU라고 한다고 함.)

 

Leaky ReLU

ReLU와 차이점 -> 음수일 경우 0이 아닌, 매우 작은 값을 출력하도록 해줆!

 

 

'부록' 카테고리의 다른 글

오차 역전파 & chain rule  (0) 2024.04.23
Resnet 논문 리뷰  (0) 2024.04.22
Style GAN & Style GAN2  (1) 2024.04.07
LSTM  (0) 2023.08.02
[Modeling] XGB Classifier + 그리드서치 / 베이지안 옵티마이저  (0) 2023.03.18

신경망 모델은 기본적으로 손실 함수의 값을 최소화 하는 가중치를 찾는 방향으로 학습해 나간다. (전역 최소값)

 

대표적으로 경사하강법(Gradient Descent)의 경우, 기울기를 통해 가중치를 갱신하는데, 그 이유는 기울기가 경사 하강법에서 손실 함수 값을 줄일 수 있는 방향을 제시해주는 지표이기 때문,

'부록' 카테고리의 다른 글

기울기 소실  (0) 2024.04.23
Resnet 논문 리뷰  (0) 2024.04.22
Style GAN & Style GAN2  (1) 2024.04.07
LSTM  (0) 2023.08.02
[Modeling] XGB Classifier + 그리드서치 / 베이지안 옵티마이저  (0) 2023.03.18

Deep Residual Learning for Image Recognition, 2015

본 글은 2015년 MS에서 개발/발표한 알고리즘 논문을 초특급으로 간단하게 리뷰할 예정!

 

ILSVRC(ImageNet Large Scale Visual Recognition Challenge)에서 우승을 차지한 뛰어난 성능을 자랑했던 모델이고,

현재에도 다양한 논문에서 많이 참조되고 있다.(고 한다.)

 

Background

앞서 말했듯이, Resnet은 바로 직전 2014년 GoogleNet이 22개 층으로 구성되어 있던 것에 비해, 152층을 갖는다.

그럼 네트워크가 깊어질 수록, 성능이 올라가는 거구나! 라고 생각할 수 있다.

하지만 Resnet저자들은 이를 20층, 56층 네트워크의 성능을 비교/테스트 해보았따.

그림을 보면 알 수 있듯이, 56층 네트워크가 더 나쁜 성능을 갖는 것을 확인할 수 있다.

(층의 깊이가 능사가 아니라는 점)

그럼 152층의 네트워크를 가진 Resnet은 어떻게 지금까지 활용되고, 좋은 성능을 낸 것 일까? 핵심은 아래에 후술하겠다.

 

Residual Block

Resnet논문의 핵심은 Residual Blcok개념이다. 아래 그림을 보고 이해해보자.

Residual Block = "기존 CNN에서 conv층 네트워크에서, input인 x를 더해주는 지름길 (short cut)만 더해주는 개념이다."

따라서, 동일한 연산을 하고 나서 input x를 더하는 것 & 더하지 않는 것이 유일한 차이다.

이 단순한 개념이 얼마나 대단한 것인지 잘 생각해보자.

<기존 Network>

레이어의 output인 Feature Map(vector)을 y라 하면, y = f(x)일 것이다. 

아웃풋인 y는 x를 통해 새롭게 학습하는 정보일 것이다. (기존에 학습한 정보를 보존X, 새롭게 생성해야함.)

 

CNN이 고차원 Feature vector로 매핑해야한다는 점을 생각하면, 층이 깊어질 수록 한번에 학습해야 할 Mapping이 너무 많아져 학습이 어려워질 것이다. 여기서 Gradient Vanishing(기울기 소실)이 발생한다고 함

기울기 소실 자세히 -> https://heytech.tistory.com/388

 

[딥러닝] 기울기 소실(Vanishing Gradient)의 의미와 해결방법

📚 목차 1. 기울기 소실의 의미 2. 기울기 소실의 원인 3. 기울기 소실의 해결방법 1. 기울기 소실의 의미 딥러닝 분야에서 Layer를 많이 쌓을수록 데이터 표현력이 증가하기 때문에 학습이 잘 될

heytech.tistory.com

 

<Residual Network> 

기존 network와 달리, y = f(x) + x 라고 설명할 수 있다.

여기서는 x가 input 그대로 보존되고, f(x)에 대해서만 학습을 진행하면 된다.

이는 곧 output에서 이전 레이어에서 학습한 정보를 연결함으로써 현재 층에서는 추가적으로 학습해야 할 정보만을 Mapping(학습)하면 된다는 것을 의미한다.

 

그리고 학습이 계속 진행되면서, 층의 깊이가 깊어질수록 (학습이 많이 될 수록) x는 출력값 y에 근접하게 되어 f(x)는 최종적으로 0에 수렴하게 될 것이다.

수식을 보면서 이해하자면, y = f(x) + x 에서 추가 학습량에 해당하는 F(x) = H(x) - x가 최소값(0)이 되도록 학습이 진행된다.

 

Architecture

 Renset은 기본적으로 VCG-19의 구조를 뼈대로 하고 있다고 한다.

VCG-19층에 ConV층들을 추가해서 깊게 만든 이후에, shortcut(Residual Block)을 추가하는 것이 전부라고 한다.

 

아래 그림은 34층의 ResNet과 거기에서 shortcut들을 제외한 버전인 plain 네트워크의 구조이다.

그림 -> 34층의 Resnet은 처음을 제외하고 균일하게 3x3 사이즈의 ConV 필터를 사용함을 알 수 있다.

그리고 특성맵의 사이즈가 반으로 줄어들 때, 특성맵의 Depth를 2배로 높였다.

 

아래 그림은 18층&34층의 기존 network와 Resnet을 비교한 것이다.

y축(오차)를 동일하게 보았을 때, Resnet의 오차율이 더 적은것을 볼 수 있다.

 

왼쪽 그래프를 보면 plain 네트워크는 망이 깊어지면서 오히려 에러가 커졌음을 알 수 있다. 34층의 plain 네트워크가 18층의 plain 네트워크보다 성능이 나쁘다. 반면, 오른쪽 그래프의 ResNet은 망이 깊어지면서 에러도 역시 작아졌다! shortcut을 연결해서 잔차(residual)를 최소가 되게 학습한 효과가 있다는 것이다.
아래 표는 18층, 34층, 50층, 101층, 152층의 ResNet이 어떻게 구성되어 있는가를 잘 나타내준다.

18-Layer의 경우는 conv2_x에서 2X2, conv3_x에서 2X2, conv4_x에서 2X2, conv5_x에서 2X2, 입력1, 출력1해서 이 된다.

다음 표는 ResNet에서 Layer가 깊을 수록 더 좋은 성능을 보여준다는 것을 나타낸다.

CIFAR-10, CIFAR-100은 머신러닝 용 이미지 분류 데이터셋을 말하며 CIFAR-10 dataset이 10개의 클래스로 분류가 되고 CIFAR-100 dataset이 100개의 클래스로 분류가 된다.
위의 표를 보면 CIFAR-10, CIFAR-100둘다 ResNet의 layer가 깊을 수록 error율(%)이 더 작은 것을 볼 수 있다. 

 

심화

Resnet은 2개 이상의 Conv Layer와 skip-connection을 활용해서 Residual Block을 만들어서 네트워크를 구성한다.

 

앞서 말했듯, Neural Network 층을 깊게 쌓으면 기울기 소실이 발생하기 때문에 마냥 좋은 것이 아니다.

그렇다면 Residual Block이 기울기 소실을 어떻게 피할까? 

 

먼저 용어부터 정리하고 가자.

 : 현재 layer의 index
 : 전체 layer의 갯수
 : 가중치 행렬
 : Residual Function
 : Activation Function(ReLU)
 : Identity Mapping을 위한 Dimension 세팅용 함수

활성함수 을 identity mapping이라고 가정하면,


(참고로 identify mapping은 입력으로 들어간 가 어떠한 함수를 통과해도 다시 가 나오는 것으로 항등함수 가 대표적인 identity mapping에 해당한다.)
(도 identity mapping으로 가정했으므로 가 그대로 사용된다.)
이 식으로부터 일반화식을 표현하면 다음과 같이 나타낼 수 있다.

Loss function의 gradient의 계산식은 backward propagation chain rule로 부터 아래 식으로 나타낼 수 있다.

오차 역전파 & chain rule : https://amber-chaeeunk.tistory.com/18

 

딥러닝) 오차 역전파 backpropagation , 연쇄법칙 chain rule , 기울기 효율적으로 구하기

신경망 모델을 최적화 하기 위해서는 손실 함수의 값을 최소화하는 가중치 매개변수를 찾아야 한다. 복잡한 손실 함수에서 더 좋은 가중치를 찾기 위해 경사하강법(Gradient Descent)을 이용하여 가

amber-chaeeunk.tistory.com

 

위 식에서 우리는 가 두 개 값의 합으로 분해할 수 있다는것을 알 수 있다.


먼저,(1) 앞 부분의 은 weight layer와 무관하게 다이렉트로 전파되는 정보이다. 따라서 정보는 어떤 layer든 같은 정보가 전파된다.
(2) 뒷 부분의  은 weight layer를 거쳐 전파되는 정보이다.
backward propagation을 할 때  이 0이 되기 위해서는 weight layer를 거쳐 역전파되는 값이 -1이 되어야 한다.
실제 학습을 할 때 전체 데이터를 한번에 학습하는것이 아닌 데이터의 일부분씩 학습하는 mini-batch방식이 사용되는데, 모든 mini-batch에서 역전파값이 -1이 되는것은 불가능에 가깝다. 때문에  은 항상 0이 아닌 어떠한 값을 갖게 되고, 역전파된 값이 0에 가깝게 되는 vanishing gradient가 발생하지 않게 된다.

 

Resnet논문에 BottleNeck / 배치 정규화 적용 여부에 따른 성능 비교 부분은 패스~~

'부록' 카테고리의 다른 글

기울기 소실  (0) 2024.04.23
오차 역전파 & chain rule  (0) 2024.04.23
Style GAN & Style GAN2  (1) 2024.04.07
LSTM  (0) 2023.08.02
[Modeling] XGB Classifier + 그리드서치 / 베이지안 옵티마이저  (0) 2023.03.18

https://prowiseman.tistory.com/entry/StyleGAN-StyleGAN2

 

StyleGAN / StyleGAN2

들어가며 StyleGAN과 StyleGAN2의 논문을 살짝 읽어보긴 했는데, 수식이 너무 어려워서 곤란해하던 중 From GAN basic to StyleGAN2 이란 포스트에 잘 정리돼 있어 위 포스트를 보고 공부하였다. 그래서 아래

prowiseman.tistory.com

본 포스트는 위 글을 100% 참조하여 쓴 글이다.

바로 본론으로 들어가보자.

 

GAN의 평가 지표

GAN은 비지도학습이기 때문에 Accuracy 나 Confusion Matrix 등의 개념을 사용할 수 가 없다.

여기 Style GAN은 FID / PPL 라는 방법을 사용하여 성능을 평가한다고 한다.

 

FID (Frechat Inception Distance)

Frechat Inception Distance(FID)는 생성된 이미지의 분포가 원본 이미지의 분포에 얼마나 가까운지 측정한다.

그러나 이미지는 고차원 공간에 매장되어 있기(embedded) 때문에 분포의 거리를 쉽게 측정할 수 없다. 

따라서 FID는 저차원 공간에 이미지를 매장(embedded)하고 그 공간에서 분포의 거리를 측정하는 것이다. (매니폴드의 개념과 유사)

 

FID 공식은 아래와 같다.

FID 공식

m과 c는 임베디드 공간의 평균 벡터(mean vectors)와 공변량 행렬(covariance matrices)이다.

아래 첨자로 w가 있는 기호는 생성된 이미지이고, 아래 첨자가 없는 것은 실제 이미지이다.

이것이 분포의 거리를 보여주기 때문에 값이 작을수록 가짜 이미지가 진짜 이미지처럼 보인다.

이것은 생성자가 더 나은 성능을 보여준다는 것을 가리킨다.

 

(GPT에게 FID 수식을 자세히 설명해달라고 했다.) 

 

복잡하게 생각할 필요없이,

m과 c만 보면, 실제와 유사한 이미지를 만들었다고 하면 좌측 |m-m|은 0에 수렴, 우측 또한 0에 수렴할 것이다.

Perceptual Path Length (PPL)

Perceptual Path Length, PPL은 이미지가 지각적으로 부드럽게 바뀌었는지에 대한 지표이다.

우리가 하얀 개를 생산하는 잠재 변수인 z1과 검정 개를 생산하는 잠재 변수 z2가 있다고 생각해 보자.

색깔 이외의 다른 요소는 바뀌지 않았으므로 중간의 데이터의 잠재 변수는 흰색과 검은색 사이의 경로에 따라 바뀌는 게 이상적이다.

 

즉 회색 개가 나오는 게 목표라고 할 수 있다. 다시 말해 색만 바뀌는 파란색 경로는 "지각적으로(perceptually)" 가장 짧은 거리이다.

 

반대로 객체의 모양을 바꾸고 침대와 같은 이미지를 통과하는 초록색 경로는 "지각적으로(perceptually)" 거리가 멀다.

 

이는 PPL로 정량화됐고 공식의 정의는 다음과 같다. 이것은 두 잠재 변수 z_1과 z_2를 비 t로 혼합해서(mixed) 얻어진 잠재 변수와 이 둘을 t + ε의 비율로 혼합해서(mixed) 얻은 잠재 변수에 의해 생성된 이미지 사이 거리의 기댓값이다.

FID와 마찬가지로 PPL값이 작을 수록 실제 이미지와 만들어진 이미지가 유사(부드럽게)한 것을 나타낸다.

 

 

Style GAN

이제 StyleGAN에서 주로 쓰이는 평가 지표인 FID와 PPL을 토대로, 본격적으로 Style GAN에 대해서 알아보자.

우선 Style GAN은 두 가지 특징이 있다고 한다.

 

1. 고 해상도의 이미지를 Progressive Growing을 통해 생성한다. (PG GAN의 느낌(?))

2. AdaIN을 통해 각 레이어에 이미지와 스타일을 결합한다.

 

첫 번째로 이 두 가지 특징과 StyleGAN의 세부적 구조에 대해서 들어가보자.

 

Progressive Growing

Progressive Growing은 Progressive-Growing(PG-GAN)에서 제안된 고해상도 이미지를 생성하는 방법이다. 대략 말하면 이는 저해상도의 이미지부터 시작해 점진적으로 고해상도 생성자(Generators)와 판별자(Discriminators)를 추가하여 고해상도 이미지를 만드는 방법이다. (계층적 구조를 가짐)

 

AdaIN

AdaIN은 2017년 Xun Huang 외에 의해 제안된 style transfer의 정규화(normalization) 방법이다. 수학식은 아래와 같다.

 

x: content input

y: style input

->평균과 분산으로 정규화한다.

 

AdaIN은 다른 정규화(normalization) 방법과는 달리 오직 스타일과 콘텐츠 이미지의 통계로만 수행된다.

그리고 학습되는 파라미터는 쓰이지 않는다.

이는 학습 데이터에서 한 번도 본 적 없는 스타일로 변환할 수 있도록 한다.

 

Network architecture of StyleGAN

StyleGAN의 키포인트는 다음과 같다.

  • 점진적으로 해상도를 올리기 위해서 Progressive Growing을 사용한다.
  • 일반적인 GANs에서처럼 확률적(stochastically)으로 생성된 잠재 변수를 통해 이미지를 생성하는 것이 아닌 고정된 값의 텐서(fixed value tensor)를 통해 이미지를 생성한다.
  • 확률적(stochastically)으로 생성된 잠재 변수는 8-layer의 비선형 변환 신경망을 통과한 후 각 해상도에 AdaIN을 통해 스타일 벡터로 사용한다.

 

 

위 그림의 (a)는 PG-GAN이고 (b)는 StyleGAN이다. 둘 다 점진적으로 해상도를 올리는 progressive growing을 사용한다.

 

그러나 PG-GAN은 확률적 잠재 변수 z로부터 이미지를 생성하는 반면, StyleGAN은 고정된 4x4x512 텐서로부터 이미지를 생성한다.

게다가 확률적 잠재 변수는 그대로 쓰이지 않고 스타일로서 쓰이기 전, Mapping Network라 불리는 fully connected

network로 비선형 변환을 해 준다.

 

Mixing Regularization

StyleGAN은 Mixing Regularization이라 불리는 정규화(regularization) 방법을 사용하는 데, 이는 스타일에 사용된 두 잠재 변수를 학습하는 동안 혼합(mixes)하는 것이다. 예를 들어 스타일 벡터인 w_1과 w_2가 잠재 변수인 z_1과 z_2에서부터 맵핑(mapped)되었다고 할 , w_1은 4x4의 이미지를 생성할 때 사용되고 w_2는 8x8의 이미지를 생성할 때 사용된다.

 이를 함으로써 아래 보이는 것과 같이 두 이미지의 스타일을 섞을 수 있다.

 

'부록' 카테고리의 다른 글

오차 역전파 & chain rule  (0) 2024.04.23
Resnet 논문 리뷰  (0) 2024.04.22
LSTM  (0) 2023.08.02
[Modeling] XGB Classifier + 그리드서치 / 베이지안 옵티마이저  (0) 2023.03.18
[딥러닝] 옵티마이저 [퍼온 글]  (0) 2023.03.06

LSTM = Long Short-Term Memory

 

LSTM을 이해하기 앞서, RNN을 복습해보자.

 

RNN이란 Recurrence Neural Network라는 인공 신경망으로써, 자연어처리에 용이한 딥러닝 기법 중 하나이다.

recursive한 말 그대로 과거의 데이터를 누적하여 학습에 사용함으로써, 언어처리, 문장,맥락 등을 이해하기 위해서다.

RNN은 따라서 음성인식, 언어 모델링, 번역 등 다양한 분야에서 쓰이고 있다.

이 RNN의 핵심이 바로 LSTM이다.

 

LSTM은 RNN의 특별한 한 종류로, 특정 상황에서는 RNN보다 훨씬 효율적으로 해결할 수 있다.

 

RNN / LSTM 의 특징은 아래의 예시를 들어 설명할 수 있다.

 

1) 구름은 xx에 있다.  에서 xx를 예측하는것은 쉽다. 

하지만

2) 나는 프랑스에서 자랐다. 따라서 나는 자연스럽게 축구를 좋아한다. 그리고 나는 xx어를 유창하게 할 수 있다.

위 2번의 답을 예측하려면 정답에 필요한 정보를 얻기 위해 훨씬 앞 혹은 뒤에서 정보를 찾아야 한다.

따라서  정보를 얻기 위한 시간격차가 커지게 된다.

RNN은 안타깝게도 격차가 늘어날 수록 효율성이 매우 떨어진다고 한다.

 

GPT에 물어보니 기울기 소실, 기울기 문제 폭발 두 가지 때문이라고 한다.

LSTM은 RNN의 긴 시간격차로 발생하는 문제를 보완하기 위해 생겨난 아키텍쳐라고 한다.

 

이제 본격적으로 LSTM을 알아보자.

앞서 말했듯이, LSTM은 RNN에 비해 장기적인 문제를 해결하는데 탁월하다고 했다.

 

먼저 RNN의 구조와 LSTM의 구조를 그림을 통해 살펴보자.

< RNN > 

< LSTM > 

 

 

LSTM의 핵심

LSTM의 핵심 아이디어는 cell state이다. 아래에서 수평으로 그어진 윗 선을 말한다.cell state= 흐르는 물이라고 생각

LSTM은 cell state에 뭔가를 더하거나 없앨 수 있는 능력이 있는데,

이 능력은 gate라고 불리는 구조에 의해서 조심스럽게 제어된다.

 

Gate는 정보가 전달될 수 있는 추가적인 방법으로, sigmoid layer와 pointwise 곱셈으로 이루어져 있다.

 

LSTM의 첫 단계로는 cell state로부터 어떤 정보를 버릴 것인지를 정하는 것으로, sigmoid layer에 의해 결정된다.

 

그래서 이 단계의 gate를 "forget gate layer"라고 부른다. ( = 망각층 )

 

 

이 단계에서는 \(h_{t-1}\)과 \(x_t\)를 받아서 0과 1 사이의 값을 \(C_{t-1}\)에 보내준다. 그 값이 1이면 "모든 정보를 보존해라"가 되고, 0이면 "죄다 갖다버려라"가 된다.

 

아까 얘기했던 이전 단어들을 바탕으로 다음 단어를 예측하는 언어 모델 문제로 돌아가보겠다. 여기서 cell state는 현재 주어의 성별 정보를 가지고 있을 수도 있어서 그 성별에 맞는 대명사가 사용되도록 준비하고 있을 수도 있을 것이다. 그런데 새로운 주어가 왔을 때, 우리는 기존 주어의 성별 정보를 생각하고 싶지 않을 것이다.

 

< 망각층 >

 

다음 단계는 앞으로 들어오는 새로운 정보 중 어떤 것을 cell state에 저장할 것인지를 정한다.

먼저, "input gate layer"라고 불리는 sigmoid layer가 어떤 값을 업데이트할 지 정한다.

그 다음에 tanh layer가 새로운 후보 값들인 \(\tilde{C}_t\) 라는 vector를 만들고, cell state에 더할 준비를 한다.

이렇게 두 단계에서 나온 정보를 합쳐서 state를 업데이트할 재료를 만들게 된다.

 

다시 언어 모델의 예제에서, 기존 주어의 성별을 잊어버리기로 했고, 그 대신 새로운 주어의 성별 정보를 cell state에 더하고 싶을 것이다.

 

새 정보 유입 -> < input gate >

이제 과거 state인 \(C_{t-1}\)를 업데이트해서 새로운 cell state인 \(C_t\)를 만들 것이다. 이미 이전 단계에서 어떤 값을 얼마나 업데이트해야 할 지 다 정해놨으므로 여기서는 그 일을 실천만 하면 된다.

LSTM의 핵심

cell state가 존재하고 RNN과 달리 한 cell마다 네 개의 layer가 존재.

망각층과 입력층을 통해 cell을 계속 업데이트해가며 학습을 진행하는 메카니즘이다.

 

 

 

RNN과 비슷하다는 느낌이기 때문에 당연히 자연어처리에 특화되어 있고,

장기 데이터 처리, 학습, 예측에도 용이하기 때문에 시계열 데이터에도 유용하게 쓰인다고 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://dgkim5360.tistory.com/entry/understanding-long-short-term-memory-lstm-kr

'부록' 카테고리의 다른 글

Resnet 논문 리뷰  (0) 2024.04.22
Style GAN & Style GAN2  (1) 2024.04.07
[Modeling] XGB Classifier + 그리드서치 / 베이지안 옵티마이저  (0) 2023.03.18
[딥러닝] 옵티마이저 [퍼온 글]  (0) 2023.03.06
Bayesian Optimization  (2) 2023.02.21

+ Recent posts