본문 바로가기
Deep Learning/모두를 위한 cs231n

[모두를 위한 cs231n] Lecture 8 - Part2. Deep Learning Framework

by Steve-Lee 2020. 5. 11.

Deep Learning Framework

안녕하세요 Steve-Lee입니다. Lecture 8 - Part 2은 Deep Learning Framework입니다. 구글에서 개발한 Deep Learning 대표 Framework TensorFlow와 Facebook의 PyTorch 지금 시작합니다!

 

모두를 위한 cs231n

더보기

 

모두를 위한 cs231n 😀

👉🏻 시작합니다! 🎈

모두를 위한 cs231n (feat. 모두의 딥러닝 & cs231n)


👉🏻 Neural Network 기초 📗
* Backpropagation
Lecture4. Backpropagation and Neural Network. 오차역전파에 대해서 알아보자😃


👉🏻 Training Neural Network Part I 📑

- Activation Function 파헤치기

Lecture 6. Activation Functions에 대해 알아보자 
Lecture 6. Activation Functions - ReLU함수의 모든 것

 

- Data Preprocessing

Lecture 6. Training Neural Network - Data Preprocessing

 

- Weight Initialization 

Lecture 6. Weight Initialization

 

- Batch Normalization
Lecture 6. Batch Normalization

 

👉🏻 Deep Learning CPU와 GPU ⚙️

Lecture 8 - Part1. Deep Learning 을 위한 CPU와 GPU


👉🏻 Deep Learning Framework ☕️
Lecture 8 - Part2. Deep Learning Framework

👉🏻 TensorFlow Fraemwork 🧱
Lecture 8 - Part3. TensorFlow Framework


👉🏻 
PyTorch Framework 🔥

Lecture 8 - Part3. PyTorch Framework

 

👉🏻 Generative Model

Lecture 13 - Part2. VAE(Variational AutoEncoder)

 

모두를 위한 cs231n (feat. 모두의 딥러닝 & cs231n)

cs231n 시작합니다! 안녕하세요. Steve-Lee입니다. 작년 2학기 빅데이터 연합동아리 활동을 하면서 동기, 후배들과 함께 공부했었던 cs231n을 다시 시작하려고 합니다. 제가 공부하면서 느꼈던 점들과

deepinsight.tistory.com

 

<Review>

지난 시간에 우리는 Deep Learning을 위한 CPU GPU에 대해 알아보았습니다. 딥러닝에서 GPU를 사용하는 이유에 대해 알고 Deep Learning Framework를 공부한다면 보다 깊은 내용을 이해하실 수 있다고 생각합니다. 

 

[모두를 위한 cs231n] Lecture 8 - Part1. Deep Learning 을 위한 CPU와 GPU

