unnjena
궁금한이야기J
unnjena
전체 방문자
오늘
어제
  • 분류 전체보기 (28)
    • Graduate M.S. (0)
      • Paper Review (0)
      • Project Related (0)
    • Undergraduate (14)
      • ML & DL (9)
      • Otherwise (1)
      • Programming (4)
    • etc. (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Python
  • AI교육
  • Upstage
  • 세바시
  • 지나영교수님
  • Jump_into_the_AI_World
  • Deepfake
  • 컴퓨터네트워크 #Traceroute
  • #computer_network #컴퓨터네트워크
  • 인공지능입문
  • 업스테이지
  • Annotation #tool
  • network #edge #컴퓨터네트워크
  • AI_Production_Lifecycle
  • 서비스기획
  • 컴퓨터네트워크 #인터넷
  • Coding
  • network #delay #loss #throughput #컴퓨터네트워크
  • 취준일기
  • 인생질문
  • 취준생
  • 카공
  • TEST
  • PM

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
unnjena

궁금한이야기J

Undergraduate/ML & DL

[DL] 좋은 초기화 방법💡

2021. 2. 5. 17:13

[문제]

우리는 AI모델 학습을 위해 학습 파라미터의 초기값을 설정해야 합니다.

사실 학습 과정에서 변경될 값이기 때문에 그리 중요하지 않다고 생각하실지도 모르지만,

피어세션에서 언급된 것처럼 이러한 초기값 설정은 gradent descent 상황에서 출발 위치를 선정하는 것과도 같습니다.

다른 건 몰라도, 극소 값과 가까운 위치에서 초기화 된다면 학습이 빨리 끝나겠죠?!

물론 비용 함수가 극소 값이 되는 가중치 조합을 알고 학습을 시작하지는 않으니 이런 방법을 초기값 설정에 적용할 수는 없습니다만,

분명한 것은 초기값을 잘 설정하면 학습 비용을 줄일 수 있고, 이를 잘 설정하기 위한 연구들도 다양하게 존재합니다 (●'◡'●)

**그렇다면, 다음 중 초기값을 가장 잘 설정한 Case는 어떤 것일까요?

그리고 잘못된 Case에는 어떤 문제점이 있을까요?**

Case1 : 초기 가중치 벡터 값 설정을 모두 '0'으로 설정하는 경우

Case2 : 초기 가중치 벡터 값 설정을 모두 '상수'로 설정하는 경우

Case3 : 초기 가중치 벡터 값 설정을 모두 '무작위 값'으로 설정하는 경우

Hint : 경사하강법(순한맛) pdf 27p에서는 초기값을 np.random.uniform(-2,2)으로 주었습니다.

이것은 좋은 방법일까요!?

딥러닝 모델의 학습 과정

step 1 : 가중치 벡터 초기화

step 2 : 순전파 계산 및 예측값 출력

step 3 : 비용 함수 계산

step 4 : 오차 역전파 및 가중치 갱신

step 5 : 비용 함수 최소화까지 step2~4 반복

딥러닝 모델 학습이란?

가중치가 결과에 미치는 영향 = 기울기 = 미분값
을 계산하여

더 옳은 방향 = 모델 결과와 실제 값이 근사하도록 = loss/cost를 줄이는 방향
= 목적식을 최대(ascent)/최소화(descent) 하는 방향


으로 가중치를 업데이트하는 과정

[해설]

Case1 : 초기 가중치 벡터 값 설정을 모두 '0'으로 설정하는 경우

Case2 : 초기 가중치 벡터 값 설정을 모두 '상수'로 설정하는 경우

⇒ 만약 2층 신경망 가중치가 모두 '0'이나 '상수'라면?

모든 노드의 출력 결과가 같아짐 = 동일한 기울기를 갖게됨 = 오차 역전파 때 모든 가중치가 동일하게 갱신됨

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f651e63b-fdda-4a21-a777-5f36ba33def3/Untitled.png

Case3 : 초기 가중치 벡터 값 설정을 모두 '무작위 값'으로 설정하는 경우 ⇒ 3개 case 중 Best

활성화 함수에 따른 초기값 설정

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b3f1c148-8e29-499c-9409-520bbd40e475/Untitled.png

  • 가중치 분포에서 표준 편차가 1인 정규분포를 사용,
    활성화 함수로 시그모이드 함수를 사용하는 5층 신경망에 무작위로 생성한 입력데이터를 흘리며 각 층의 활성화값 분포를 그린 히스토그램

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4b4c98ca-2c60-4ede-9d66-e30f2e8de618/Untitled.png

  • 각 층의 활성화 값들이 0과 1에 치우쳐 분포
  • sigmoid 함수는 0과 1부근에서 기울기 소실

⇒ 가중치 표준편차를 0.01로 바꿈

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/acc8d565-fd3d-4e42-a177-a04cdd377ca4/Untitled.png

  • 0과 1로 치우쳐지지는 않아 기울기 소실 문제는 없음
  • but, 활성화 값이 0.5 부근에 치우쳐서 분포
⇒ **활성화 값들이 치우쳐졌다는 것**은 다수의 뉴런이 거의 같은 값을 출력하고 있으니 <br>뉴런을 여러개 둔 의미가 없어지게 된다는 의미 ⇒ `표현력 제한`

solution : 권장되는 가중치 초깃값

  • Xavier 초깃값 : 앞 계층의 노드 수가 $n$일 때 표준 편차가 ($1/√n$)인 가중치 분포

    ⇒ 앞 층에 노드가 많을수록 다음 노드의 초깃값으로 설정되는 가중치 표준 편차가 작아져서 가중치들이 중앙에 집중

    ⇒ 시그모이드 함수, $tanh$ 함수(좌우대칭, 중앙부근이 선형인 함수)일 때 사용

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e1298b1-71c8-4a3d-abc8-ee63f2fd6768/Untitled.png

층이 깊어질 수록 형태가 일그러지긴 하지만, 뉴런들이 확실히 넓게 분포됨 ⇒ 표현력 증가

  • He 초깃값 : 앞 계층의 노드 수가 n일 때, 표준 편차가 √(2/n)인 가중치 정규 분포를 사용

    ⇒ 활성화 함수가 렐루(ReLU) 함수일 때에 특화된 가중치 초깃값

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/820fd2d9-fe52-4350-8101-08aa1ce5f237/Untitled.png

1,2의 경우 0 부근에 활성화 값이 쏠림, He 초깃값은 모든 층에서 균일하게 분포

결론과 예시

활성화함수로 ReLU를 사용할 때는 He 초깃값을, sigmoid 나 tanh 함수를 쓴다면 Xavier 초깃값을 쓰면 좋다 😎

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/759a0bc9-6926-472e-ba86-0d212fd2d2f5/Untitled.png

MNIST 세트에 가중치 초깃값 지정 방식을 다르게 하여 학습 성능을 비교

  • 표준 편차가 0.01인 정규분포 형태의 가중치 초깃값 모델은 기울기 소실 문제로 인해 아예 학습이 이루어지지 않음
  • Xavier나 He 초깃값의 경우는 학습이 제대로 이루어지고 있는 것을 볼 수 있다.
  • 속도 면에서 He 초깃값이 조금 더 빠르게 나타남

레퍼런스

#5-(2) 학습 관련 기술 : 초기 가중치 설정

밑바닥부터 시작하는 딥러닝 6장 - 학습 관련 기술들

'Undergraduate > ML & DL' 카테고리의 다른 글

[Research] 문헌조사① : Face Mask Detection  (0) 2020.09.19
[winSCP] 서버 사용 시 유용한 프로그램  (0) 2020.05.20
[Face Recognition] 얼굴 인식 출입, 어떻게 하는걸까?  (0) 2020.05.20
[PyTorch tutorial] 컴퓨터 비전(Vision)을 위한 전이학습(Transfer Learning)  (0) 2020.05.14
[GPU] 다수의 GPU 중 원하는 GPU 타겟팅하기  (0) 2020.05.13
    'Undergraduate/ML & DL' 카테고리의 다른 글
    • [Research] 문헌조사① : Face Mask Detection
    • [winSCP] 서버 사용 시 유용한 프로그램
    • [Face Recognition] 얼굴 인식 출입, 어떻게 하는걸까?
    • [PyTorch tutorial] 컴퓨터 비전(Vision)을 위한 전이학습(Transfer Learning)
    unnjena
    unnjena
    모든 궁금증과 그 해답을 담는 공간 Github : https://github.com/JaeheeRyu

    티스토리툴바