728x90
반응형

 

 

드디어 기다렸던 밑바닥부터 시작하는 딥러닝 2 책이 5월에 출간되었기 때문에, 리뷰해보고자 한다. 

 

밑바닥부터 시작하는 딥러닝 1은 기초적인 "파이썬"에 초점을 맞춰 초보자들이 딥러닝에 입문 할 수 있게 도와준 책이라면, 이번에 새로이 출간된 밑바닥부터 시작하는 딥러닝 2는 "순환신경망"과 "자연어처리"에 입문하기 위한 기초적인 지식들을 담았다.

 

밑바닥부터 시작하는 딥러닝 1과 2 모두 "밑바닥부터" 시작하고자 하는 이들에게 도움을 주고자 하는 방향은 변치 않았다. 책에서 배울 수 있는 기술들은 다음과 같다. 

 

  • 파이썬을 이용한 텍스트 처리
  • 딥러닝 등장 이전의 단어 표현 방법
  • 단어 벡터를 얻기 위한 word2vec
  • 대규모 데이터의 학습을 고속화 하는 네거티브 샘플링
  • 시계열 데이터를 처리하는 RNN, LSTM, GRU
  • 시계열 데이터의 오차역전파법인 BPTT
  • 문장을 생성하는 신경망
  • 시계열 데이터를 다른 시계열 데이터로 변환하는 seq2seq
  • 중요 정보에 주목하는 어텐션 

 

 

 

 

밑바닥부터 시작하는 딥러닝 2 책에서는 "누구를 위한 책인가?" 혹은 "누구를 위한 책이 아닌가?" 라며 책을 읽으면 좋을 독자들과, 그렇지 않은 독자들에 대해 설명해주고 있었다. 그 내용은 간략히 다음과 같다. 

 

 

누구를 위한 책인가?

  • 외부 라이브러리에 의지하지 않고, 밑바닥부터 딥러닝 프로그램을 구현합니다. 
  • 밑바닥부터 시작하는 딥러닝의 속편으로서 자연어 처리와 시계열 데이터 처리에 사용하는 딥러닝 기술에 초점을 맞춥니다.
  • 실제로 동작하는 파이썬 소스 코드와 독자가 직접 실습해볼 수 있는 학습 환경을 제공합니다.
  • 가능한 한 쉬운 말로, 명확한 그림을 많이 동원하여 설명합니다.
  • 수식도 사용하지만 그 이상으로 소스 코드에 기초한 설명을 중시합니다. 
  • 왜 그 기법이 뛰어난가? , 왜 그 방식이 먹히는가? , 왜 그것이 문제인가? 등 '왜'를 소중히 합니다. 

 

누구를 위한 책이 아닌가?

  • 딥러닝 분야의 최신 연구에 대해서는 자세한 다루지 않습니다.
  • 카페, 텐서플로, 체이너 등 딥러닝 프레임워크 사용법은 설명하지 않습니다. 
  • 이 책은 주로 자연어 처리를 다룹니다. 영상, 음성, 강화 학습 등의 주제는 다루지 않습니다. 

 

 

 

이 책은 딥러닝 프레임워크 사용법을 다루지 않으며, 오로지 넘파이(Numpy), 맷플롯립(Matplotlib)에 기반한 파이썬 코드들만을 다룬다. 또한, 주로 자연어 처리 기법에 대해 다루며, 영상과 같은 다른 주제는 다루지 않는다. 딥러닝 프레임 워크 사용법을 터득하고 싶다면 한빛미디어에서 출간된 "텐서플로를 활용한 머신러닝"을 필독하길 추천한다. 

 

또한, 이 책은 신경망에 대한 기초적인 지식을 1장에서만 살짝 언급하고 있기 때문에 아주 기초적인 신경망에 대한 지식을 얻고 싶다면, 1권을 사는 것을 추천하고, 자연어 처리나 순환 신경망에 관심이 있다면 2권을 사는 것을 추천한다. 

 

 

 

 

책에서 주의 깊게 보았던 챕터는 계산 고속화, word2vec, RNN 이다. 

 

 

  • 계산 고속화 

이 책에서는 자연어 처리 뿐만 아니라 "계산 고속화" 라는 주제에 대해서도 다루고 있다. 신경망의 학습과 추론에 드는 연산량은 상당하기 때문에 신경망에서는 얼마나 빠르게 계산 하느냐가 중요한 주제이다. 그래서 이 책에서는 "비트 정밀도"와 "GPU"에 대해 설명하고 있었다. 최근에 관심 갖게된 분야가 바로 "최적화" 분야인데, 아직 입문자라 그런지 전체적인 흐름에 대한 개념이 미숙했는데, 책을 통해서 보완하게 되었다. 

 

