Week2 Homework


1. 기초과제

  • 과제 내용
    • Pytorch의 Custom Model 제작에 필요한 nn.Module 함수들에 대한 공부
    • Dataset과 Dataloader의 구현
  • 결과 및 회고

2. 심화과제

  • 과제내용
    • Transfer Learning과 weight 초기화 + Ray사용 해보기
  • 결과 및 회고
    • Transfer Learning은 익히 알던 내용이여서 어렵지 않았다
    • weight 초기화를 할때 랜덤으로 초기화 해주는것보다 특정 initialization 을 진행하는것이 더 성능이 잘 나오는것에 대해 알게 되었다
      • 이미 pytorch에서는 layer별로 내부 Method에 적용되어있다고 한다
      • 자세한 내용은 kaiming_uniform_에 대해 찾아보는것을 추천한다
    • Ray는 코드 실행은 해보았지만 colab GPU 사용량 초과로 인해서 강제 종료 당했다
    • 추후에 Linux 환경의 컴퓨터에서 다시한번 실행을 해 볼 예정이다

Week1 Homework


1. 기초과제

  • 과제 내용
    • 간단한 python의 built-in function 과 문자열 처리를 위한 과제
  • 결과
    • 정규식 라이브러리 re를 사용하여 문자열을 처리해주었다
  • 회고
    • 기초과제 + 첫주라 그런지 난이도는 어렵지 않았다
    • 문제표현상 애매한 점이있었지만, 조교님과의 소통으로 해결함

2. 심화과제

  • 여기서부터 진정한 과제

1. 경사하강법 구현

  • 말 그대로 경사하강법의 구현
  • 차근차근 수식을 코드로 바꾸면 되기때문에 어려운부분은 없었다

2. BPTT 구현

  • 과정
    • RNN의 Backpropagation은 처음 구현하는거라 시행착오가 많았다
  • numpy를 거의 사용 안하고 문제를 풀었는데 조금 연습을 할 필요가 있어보인다

3. 최대가능도 계산 증명 및 구현

  • 가우시안 분포를 통한 최대가능도 계산
  • 로그우도함수
    $$
    \begin{aligned}
    L(\theta|x) &= \sum_{i=1}^{n}\left( -\frac{1}{2}\log2\pi\sigma^2 +\log \exp\left(-\frac{(x_i-\mu)^2}{2\sigma^2}\right) \right)\\
    &= -\frac{n}{2}\log2\pi\sigma^2 - \sum_{i=1}^{n}\frac{(x_i-\mu)^2}{2\sigma^2}\\
    &= -\frac{n}{2}\log2\pi\sigma^2 - \frac{1}{2\sigma^2}\sum_{i=1}^{n}(x_i-\mu)^2
    \end{aligned}
    $$
  • 모평균의 추정량
    $$
    \begin{aligned}
    \frac{\partial L(\theta|x)}{\partial \mu}&= -\frac{1}{2\sigma^2}\sum_{i=1}^{n}\frac{\partial}{\partial \mu}\left(x_i^2-2x_i\mu+\mu^2\right)\\
    &= -\frac{1}{2\sigma^2}\sum_{i=1}^{n}(-2x_i + 2\mu)\\
    &= \frac{X-n\mu}{\sigma^2}\\
    \hat{\mu} &= \frac{1}{n}X\\
    &= \frac{1}{n}\sum_{i=1}^{n}x_i
    \end{aligned}
    $$
  • 모분산의 추정량
    $$\frac{\partial L(\theta|x)}{\partial \sigma} = -\frac{n}{\sigma} + \frac{1}{\sigma^3}\sum_{i=1}^{n}(x_i-\mu)^2$$
    $$\hat{\sigma}^2 = \frac{1}{n}\sum_{i=1}^{n}(x_i-\mu)^2$$

후기

  • 우린 앞으로 편미분과 평생을 같이 살아야한다고
  • 역시 스스로 힘으로 문제를 해결하면 기분이 좋다
  • 다음 심화과제는 어떨지 궁금하다