프로그래머로 산다는 것 - 라이엇 게임즈 유석문 CTO

1. 개발자???

2013 문화체육관광부 우수학술도서 - 프로그래머로 산다는 것(황상철, 하호진, 이상민, 김성박 - 로드북)

해당 책이 출판되고 나서 많은 개발자들이 화를 냈음. 책 표지가 화장실에서 노트북을 하는 장면이었기 때문임. 미래도 없고 꿈도 없듯이 밤낮없이 화장실에서도 일하면서 과로로 쓰러지라는 것이냐! 라는 느낌이었기 때문. 기존 개발자들은 연봉도 오르지 않고 쇠퇴하는 경우가 많았기 때문에 프로그래머를 평가절하한 것이냐는 의견이었음. 프로그래머가 왜 되려고 하는 것인가? 대부분의 경우 프로그래밍이 어렸을 때부터 너무 재밌었기 때문에 프로그래머가 된다고 한다. 보통 모바일 게임의 경우 화장실에서도 볼일을 다보고도 계속 하듯이, 프로그래머가 되려고 한 자체는 결국에 이 일이 재밌고 즐거워서, 평생 할 수 있어서이기 때문이어야 할 것이다. 해당 책 소개를 의도한 이유는, 재밌다면 그 일을 계속 하라는 것을 이야기하고 싶어서이다. 코딩이 재밌다면 화장실이 아니라 어디에서 하든 상관없다. 하지만 나를 소진해가면서 밥벌이를 위해서라면 하지 마라는 것을 이야기하고 싶었다.

1.1 개발자??? or ?????

보통 신입사원 면접을 진행할 때 겪는 일이다. 기술면접 할 때 아이스브레이킹 시간을 가지고 간단한 기술문제를 푼 이후 난이도 조절을 통해 다음단계를 진행하게 된다. 아래는 3-5년차 자바 개발자를 대상으로 면접을 할 때 냈던 문제이다.

image-20210817181151099

위의 문제를 가지고 해당 자료구조(스택)를 만들어보라는 문제를 냈다. 하지만 클래스 선언도 못하는 경우가 허다했다. 이력서는 화려한데 왜 못하지..? 라고 물어보면 “최근에는 개발보단 관리를 많이 하느라..” 라는 답변이 돌아온다. 이런 상황이 이해가 되지 않았음. ‘읭?’

1.2 개발(놈) Begins - 업무 할당

프로그래밍 관련 학과를 졸업하고, 현업에서의 시간도 어느정도 지났는데 왜 하지 못할까라는 고민에 대한 고찰.

회사에 처음 가서 어떤 과제를 받았다고 해보자. 정상적이지 않은 회사라고 한다면 대부분 “이 일을 언제까지 끝낼 수 있겠니? 참고로 시간이 없어.” 라면서 일을 시킨다. 무조건 그 시간안에 다 해야 하고, 심지어 충분한 레퍼런스나 리소스도 없다. 관리자가 시간만 관리하고 기술적 지원/교육도 없는 상태에 데드라인에 맞춰서 일을 끝내야 하는 상황에 놓였다고 상상해봐라..

자세히 보기

시각화 이해하기

1. 데이터 이해하기

1.1 데이터 시각화

데이터 시각화를 위해서는 ‘데이터’가 우선적으로 필요하다. 데이터를 어떻게 시각화하냐는 데이터를 로컬하게 보냐 글로벌하게 보냐에 따라 다르다. 개별 데이터를 보여줄 것인지 전체 데이터에 대한 구성을 보여줄 것인지를 정해야 하고, 그러기 위해서는 어떤 데이터가 있고 어떤 데이터셋이 있는지 알아야 한다.

데이터에 대해서 어떤 것들을 전달할 수 있고, 어떤 데이터셋이 있는지 알아보자.

1.2 데이터의 종류

수많은 데이터셋이 있고, 데이터들은 여러 특징들로 나눌 수 있다.

  • 정형 데이터
    • 일반적으로 csv 파일로 제공되는 데이터이다.
    • Row: 데이터 한 개 (item)
    • Column: Attribute (feature)
    • 가장 쉽게 시각할 수 있는 데이터셋이며 통계적 특성과 Feature 사이의 관계들로 많이 이야기할 수 있다.
    • 데이터 간 비교하고, 통계적 특성들을 비교할 수 있음.
  • 시계열 데이터
    • 시간 흐름에 따른 데이터이며, Time-Series Data라고 한다.
    • 기온, 주가 등의 정형데이터와 음성, 비디오와 같은 비정형 데이터가 존재한다.
    • 시간 흐름에 따른 추세(Trend), 계절성(Seasonality), 주기성(Cycle) 등을 살필 수 있다.
  • 지리 데이터
    • 지도 정보와 보고자 하는 정보간의 조화가 중요하며, 지도 정보를 단순화 시키는 경우도 존재한다.
    • 거리, 경로, 분포 등 다양하게 실사용에 이용되고 있다.
    • 정형데이터 시각화와 다르게 실제로 어떻게 사용될 수 있을지가 중요하고, 거리 정보가 굉장히 중요하다.
    • 위도 경도 등도 추가로 학습해야한다.
  • 관계형(네트워크) 데이터
    • 객체와 객체 간의 관계를 시각화할 수 있으며 객체는 Node로 표현하고 관계는 Link로 표현한다.
    • 크기와 색, 수에 따라서 객체와 관계의 가중치를 표현한다.
    • 직관적이지 않아서 Mapping 방법이 굉장히 중요하며 네트워크를 구성할 때 Huristic 하게 이용한다.
  • 계층적 데이터
    • 회사 조직도나 집안의 가계도 등인 Hirarchy 를 강조하는 시각화이며 보통 Tree 구조로 표현한다.
    • 한국 수출 아이템에 대한 분야별 분포 등을 계층적 데이터로 시각화할 수 있다.
  • 다양한 비정형 데이터

