개발자의 장애 공유 문화
K리그 프로그래머
1. 이번 주 목표
여유 에너지가 없으면 아무것도 하지 않는 나에게 있어 이번 코스에 합류하기로 한 결정은 꽤 큰 의미를 가지고 있다. 인공지능 시대의 흐름이 내게 꽤 크게 와닿았다는 방증이다.
당장 이 코스를 제외하고도 개인 일정이 굉장히 타이트한 상황이었기 때문에 거창하게 주 단위의 목표를 정해놓고 시작하지 않았다. 그저 쓸 수 있는 시간을 최대한 활용하겠다는 다짐뿐…
2. 코스 개요
첫 주차의 기록이기 때문에 앞으로의 과정을 조금 살펴보자.
사전 준비 과정
나는 사전 준비 기간이 거의 다 지나갔을 때 쯔음에 합류 결정이 되었다. 솔직히 말하면 아 저런것들을 했구나. 미리 들었다면 이런 부분엔 유리했겠지만 필수는 아니였겠다. 하는 정도의 생각이 들었던 것 같다.
머신러닝과 딥러닝
Linear regression
, Multi-layer Perceptron
, classification model
, cnn
등으로 이루어져 있고 1주차에는 Linear regression
과 Multi-layer Perceptron
까지 학습했다.
솔직히 아직까지도 많이 와닿지 않는다. 엔지니어링 자체보다는 활용에 집중하는데, 아직까진 어떻게 활용하면 좋을지 감이 안잡혀서 그런 것 같다.
자연어 처리
Recurrent Neural Network
, Sequence-to-Sequence
, Transformer
, BERT
, GPT
… 등으로 이루어져 있다.
최근 회사 업무로 인해 개인적으로 자연어 처리에 도전중이라 이 챕터를 제일 기대하고 있다. 이전 챕터와의 차이라면 대충 어떤어떤 식(RAG
- NLP
- LLM
으로 이뤄지는 파이프라인)으로 활용하면 좋을지를 구상하고 챕터를 확인해서 그런게 아닌가 싶기도 하다.
LLM
HuggingFace
, Zero-shot Classification
, ClosedLLM: ChatGPT
, OpenLLM: LLaMA
, Gemma
등으로 이루어져 있다.
HuggingFace
는 NLP 쪽을 찾아보며 몇번 접한적이 있으나 무슨말인지 제대로 못알아 들었다. ChatGPT
같은건 뭐 말하면 입 아픈 정도가 아닐까?
LLM Fine tuning
이 부분은 뭐랄까… 비즈니스적인 기대감을 많이 가지고 있다. 시간이 된다면 키워드를 기반으로 사전 지식을 좀 넣어보면 좋을 것 같다.
3. 학습 내용
1주차의 내용은 딥러닝 이론과 자연어 처리 (1)
이다.
오피셜한 강의 자료 상에서의 목표는 다음과 같다.
머신러닝과 Linear regression(선형 회귀): 먼저 머신러닝의 정의나 수학적인 표현에 대해 다룹니다. 그리고 손글씨에서 숫자를 맞추는 것보다 더 간단한 문제에서 머신러닝의 가장 기본적인 방법론 중 하나인 linear regression에 대하여 다룹니다. Linear regression을 실습하며 머신러닝의 기본적인 틀과 수학적인 표현에 익숙해지는 시간을 가집니다.
Multi-layer perceptron(MLP, 다층 퍼셉트론)와 손글씨 숫자 예측 모델 구현: 본격적으로 손글씨 사진을 보고 숫자를 예측하는 AI를 구현합니다. 먼저 linear regression에서 사용한 모델을 MLP라는 더 강력한 모델로 확장합니다. 그리고 확장한 MLP를 가지고 손글씨 사진을 보고 숫자를 예측하는 AI를 구현합니다.
딥러닝 techniques: 마지막으로 2에서 구현한 AI의 성능을 더 향상시켜 줄 수 있는 weight decay, dropout, layer normalization, Adam optimizer와 같은 기술들에 대해 다룰 것입니다.
Linear regression
내가 결론적으로 이해한 것은 무수히 많은 node
가 분포되어 있고, 그 사이를 지나는 최적화 된 선을 찾는 과정이라고 느껴졌다.
수 많은 선이 존재할 수 있지만, 결과적으로는 수학적 모델링이기 때문에 그 중 가장 선형성을 잘 나타내는 선을 찾는 과정 정도?
Multi-layer Perceptron(MLP)
선형 회귀 모델을 여러 개 쌓고 비선형성을 처리할 수 있게(ReLU
) 만들었음.
여러개를 쌓음으로써 복잡한 형태의 데이터를 처리할 수 있게 함.
Computation graph
MSE
를 Computation graph로 표현하는 과정에서 이해가 잘 되었음. 이 이후에 펼쳐지는 것은…
Back Propagation
Computation graph를 기준으로 각 노드 별 연산을 미분해서 곱한다… 정도인 것 같은데… 수학적으로는 오케이인데, 의미적으로는 솔직히 잘 안 와닿았음.
Deep Learning
특정 데이터 셋을 너무 많이 학습(Over fitting
, 과적합
)하게 되면 일반적인 data에 대한 출력에 대한 기능을 상실함. 딥러닝의 의미는 일반화(Normalization
)에 있는데, 과적합은 일반화가 파괴된 결과물임. 따라서 OverFitting
을 줄여줄 수 있는 기법 중 몇가지를 배웠다.
DropOut
제일 개념이 쉽다. 너무 많이 학습할 것 같으니, 무작위로 중간에 노드 하나씩을 폐기해버리는 것. 되게 재미있었다. 아이러니하지 않은가? 중간에 삽입한 무작위성이 무작위한 입력에 대한 출력을 보장해준다니.
그 외 GeLu
, Layer Normalization
, Adam Optimizer
등을 배웠는데, 잘 모르겠다. 아마도 백그라운드가 부족해서 그런게 아닌가 싶다.
3. 문제 및 해결 과정
기본 과제: MNIST
모델 구현하기
기본적으로 과제를 소화할 수 있는 정도의 베이스 코드를 받았다.
CrossEntropyLoss
적용하고 학습 조건 변경하기.
정확도 측정 함수와 plot 함수는 다음과 같다.
def accuracy(model, dataloader):
cnt = 0
acc = 0
for data in dataloader:
inputs, labels = data
inputs, labels = inputs.to('cuda'), labels.to('cuda')
preds = model(inputs)
preds = torch.argmax(preds, dim=-1)
cnt += labels.shape[0]
acc += (labels == preds).sum().item()
return acc / cnt
def plot_acc(train_accs, test_accs, label1='train', label2='test'):
x = np.arange(len(train_accs))
plt.plot(x, train_accs, label=label1)
plt.plot(x, test_accs, label=label2)
plt.legend()
plt.show()
심화과제: MNIST
예측 모델에 deep learning techniques
개인 일정으로 소화할 수 없었다.
언젠간 복습 차원으로 해봐야 할 듯.
4. 느낀 점 및 개선 방향
배경지식이 부족하다.
꽤 많은 시간을 할애해야 할 것 같은데, 어떻게 소화가 가능할지 아직 잘 모르겠다. 균형을 잘 잡아야 할 것 같다.
생각보다 재미있다.
기본적으로 수학을 좋아해서 무슨 말을 하는지 알아듣기 어렵지 않다.
다만, 그 수학적 모델의 의의가 잘 공감되지 않는다.
이건 배경지식 문제랑 굉장히 밀접하다는 생각이 들기 때문에, 더 많은 시간을 쏟으면 해결이 가능할 것으로 보인다.
5. 코스에 대해서
1주차긴 하지만 대체로 설명이 납득할 만큼 친절했고 재미있었다.
진행적인 측면에서 아쉬움이 좀 많았다. 배경지식의 그라운드를 좀 맞추려는 시도를 했으면 좋았을 것 같다.
우선 참여하는 모두의 합류시기가 다르다. 즉, 합류 시기가 다르기 때문에 사전학습기간에 노출되는 기간이 다르다는 것을 의미한다.
그 것을 온전히 학습자에게 부담한다면 당연히 학습자의 만족도가 떨어지지 않을까?
모집기간과 시작기간을 엄격하게 구분했을 때 비즈니스적 문제가 있다는 것은 공감하나, 학습하는 입장에서는 그 부분에 공감하기 힘들다.
#항해99 #항해플러스AI후기 #AI개발자 #LLM
다음 내용이 궁금하다면?
이미 회원이신가요?
2025년 3월 30일 오후 2:00
ChatGPT 사용할 때 어떤 모델을 선택해야할지 망설여집니다. 모델명만 봐서는 어떤게 좋은지 모르겠더라고요.
... 더 보기이번에 우아한형제들 기술 블로그에 "타입 안전한 API 모킹으로 프론트엔드 생산성 높이기"라는 새 글을 발행하게 되었습니다.
... 더 보기