상세 컨텐츠

본문 제목

[알쓸쿠잡] 2편. 딥러닝 프레임워크

알쓸쿠잡/알쓸쿠잡

by hwangmina 2023. 3. 7. 16:50

본문

작성자: 17기 황민아

딥러닝 프레임워크

딥러닝에는 DNN, CNN, RNN, 등 다양한 형태의 알고리즘이 개발되어 활용되고 있으며, 두 개 이상의 알고리즘을 혼합하여 사용하는 경우도 많아졌습니다. 검증된 알고리즘을 사용할 때마다 새롭게 구현하는 것은 매우 비효율적입니다. 비효율성을 개선할 수 있는 방법이 바로 딥러닝 프레임워크를 사용하는 것입니다. 

 

프레임워크란 응용 프로그램을 개발하기 위한 여러 라이브러리나 모듈 등을 효율적으로 사용할 수 있도록 하나로 묶어 놓은 일종의 패키지입니다.

 

딥러닝 프레임워크는 이미 검증된 수많은 라이브러리 뿐만 아니라 사전 학습이 완료된 다양한 딥러닝 알고리즘을 제공하여 개발자가 이를 빠르고 손쉽게 사용할 수 있게 해줍니다. 이를 통해 중복적인 기능을 구현해야하는 소모적인 작업으로부터 해방시키고, 문제 해결을 위한 핵심 알고리즘 개발에만 집중할 수 있도록 도와줍니다. 

 

대표적인 딥러닝 기반 프레임워크로는 시아노, 텐서플로우, 케라스, 파이토치 등이 있습니다. 각각의 프레임워크는 각각 다른 목적으로 제작되었으며, 고유한 기능과 특성을 제공합니다.

 

이 중 가장 많이 사용되는 텐서플로우, 케라스, 파이토치, 그리고 최근에 주목을 받고 있는 JAX까지 차례로 알아보겠습니다.

 

 

 

 

 

1. 텐서플로우(Tensorflow)

텐서플로우는 최초의 딥러닝 프레임워크 중 하나인 시아노를 대체하기 위해 구글의 구글 브레인 팀에서 개발한 딥러닝 프레임워크입니다. 2015년 오픈소스로 공개된 파이썬 기반 라이브러리로, 데이터 플로우 그래프 (Data Flow Graph) 구조를 사용한다는 특징이 있습니다. 

 

텐서플로우는 각종 신경망 학습에 사용되며, 실제로 이미지 인식, 반복 신경망 구성, 기계 번역, 필기 숫자 판별 등에서 활용되고 있다고 합니다. 특히 대규모 예측 모델 구성에 강점을 보여 베타 테스트 단계부터 실제 서비스 구현까지 사실상 거의 모든 딥러닝 프로젝트에서 활용도가 높은 프레임워크입니다. 게다가 구글에서 제공하는 오픈소스 라이브러리이기에 지속적인 성능 개선이 이루어지며, 속도, 안정 부문에서도 우수하다는 장점이 있습니다.

 

하지만 딥러닝 모델을 만드는 데 기초 레벨부터 직접 작업해야 하기에 초보자가 사용하기엔 어려울 수 있다는 단점이 있습니다.

 

 

 

 

 

2. 케라스(Keras)

케라스는 텐서플로우의 단점을 보완하기 위해 개발된 프레임워크입니다. 보다 효율적인 신경망 구축을 위한 단순화된 인터페이스로 개발되었으며, 텐서플로우에서 작동하도록 구성할 수 있습니다.

 

케라스에서 제공하는 시퀀슨 모델을 활용하여 레이어를 쉽게 순차적으로 쌓을 수 있으며 케라스 함수 API를 활용하여 더 복잡한 모델을 구성할 수도 있습니다. 딥러닝 초급자도 손쉽게 딥러닝 모델을 개발, 활용할 수 있게끔 직관적인 API를 제공한다는 큰 장점이 있습니다.

 

단점으로는 문서화가 제대로 되어 있지 않아, 함수에 대한 설명을 찾기 어렵고, 충분한 공식 예제가 부족하다는 점이 있습니다. 또한 모듈화의 한계로 복잡한 프로젝트에 구현 범위가 타 프레임워크에 비해 다소 좁은 편입니다.

 

 

 

 

 

3. 파이토치(PyTorch)

파이토치는 페이스북의 인공지능 연구팀이 개발한 파이썬 기반 오픈소스 라이브러리 '토치'에 기반한 프레임워크입니다. 텐서플로우와는 다르게 절차가 간단하고 그래프가 동적으로 변화할 수 있으며 코드 자체도 파이썬과 유사하다는 특징이 있습니다.

 

파이토치는 그래프를 만들면서 동시에 값을 할당하는 Define by run 방식을 사용하기에 코드를 깔끔하고 직관적으로 작성할 수 있습니다. 더불어 메모리에서 연산을 하면서도 신경망 사이즈를 최적으로 바꾸면서 동작시킬 수 있으면서도 학습 속도도 빠르기에 최근 딥러닝 관련 논문에서는 텐서플로우보다 파이토치를 선호하는 추세라고 합니다.

 

 

 

 

 

4. JAX

JAX는 머신러닝 연구와 고성능 연산 작업을 위해 Google에서 만든 프레임워크입니다. 자동미분(Autograd)이 가능하고, JIT 컴바일 방식을 활용하여 속도 측면에서 강점을 보인다는 특징이 있습니다.

 

기존 LLM과 같은 거대 모델의 경우 학습 속도에도 효율적으로 활용될 수 있습니다. 실제 SOTA 모델들 사이에 활용이 늘고 있는 추세라고 합니다. 또한 기존의 NumPy 대신 활용할 수 있으며, CPU,GPU,TPU에서 코드 변경 없이 사용 가능하다는 장점도 있습니다.

 

하지만 아직은 국내 자료가 많지 않기 때문에 진입장벽이 높은 편입니다. 또한 최신 모델들에 대한 코드 활용은 가능하지만, 전통적인 모델에 대한 코드가 부족합니다.

 

JAX에 대한 더 자세한 설명은 아래의 깃허브에서 읽어보실 수 있습니다.

https://github.com/google/jax

 

 

 

 

 

 

Reference:

1) https://www.jobindexworld.com/contents/view/4379

2) https://hongong.hanbit.co.kr/%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EB%B9%84%EA%B5%90-%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C-%EC%BC%80%EB%9D%BC%EC%8A%A4-%ED%8C%8C%EC%9D%B4%ED%86%A0%EC%B9%98/

3) https://fastcampus.co.kr/story_article_framework

4) https://modulabs.co.kr/blog/what-is-jax-flax/

'알쓸쿠잡 > 알쓸쿠잡' 카테고리의 다른 글

[알쓸쿠잡] 1편. GPU 사용하기  (0) 2023.03.06

관련글 더보기

댓글 영역