책 읽기

[밑바닥부터 시작하는 딥러닝 3] 후기

NGC3132 2023. 2. 26. 15:46

[밑바닥부터 시작하는 딥러닝 3]

부스트 캠프를 약 6개월 간 진행하며 인공지능 전반에 대해서 배웠다. PyTorch를 활용한 첫 과제가 custom model을 제작하는 것으로 기억이 나는데, 일주일동안 거의 매일 밤 새면서 했었던 기억이 난다. 당시 forward, backward, loss 등 다양한 기능들이 어떻게 동작하는지 정확히 이해도 하지 못한 채 사용하다보니 항상 아쉬움이 남았다. 또 Python에 대한 이해도도 높지 않았는데, PyTorch를 다루며 모델을 만드는 과정 자체가 고역이었던 기억도 있다.

 

언젠가 딥러닝 기초를 코드로 직접 구현해 보고, 간단하더라도 프레임워크를 직접 구현해 보고 싶다는 생각을 하고 있던 찰나에,

[밑바닥부터 시작하는 딥러닝 3] 책 공부 스터디를 알게 되었고, 책을 읽어나가게 되었다.

책의 목표

책의 목표는 명확하다.

3줄에서 시작하여 현대적인 딥러닝 프레임워크들에 적용된 핵심 개념을 지원하는 미니 프레임워크로 만드는 것이다.

간단한 Add 함수, Square 함수, Exp 함수부터 시작해 CNN, RNN까지 구현할 수 있는 알고리즘을 구현하는 것을 목표로 한다.

책에서 정의하는 딥러닝 프레임워크는 '미분 계산을 지원하는 프로그래밍 언어'다.

책을 따라가며 읽다 보면 왜 그렇게 정의를 내렸는지 정확히 이해된다.

책의 단계

책은 총 60단계로 구성되어 있다. 각 단계마다 목표하는 Task를 정확하게 제시하고 있으며, 정말 쉽게 설명해주고 있다는 생각이 들었다.

책의 원저자는 일본인이기에 [밑바닥부터 시작하는 딥러닝 3] 한국어 판은 번역본이라는 것인데, 이상한 번역체도 없고 보충 설명도 깔끔하게 잘 되어 있다.

 

그렇다면, 이 책의 시작에서 사용하는 코드 3줄은 어떤 코드일까?

너무 많은 코드를 공개하면 흥미가 떨어질 수도 있으니 몇 가지 간단한 코드만 소개하고자 한다.

class Variable:
    def __init__(self, data):
        self.data = data

딥러닝 프레임워크 제작을 시작하는 그 첫 걸음은 위에 적힌 세 줄의 코드로 비롯된다.

처음 보면 어떻게 저 코드로 프레임워크가 제작될까 의문이 들지만, 책을 읽다 보면 코드 3줄로 시작한다고 했던 말이 정확했구나 라는 생각이 들 것이다.

 

그 이후 코드는 

class Function:
	def __call__(self, input):
    	x = input.data
        y = forward()
        output = Variable(y)
        return output

위의 코드로 Function을 정의한 뒤,

class Square(Function):
	def forward(self, x):
    	return x ** 2

다음과 같이 Function을 상속받아 사용하는 구조가  다른 함수를 정의할 때도 계속 사용된다.

매우 간단한 코드지만, 책은 모든 코드를 설명할 때 마치 독자가 파이썬 코드를 처음 실행시켜 보는 사람인 것처럼 세세하게 설명해 준다.

 

3.2 함수 연결 파트

실제로 책에서도 모든 코드들이 나와 있고, github에도 코드들이 올라와 있어서 실습을 직접 해 보며 책을 읽을 수 있는 점도 좋았다.

(step01.py부터 하나씩 따라가다보면 어느 순간에 모든 코드들을 모아 프레임워크 구조를 만드는 순간이 온다.)

또 단계 중간중간에 흥미로운 칼럼들이 들어가 있는데

칼럼: 자동 미분

웬만한 동영상으로보는 강의보다 설명이 잘 되어 있다는 느낌이 들었다.

수치 미분과 자동 미분에 대한 개념을 정확하게 알고 있지 않았는데, 책의 설명에 빠져들면서 읽다 보니 정확히 이해할 수 있었다.

 

이 책을 추천해주고 싶은 독자는 다음과 같다.

- PyTorch, TensorFlow 등 딥러닝 프레임워크를 사용하며 동작 원리를 알고 싶은 사람

- 체계적인 소프트웨어를 A to Z 체계적으로 만들어보는 경험을 해 보고 싶은 사람

- 딥러닝 기초 이론을 구현을 바탕으로 이해해 보고 싶은 사람

- 자료구조를 바탕으로 한 효율적인 파이썬 프로그래밍 방법을 익히고 싶은 사람

 

이 중에서 하나라도 해당된다면, [밑바닥부터 시작하는 딥러닝3] 책을 재미있게 읽을 수 있을 것이며, 하나씩 단계 단계 공부하는 것을 좋아하는 사람이라면 다욱 효과적인 공부를 할 수 있을 것이다.

 

마지막으로, 저자가 이 책을 지필하게 된 이유 세 가지를 인용하며 소개를 마치고자 한다.

이 책의 주제는 딥러닝용 '미니 프레임워크'를 직접 만들어보는 것입니다.
이런 주제를 선택한 이유는 세 가지 입니다.

첫 번째 이유는 현대의 딥러닝 프레임워크들이 과도기를 지나 서로서로 공통되는 특성을 더 많이 공유해가는 정착 단계에 들어섰기 때문입니다. 이 책을 쓰기에 딱 좋은 시기라고 느꼈습니다.

두 번째 이유는 프레임워크의 속 내용을 구현 수준에서 이해하기 위한 책이나 문헌이 없었기 때문입니다. 저 자신도 체이너와 파이토치 등의 코드에서 많은 것을 배웠습니다. 그 기술들을 올바르게(그리고 재미있게) 전할 수 있다면 아주 가치 있는 일이 될 거라고 생각했습니다.

세 번째 이유는 체이너 코드가 아름다웠기 때문입니다. 체이너는 Define-by-Run 같은 선구적인 아이디어를 멋지게 설계하여 훌륭히 구현해냈습니다. 저는 그 아이디어와 코드에 매료되었고, 이 책을 쓰는 큰 원동력이 되었습니다. 그러나 체이너의 내용은 초심자가 도전하기에 거대하고 복잡합니다. 그래서 체이너를 기반으로 현대적인 기능을 갖추게 하면서 가능한한 단순한 프레임워크를 만드는 것을 목표로 정했습니다.

...

이 책의 목적은 간단한 딥러닝 프레임워크를 만드는 데서 끝이 아닙니다. 더 중요한 목적은 이를 통해 현대 딥러닝 프레임워크들을 이해하는 '새로운 눈'을 뜨는 것입니다. 나아가 새로운 눈을 통해 딥러닝이라는 분야를 더 넓게 바라보고 깊이 꿰뚫어보는 것입니다. 이 '새로운 눈'을 얻는 여행이야말로 진정 가치 있을 것입니다.