AI DEEP DIVE Chapter 3. 가중치 초기화 기법 정리

석주영·2023년 2월 7일
0
post-thumbnail

혁펜하임의 AI DEEP DIVE Chapter 3. 가중치 초기화 기법에 해당하는 내용을 듣고 새롭게 배운 내용들을 정리해보겠습니다.

어떻게 들어야 하는가?

정리에 앞서, 제가 생각하기에 본 강의를 100% 활용하는 공부 방식을 추천해보겠습니다.

(1) 새로운 개념이 나온다.
(2) 설명을 듣는다.
(3) 정지하고 질문들을 생각해본다.
(4) 강의를 들으며 질문들에 대한 답을 찾아본다.

딥러닝 / 머신러닝 분야는 인터넷 상에 공부해볼 자료가 바다처럼 넘쳐나지만 오히려 그렇기 때문에 제대로 소화하기가 어렵고, 안다고 착각하는 때가 많은 것 같습니다. 자주 봐서 안다고 착각하는 것인지, 정말 제대로 알고 있는지 파악하는 게 중요한 것 같습니다.

혁펜하임님도 강의 OT에서 파고들며 꼬치꼬치 물어보는 성격이 있다고 하셨는데, 저도 시간이 걸리더라도 이런 태도를 유지하며 강의를 듣고자 노력했습니다.

가중치 초기화 기법 정리

학부 과목으로 딥러닝 수업을 들은 이후에 거의 기억 속에서 잊어가던 내용이었습니다. 캐글이나 Github에서 Pytorch 코드를 자주 보는 편인데, 가중치 초기화 기법들이 명시적으로 나온 부분이 없었기 때문입니다.

이번 기회에 새로 정리해보았습니다.

(1) LeCun Initialization

(2) Xavier Initialization (Sigmoid, Tanh 신경망 사용)

(3) He Initialization (ReLU 신경망 사용)

이 내용을 보고 다음과 같은 질문들을 생각해볼 수 있었습니다. 본 포스트에서는 다음 질문들에 대해 부분적으로만 답변이 되어 있는 상태입니다. 다른 포스트로 점진적으로 추가해나가려고 합니다.

1. 초기화 기법과 활성화 함수의 미분가능성은 관계가 있나?

  • Sigmoid, Tanh 사용하는 신경망은 Xavier 초기화, ReLU를 사용하는 신경망은 He 초기화를 사용합니다.
  • Sigmoid, Tanh vs. ReLU는 미분가능성, 즉 Smooth한 정도에서 차이가 있습니다.
  • 이 차이로 인해 다른 초기화 기법을 선택하게 되는 건지 추측해보았습니다.
  • 이 부분은 확인이 필요할 것 같습니다.

2. PyTorch에서는 어떤 초기화 기법을 사용하는가?

  • PyTorch에서 초기화 기법을 명시해놓은 코드를 많이 보지 못한 것 같습니다. 아마 내부적으로 구현이 되어 있는 것 같은데, PyTorch는 어떤 초기화 기법을 사용할까요?

  • Linear layer 클래스의 생성자 __init__을 살펴보겠습니다.

  • 마지막 줄의 self.reset_hyperparameters()에 초기화 기법이 구현되어 있을 것 같습니다.

Kaiming uniform, 즉 He initialization을 사용하는 것을 확인했습니다. 자세한 내용은 torch.init 공식문서에서 확인할 수 있습니다. 공식 문서

3. 가중치 초기화 때문에 학습이 잘 안 될 확률은 얼마나 될까?

  • 가중치 초기화에 대해서 대부분 신경쓰지 않고 코딩하는 것 같습니다. 실제로 in-production에서는 영향이 미미해서 그렇지 않을까라는 의문이 들었습니다.
  • 가중치 초기화에 따라 loss landscape에서 굉장히 안좋은 위치에서 시작해 학습이 잘 안 될 확률은 얼마나 될까요?
  • 만약 초기화에 따라 모델의 학습이 전혀 달라진다면, 그 모델은 통제하기가 굉장히 어려울 것 같습니다. 초기화에 대해 보다 Robust한 모델은 어떻게 만들 수 있을까요?
  • 이 부분은 따로 포스트를 추가해보겠습니다.

4. 왜 가중치를 굳이 랜덤하게 잡아야 하는가?

  • 강의에서도 나온 질문입니다. 면접 기출이라고 언급하신 걸로 기억합니다.
  • 다 0으로 잡으면 어떻게 되는가?
  • 다 1로 잡으면 어떻게 되는가?
  • 해당 부분은 Backpropagation 강의를 듣고 다시 다뤄보겠습니다.

본 게시글은 패스트캠퍼스 [혁펜하임의 AI DEEP DIVE] 체험단 활동을 위해 작성되었습니다.
강의 링크 : https://bit.ly/3GV73FN

profile
초보 프로그래머

0개의 댓글