이 블로그는 Notion으로 이사해요!

다운 Notion 블로그

Git에서 파일의 일부분만 커밋하기

여러 명이서 개발을 할 경우, Git을 통한 코드의 내역 추적은 정말 중요한 일이다. 이에 따라 많은 개발자들은 모든 커밋 로그를 더 상세하고 명시적으로 나누게 위해 노력한다. 하지만 우리는 여러가지 문제를 해결해야 하며, 추가해야 하는 여러가지 기능들이 있기에 종종 하나의 커밋을 보내기 전에 너무 많은 파일 내 수정을 만들곤 한다.

더 나은 엔지니어가 될 수 있을까요

최근에는 ‘제법 안온한 날들’이라는 책을 읽고 있다. 책의 저자는 응급실에서 근무하는 의사다. 응급실에서는 하루에도 수 많은 중한 환자들이 들어오고, 의사는 수도 없이 그들에게 생명이나 생활에 크나 큰 지장이 있는 병과 죽음과 생명을 목격하고 이야기한다.

Python linting, formatting, testing, 생산성을 위한 몸부림

Tool을 사용하는 데에 익숙하고 생산성이나 자동화라는 키워드에 목이 메어 있는 천성 개발자들이라면, 누구나 소프트웨어 개발 과정을 더 일정한 규칙에 통일시키고, 기대했던 결과를 그대로 눈으로 확인하고, 그래서 전체 개발 프로세스를 조금 더 편하게 만드는 데에 관심있을 것이다. Python 사용자들은 그 프로그래밍 언어의 신념 (Simple is better than complex)과도 일맥상통하게 이러한 개발자들의 요구에 답하는 도구들을 많이 제공하고 있다. 그 중 내가 사용하는 도구들을 몇 가지 소개한다.

Multi-gpu 환경에서 자동으로 적절한 GPU 하나 골라서 학습하기

하나보다 많은 GPU를 가지고 있더라도 언제나 딥러닝 모델을 multi-gpu로 데이터 병렬화 혹은 모델 병렬화를 구현하여 학습을 진행하는 것은 쉽지 않은 일이다. PyTorch처럼 처음부터 다양한 구현 모델을 염두해두었거나, 오픈소스 커뮤니티가 최근 가장 활성화되어 있는 라이브러리에서는 병렬화 구현이 유리하지만, TensorFlow 같은 경우 긴 세월에 걸친 버젼 업그레이드와 수시 때때로 deprecated 되는 API로 인하여 코드 유지보수, 버져닝, 호환성 개선, API의 버젼에 따른 병렬화 방법론의 차이를 보여 API 문서를 제법 잘 따라하더라도 모델에 따라서는, 혹은 전체 구현이 너무나 single-gpu를 기준으로 만들어져 효율적인 multi-gpu 병렬 학습의 구현이 어려운 경우도 있다. 물론 시간이 많거나 다른 제약이 없다면 정해면 프레임워크 내에서도 충분히 병렬화를 구현할 수 있지만, 그럴 수 없다면 모델이나 데이터 병렬화가 아닌 ‘실험’의 병렬화도 자원을 최대로 활용하는 방법이다.

생각하기, 소통하기, 개발 안 하고 개발시간 줄이기

소프트웨어 개발을 하다보면 누구나 시행착오를 겪는다. 시행착오의 종류는 다양하다. 예를 들자면

자주하는 PC 설정 - 20년도 하반기

나는 뭔가 생산적인 활동을 할 때에는 항상 자료가 정리되어 남아있는 걸 좋아하는 편이다. 그래서 전부터 계속 PC를 설정하게 될 때마다 그와 관련된 튜토리얼이나 자료들을 적어두고 필요할 때면 다시 꺼내어 활용한다. 최근에는 그걸 더 편하게 하기 위한 private GitHub 저장소도 만들어서 사용하고 있다. 언제나 사용해도 괜찮을 계층적인 폴더구조라던지, 지침사항들의 문서를 관리해놓고 있다.

일과 나이

나는 지난 3년동안 나이에 비해서 무언가를 잘했다거나, 대단하다는 칭찬을 많이 받았다.
처음에는 정말 기뻤다. 나의 이른 결정과 노력들이 비로소 인정받는다는 그 느낌이 참 기뻤다.
지금도 그런 말을 많이 듣는다. 여전히 나를 그렇게 느껴주셔서, 말씀해주셔서 감사하고 기쁘지만 나는 더 이상 일에 있어서 나이에 비해서 잘하는 사람이 되지 않겠다.

