본문 바로가기
  • 공부한 것들과 여러가지를 기록해요
Python/DL

활성화 함수, 과적합, 기울기 소실

by 티권 2023. 3. 19.

활성화 함수(Activation function)

- 은닉층과 출력층의 뉴런에서 출력값을 결정하는 함수

- 비선형 함수

- 활성화 함수를 사용하는 은닉층 - 비선형층(nonlinear layer)

 

왜 활성화 함수로 비선형 함수를 사용해야하는가?

- 선형 함수로 은닉층을 여러번 추가하더라도 1회 추가한 것과 차이 없음

- ex) 활성화 함수 f(x) = wx,  y(x) = f(f(f(x))) = wwwx = kx

 

- 선형 함수 층을 사용하지 않겠다는 건 아니다!

- 선형 함수 층을을 비선형 층들과 함께 인공신경망의 일부로 추가하는 경우도 있음

  -> 학습 가능한 가중치가 새로 생긴다는 점에서 의미 있음

- 선형 함수를 사용한 층을 활성화 함수를 사용하는 은닉층과 구분

  - > 선형층(linear layer)  or  투사층(projection layer)

 

 

 

대표적인 활성화 함수들

 

계단함수

- 계단 함수는 거의 사용되지 않음

- 퍼셉트론 배울 때 접하게 되는 활성화 함수

 

 

 

시그모이드 함수

- 0~1의 값으로 출력 : 확률로 해석 가능

- 주로 이진 분류를 위해 출력층에서 사용

- 은닉층에서의 사용은 지양됨(기울기 소실 문제 때문)

 

 

 

하이퍼볼릭탄젠트 함수

- 입력값을 -1과 1사이의 값으로 변환

- 미분했을 때 최대값은 1 -> 시그모이드보다 크기 때문에 시그모이드보다 기울기 소실 증상이 덜 하다

- 은닉층에서 시그모이드 함수보다 선호

 

 

 

렐루 함수

- 인공 신경망의 은닉층에서 가장 인기있는 함수

- f(x)= max(0,x)

- 음수 입력하면 0 출력, 양수 입력하면 그대로 반환

- 연산 속도 빠름

- 딥러닝 은닉층에서 시그모이드 함수보다 훨씬 더 잘 작동

- 입력값이 음수면 기울기(미분값)도 0이 됨. 뉴런이 다시 회생하기 매우 어려움 - > 죽은 렐루 문제

 

 

 

리키 렐루 함수

- 죽은 렐루를 보완하기 위한 ReLU의 변형 함수들 중 하나

- 입력값이 음수일 경우 0 이 아니라 0.0001과 같은 매우 작은 수를 반환

- f(x) = max(ax,x)

- a : 하이퍼파라미터, 일반적으로 0.01. 입력값이 음수일 떄의 기울기.

 

 

 

소프트맥스 함수

- 0~1의 값으로 출력 : 확률로 해석 가능

- 시그모이드 함수처럼 출력층에서 주로 사용

- 다중 클래스 분류 문제에 주로 사용됨

 

- 소프트맥스 함수를 적용해도 각 원소의 대소관계는 변하지 않음

: 지수함수가 단조증가함수 이기 때문.

예를들어, 소프트맥스 함수의 입력값중 가장 큰 원소가 2번째 원소라면 출력값중에서도 가장 큰 원소는 2번째 원소임.

결과적으로 신경망으로 분류할 때는 출력층의 소프트맥스 함수는 생략 가능

현업에서도 지수함수계산에 드는 자원낭비를 줄이고자 출력층의 소프트맥스 함수는 생략하는 것이 일반

 


과적합(Overfitting)

- 훈련데이터에 대한 정확도는 높아도 새로운 데이터(검증,테스트 데이터)에 대해서는 제대로 동작 X

 

과적합을 막는 방법들

 

- 데이터 양 늘리기

  - 데이터 양이 적으면 특정 패턴이나 노이즈 까지 암기하게 되므로 과적합 확률 올라감

  - 데이터 양을 늘릴수록 데이터의 일반적인 패턴을 학습하여 과적합 방지

  - 데이터 증식 : 기존의 데이터를 의도적으로 조금 변형하고 추가하여 데이터 양 늘리기

  - 데이터 증식은 이미지에 많이 사용 됨

  - 역번역 : 텍스트 데이터를 데이터 증강하는 방법으로 번역후 재번역하여 새로운 데이터 생성

  - 역번역은 텍스트 데이터에 많이 사용 됨

 

- 모델의 복잡도 줄이기

  - 인공 신경망에서 모델의 복잡도는 은닉층의 수, 매개변수의 수

  - 복잡한 모델이 간단한 모델보다 과적합될 가능성이 높음

 

- 가중치 규제 적용

  - 가중치 w의 값들은 0 또는 0에 가까이 작아지게 함

  - 어떤 특성들은 모델을 만들 때 거의 사용되지 않게됨

 

- 드롭아웃

  - 학습 과정에서 신경망의 일부를 사용하지 않는 방법

  - 드롭아웃은 학습 시에만 사용. 예측 시에는 사용하지 않는 것이 일반적

  - 학습 시 특정 뉴런 혹은 조합에 너무 의존적이게 되는 걸 방지

  - 매번 랜덤선택으로 특정 뉴런들을 사용하지 않으므로 다른 신경망들을 앙상블하여 사용하는 것 같은 효과

 

 

 

 

 

기울기 소실(Gradient Vanishing)

 

- 역전파 과정에서 입력층으로 갈 수록 기울기가 점차적으로 작아지는 현상

- 가중치들이 제대로 업데이트 되지 않음

 

시그모이드함수

 

- 시그모이드 함수는 주황색 구간에서 미분값이 0에 가까운 아주 작은 값

- 초록 구간에서도 최대 미분값은 0.25

 

- 시그모이드 함수를 활성화 함수로 하는 인공 신경망의 층을 쌓는다면?

- 역전파 과정에서 0에 가까운 값이 누적해서 곱해지게 되면, 앞단에는 기울기(미분값)가 잘 전달 안됨

- 이러한 현상을 기울기 소실

- 역전파 과정에서 전파 시킬 기울기가 점차 사라져서 입력층 방향으로 갈 수록 제대로 역전파가 되지 않음

 

 

 

'Python > DL' 카테고리의 다른 글

CNN 이해하기 (2)  (0) 2023.05.08
CNN 이해하기 (1)  (0) 2023.05.02
딥러닝의 학습 방법  (0) 2023.03.19
퍼셉트론 , ANN vs DNN  (0) 2023.03.19
tensorflow 설치 과정에서 오류 해결  (0) 2023.02.08