데이터는 굉장히 다양하기 때문에 대표적으로 4가지로 분류한다.

  • 수치형 데이터 (Numerical)
    • 연속형 (Continuous): 길이, 무게, 온도 등 데이터 간 실수값들이 존재하는 데이터
    • 이산형 (Discrete): 주사위 눈금, 사람 수 등 중간이 없고 떨어져 있는 한 단위들이 데이터인 것.
  • 범주형 데이터 (Categorical) - 문자열로 나타나는 것들
    • 명목형 (Nominal): 혈액형, 종교, MBTI 등 순서가 딱히 중요하지 않은 데이터
    • 순서형 (Ordinal): 학년, 학점, 등급 등 순서가 존재하는 데이터. 이산형으로 볼 수도 있지만 스케일 자체가 비율이 있다면 이산형, 수치가 절대적이지 않으면 순서형으로 표현하는 편이다.

시각화 이전에 이 데이터는 어떤형 데이터이기 때문에 이런 시각화를 해야겠다! 라는 접근이 필요하다.

자세히 보기

Generative Models 소개

What I cannot create, I do not understand. - Richard Feynman

생성 모델을 학습한다는 것에 대해서 가장 처음에 생각하는 것은 그럴듯한 문장 혹은 이미지를 만드는 것이라고 생각한다. 하지만 이것이 전부가 아니라, 생성모델은 그것보다 많은 것을 포함하는 개념이다.

Generation: 강아지와 같은 이미지를 만드는 것도 생성모델이 하는 일이지만, Density estimation 어떤 이미지가 들어왔을 때 확률값 하나가 튀어나와서 이미지가 고양이 같은지 강아지 같은지 강아지가 아닌 것 같은지 구분하고 싶은 것임. 이상행동감지로 활용될 수 있다. 엄밀히 생성모델은 Discrimity 모델을 포함하고 있다. 즉 생성해내는 것만 아니라 구분하는 것까지 포함하고 있다.

이러한 모델을 보통 explicit model 이라고 한다. 확률값을 얻을 수 있는 모델을 뜻함.

Unsupervised representation learning 이라고 강아지가 있으면 강아지는 귀가 두개고 꼬리가 있고 등의 특성이 있을텐데 이것을 feature learning 이라고 한다. 이 feature learning이 생성모델이 할 수 있는 것으로 표현하기도 함.

Basic Discrete Distributions

  • Bernoulli distribution
    • 이것을 포함하는 확률분포에는 숫자가 하나 필요함. 동전을 던졌을 때 앞 뒤가 나오는 것. 카테고리면 n개가 필요한 것. 주사위를 던졌을 때 n개가 필요한 것이 아니라 n - 1개가 필요함.
  • Categorical distribution

RGB 이미지 하나를 픽셀로 표현할 때 (r, g, b) ~ p(R, G, B) 는 256 256 256 가지가 있다. 그렇다면 이것을 표현하는 파라미터는 256 256 (256 - 1) 개가 필요함.

자세히 보기

Transformer 소개

What makes sequential modeling a hard problem to handle?

문장은 항상 길이가 달라질 수도 있고 문장 어순을 바꾸는 등 문법에 항상 완벽하게 대응하는 문장을 만들지 않듯이 중간에 뭐 하나가 빠져있을 수 있음. 또한 permuted sequence라고 뭐 하나가 밀리거나 하는 등의 문제가 있을 수 있어서, 중간에 무언가가 바뀐 시퀀셜 데이터가 들어간다면 모델링이 굉장히 어려워진다. 이것을 해결하기 위해 Transformer가 등장하였고, self-attention 이라는 구조를 사용하게 된다.

Attention is all you need - Transformer is the first sequence transduction model based entirely on attention.

RNN이라는 구조에서 (하나의 입력이 들어가고, 다른 입력이 들어갈 때 이전 뉴런에서 가지고 있던 cell state가 다음 뉴런으로 들어가는 재귀적 구조) Transformer에는 재귀적인 구조가 없고, attention 구조를 활용했다는 것이 가장 큰 변화이다.

From a bird’s-eye view, this is what the Transformer does for machine translation tasks.

트랜스포머 방법론은 시퀀셜한 데이터를 처리하고 인코딩하는 문제이기 때문에 NMT에만 적용되지 않고, 이미지 분류, detection, 이미지분류, Dall-e(문장에 맞는 이미지 생성) 등 여러 태스크에서 활용되고 있다.

어떠한 문장이 주어졌을 때 (불어문장) 그것을 다른 문장으로 바꾸는 것을 하려고 하는 것임. 시퀀셜 데이터를 넣었을 때 시퀀셜 데이터가 나오게 하는 것.

입력 시퀀스와 출력시퀀스의 단어 숫자가 다를 수 있고, 입력 시퀀스와 출력 시퀀스의 도메인이 다를 수 있는 하나의 모델구조임.

원래 RNN에서는 세 개의 단어가 들어가면 세 번의 작동을 했는데, 트랜스포머에서는 세 개든 백 개든 한 번에 인코딩을 할 수 있게 된다. 이렇듯 self-attention 구조에서는 n개의 단어를 한 번에 처리할 수 있다.

자세히 보기