본문 바로가기

AIFFEL 회고록

[Week 5] 인공지능한테 이것저것 시켜보자

Exploration

7. 나랑 닮은 연예인을 찾아줘!

한 10년도 더 전에 스마트폰이 처음 나왔을 때 가장 핫했던 앱 중에 하나가 나와 닮은 연예인을 찾아주는 앱이었다. 당시 학교 다닐 때 너도 나도 사진을 찍어서 어떤 연예인이랑 닮았는지 자랑하고 다니는 게 유행이었다. 그 때 그 앱이 어떻게 닮은 얼굴을 찾아주었는지 이번 시간을 통해 배울 수 있었다. 각 이미지별로 얼굴 임베딩 벡터를 추출하고, 서로 다른 이미지 간의 벡터 거리를 계산해서 거리가 가까운 얼굴을 찾아주는 것이었다. 프로젝트를 할 때 일부러 웃는 사진과 무표정인 사진을 골라 모두 테스트해봤는데, 놀랍게도 Top 5에 같은 연예인이 대거 포진되어 있었다. 다른 표정이어도 유사한 얼굴이라고 잘 인식해서 신기했다. 물론 결과는 비밀이다. 채점해주시는 퍼실님만 아시겠지...

 

(출처: https://extmovie.com/freeboard/50986304)

8. 재밌는 영화 좀 추천해줘!

말로만 듣던 위대한 추천시스템을 드디어 배워보게 되었다. 온라인 쇼핑몰이나 스트리밍 서비스를 이용할 때 어떻게 내가 관심 있을 만한 항목들을 귀신같이 찾아서 추천해주는지 궁금했는데, 그 궁금증이 어느 정도 해결되었다. 사용자 m명이 n개의 아이템에 대해 평가한 데이터로 평가행렬(Rating Matrix)을 만드는 협업 필터링(Collaborative Filtering) 방식을 사용하는 것이었다. 하지만 유저 x 아이템 크기의 평가행렬은 용량이 너무 크기 때문에 CSR(Compressed Sparse Row) Matrix를 생성하고, Matrix Factorization 모델을 학습시키는 것이 핵심 비결이었다. MovieLens 데이터로 영화 추천시스템을 만드는 프로젝트를 진행했는데, 생각보다 꽤 괜찮은 영화들을 추천해줘서 신기했다. 

 

(출처: https://developers.google.com/machine-learning/recommendation/collaborative/matrix)

 


Fundamental

10. 파이썬 클래스와 객체지향 프로그래밍

파이썬에서는 모든 것이 object다. 객체의 상태(state)를 나타내는 속성(attribute)은 변수로 구현되고, 객체의 동작(behavior)을 나타내는 메소드(method)는 함수로 구현된다. 파이썬에서 이러한 객체를 설계하기 위해 사용되는 것이 바로 class 문법이다. 그렇다고 한다. 아직은 클래스의 개념이 너무 추상적으로 느껴지고 이해가 잘 되지 않는다. 함수처럼 어떤 기능과 동작들의 묶음이지만 함수보다 상위 개념인 어떤 존재 정도로 막연하게 받아들였다. 복습을 통해 손코딩을 해보면서 차근차근 익혀나가야 할 부분이다.

 

11. 포켓몬과 함께하는 EDA, Feature Engineering

캐글의 포켓몬 데이터를 사용해서 EDA와 전처리를 해보고, 전설의 포켓몬을 분류하는 모델을 만들어보았다. AI 프로덕션 과정에서 데이터 전처리가 80%를 차지한다는 말이 있듯이, 데이터를 살펴보고 목적에 맞게 가공하는 작업은 항상 중요하다. 그 과정을 포켓몬 데이터를 통해 재미있게 배울 수 있었고, 오랜만에 추억도 소환할 수 있어서 좋았다. 월요일에 클래스의 늪에서 허우적거렸다면, 수요일에는 포켓몬의 숲에서 산책한 기분이었다.

 

(출처: https://www.pinterest.com/pin/430375308122235371/)

12. 비지도학습

오늘은 비지도학습에서 대표적으로 사용되는 클러스터링과 차원 축소 기법에 대해 배웠다. 대표적인 클러스터링 기법에는 k개의 기준점을 중심으로 가까운 데이터들을 묶어주는 K-means 알고리즘과, 데이터의 밀도를 기준으로 묶어주는 DBSCAN 알고리즘이 있었다. 그리고 차원 축소 기법에는 데이터 분포의 분산을 유지하는 PCA와 데이터 간의 상대적 거리를 유지하는 T-SNE가 있었다. 네 가지 알고리즘의 작동 원리와 장단점을 살펴볼 수 있는 유익한 시간이었다.

 

 


한 주를 마무리하며

오늘이 벌써 1월의 마지막 평일이다. 2021년 첫 달의 마지막 주를 열공모드로 불태웠다면 좋았겠지만... 아쉽게도 이번 주는 역대급으로 피곤한 일주일이었다. 계속 늦게 자다보니 점점 피로가 쌓여서 결국 뇌가 버티지 못하고 몸을 셧다운시키는 현상을 여러 번 겪었다. 마치 핸드폰 배터리를 딱 5%씩만 충전해서 간당간당하게 버티다가 방전돼버리는 느낌이었다. 앞으로는 잡생각에 빠지지 않고 최대한 일찍 자려는 노력을 해야할 것 같다. 그런데 신기한 것은, 이렇게 피곤한 와중에도 노드를 밀리지 않았다는 것이다. 어떻게 했는지 기억은 잘 안나는데 프로젝트도 거의 당일에 끝내서 제출까지 완료한 상태다. 술 마시고 필름이 끊겨도 집으로 돌아오는 귀소 본능처럼, 꾸벅꾸벅 졸면서도 프로젝트를 완성하는 기묘한 능력이 생긴 것 같다.