[부스트캠프 AI Tech 7기] Week 4

jinnk0·2024년 8월 30일

4주차 회고🫠

벌써 부스트캠프의 4주차가 끝나간다. 즉 부스트캠프를 시작한지 한달이 되었다.😭
부스트캠프를 시작한지 얼마 되지 않은 것 같은데 한달이 너무 순식간에 지나갔다.
나는 아직도 부스트캠프를 시작했을 때와 아무것도 달라지지 않은 것 같은데 한달이 지나가버렸다는게 뭔가 시원섭섭하다.😢
한편으로는 한달동안 내가 그다지 성장하지 않은 것처럼 느껴져서 불안하기도 하다. 그래서 오늘은 지난 한달간 내가 새롭게 익히게 된 것에 대해 돌아보는 시간도 따로 가져보려고 한다.

Github 특강

이번주에는 Github 특강 시간이 있었다.
그동안 Github와 Git을 잘 활용하고 있다고 생각했는데 강의를 듣다보니 내가 Git의 원리와 개념을 잘 모르는 상태로 사용하고 있다는 사실을 알게 되었다.🤔
그 전에는 원리를 모르다보니 깃에서 문제가 생기면 유독 허둥지둥했었는데, 원리를 알고 나니 그 때 그렇게 당황할 필요가 없었다는 걸 느꼈다.
특히 이전에 과거 이미 커밋한 내용을 수정하고 싶을 때 문제가 많이 생겼었는데, checkout과 reset의 원리에 대해 알고 나니 이제는 잘 해결할 수 있을 것 같다.

피어세션

이제는 피어세션 시간에 진행하는 코딩테스트 스터디가 꽤 자리를 잡았다.
이번주에 진행한 알고리즘은 스택&큐였다. 꽤 활용도가 높고 잘 알려진 자료구조라서 익숙하다고 생각했는데, 막상 문제를 보니 이렇게도 사용할 수 있구나 싶었던 부분들이 있었다.
새로운 팁도 얻었는데, 팀원 덕분에 vscode에서 백준의 코딩테스트 문제를 풀 때 사용할 수 있는 유용한 extension에 대해 알게 되었다. Competitive Programming Helper라는 extension이었는데, 처음에 파이썬 환경 변수가 설정이 안되어 있어서 제대로 작동을 안하는 사소한 이슈가 있기도 했다.😓

한 달간 새롭게 배운 것

👣1주차 : PyTorch, Tensor, 선형 회귀 모델, 이진 분류 모델

1주차에는 경사하강법을 이해하기 힘들어했지만 지금은 경사하강법이 등장할 때마다 반가움을 느끼고 있다.😊
1주차라 처음 사용해보는 Colab이 어색하고 모르는 게 많았지만 지금은 익숙하게 사용하고 있다. 하지만 Colab 단축키들을 좀 더 알아보는 것도 좋을 것 같다.

👣2주차 : ML LifeCycle, Neural Network, Transformer

2주차는 익숙하지 않은 개념들을 많이 배워서 혼란스럽고 어려웠던 기억이 난다.
과제를 진행하면서 처음으로 오류가 발생해서 이를 디버깅하는 경험도 했었다.
팀원들과 가까워지기 시작하면서 피어세션에 알찬 이야기들을 많이 나누기 시작했고, 멘토링 시간의 조언 덕분에 직무에 대해 생각하기도 했다.

👣3주차 : EDA & DataViz

3주차는 데이터 시각화에 대해 배웠다. 내용은 크게 어렵지 않았지만 데이터를 다루고, 데이터를 바라보는 시각에 대해 많이 배웠다.
두런두런 세션을 처음 진행했던 주간이기도 했다. 두런두런 시간에 앞으로 계속 부스트캠프를 진행하고, 공부해나가기 위한 원동력을 많이 얻었다.
피어세션 시간에는 본격적으로 코딩 테스트 스터디를 활발히 진행하게 되면서 코딩테스트 알고리즘에 대해서도 많이 배웠다.

한 주간 학습한 내용

😱특히 어려웠던 내용

