본문 바로가기

활동/SK네트웍스 Family AI 캠프 2기

SK네트웍스 Family AI 캠프 2기 : 8th week (7월 1주차)

7월의 첫 주가 지났습니다.

굳은 결심을 하고 프로그램에 참가했지만, 저 역시 사람이기에 여러 생각이 듭니다.

 

내가 이 길을 제대로 선택한 것이 맞을까...

N개월 뒤의 나는 후회가 없을까...

물론 후회 없는 사람은 이 세상에 없겠지요.

알면서도 가끔씩 두렵다는 생각을 하게 됩니다.

변화의 물결 한복판에 서 있는 시기라 이런 고민을 끝도 없이 하게 되네요.

 

그렇지만 끝없이 변하는 세상 속에서도 불변하는 가치가 하나 있습니다.

결과는 제 스스로 온전히 결정할 수 있는 영역이 아니지만, 과정에 임하는 마음가짐 자체는 제가 결정할 수 있습니다.

이런 태도 하에 프로그램을 끝마치려고 합니다.

 

그동안 잘해왔으니까 이번에도 잘할 수 있을 거야, 문영아!

나는 날 믿어!!

 

● 성취

이번 주에는 포기하지 않고, 한 주간을 무사히 마무리했다는 점에서 스스로 칭찬하고 싶습니다!

 

어린 시절의 저는 '성취'라는 단어의 의미를 잘못 이해하고 있었어요.

'타인에 비해 내가 얼마나 우수한지 나타낼 수 있는 지표'를 성취라고 착각하면서 살았습니다.

 

타인과의 비교 속에서 쉼 없이 살다가, 어느 책 구절 하나가 제 머리 속을 스치고 지나갔습니다. 

새는 알에서 빠져나오려고 몸부림친다. 알은 세계다. 태어나려고 하는 자는 하나의 세계를 파괴하지 않으면 안 된다. 그 새는 신을 향해 날아간다. 그 신의 이름은 아브락사스다.
- 데미안 (헤르만 헤세)-

제가 깨야 하는 '알'은 다른 것이 아닌 '어제의 나'였습니다. 

사람마다 처한 상황도 다르고 자라온 환경도 다른데 서로 비교하는 것이 과연 어떤 의미가 있을까요...

모든 사람들의 알 모습이 같을 수는 없습니다.

 

같은 집단 내에 속해 있는 친구라 해도 각자의 알 모양새는 저마다 다릅니다.

각자의 알 모습이 다르다는 것을 받아들인 이후로, 타인과 비교하는 행동은 나를 좀먹는다는 것을 알게 되었습니다.

 

과정 속에 온전히 몰입해서 그것과 일체가 되었을 때, 비로소 제가 속한 알을 깰 수 있었습니다.

여전히 앞으로도 깨야 할 알들이 무수히 남았다는 것을 압니다.

그래도 겁내지 않고 이전의 경험을 살려서 하나씩 깨보려고 합니다.

 

어제의 나보다 오늘의 내가 더 발전했으니 그 자체로 큰 성취입니다!

 

 

● 학습

이번 주간에는 딥러닝 진도를 마무리했습니다.

주말에는 '인공지능 프로젝트 방법론 특강'을 들으면서 추가 공부도 했구요.

특히 오늘 들었던 특강 내용이 아주 마음에 들었습니다 :)

 

복기를 위해 공부한 내용을 정리해 보겠습니다!

 

# RNN (Recurrent Neural Network)

RNN은 자연어와 시계열 데이터를 처리하는 대표적인 기본 모델입니다.

Recurrent는 '되풀이되는'이라는 뜻을 의미합니다.

위 단어 뜻처럼 RNN은 되풀이되는 형태의 은닉층을 갖고 있습니다. 

 

RNN의 작동 방식을 간략히 설명해 볼게요.

먼저 임베딩을 통해 입력하려는 내용을 여러 조각으로 쪼갠 후, 각각의 입력 시점에 순차적으로 넣어줍니다.

각 시점에서 RNN은 현재 입력 벡터와 이전 시점의 정보(은닉 상태)를 받아들여서 다음 시점의 정보(은닉 상태)를 계산해요.

이렇게 계산한 은닉 상태들에 활성화 함수를 적용하면 결과값들을 순서대로 출력할 수 있습니다.

 

이 그림이 RNN 모델의 대표 예시입니다!

 

이전에 배웠던 DNN과 다르게 생겨서 신기하죠?

근데 RNN에는 치명적인 단점이 하나 있어요.

바로 오래 전 정보를 잊어버린다는 단점이 있답니다.

그래서 이를 보완하기 위해 LSTM, GRU 등의 모델이 나왔어요.

 

# Seq2Seq (Sequence-to-Sequence)

Seq2Seq는 번역기 등의 용도로 사용하는 대표적인 모델입니다. 

여기서 Sequence는 '일련의 연속적 사건들'을 의미합니다.

이름을 통해 유추해서 알 수 있듯이, Seq2Seq는 'A 사건들을 설명하는 언어'를 'B 사건들을 설명하는 언어'로 변환시키는 데에 능통합니다.

이러한 특징 때문에 번역 분야에서 많이 쓰였던 것이구요.

 

Seq2Seq는 Transformer의 기본 뼈대가 되는 아이디어이므로 중요합니다.