Attention is all you need 논문 리뷰

Attention is all you need

차별 없이 뇌와 성 이야기하기

나는 뇌과학을 테마와 미션으로 가지고 있던 회사를 3년 넘게 다녔다. 나는 남들 앞에서 내 이야기를 할 때 가끔 내가 이런 회사에 다니고 있으니 뇌와 관련지어 어떠한 주제 하나에 대해서라도 논리적으로 이야기하고 이해할 수 있는 도메인 지식이 있을 거라고 스스로 착각을 하고 최면을 걸곤 했다. 그렇지만 일로 내가 관여하고 공부했고 필요로 했던 도메인 지식은 한없이 한정적이었다. 그나마 이야기 할 수 있는 분야는 뇌 “영상”과 해부학적 구조 약간 정도였다. 항상 딱 한 가지 주제라도 말할 수 있는 사람이 되지 못한 것이 마음의 짐이었기에 내가 평소 관심 있는 주제인 성에 관해 공부해 글을 쓰기로 했다.

좋은 batch size 고르기

원문 Stackoverflow: Tradeoff batch size vs. number of iterations to train a neural entwork를 번역하고 정리한 글입니다.

nn U-Net 논문 리뷰

nn U-Net

Pearson correlation coefficient

피어슨 상관 계수(Pearson correlation coefficient 또는 Pearson’s r)는 두 변수간의 관련성을 구하기 위해 보편적으로 이용된다. 개념은 다음과 같다.

신뢰 수준, 신뢰 구간

신뢰수준, 신뢰구간

한국어 NLP를 위한 high-level API Koshort

Koshort

한국어 NLP 라이브러리 프로젝트 Koshort(코숏, 한국 길고양이를 부르는 애칭일지도..)을 소개합니다! Koshort은 현재 총 3가지 파이썬 패키지로 이루어져있으며, 다음과 같은 특징을 공통으로 가집니다.

이전 곡 버튼에서 느낄 수 있는 UX에 대한 고민.

나는 사람과 말을 하던지 잠을 자던지 어떤 영상을 시청하던지.. 뭔가에 확실히 집중을 하고 있는 상태가 아니라면 반드시 어떤 미디어 플레이어를 사용해서 노래를 듣는다. 그러면 이어폰의 리모콘이나 제스쳐를 통해서 재생, 멈춤, 이전 곡, 다음 곡의 조작을 하고 싶을 때가 분명 있는데, 그 중 다른 조작과는 다르게 이전 곡 조작에서 때때로 위화감을 느낄 때가 있다.

연구의 빚

Distill.pub는 기계학습에 대한 명쾌한 설명, 연구자들간의 벽을 허물기 위한 노력, Open Source 정신과 종이에 국한되지 않는 사용자 인터페이스를 제공하겠다는 생각으로 개설된 논문 & 기사 출판 사이트(혹은 플랫폼?..)이다. 다음은 Distill에 가장 먼저 올라온 Research Debt라는 글의 일부이다.

Tensorflow-KR 모임

나는 2017년 들어 가장 하고 싶었던 일 중에 하나가 개발자, 아니면 비슷한 사람들이 모이는 이벤트에 참가하는 것이라고 마음 속 어딘가에서 생각하고 있었고, 페이스북을 열 때마다 무서운 소식(State-of-the-art에 해당하는 기술이 또또또 갱신되었습니다, 딥마인드가 또 무슨 일을 했습니다, 라이브러리와 API가…)을 가져다주던 Tensorflow-KR 그룹에서 무려 ‘덧글 잘쓰기’라는 파격적인 조건으로 운영진과의 저녁 식사를 대접한다는 글을 읽게 되었다.

이제와서 2016년 이야기

2016년은 내 인생에서 가장 바빴던.. 아니 딱히 바빴던 건 아니지만 많은 일을 했던 한 해였다. 고등학교 3년간의 종착점을 정할 수 있는 큰 계기를 마련해준 해이기도 해서 많이 늦었지만 지금이라도 정리를 해두지 않으면 아쉬운 해인 것 같다.

Recurrent Neural Network

세상의 많은 데이터는 어떤 'sequence'를 이루고 있어요. 예를 들자면 이 글을 읽고 있는 여러분이 제가 적은 단어 단어를 순차적으로 이어서 비로서 이해할 수 있는 점이 있겠죠. 이런 데이터를 Sequence data라고 말해요.