본문 바로가기
AI/펭귄브로의 3분 딥러닝 파이토치맛

[3분 딥러닝] 1. 딥러닝과 파이토치

by 쵸빙 2020. 1. 21.

      3분 딥러닝 카테고리에는 한빛미디어의 펭귄브로의 3분 딥러닝 파이토치맛이라는 책의 내용을 정리하도록 하겠다.

 

1장에서는 딥러닝의 기본 지식을 쌓고, 여러 머신러닝 방식에 대해 알아본다. 딥러닝을 구현하기 위해 텐서플로, 케라스 등 여러 방법이 있는데 그 중에서 파이토치가 무엇이고 왜 좋은지 알아보도록 하겠다.

 

● 인공지능과 머신러닝

     인공지능은 인간의 사고를 인공적으로 모방한 모든 것이다. 인공지능이 큰 개념이라면 그 안에 머신러닝, 그 안에 딥러닝이 있다. 머신러닝은 주어진 데이터를 가지고 통계학적인 모델을 학습시켜 인공지능을 구현하는 방법이고, 딥러닝은 머신러닝의 수많은 학습법 중 한 갈래인 것이다.

 

     초기의 인공지능은 입력부터 출력까지 각각의 단계를 사람이 일일이 지정해주었는데 머신러닝은 그것에서 더 발전하여 정답이 있는 데이터셋을 주고, 프로그램이 정답에 이르는 단계를 알아서 학습한 뒤, 새로운 테스트 데이터셋을 주면 알아서 답을 찾아내야 한다. 그런데 이렇게 훈련시키는 방법이 복잡하기 때문에 다양한 방법이 있다.

 

● 지도학습, 비지도학습, 강화학습

     학습은 모델에 어떠한 데이터를 입력했을 때 원하는 결과가 출력되도록 모델 내부의 변수들을 조금씩 조율하는 과정이다. 학습 방식은 지도학습(supervised learning), 비지도학습(unsupervised learning), 강화학습(reinforcement learning)이 있고, 이것들은 데이터의 특징, 학습 방식에 따라 서로 구분된다.

 

     지도 학습은 사람이 모델을 가르쳐서 정답으로 이끄는 방식이다. 훈련 단계에서는 입력과 그 정답(label)을 모델에게 계속 제공해서 입력인 x와 출력인 y의 연관성을 모델이 알아내도록 한다. 지도 학습은 가장 많이 쓰이고, 이미지, 음성 인식과 기계번역 등에 사용된다. 단점은 정답이 있는 데이터셋을 미리 준비해야하는 것이다.

 

     비지도 학습은 정답이 없는 데이터셋으로 모델을 학습시킨다는 점에서 지도 학습과 구분된다. 이 데이터로부터 군집 분석(cluster analysis), 데이터 표현(data representation), 차원 감소(dimensionality reduction) 등을 배우고, 지도학습을 보조하는 데 쓰이기도 한다. 정답이 없는 데이터셋이라는 점은 사람의 수고를 덜어주고 기계가 더 알아서 한다는 점에서 장점이지만, 원하는 결과가 안 나올 수도 있다는 점에서 단점이기도 하다.

 

     강화 학습은 보상과 처벌 체계를 세우고 모델이 환경을 경험하며 배운 다는 점에서 동적이다. 위에서 설명한 지도 학습과 비지도 학습은 이와 반대로 정적인 데이터를 사람이 미리 제공했었다. 게임 같이 주어진 환경에서 상호작용하며 높은 점수를 받는 방법을 배우는 셈이다. 그렇기 때문에 풀고자 하는 문제에서의 보상 방식을 잘 설정해야한다.

 

     이 이외에도 다음과 같은 학습 방법이 존재한다.

-준지도학습 (semi-supervised learning) : 레이블이 부족한 데이터를 학습(지도 학습과 비지도 학습의 중간 형태)

-메타 학습 (meta learning) : 학습법 자체를 연구

-원샷 학습 (one-shot learning) : 반복 없이 데이터를 한 번 혹은 몇 번만 보고 학습

-전이 학습 (transfer learning) : 한 문제를 위해 학습한 후 다른 문제에도 바로 적용

 

