들어가며
저번 글에서는 주로 은닉 층의 개수가 얼마 되지 않는 얕은 네트워크를 다루었다
고해상도 이미지 객체 탐지와 같은 복잡한 문제를 마주하게 되면
얕은 네트워크만으로는 문제를 해결할 수 없다
이럴 때는 수백 개의 뉴런과 여러 개의 은닉층을 연결한 심층 신경망을 훈련시켜야 한다
이번 글에서는 심층 신경망에서 나타나는 문제점인 그레디언트 소실 문제를 설명하고
이를 해결할 수 있는 여러 가중치 초기화 방식들과 활성화 함수들을 알아볼 것이다
그레디언트 소실 문제
모델의 가중치 수정을 위한 그레디언트를 계산에서 사용되는 역전파 알고리즘은
심층 신경망에서 사용 시 하위 층으로 진행될수록 그레디언트가 점점 작아지는 경우가 발생하고
이를 그레디언트 소실 문제라고 부른다
상위 층에서부터 연쇄법칙을 적용하여 하위 층의 그레디언트를 계산하는데
이 과정에서 여러 미분값이 곱해지며 값이 작아지게되고
결국 하위 층은 그레디언트 값이 낮아져 의미가 거의 없어지게되는 것이다
이렇게되면 하위 층의 가중치는 거의 업데이트 되지 않아 학습이 느려지게 되고
층마다 학습속도가 달라져 심층 신경망 훈련을 어렵게 만든다

여러 연구가들이 이 문제의 원인에 대해 분석하였고
그레디언트를 불안정하게 만드는 원인 중에는 가중치 초기화 방식과 활성화 함수의 조합이 있었다
그 당시 많이 사용되던 시그모이드 활성화 함수와 정규분포 초기화 방식(평균이 0이고 표준편차가 1인 정규분포)은
신경망 위쪽으로 진행될수록 출력의 분산이 계속 커지게되고
가장 높은 층에서 결국 활성화 함수가 0이나 1로 수렴하게 된다
값이 0이나 1로 수렴하게되면 역전파 계산시 신경망으로 전파할 그레디언트가 거의 없어지고
조금 있는 것 마저 최상위 층에서부터 역전파가 진행되면서
점차 약해져 결국 하위 층에서는 도달하는게 거의 없게되어 그레디언트 소실 문제가 발생하게되는 것이다
가중치 초기화 방식들
많은 논문 저자들은 그레디언트 문제 완화를 위해서
각 층의 출력에 대한 분산이 입력에 대한 분산과 같고,
역방향에서 층을 통과하기 전 후 그레디언트 분산이 동일해야한다고 주장하였다
조건으로는 층의 입력 개수(fan-in)과 출력 개수(fan-out)이 같아야 한다는 것이 있었다
글로럿-세이비어 초기화
하지만 글로럿과 벤지오는 fan-in, fan-out이 다를 때에도 분산을 안정적으로 유지하는 초기화 방법을 제안하였다

우선 평균이 0이고 분산이 1/fan_avg인 정규분포 방식이 있고 (fan_avg = (fan_in + fan_out) / 2)

r의 식이 주어졌을 때 -r과 +r 사이의 균등분포에서 가중치를 초기화하는 방식이 있다
이 방식들을 활용해서 각 층의 연결 가중치를 랜덤으로 초기화하는 것이다
르쿤 초기화
르쿤 초기화는 글로럿 초기화에서 fan_avg 대신 fan_in 으로만 바뀐 형태이다

정규분포와 균등 분포는 위 식과 같다
추가로 르쿤 초기화에서 fan_in = fan_out 이면 글로럿 초기화와 구조상 동일해진다
이외에도 다른 초기화 전략들은 분산의 스케일링이나 fan_avg 또는 fan_in,fan_out을 쓰는 것만 다른 형태들이다
여러 활성화 함수들
위에서 이야기했듯이 초기화 방식을 바꾸는 것 만으로는 그레디언트 소실 문제를 완전히 해결할 수 없으며
활성화 함수를 잘못 선택한다면 더 큰 문제로 이어질 수 있다
ReLU 함수
딥러닝에서 널리 사용되는 활성화 함수로는 ReLU함수가 있다
입력값이 0이하면 0을 출력하고 0보다 크면 입력값 그대로를 출력하는 함수이다

