brunch

You can make anything
by writing

C.S.Lewis

by 김범준 Sep 30. 2021

Viking Penguin님의 코딩 습관 분석해보기

물론 블로그나 유튜브 컨텐츠는 질이 나쁜 경우도 많다. 그럼에도 종종 유튜브에서 굉장한 고수들을 발견하기도 한다. 가끔은 두꺼운 책이나 긴 강의보다는, 그런 분들의 짧은 유튜브 동영상에서 많은 것을 배울 때가 있다. 오늘은 Viking Penguin님의 "Implementing Dropout as a Bayesian Approximation in TensorFlow" 동영상을 소개하고자 한다.


https://www.youtube.com/watch?v=aa9AC3dTKUQ


구독자 172명, 조회수 6,402 정도로 별거 아니어 보이는데, 26분짜리 이 동영상을 보면, 이 사람의 넘쳐나는 내공을 느낄 수 있다. 해당 동영상에서는 Yarin Gal의 한 논문을 설명하고, 이를 TensorFlow로 구현하는 과정을 라이브 코딩한다! Yarin Gal의 논문에서는, Dropout이라는 게 random하게 neural network를 sample할 수 있다는 관점에서, output도 random하게 sample할 수 있음을 제안한다. 이런 걸 variational inference라고 이야기하던 것 같은데, 이때 output의 variance를 통해 모델의 uncertainty를 측정하고자 하는 논문이다. 그래서 원 논문에서는 난해한 수학과 method가 사용되는데, Viking Penguin님은 이를 굉장히 명확하게 이해하고 코드로 표현한다.


사실 원 논문의 이해에는 수학도 중요하지만, 난 이 사람의 코딩 방식에서도 많은 깨달음을 얻었다. 사실 딥러닝 분야에서, 수학도 잘하고, 코딩도 잘하는 사람은 굉장히 드문데, 이 사람은 둘 다 잘한다. 이 사람은 그냥 즉석에서 뚝딱 만들고 바로 테스트하고 성공한다. 오늘 포스팅에서는, 이 사람의 라이브 코딩을 열심히 관찰하고, 숨겨진 코딩 습관을 캐치해보고자 한다. 참고로 난 영어공부랍시고 이 26분짜리 동영상을 작년에 20번 들었다..


코딩

- if True:라는 코드를 사용함. 이게 논리적으로는 의미 없지만, 예를 들어 figure 그리는 코드와 같이, 내가 on-off하고 싶은 분기 지점을 관리하기 편한 듯.

- 파이썬 코딩 스타일을 굉장히 잘 따름. class 뒤에는 2번 개행. class 사용 시 """ 주석도 해줌. class에서는 init과 call을 따로 관리하고. class 네이밍은 CamelCase로 작성하는 것도 지킴. import는 맨 위에서. 띄어쓰기도 항상 정확함. 심지어는 @property로 private같은 것도 관리함. 

- 정수는 10 혹은 3과 같이 표현하지만, 실수인 경우는 무조건 5. 혹은 3.과 같이 소수점을 표기함. 이게 float임을 명시하는 의도인데, 굉장히 좋은 습관인 듯.

- print할 때는 print("a: {:4f}".format(a)) 이런 식으로 변수를 출력하고자 함. 실제로 string print에서는 "a_" + str(n) + "_b"처럼 + 연산을 쓰는 것보다, {}를 써서 변수를 출력하는 방식이 더 권장되고 있음.

- string을 표현할 때 "를 사용함. 그래서 '는 안 씀. 실제로 python 포맷팅 툴 중에 black에서는 '를 모두 "로 바꿔주기도 함.

- 주석을 지나치게 많이 작성하지 않음. 굳이 사용한다면, class 사용 시의 """ 이런 거라던가, 혹은 주피터적 셀 의미에서 한 번씩 # 써주는 듯. 코드를 주석 처리하는 경우는 없고, 말을 주석으로 넣음. 그리고 주석을 마무리할 때 .을 찍는다. 실제로 Clean Code에서 말하기를, 주석 없는 코드가 좋은 코드라고 하니까.

- 복붙, 즉 Ctrl-C, Ctrl-V를 지나치게 많이 쓰지 않음. 비슷한 코드를 작성하는 경우에도, 이 사람은 오히려 타이핑을 많이 함.

- tensor size는 직접 값을 관리하지 않고 변수로 관리함. n_samples, n_hidden 이런 거.

- reshape을 잘 안 쓰고 squeeze나 atleast_2d, ravel 이런 걸 사용함. 실제로 reshape은 연산적으로 비효율적인 방식이고, squeeze처럼 용도에 명시적인 방식이 효율적이라고 알려져 있음.


기타

- 코딩 환경은 맥북프로에 emacs를 쓰고 있음. 검은 배경에 적절한 색깔 넣어주고. 플러그인은 대충 보니까 레인보우 괄호라던가, 아니면 함수에서의 태그도 보여주고, 자동 완성도 잘 되는 편 같고, 문법 에러도 왼쪽에 점으로 표시해줌. visual select한 후에 괄호를 양옆으로 해주는 플러그인도 있나 봄. 라인 넘버 표시하는 것도 해놨음. 괄호 한쪽만 하면 나머지 자동으로 해주는 플러그인도 있음. 탭 같은 공백을 시각화해주는 플러그인도 있음.

- 고수들은 키보드만 쓰나 싶었는데, 이 사람은 의외로 마우스도 많이 사용함. 커서 이동하거나, 페이지 넘길 때 마우스 사용. 엄밀하게는, 아마 트랙패드인 듯(소리상).

- 학문적으로도 열심히 했는지, 이렇게 multiple mode가 나타남이 나의 favorite한 부분이다라고 이야기함. 다른 동영상 보니까, 아마 이렇게 random sample을 얻는 분야에서 대학원 다녔을 것으로 추정함.

- 근데 아무리 생각해도, 내 생각엔 대본이라던가, 미리 뽑아둔 본인의 자료 보면서 라이브 코딩하고 있는 것 같긴 함. 너무 잘하잖아..

작가의 이전글 그래서 최근에 김영재 님의 팬이 되었는데,
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari