개발공부 & 부트캠프/[부트캠프] 회고

[데이터 엔지니어링 부트캠프]7월 2주차 회고

포리셔 2023. 7. 16. 16:07

감기몸살 기운이 으슬으슬 올라오던 월요일, 이럴 때 쉬면 자신에게 너무 관대해지는 것이라는 일념으로 헬스장으로 향했습니다. 큰 실수였습니다. 그 다음날부터 급격히 몸이 안 좋아져서 수요일날도 객기 부리고 수업 나갔다가 몸 상태가 박살났습니다. 그 다음날인 목요일 하루는 아무 것도 하지 못하고 통으로 쉬었습니다.

여러분, 몸 안 좋다고 운동 함부로 나가지 마세요. 그 다음주까지도 운동 못 나갈 수 있습니다. 머리가 나쁘면 몸이 고생한다 하루 욕심 부리다가 2주 동안 운동을 못 나가게 된 이번 주 회고입니다.

좋았던 점

  • 딥러닝의 서막: 자고로 머신러닝보다는 딥러닝이라는 이름이 더 있어보이는 이 시국? 시대에 머신러닝 파트를 떼고 딥러닝 파트로 넘어갔다는 것만 하더라도 큰 업적이라고 생각합니다. 근데 이 정도로 빠르게 진도를 빼도 되는 건가 싶은 생각은 계속 듭니다. 이거 맞아?
  • 알고리즘 코딩 테스트 준비 시작: 센터에서 자체적으로 학습할 수 있는 링크를 제공했습니다. 이미 어느 정도 학습이 끝난 사람들에게는 리뷰 용으로, 독학하려는 사람들에게는 코딩 테스트 사이트에서 티어를 올릴 수 있는 계기가 되지 않을까 싶습니다. 이 얘기를 왜 하냐면, 백준 기준으로 브론즈 2 티어 이상부터는 무지성으로 코드만 짠다고 해서 문제가 풀리는 시기가 지나기 때문입니다. 런타임 에러와 시간 초과, 메모리 초과가 난무하는 마경이 시작되는 시점이기 때문에, 어느 정도의 자료구조 지식을 숙지할 필요가 있어 보입니다.

아쉬웠던 점

  • 커리큘럼의 역전: 보통은 말이죠, 웬만한 머신러닝과 딥러닝 서적에서는 머신러닝을 가르칠 때 인간의 뉴런 사진을 갖다 놓은 후에 이걸 코드로 나타낸 퍼셉트론부터 시작하기 마련입니다. 여기서 퍼셉트론 - 선형 회귀 - 로지스틱 회귀 - 경사하강법 - 데이터 전처리 - 다른 지도학습 알고리즘 - 비지도학습 - 머신러닝으로 넘어가는 것이 보통입니다. 캠퍼스에서 오리엔테이션을 할 때 함께 줬던 커리큘럼 자료에도 그 순서대로 학습을 할 것이라고 제시가 되어 있었고요.(물론 강사님 재량에 따라 바뀌기야 하겠다마는)
    그런데 이 분의 커리큘럼은 선형 회귀와 로지스틱 회귀, 경사하강법을 맨 뒤로 미뤄두고, 의사결정트리(decision tree)과 앙상블을 먼저 가르친 뒤에 전처리를 가르쳤습니다. 아직 완전히 정형화된 분야가 아니다 보니까 가르치는 사람에 따라서 더 중요시하는 부분을 먼저 배치한다던가 하는 방식은 백번 이해합니다. 그런데 최소한 이 방식이, 적어도 지금 수강 중인 클래스의 수강생들에게 먹힌다고는 전혀 볼 수가 없습니다. 학생들에게 머신러닝을 왜 쓰는지에 대한 이론적인 설명은 길게 늘어놓으면서 정작 그 시작이 된 퍼셉트론은 소개하지도 않고, 선형 회귀와 로지스틱 회귀는 맨 뒤로 미룬다고요?
  • 난이도 조절 실패: 한 술 더 떠서 그렇게 설명을 하는 것도 듣는 수강생들의 수준은 거의 고려하지 않고 있습니다. 현재 저희 트랙은 알고리즘 코딩 테스트 관련 부분은 독학이나 스터디로 하게끔 유도하고 있습니다. 따라서 자료구조 등 CS(컴퓨터 사이언스) 관련 지식은 (제가 이 블로그에 정리해 놓은 것보다도) 짚고 넘어가지 않았습니다. 거의 전무하다고 보셔도 되요. 그런데 머신러닝 설명을 하면서 이러한 자료구조와 CS 지식을 당연히 알고 있다는 것처럼 설명하고 넘어갑니다. 비전공 출신 수강생들은 일단 여기서 큰 장벽을 느끼고 있는 분위기입니다.
  • 수업 자료 검수 미흡: 머신러닝 후반부에 들어서면서 두드러진 문제인데, 예제로 주신 ipynb 파일은 그대로 따라하기만 한다고 해서 정상적으로 실행되지 않는 부분이 많습니다. 아주 사소한 오타라고 볼 수도 있겠지만, 그 중 몇 개는 코드 실행 자체가 안 되거나, 실행 결과가 예상과는 딴판으로 흘러가게끔 만드는 치명적인 오타들이 있습니다. 뭐, 직접 만들어내신 예제라면 이해라도 될텐데, 제가 독학하면서 참고했던 몇몇 머신러닝 교재들과 내용이 아주 흡사했습니다. 참... 뭐라 할 말이 없습니다.
  • 수업 방식에 대해서: 몇몇 다른 수강생 분들의 불만을 정리하자면 "우리는 설명해주는 주석을 따라 치는 게 아니라, 코드 자체를 따라서 타이핑하는 것을 선호한다"였습니다. 수업자료가 코드 부분은 전부 준비되어 있고, 코드에 대한 설명을 하면서 그 주석을 따라 치게끔 하다보니 수강생들의 목적의식이 흐려지는 부작용이 있습니다. 게다가 앞서 언급한 대로 오타가 좀 많습니다.
    그리고 한 가지 더 언급할 부분은, 수업에 사용할 모듈 스크립트를 주피터 노트북의 코드 실행 도중에 수정하게 하는 방식이었습니다. 모듈로 사용할 .py 스크립트를 주피터 노트북 실행 도중에 매직 명령어를 이용해 작성 및 수정하는데, 주피터 노트북의 특성 상 이렇게 하면 모듈을 다시 임포트하더라도 커널을 재시작해야 하는 문제가 있습니다. 어떤 모듈과 라이브러리를 임포트한다는 문구도 노트북 여기저기에 흩어져 있어서 커널을 재시작이라도 한다손 치면 그 부분에서 모든 모듈의 임포트 문을 다시 작성하거나 노트북을 처음부터 다시 실행해야 한다는 문제점이 있습니다. 차라리 원본 모듈 파일을 슬랙에 먼저 배포를 하고 그걸 따라서 치게 하는 게 더 낫지 않나 싶습니다.