이 함수는 특정 양숫값에 수렴하지 않고 계산이 빠르다는 큰 장점이 있지만
죽은 ReLU라고 알려진 큰 문제점이 존재한다
죽은 ReLU란 훈련하는 동안 일부 뉴런이 0 이외의 값을 출력하지 않는 것을 말한다
훈련 세트의 모든 샘플에 대해 ReLU 함수 입력이 음수가 되면 출력은 항상 0이 된다
이때 그레디언트도 0이 되어 가중치가 업데이트되지 않으며 더 이상 경사하강법이 작동하지 않게된다
이 문제를 해결하기 위해 LeakyReLU와 같은 ReLU 함수의 변형을 사용한다
LeakyReLU 함수
LeakyReLU 활성화 함수는 max(ax, x)로 정의되며
하이퍼파라미터 a가 새는(leaky) 정도를 결정한다
새는 정도라는 것은 입력값이 음수일 때 함수의 기울기를 의미하여 함수가 죽지 않게 해준다

LeakyReLU는 대규모 데이터셋에서는 ReLU보다 성능이 크게 앞서지만
소규모 데이터셋일 경우 훈련 세트에 과대적합될 가능성이 더 높다
추가로 LeakyReLU의 응용으로 a값을 랜덤으로 선택하고
테스트 시에는 랜덤 값들의 평균을 사용하는 RReLU(Randomized leaky ReLU)가 있고
a가 훈련하는 과정에서 역전파에 의해 학습되며 바뀌는 PReLU도 있다
LeakyReLU, RReLU, PReLU 모두 좋은 성능을 보이지만 매끄러운 함수가 아니라는 단점이 있다
즉 입력값이 0인 구간에서 도함수가 불연속적이게된다
이러한 불연속성은 경사하강법을 진동하게 하거나 수렴을 느리게만든다
이 때 등장한 활성화 함수가 ReLU의 부드러운 변형인 ELU와 SELU이다
ELU 함수
ELU 함수의 정의는 다음과 같다

이 함수는 입력값이 음수일 때 평균 출력이 ReLU에 비해 0에 더 가까워진다
평균출력이 0에 가깝다는 것은 양수,음수 사이에서 특정 방향으로 치우치는 것을 줄여 학습을 안정화시킨다
이 때 하이퍼파라미터 α는 입력값이 큰 음숫값일 때 ELU가 수렴할 값의 절댓값을 나타낸다
α값은 보통 1로 설정하는 경우가 많은데 α가 1일 경우 x=0인 구간을 포함하여 모든 구간에서 매끄럽기 때문이며
α가 1이 아니면 x=0 구간에서 도함수가 불연속이게된다
ELU 함수의 단점은 ReLU와 그 변형들보다 지수함수를 사용하기에 계산이 느리다는 점이 있다
훈련 동안 수렴 속도가 빨라 어느정도 상쇄될 순 있지만 테스트 시에는 확연히 차이나게 된다
SELU 함수
SELU 함수는 스케일이 조정된 ELU 함수의 변형이다
쉽게 말해서 α가 약 1.67인 ELU의 약 1.05배를 말한다

함수 형태는 위와 같으며, SELU 함수에는 한 가지 중요한 특징이 있다
모든 은닉 층이 SELU 활성화 함수를 사용한다면 네트워크가 자기 정규화가 된다는 것이다
자기 정규화가 된다는 말은 각 층의 출력이 평균 0과 표준편차 1로 유지된다는 의미이다
이는 결국 그레디언트 소실 문제를 막아주는 역할로 이어지게된다
SELU 활성화 함수는 아주 깊은 신경망에서 다른 함수들에 비해 높은 성능을 보이지만
자기 정규화가 일어나기 위해서는 몇 가지의 조건이 필요하다
- 우선 입력 특성은 반드시 정규화(평균 0 표준 편차 1)되어야 한다
- 모든 은닉 층의 가중치는 르쿤 정규 분포로 초기화되어야 한다
- l1, l2 규제, 맥스-노름, 배치 정규화, 드롭아웃과 같은 규제를 사용할 수 없다
이러한 제약이 있기에 좋은 성능을 보임에도 많이 사용되지는 않았다
또한 GELU, Swish, Mish 활성화 함수가 대부분 작업에서 더 나은 성능을 보여 더 쓰이게되었다
GELU, Swish, Mish 함수
GELU 함수
GELU 함수는 ReLU 함수의 부드러운 변형으로 정의는 다음과 같다


