본문 바로가기
딥러닝 머신러닝 데이터 분석/BoostCampAITech

[ BoostCamp ] Day-16 학습로그( Pytorch Basic )

by SteadyForDeep 2021. 8. 19.
반응형

1) 강의 복습 내용

 

이제 수학적인 문제들은 다 끝났고 PyTorch를 통한 실전 코딩으로 넘어갈 차례다.

그래도 좀 더 매운맛인 TensorFlow1을 해봤던 터라 파이토치가 정말 쉽고 좋은 툴로 여겨

질줄알았는데 꼭 그렇지만도 않았다...

 

우선 가장 핫한 이슈(였던) Define 과 Run의 시점에 관한 것인데

이게 초창기에나 핫한 이슈였지만 지금은 TF2.x도 Define by Run이 가능해서 큰 문제는 아니라고 생각한다.

 

아무튼 딥러닝은 정형화된 그래프에서 데이터들이 흘러가는 방식의 연산이라

모델을 먼저 다 메모리에 올려놓고 돌리는게 더 빠르다고 생각되던 시절도 있었다.

그때 TF1.x 는 Define and Run 방식으로 메모리에 모델을 먼저 다 올리고

그다음 데이터를 feed 하는 방식으로 학습을 진행했다.

당연히 엄청 불편했고 직관적이지 않았다.

지금은 거의 이런 식의 코딩이 없는 상황이다.

 

파이토치는 처음부터 pythonic한 연산을 추구했고 Define by Run으로 동작하도록 만들었다.

필요한 weight를 그때그때 불러와서 연산하는 것이다.

그래서 if문을 사용한다던지 하는 dynamic computational graph의 작성이 가능하다.

애초에 이렇게 만들어진 툴이다 보니 정말 능동적으로 코드를 짤 수 있게 발전해왔다.

 

기본적으로 PyTorch는 numpy와 궁합이 정말 잘 맞다.

문법이나 사용방법이 거의 동일한 객체들이 많고 정말 직관적이다.

거기에 더해서 GPU에 올려서 병렬연산이 가능하다는 것까지 장점이 많다.

 

Tensor 를 다루는 방법중에 shape을 변경하는 방법이 있는데

view와 reshape 두 가지 방법이 있다.

결과는 동일하지만 view의 경우는 복사가 진행되지 않고 reshpae은 복사를 한다는데

이게 register 랑 관련이 있는건지 잘 모르겠다. 그냥 view가 오리지날이고 안전한듯. (나중에 공부해볼 것)

 

그리고 matmul과 mm이 있는데 mm은 rank가 일치하지 않는 텐서에 대해서는 연산을 해주지 않고

matmul은 자동으로 broadcasting을 해서 rank를 맞춘 후에 연산을 한다.

역시 안전한 코딩을 위해서는 mm이 권장된다.

 

Autograd 는 내가 미분하고싶은 텐서에서 backward를 하면 그 텐서로 부터

모든 파라미터까지 chain rule 이 적용된다.

TensorFlow 하다보니 이게 좀 어색했는데 금방 적응되었다.

 

아무튼 왜 이제 넘어왔나 싶을 정도로 파이토치가 정말 좋다.

 

2) 과제 수행 과정 / 결과물 정리

 

Pytorch 를 통해서 custom 모델을 제작하는 연습을 했다.

정말 정성스럽고도 방대한... 주피터 노트북을 하나하나 실행해가면서 과제를 진행했다.

 

특히 hook이라는 interface는 정말 처음 보는 것이었는데

객체의 내부에서 돌아가는 프로세스들의 전과 후를 interrupt하여 원하는 프로세스를 끼워넣는 것이었다.

이걸로 중간에 gradient를 확인하거나 truncate 하는 것이 가능할 것이다.

굉장한 기능이다.

 

특성상 직접 공개는 못하지만 정말 정성스럽고 어머무시한 과제였다..

파이토치의 전부가 다 담겨있다.

 

이것만 가지고 있어도 사전처럼 쓸듯.

 

3) 피어세션 정리

 

4) 학습 회고

 

라이엇게임즈 CTO로 계신 분의 강연을 들었는데 TDD를 잘하는 개발자가 되어야한다는 것이 주제였다.

 

TDD를 잘 쓰는 개발자가 강력한 개발자가 된다.

 

깔끔한 코드

caller create : 데드 코드는 과감하게 버리고 버전관리를 적극 활용하자.
refactoring   : 외부의 변화는 없게 하지만 내부에서는 유지보수에 용이하게.
code review : 남의 코드를 읽는 것 동시에 나의 코드를 readable 하게 바꾸는 것.

 

꾸준히 연습을 해야하고 매일매일 조금씩 몸값을 올리는 시간을 가져야한다.

 

업무의 다양성을 받아들이고 여러가지 분야에 대한 실력을 키우는 것이 리스크를 줄인다.

 

적어도 시행착오를 겪어본 다음 공유를 하자.

정보의 공유가 잘난척이 돼서는 안된다.

의미있고 가치있는 정보를 나누는 개발자가 되도록 하자.

반응형

댓글