dukim's blog

[WK01-Day 004][21.08.05.Thu.] 선택과제, 첫 멘토링, 온보딩 키트 도착 본문

Boostcamp AI Tech 2th

[WK01-Day 004][21.08.05.Thu.] 선택과제, 첫 멘토링, 온보딩 키트 도착

eliza.dukim 2021. 8. 6. 22:08

Intro

  • 다른 일을 좀 하다가 어제 새벽부터 선택과제를 팠다. 3번이 MLE 과제라 학습한 내용을 바탕으로 해서 금방 풀 수 있었지만 1번 경사하강법 풀이에는 어려움을 겪어 ​선형회귀, 경사하강법 파트 강의자료를 다시 보고 정리했다.

  • 온보딩 키트 도착

  • 김선민 멘토님과 첫 멘토링 시간

  • 추가합격으로 박준수님꼐서 새로 오심

강의 복습 내용

경사하강법으로 선형회귀 계수 구하기

image

  • $X^{T}_{\cdot k}$는 가운데 식의 중괄호 안의 1/n을 제외한 summation에 해당하는 부분. 총 n개의 데이터 각각에서 d번째 feature에 편차의 제곱(SE)이 곱해지고 전체 데이터에 대해 합산되는 형태
  • 마지막 식에서 분모 L2-norm을 제외하고 보면 이건 k번쨰 beta에 대한 분산을 말함(편차제곱의 평균, MSE)
  • 분모 L2-norm이 곱해지면서 표준편차의 크기만큼 스케일링(RMSE)
  • 직관적으로만 이해함. 수식으로 정확하게 증명한 자료는 여기

마스터 클래스 - 임성빈 교수님

  • 많은 팁들을 주셨지만 다음 한 문장이 핵심
  • AI에서 필요한 수학을 공부한다는 것은 어떤 개념이나 방법론이 어떠한 문제 상황에적용될 수 있는지를 배우는 것
  • line-by-line을 어느 수준까지 해야할까?
    • DL 프레임워크에서 제공하는 건 기초적인 것만 알고 있으면 된다(개념만 알아도 OK, Linear eq의 역행렬 ,GD 알고리즘 구현할 필요 X)
    • 제공되지 않는 테크닉들은 라인바이라인 구현할 줄 알아야한다.
    • 모든 걸 다 기초레벨로 공부 X, 연습해볼 가치가 있다고 생각되는 중요하다는 것들은 직접 구현 연습하자.
    • 언젠가 시니어 엔지니어가 된다면 건너뛰었던 디테일을 메꿔야 할 것

과제 수행 과정 / 결과물 정리

  • 선택과제 1
    • Gradient Descent를 활용한 Linear Regression을 구현문제
    • scalar와 vector의 차이에 신경써서 강의에서 다룬 수식을 그대로 구현
      # initialize
      n = len(train_x)
      

w, b = 0.0, 0.0

lr = 1e-2
n_data = len(train_x)
errors = []

for i in range(100):
# y hat
_y = w * train_x + b

# gradient
# Scaling by the number of the data samples
grad_w = -2 * np.sum(train_x * (train_y - _y))/n
grad_b = -2 * np.sum(train_y - _y)/n

# w, b update with gradient and learning rate
w -= lr * grad_w
b -= lr * grad_b

# loss
y_hat = train_x * w + b
error = 1/n * np.sum(np.linalg.norm(np.array(train_y) - y_hat))

# train log
errors.append(error)
![image](https://user-images.githubusercontent.com/41335296/128510358-4b8b1d26-a3ca-47f0-b11f-3f24a6b4dc74.png)

- mini-batch SGD 구현
  - 앞의 batch GD와 달라지는 부분은 랜덤샘플링을 이용한 배치 구성 부분

initialize

w, b = 0.0, 0.0

lr = 1e-2
n_data = 10
errors = []

for i in range(100):
# sampling
mini_batch_idx = np.random.choice(np.arange(1000), n_data)
mini_batch = train_x[mini_batch_idx]
y = train_y[mini_batch_idx]
_y = w * mini_batch + b
error = np.linalg.norm(y - _y)

grad_w = -2 * (mini_batch @ (y - _y))/len(mini_batch)
grad_b = -2 * np.sum(y - _y)/len(mini_batch)

w -= lr * grad_w
b -= lr * grad_b

# Error graph 출력하기 위한 부분
error = np.sum(np.linalg.norm(y - _y))
errors.append(error)

print("w : {} / b : {} / error : {}".format(w, b, error))

```

image

피어세션 정리

  • 새로 오신 준수님 환영하기
  • 호영님의 NLP 연구동향 정리 발표
  • 각자의 프로젝트 발표시간 : 호영, 한진, 대웅
  • KLUE 벤치마크 맛보기 : 대웅

학습회고

  • 급할 수록 차근 차근 살펴봐야한다.
  • 선형회귀의 경사하강법 vs Equation을 이용한 방식 두 가지의 비교는 기업 면접에 자주 나오는 단골 주제. 비교해서 정리할 필요가 있다.
  • 경사하갈법의 구현. 선택과제로 풀긴 했지만 이 선택이 효율적인 선택이었을까, 문제 풀이에 4, 5시간 넘게 쏟았다.
Comments