Φ는 표준 정규분포의 누적 분포 함수를 의미하고
평균이 0 분산이 1인 정규 분포에서 랜덤하게 샘플링한 값이 x보다 작을 확률을 의미한다
다시 말해서 GELU 함수는 입력값을 정규분포 기반의 확률값으로 조절하여 통과시키는 활성화 함수이다

이 함수는 모든 위치에서 부드러운 곡률이 존재하기에 복잡한 함수에서 잘 작동하며
위에서 소개한 활성화 함수들보다 성능이 뛰어난 경우가 많다
하지만 계산량이 조금 더 많기는 하다
Swish 함수
GELU 함수를 소개한 논문에서 SiLU 함수도 함께 소개되는데
이 함수는 다음과 같이 정의된다

정규분포의 누적 분포 함수를 사용하는 대신 시그모이드 함수를 사용한 형태이다
이 함수가 소개된 이후 다른 연구진이 SiLU 함수를 다시 연구하면서 Swish라는 이름을 붙였다
이 연구진은 하이퍼파라미터 β를 추가하여 이 함수를 일반화하였다

SiLU는 Swish 함수에서 β=1인 경우를 의미하게된다
참고로 β=1.702이면 GELU 함수와 거의 비슷한 형태의 함수를 나타내며
이렇게 하는 것이 GELU 보다 계산이 훨씬 빠르고 잘 작동한다
Mish 함수
GELU, Swish 함수와 형태가 비슷한 Mish 함수도 있다
이 함수는 아래와 같이 정의된다


이 함수 역시 GELU, Swish와 마찬가지로 모든 구간에서 부드러운 형태의 함수인 ReLU의 변형이고
Mish 함수가 GELU, Swish보다 근소하게 더 나은 성능을 보인다
아래 그래프는 GELU, Swish( β = 1, β = 0.6), Mish 함수의 그래프를 나타낸다

Mish 함수는 음수 구간에서는 Swish( β=1)과 거의 겹치고 양수 구간에서는 GELU와 거의 겹친다
마치며
이번 글에서는 역전파 과정에서 발생할 수 있는 그레디언트 소실 문제와
이를 해결하기 위한 가중치 초기화 방법들과 다양한 활성화 함수를 알아보았다
한 번에 많은 초기화 방법들과 활성화 함수들을 알게되니 뭐가 뭔지가 헷갈리게 되는 순간이 있었는데
각 함수들마다 이게 어떤 문제를 해결하기 위해 생겼고 어떤 장단점이 있는 지를 되짚어보니 이해에 도움이 되었다
너무나도 많은 종류들이 있기에 데이터 규모나 문제 상황 등을 적절히 고려하여 조합을 고르는 것이 중요하다고 생각했다
또한 처음에 역전파 과정에서 그레디언트를 구할 때 연쇄법칙에서 손실함수의 미분값만 곱해지는 구조인줄 알았어서
왜 그레디언트 손실이 일어나는지 이해가 되지 않았었다
결국 연쇄법칙 과정에서 활성화함수의 기울기도 곱해진다는 것을 알게되었고
그레디언트 손실 원인까지 자연스럽게 이해가 될 수 있었다.
'AI > Deep Learning' 카테고리의 다른 글
| [DL] 신경망 규제 (1) | 2026.07.14 |
|---|---|
| [DL] 학습률 스케줄링 (0) | 2026.07.13 |
| [DL] 고속 옵티마이저 (0) | 2026.07.12 |
| [DL] 배치 정규화(batch normalization) (0) | 2026.07.11 |
| [DL] 퍼셉트론과 역전파 알고리즘 (0) | 2026.06.20 |