● 딥러닝과 신경망

     딥러닝은 데이터 사이의 복잡한 관계를 기계 스스로 학습할 수 있기 때문에 많은 사람들이 연구했다. 머신러닝 알고리즘들 중 가장 중요한 것들 중 하나가 인공 신경망이라는 알고리즘이다. 인공 신경망을 여러 겹 쌓아 학습한 것이 심층 인공 신경망 (deep neural network), 즉 딥러닝 (deep learning)이다.

 

     이외에도 머신러닝 알고리즘에는 의사결정 나무 (decision tree), 서포트 벡터 머신 (support vector machine), 랜덤 포레스트 (random forest), 회귀(regression), 나이브 베이즈 분류, 은닉 마르코프 모델, RNN, LSTM, CNN 등이 있고, 다양한 활용 목적에 따라 선택되어 사용된다.

 

     특징 추출 (feature extraction), 특징 공학 (feature engineering)은 정제되지 않은 데이터의 특징들을 머신러닝 알고리즘에 입력하기 위해 사람이 직접 추출하는 작업이다. 입체적인 컬러 이미지의 복잡성 때문에 윤곽선 검출 (edge detection)으로 이미지의 테두리를 따는 것이 그 예이다. 시간이 지나면서 특징 추출 단계도 자동화되었고, 인공 신경망은 간단한 수식 여러 개를 겹침으로써 복잡한 일까지 수행할 수 있게 되었다.

 

     딥러닝의 단점은 많은 양의 학습 데이터를 필요로 하고, 이런 큰 데이터로 많은 연산을 해야하기 때문에 컴퓨팅 자원과 시간을 그만큼 더 많이 필요로 한다. 하지만 요즘에는 데이터와 하드웨어가 매우 빠르게 발전하고 있기 때문에 이 부분의 걱정은 점점 줄어드는 추세이다. 딥러닝이 발전하면서 음성과 시각 분야가 실제 인간만큼 발전했고, 높은 사양의 게임도 가능할 만큼 많은 계산을 한번에 해결할 수 있게 되었다.

 

● 파이토치의 개발

     위에서 언급했듯이 딥러닝 알고리즘은 많은 데이터를 행렬로 반복해서 연산을 하기 때문에 계산량이 많아서 시간이 오래 걸린다. 이것을 해결하기 위해서 GPU로 행렬연산을 가속하는 테아노(Theano)라는 딥러닝 프레임워크를 시작으로 케라스(Keras) 등의 오픈소스 라이브러리가 이어졌다. 테아노는 직관적이지 않은 사용법과 잦은 버그, 대형 모델에 적용하기 어려운 점으로 인해 개발이 중단되었지만 그 영향으로 텐서플로(TensorFlow), 카페(Caffe), MXNet, CNTK 등이 개발되었다. 그 중에서도 이제부터 우리가 배울 파이토치(Pytorch)는 많이 사용되는 텐서플로 이후 탄생한 새로운 딥러닝 프레임워크이기 때문에 이전의 단점까지 보완했다.

 

● 파이토치의 장점

     파이토치는 페이스북의 주도로 여러 회사와 대학이 합심해 개발한 오픈소스 소프트웨어라서 누구나 사용할 수 있다. 또한, 머신러닝과 딥러닝 모델을 쉽게 구현할 수 있도록 만들어져서 가장 간결하고 직관적이고, 코드가 의미하는 바를 그대로 나타내서 파이썬의 특징을 가장 잘 나타낸다.

 

     파이토치는 코드가 한눈에 잘 들어오고 그 목적을 파악하기 쉽다. 파이썬과 넘파이(numpy)의 기초를 익힌 사람이라면 누구나 쉽게 사용할 수 있다는 장점이 있다. 반면 텐서플로는 구글의 딥러닝, 여러 서비스의 인프라를 위한 엔지니어링에도 쓰이기 때문에 어렵고 딱딱할 수 있다.

 

     정적 계산 그래프 (static computational graph) 방식은 텐서플로 등의 대부분의 딥러닝 프레임워크가 사용한다. 그래프 계산 방식을 최초에 정해두기 때문에 최적화하기 쉽다. 하지만 파이썬은 위에서도 언급했듯이 유연함을 주 목적으로 하기 때문에 이것을 쓰기에는 무리가 있다.

 

     동적 계산 그래프 (dynamic computational graph) 방식은 파이토치가 사용하는 방식이고, 정적 계산 그래프의 방식과는 달리 데이터에 유연한 모델을 만들 수 있다는 장점이 있다. 

 

     현재의 인공지능은 문서 분류, 기계 번역, 추천시스템, 이미지 인식 등에 사용되고, 모델 학습과 배포라는 2가지 파이프라인으로 관리된다. 그렇기 때문에 정적인 데이터셋으로 학습하고 정적인 모델을 배포하여 쓰는 오프라인 학습 (offline learning)에 최적화되어있다. 파이토치는 미래의 연구 트렌드에도 적용될 수 있어서 자율주행차, 게임, 인터넷 등 쌓이는 데이터에 실시간으로 대응하는 동적인 학습 방법에까지 적용될 수 있기 때문에 미래 지향적이다.

 

     파이토치는 유연하면서도 빠르다. 점점 성능은 좋아지고 있다.

 

     파이토치에 관련된 정보를 얻고 싶다면 다음의 커뮤니티를 참고하는 것도 좋다

-토치비전 (torchvision), 토치텍스트 (torchtext) : 파이토치용 각종 비전 및 텍스트 데이터셋과 데이터 관리용 도구를 모아둠.

- 이그나이트 (ignite) : 학습용 코드 프로토타이핑을 편하게 해줌.

 

다음 시간에는 본격적으로 파이토치로 딥러닝 모델들을 구현해보도록 하겠다.

2단원은 파이토치를 설치하는 내용이기 때문에 넘어가기로 하겠다.