간단히 설명하자면, 넘파이의 부동소수점 수는 기본적으로 64 데이터 타입을 사용하는데, 신경망에서는 32비트 부동소수점 수로도 인식률을 거의 떨어뜨리는 일 없이 수행할 수 있다고 한다. 메모리 관점에서 봤을 때, 64 비트 보다는 32 비트가 더 매력적으로 들려온다. 그래서 넘파이에서 32 비트 부동소수점 수를 우선으로 사용하려면 다음과 같이 데이터 타입을 지정한다. 필자도 64 데이터 타입으로 코드를 짜지않고 32 비트로 변경하여 코드를 짜니 성능이 훨씬 더 좋아졌었다. 

 

b = np.random.randn(3).astype(np.float32)

 

32 비트보다 더 강력한 16 비트 부동소수점 수를 사용해도 인식률이 거의 떨어지지 않는다고 말하고 있지만 ... 사실 인식률이 떨어지는건 사실이다. 일반적으로 CPU와 GPU는 연산 자체를 32 비트로 수행하기 때문에 16 비트로 변환하여 계산하더라도 계산 자체가 32 비트로 이루어지기 때문에 처리 속도의 영향을 미치지 않는다. 

 

여기서 번외로 쿠파이(cupy) 라는 개념이 나오는데 GPU 를 이용하여 병렬 계산을 수행하는 라이브러리이다. 엔비디아 GPU 에서만 동작하며, CUDA 를 설치해야 사용할 수 있다. 

 

 

 

 

  • word2vec

단어를 벡터로 표현하는 방법은 크게 "통계 기반 기법"과 "추론 기반 기법"이 있다고 한다. word2vec 은 통계 기반 기법의 문제점을 해결하고, 추론 기반 기법의 이점을 거시적 관점에서 설명할 수 있다. 통계 기반 학습 방법은 학습 데이터를 한꺼번에 처리하는데, 이에 반해 추론 기반 기법은 학습 데이터의 일부를 사용하여 순차적으로 학습한다. 즉 배치 학습과 미니 배치 학습의 관계라고 볼 수 있다. 

 

추론 기반 기법은 주변 단어(맥락)가 주어졌을 때 빈칸에 무슨 단어가 들어가는지를 추측하는 작업이라고 할 수 있다. 이러한 추론 문제를 반복해서 풀면서 단어의 출현 패턴을 학습하게 된다. 신경망에서의 단어 처리는 원핫 표현으로 나타낸다고 한다. 

 

you □ goodbye and I say hello. 

 

이 책에서는 word2vec 을 구현하기 위한 자세한 설명과 CBOW 모델에 대한 설명도 자세히 기술해놓았다. 

 

 

 

 

  • 순환 신경망

순환신경망은 피드포워드 신경망이 "시계열 데이터"의 패턴을 충분히 학습 할 수 없다는 단점 때문에 등장하게 되었다. 순환신경망은 RNN(Recurrent Neural Network) 인데, 몇번이나 반복해서 일어나는 일을 뜻한다. 즉, 신경망을 순환하면서 학습하게 되는 형태로 구성이 된다. 순환하기 위해서는 경로가 존재해야 데이터가 같은 장소를 반복해서 지나 갈 수 있다. 

 

마찬가지로 이 책에서는 RNN의 계층 구현을 위한 설명을 자세히 기술해놓았다. 덧붙여, 게이트가 추가된 RNN에 대해서도 다루고 있었으며, RNN 구조에 기반한 LSTM 에 대해서도 다루고 있었다. 

 

 

 

 

 

 

 

 

 

 

밑바닥 부터 시작하는 딥러닝 1과 마찬가지로 실습에 필요한 소스코드를 git에 공개하고 있다.

공식 깃허브 저장소는 다음과 같다. 

 

https://github.com/WegraLee/deep-learning-from-scratch-2

 

WegraLee/deep-learning-from-scratch-2

『밑바닥부터 시작하는 딥러닝 ❷』(한빛미디어, 2019). Contribute to WegraLee/deep-learning-from-scratch-2 development by creating an account on GitHub.

github.com

 

 

대체적으로 밑바닥부터 시리즈는 진짜 "밑바닥" 부터 차근차근 세세하게 공부하여 큰 물고기를 잡을 수 있는 능력을 개발자들에게 길러주도록 훈련된 책 같다. 깃허브도 공개되어있고, 소스코드가 포함되어있기 때문에 책을 보면서 실습을 할 수 있고, 이 책에서는 누구나 노트북으로 실습할 수 있게끔 GPU 를 쓰는 코드는 최소화 시켰다고 한다.

 

어찌보면 이 책은 "누구나" 밑바닥부터 시작할 수 있는 딥러닝 책이 아닌가 싶다. 딥러닝 쌩 초보자들이 읽기에는 시즌 2보다는 시즌1이 수월하겠지만, 딥러닝을 이미 접했거나, 자연어 처리나 순환 신경망에 관심이 있는 개발자들이라면 충분히 무리 없이 따라 갈 수 있는 책이라고 생각된다. 개인적으로 밑바닥부터 시리즈가 계속 나와줬으면 하는 바람이 있다. 

728x90
반응형