❗MLE(Maximum Likelihood Estimation)은 1주차부터 꾸준히 나오는 중요한 이론인데 아직도 조금 어렵다. 개념적으로는 이해가 되지만 수식, 특히 전개 과정이 이해가 잘 안된다. 그래도 이번주는 수식 전개 과정에 대해 구체적으로 설명해주셨다. 그래서 조금 더 구체적으로 이해할 수 있었지만 여전히 완벽하게 이해하진 못한 것 같다.

❗VI(Variational Inference, 변분추론) 또한 연속되는 수식의 향연 때문에 이해하기 쉽지 않았다.😅 그래서 수식에 너무 집중하다보니 변분추론이 왜 사용되는지, 어떻게 사용되는지에 대한 내용을 잘 파악하지 못했다.

📚복습 및 보충 학습

📍MLE(Maximum Likelihood Estimation)

MLE, 즉 최대우도측정법은 확률이다.
데이터 샘플(X=x1,x2,...,xnX = x_{1}, x_{2}, ..., x_{n})이 주어지고, 이 데이터 샘플이 추출되었을 것이라고 추측되는 데이터 분포의 모수(θ\theta)를 가정한다. 그리고 이 모수로부터 관측된 데이터 샘플이 추출될 확률이 Likelihood(우도)(P(Xθ)P(X|\theta))이다.
이 Likelihood를 최대화할 수 있는 모수 값을 찾는 것이 바로 MLE이다.
이 MLE를 최대화하는 값을 찾는 과정에서 계산을 좀 더 간단히 하기 위해 우도 함수에 로그를 취하기도 한다.

📍VI(Variational Inference)

VI, 즉 변분추론은 복잡한 확률 분포를 근사하기 위해 사용한다. 특히 사후 확률 분포(Posterior distribution)을 근사하기 위해 많이 사용한다. 사후 확률 분포를 계산할 때 데이터의 주변 분포(P(X)P(X), Marginal Likelihood)를 계산해야 하는데, 이는 데이터가 나올 전체적인 가능성을 의미한다. P(X)P(X)를 계산할 때 모수θ\theta에 대해 적분을 해야 하는데, 이 적분이 복잡하고 계산이 어렵다. 이를 해결하기 위해 VI를 사용한다.

VI는 사후 확률 분포를 직접 계산하는 대신, 좀 더 간단하고 계산하기 쉬운 형태의 분포를 가정하고 이 근사 분포 Q(θ)Q(\theta)와 사후 확률 분포 P(θX)P(\theta|X) 사이의 차이를 최소화하는 것이다. 이 때 이 차이를 측정하는 방법으로 KL divergence을 사용한다. KL divergence를 최소화하는 Q(θ)Q(\theta)를 찾으면 이 Q(θ)Q(\theta)P(θX)P(\theta|X)와 근사하므로, 사후 확률 분포를 직접 계산하는 대신 근사 분포 Q(θ)Q(\theta)를 사용하면 된다.

⚠️Troubleshooting

[기본 과제 3]에서 모델의 출력 결과를 확인할 때, 모델의 출력값을 토큰화하여 변환하는 과정에서 존재하지 않는 항목의 id값이 도출되는 문제가 있었다. 이 오류에는 추측되는 원인이 크게 두 가지가 있었다.

첫번째는 모델의 학습 과정 문제였다. 모델을 학습시키는 과정에서 관측한 값만 고려하도록 했어야 했는데, 그렇게 하지 않으면서 모델이 잘 학습되지 않았고 잘 학습되지 않은 모델이 너무 작은 값들을 출력하면서 존재하지 않는 항목의 id인 0이 많이 나오게 된 것이다.

두번째는 id 처리 문제였다. 이는 과제 자체의 오류이기도 했는데, 도출한 id 항목의 값을 +1 하여 계산했는데 그 자체로 사용하면서 오류가 생겼다.

따라서 모델을 관측한 값만 고려하여 학습시키고, id 항목에 +1을 하여 결과를 출력하니 문제가 생기지 않았다.

다음주 목표

🚩발견한 문제점이나 오류(오타) 등에 대해서 혼자 고민하기보다는 공유하고 질문하기

0개의 댓글