왜냐하면 Transformer 모델을 모르면 최신 연구 내용을 알 수 없거든요.

 

 

Seq2Seq의 기본 구조는 2개의 RNN으로 이루어져 있어요.

하나는 인코더(Encoder)로 입력 시퀀스를 받아 문맥 벡터(Context Vector)를 만들고, 다른 하나는 디코더(Decoder)로 그 벡터를 활용해 출력 시퀀스를 생성합니다.

 

여기서 가장 중요한 것은 문맥 벡터입니다!

왜냐하면 여기에는 입력 시퀀스의 핵심 정보가 요약되어 있거든요.

디코더는 이를 활용해서 출력 시퀀스를 만들어 냅니다.

이렇게 하면 그림 속 예시처럼 영어 문장을 프랑스어 문장으로 변환시킬 수 있습니다!

 

간단한 설명을 위해 RNN으로 이루어진 구조만 언급했지만, RNN 대신에 LSTM이나 GRU로 대체해도 괜찮습니다.

그러면 아마 성능이 더 좋게 나올 거예요!

 

# Transformer

Transformer 모델은 Seq2Seq 모델의 한계를 극복하기 위해 등장한 획기적인 모델이에요.

이 모델의 등장 이후로 AI 판도 자체가 뒤집어졌다는 평이 많아요.

그만큼 획기적이니까 Transformer라는 말을 붙였겠죠?

Transformer 모델의 모양새에서 Seq2Seq 모델의 영향을 강하게 받은 흔적이 보이죠?

 

기존의 Seq2Seq 모델은 RNN 기반이라 순차적으로 처리해야 한다는 단점이 있었어요.

엄청나게 많은 데이터를 순차적으로 다루려면 오랜 시간이 걸리겠지요?

이를 해결하기 위해 '어텐션(Attention)' 방식을 도입했습니다.

이걸 사용하면 병렬 처리가 가능해지거든요.

 

병렬 처리의 비결은 바로 행렬 연산입니다!

이러한 과정들을 거쳐서 어텐션 연산을 하는데요.

어텐션 연산은 주어진 질의(Q, Query)에 대해 모든 키(K, Key)와의 유사도를 각각 구한 후, 이를 바탕으로 키와 맵핑되어 있는 각각의 값(V, Value)에 반영해 주는 것을 의미합니다.

 

Transformer 모델을 구성하는 부가 요소들이 더 있지만, Seq2Seq 모델에 어텐션 연산을 도입한 것이라고 핵심부터 기억하시면 편할 것 같습니다!

 

● 개선

이번 주에 다시 복습한 개념들입니다.

주로 머신러닝 기법 위주로 복습했습니다!

 

# XGBoost (eXtreme Gradient Boosting)

XGBoost는 Gradient Boosting이라는 앙상블 기법을 확장한 모델입니다. 

참고로 앙상블은 여러 개의 약한 모델을 합쳐서 강력한 모델을 만드는 기법이에요.

Gradient Boosting은 이전 모델의 예측 오류를 새로운 모델이 보완하는 앙상블 방식인데, XGBoost는 이를 최적화한 모델이라고 볼 수 있습니다!

 

XGBoost는 Gradient Boosting과 어떤 차이점이 있냐면요...

XGBoost는 목적 함수를 정규화된 형태로 정의하고, 이를 최소화하는 방향으로 학습을 시킵니다.

이때 정규화 항목도 함께 도입하여 모델 복잡도를 제어하는데, 이를 통해 과적합을 방지시켜요.

아, 그리고 XGBoost는 Gradient Boosting과 다르게 분산환경에서도 실행이 가능해서 효율성이 더 좋답니다!

 

# LightGBM (Light Gradient Boosting Model)

LightGBM은 XGBoost보다 2년 뒤에 만들어진 모델로, XGBoost보다 더 발전된 형태라고 할 수 있습니다.

 

 

XGBoost는 너비 우선 탐색으로 트리를 키워 나가지만, LightGBM은 깊이 우선 탐색을 사용해요.

따라서 동일한 크기의 트리를 만들 때, LightGBM이 훨씬 빠르게 학습할 수 있습니다. 

 

XGBoost보다 가벼우면서도 성능이 좋은 LightGBM에게도 단점이 존재할까요?

거의 없지만... 굳이 따지자면 하나 존재합니다.

왜냐하면 적은 데이터셋에 적용하는 경우에는 과적합이 발생하기 쉽거든요...

참고로 여기서 적은 데이터셋은 10,000건 이하의 데이터셋을 의미합니다!

 

# PCA (Principal Component Analysis)

PCA는 고차원 데이터를 저차원 공간으로 투영시킴으로써, 데이터의 분산을 가장 잘 설명하는 저차원 직교 축을 찾아내는 방식입니다.

그 축을 따라 데이터를 투영하면, 원래 데이터의 특성을 얼추 유지하면서도 차원을 줄일 수 있어요!

휴... 드디어 블로그 글 다 썼네요....!

저는 이제 남은 일들 하러 가보겠습니다...! 

 

월요일까지 할 일들 모두 끝내고 나서 이번에는 진짜로 좀 쉴 겁니다!!

힘내자 문영아~~~!!!

 

+) 부족한 부분이 있으면 댓글로 말씀해 주세요! 겸허한 마음으로 더 공부하겠습니다.