본문 바로가기

AIFFEL 회고록

[Week 3] Today I Learned

Fundamental Stage

4. 텍스트 데이터 다루기

데이터 중에 가장 기본이라 할 수 있는 텍스트 데이터와 문자열을 다루는 방법에 대해 배웠다. 인코딩과 디코딩, 문자열 관련 메서드, 정규표현식 등 기본적이면서 반드시 알아야 할 내용이었다. 그리고 파일과 디렉토리, 모듈과 패키지의 개념을 비롯하여 이와 관련된 함수와 메서드도 배웠다. 마지막으로 CSV, XML, JSON 파일을 읽고 쓰는 방법을 배웠다. 대부분은 전에 해본 적이 있어 아는 내용이었지만, 머릿속에 중구난방 뒤섞여 있던 개념들을 되짚어보며 정리하는 시간이었다.

5. Data Representation

드디어 NumPy와 Pandas가 등장했다. 여담이지만 전에 빅데이터 교육 과정을 들을 때, 수업에서는 이론적인 부분을 주로 다루다가 프로젝트를 시작하면서 갑자기 맨땅에 내던져진 일이 있었다. 파이썬도 거의 다룰 줄 모르고 코딩도 거의 처음인 제로 베이스 상태로 어찌저찌 프로젝트를 해야 했는데, 그때 만난 친구들이 바로 NumPy와 Pandas였다. 여기서 다시 보게 되어 반가운 마음으로 복습했다. 그리고 array의 broadcast나 이미지를 행렬로 변환하는 것 등 새로운 내용도 배웠다.

6. 딥러닝과 신경망의 본질

오늘 배운 내용은 한 마디로 인공지능 개론 같은 교양 과목이라고 할 수 있겠다. 인공지능과 머신러닝, 딥러닝의 정확한 개념에 대해서 다시 한 번 정리하고, 딥러닝을 관통하는 철학인 행동주의, 인지주의, 연결주의에 대해 배웠다. 딥러닝에 철학적으로 접근하는 관점을 통해 인사이트를 얻을 수 있었다. 그리고 신경망의 본질과 함수의 역할에 대해 배우며 수학적으로도 접근해보고, AI의 현재와 미래에 대해 생각해보는 시간을 가지며 마무리했다.

 


Exploration Stage

3. 카메라 스티커앱 만들기

사진을 불러와서 얼굴을 찾고 적절한 위치에 스티커 이미지를 붙이는 재미있는 프로젝트였다. 카메라 스티커 앱이 어떤 원리로 작동하는지도 이해할 수 있게 되었다. Face Detection과 Face Landmark 등 흥미로운 기술에 대해서도 배우고 numpy array로 이미지 데이터를 다루는 방법도 익혔다. 그리고 예제에서 배운 내용을 직접 프로젝트로 구현해보며 스티커 위치 설정도 해보고, 어두운 사진, 멀리서 찍은 사진, 다양한 각도에서 찍은 사진 등 여러 가지 이미지에 적용해보는 시간을 가졌다.

4. 영화리뷰 감성분석

이번엔 텍스트 데이터가 등장했다. 이미지는 과정이나 결과를 시각적으로 확인할 수 있어서 이해가 잘 되었지만, 텍스트 데이터는 인코딩된 숫자들이 빽빽하게 들어있는 행렬로 나타내기 때문에 직관적으로 이해하기가 어려웠다. 전에 빅데이터 교육에서도 텍스트 마이닝을 약간 배웠는데 그때도 그냥 블랙박스에 텍스트를 전처리해서 집어넣는다는 생각으로 들었던 것 같다. 그래도 이번 프로젝트를 통해 다시 배우니 어느 정도 이해가 되기 시작했다. Word2Vec은 단어의 의미를 반영하여 가중치가 계산된 수많은 word vector로 이루어진 embedding layer를 사용하여 학습하는 알고리즘이라고 설명할 수 있을 것 같다. 아무튼 영화리뷰를 긍정과 부정으로 분류하는 감성분석 프로젝트를 하면서 자연어 처리가 어떤 것인지 감을 잡는 데 도움이 되었다.

 


풀잎스쿨

DeepML 2 - Linear Classifiers

3강에서는 Linear Classification과 Loss Function에 대해 배웠다. 선형 분류기는 Wx + b라는 선형 매핑 함수를 통해 각 클래스의 예측 점수를 계산해서 분류하는 모델이고, 대수적/시각적/기하학적 관점에서 선형 분류의 로직을 설명하는 부분이 강의의 전반부에 나왔다. 후반부에서는 Multiclass SVM Loss, Cross-Entropy Loss와 Regularization을 다뤘다. 손실 함수와 관련된 수학 공식이 많이 등장하다 보니 확실히 난이도가 올라간 게 느껴졌다. 프로젝트를 할 때는 그냥 Cross-Entropy로 설정하고 모델을 돌리면 자동으로 loss가 계산되어 나왔는데, 여기에 이런 심오한 수학적인 개념이 녹아있다는 것이 놀라웠다.

코딩마스터 2 - 문자열

이번 주는 문자열과 관련된 알고리즘 문제를 풀어보았다. 기본적인 구현 문제는 어느 정도 풀 수 있겠는데 문제가 조금만 복잡해지면 머리를 싸매게 된다. 특히 LeetCode 93번 IP Address 문제는 지금 나의 수준에서 이해하기엔 너무나 복잡한 문제였다. 물론 아직 코딩을 시작한 지 얼마 안 되긴 했지만, 그걸 핑계 삼지 않고 꾸준히 문제를 풀어보며 실력을 올려야겠다.

 


한 주를 마무리하며

지난 주가 개발자가 되기 위한 기본적인 셋업을 하는 시간이었다면, 이번 주는 본격적으로 데이터를 다루는 방법을 배우고 이미지와 텍스트를 처리하는 프로젝트를 진행했다. 이제 정말 본격적으로 딥러닝의 세계에 발을 들여놓은 느낌이 든다. 이것은 곧 공부할 양이 점점 늘어나고 있다는 것을 의미하기도 한다. 그래서 Exploration 노드 같은 경우는, 예제로 나온 내용을 나름대로 주피터 노트북에 따로 정리하고 나서 프로젝트를 하는 방식으로 공부하고 있다. 주피터 노트북을 정리 노트로 활용하니 한 페이지에 모든 flow를 담을 수 있어서 이해가 더 잘되고, 깃허브에 올려서 잔디도 심을 수 있으니 일석이조다. 앞으로도 매일 잔디를 기르는 농부(?)의 마음으로 꾸준히 공부해야겠다.