배운 점

머신러닝 일반 후반부

  • 앙상블 기법: 성능이 낮은 여러 개의 모델을 묶어서 함께 사용하는 학습 기법으로 크게 부스팅(boosting)과 보팅(Voting) 기반으로 나뉩니다.
  • 선형 회귀/로지스틱 회귀: 이름에는 회귀가 붙어있지만, 사실 이 두 모델은 분류 모델에 속합니다. 대다수의 머신러닝 서적에서도 짚고 넘어가는 부분이니 꼭 기억하고 넘어갑시다!
  • 경사하강법: 함수의 값을 점차 줄이는 방법 중 하나로 해당 좌표에서의 함수의 기울기(그래디언트, gradient)를 척도로 사용하는 방법이 있습니다. 함수의 값이 극소 또는 최소값이 되는 지점으로 이동함에 따라 함수의 기울기가 점차 완만해지는 것에서 착안한 방식으로 수식으로는 아래와 같이 표현됩니다.
    $$x=x-\eta\frac{\partial f}{\partial x}$$
    여기서 기호 $\eta$(에타)는 학습률(learning rate)라는 하이퍼파라미터의 일종으로, 한 번의 학습으로 얼마만큼 학습해야 할지를 정하는 계수입니다. 경사하강법은 딥러닝에서도 사용되는 기법이기는 하지만, 다행히도 우리가 직접 구현할 필요는 없고, 후술할 텐서플로 프레임워크의 힘을 빌릴 예정입니다. 원리만 머릿속으로 파악해놓고 있으면 되겠습니다.

딥러닝 개론

  • 텐서플로 및 케라스 기반의 MLP 구현: MLP(Multi-Layer Perceptron)은 그 이름에서 알 수 있듯이 여러 층의 퍼셉트론을 다중으로 배치해서 구성한, 가장 단순한 형태의 인공신경망 모델입니다. 현재 수준에서는 케라스의 Sequential() 메서드와 Dense() 모델을 기반으로 은닉층을 그렇게 많이 가지지 않는 모델을 만들어서 실습을 했습니다.
  • 활성화 함수: 시그모이드(sigmoid), tanh, ReLU(Rectified Linear Unit) 함수 및 그 변형, 소프트맥스(softmax) 함수 등 딥러닝 파트에서 사용될 다른 활성화 함수를 배웠습니다.

앞으로 바라는 점

다 먹고 살자고 하는 일인데, 욕심 부리다가 먹지도 못하고 누워있었습니다. 후... 페이스 조절 잘 하도록 합시다. 대학원 때도 비슷하게 한 번 피를 보고도 배운 게 없었던 주인장이었습니다 그땐 복귀하자마자 '아픈 건 아픈 거고 쉬는 동안에 일 안하고 뭐했냐'고 욕 먹었잖아