안녕하세요 Steve-Lee입니다. Lecture 8 Part 1. Deep Learning을 위한 CPU와 GPU 지금 바로 시작합니다! 모두를 위한 cs231n 모두를 위한 cs231n 😀 👉🏻 시작합니다! 🎈 [Deep Learning/03. 모두를 위한 cs231n..

deepinsight.tistory.com

 

오늘날의 Deep Learning Framework

오늘날에는 다양한 Deep Learning Frame들이 사용되고 있습니다. 저희가 Lecture 8을 통해 주로 다룰 Framework는 TensorFlow와 PyTorch Framework입니다.

 

 

▶ 그림에서 주목할 재미있는 점

위의 슬라이드에서 주목할 점은 모든 프레임워크가 초창기에는 학계에서 시작되었다는 점입니다. PyTorch의 전신인 Torch는 NYU와 Facebook의 연구에서 시작되었습니다. TensorFlow의 전신인 Theano의 경우 Montreal 대학에서 연구가 가 시작되었습니다. 

 

최근 몇 년간의 흥미로운 변화는 이러한 Deep Learning Framework가 Academy에서 Industry로 전환된 것이라고 할 수 있습니다. PyTorch는 Facebook에서 TensorFlow는 Google에서 연구 개발되고 있습니다. 

 

[출처] DEVOPEDIA - Deep Learning Frameworks

이 외에 Paddle(Baidu), CNTK(MS), MXNet(Amazon) 등의 Deep Learning Framework가 글로벌 공룡기업들의 주도로 Industry에서 활발하게 연구가 진행되고 있습니다. 

 

 

from Computational Graphs to Deep Learning Frameworks

지난 강의들을 상기해 보면 Computational Graph에 대해 수도 없이 배웠을 것입니다. Deep Learning과 Computational Graph는 뗄레야 뗼 수 없는 관계입니다. 

 

슬라이드는 선형 분류기를 보여줍니다. X와 W가 있고 이를 행렬 곱으로 표현합니다. Hinge Loss 같은 손실 함수를 계산하며 Regularization term으로 보아 weight의 정규화도 표현해줍니다.

 

Neural net 경우 그래프구조는 상당히 복잡합니다. 다양한 레이어와 활성함수가 존재합니다. 그리고 아주 많은 가중치들이 그래프 전역에 퍼져 있을 것입니다.

 

Neural Turing Machine으로 가면 훨씬 더 복잡한 구조를 나타내게 됩니다.  너무 크고 복잡해서 Computational Graph를 그릴 수 조차 없게 됩니다.

 

따라서 우리가 굳이 코드를 직접 작성하지 않고도 Deep Learning model을 구현할 수 있도록 Deep Learning Framework를 이용해야 합니다. Deep Learning Framework를 이용해야 하는 이유는 크게 세 가지가 있습니다. 

 

Deep Learning Frameworks를 사용하는 세 가지 이유

첫 째, Deep Learning Framework를 사용하면 엄청나게 크고 복잡한 computational graph를 직접 구성하지 않아도 됩니다

둘째, gradient를 자동으로 계산해 줍니다

셋째, 우리는 효과적으로 GPU를 다룰 수 있도록 도와줍니다.

Gradient를 하나씩 구현해야 하는 어려움을 도와주고 GPU를 보다 쉽게 효율적으로 사용할 수 있도록 도와줍니다. 즉 앞서 배웠던 cuBLAS, cuDNN, CUDA를 직접 사용하지 않고도 GPU를 효율적으로 사용할 수 있게 됩니다. 그리고 memory 또한 관리를 도와준다니 금상첨화입니다.

 

Numpy를 활용한 Computational Graphs 구축하기

Numpy로 Computational Graph를 구현할 수 있다고 생각할 수 있습니다. 하지만 Numpy로 Computational Graph를 구현하는 데는 두 가지 어려움이 있습니다.

첫 째, backward도 직접 구현해야 합니다

둘째, Numpy는 CPU에서만 동작합니다

때문에 Numpy만 사용하게 된다면 Gradient를 직접 구해야 하며 GPU를 활용할 수 없게 됩니다.

 

Deep Learning Framework의 목표

Deep Learning Framework 목표는 forward pass 코드를 Numpy스럽게 작성해 놓으면 GPU에서도 동작하고 gradient 알아서 계산해 주는 것입니다.

 

The Goal of Deep Learning Frameworks these day is to let you write code in forward pass that looks very similar to Numpy but let you run on GPU and let you automatically compute gradient  - Justin

 

딥러닝 프레임워크의 목표는 Numpy처럼 구현하면 GPU에서 동작하고 자동으로 gradient를 구할 수 있도록 도와주는 것입니다

 

기억하세요!

 

TensorFlow Framework

Computational Graph Tensorflow

TensorFlow의 코드를 보면 Numpy forward pass 코드와 아주 유사합니다. 곱셈/덧셈 연산을 보면 확인하실 있습니다.

 

하지만 Tensorflow에는 gradient 계산해주는 마법의 코드가 있습니다. 직접 backward pass 작성할 필요가 없는 것입니다. 아주 유용한 기능입니다.

 

그리고 TensorFlow가 좋은 하나는 명령어 줄이면 CPU/GPU에서 동작하도록 전환 시킬 있다는 것입니다.

Forward pass에서 tf.device('/cpu:0') 선언을 해주면 CPU 돌리고 싶어!라고 하는 것과 같습니다.

 cpu대신 gpu 입력하면 GPU에서 동작하도록 만들어줍니다.

Computational Graph in PyTorch

PyTorch Framework의 경우도 TensorFlow와 상당히 유사합니다. Variable을 정의해주면 Computational Graph를 구성합니다. Forward pass는 Numpy와 유사합니다. TensorFlow와도 매우 유사하죠. Torch에서는 .backward() function을 사용해 모든 gradient를 구할 수 있습니다. PyTorch Framework에 대한 자세한 내용은 여기서 확인하실 수 있습니다.

 

Compare Computational Graph

Numpy 사용하기 쉽기 떄문에 Numpy처럼 생긴것은 TensofFlow PyTorch 좋은 특성입니다. TensorFlow와 PyTorch는 Numpy스럽게 생겼을 뿐만 아니라 gradient 알아서 계산해주고 GPU에서도 자동으로 동작합니다.

 

TensorFlow에 대해 더 자세한 내용은 2부에서 찾아뵙도록 하겠습니다!

 

(잠시 휴식을 취하고 오세요!😄)

 

Next Lecture

TensorFlow Framework

 

[모두를 위한 cs231n] Lecture 8 - Part3. TensorFlow Framework

TensorFlow more detail 앞서 Deep Learning Framework에 대한 개요를 짚어봤습니다. (이 글이 처음이신 분은 아래 링크를 우선 보고 오시기를 추천드립니다!) [모두를 위한 cs231n] Lecture 8 - Part2. TensorFl..

deepinsight.tistory.com

Reference

  • cs231n Lecture 8 - Deep Learning Software
 

Syllabus | CS 231N

Lecture 8 Thursday April 27 Deep Learning Software Caffe, Torch, Theano, TensorFlow, Keras, PyTorch, etc [slides] [video]

cs231n.stanford.edu

댓글