파이토치 딥러닝 마스터_1장

코넬·2023년 3월 14일
1

ComputerVision_Pytorch

목록 보기
1/10
post-thumbnail

🎤 딥러닝과 파이토치 라이브러리 소개

1장에서는 ...

  • 딥러닝이 바꾼 머신러닝 접근 방식
  • 파이토치가 딥러닝에 최적인 이유
  • 대표 딥러닝 프로젝트 살펴보기
  • 예제 실습에 필요한 하드웨어 사양
    에 대하여 알아보자 !

☝🏻 딥러닝 혁명

요즘 chatGPT 가 엄청나게 붐을 일으키고 있다. 사람만 가능했던 작업이 이제는 여러 예를 보고 학습으로 수행해내고 있다. 딥러닝은 대량의 데이터를 사용해 입력과 출력이 동떨어진 복잡한 함수들을 근사하는 방법을 사용한다.

십여년 전까지 머신러닝은 피처 엔지니어링(feature engineering) 에 크게 의존하였다.

피처 엔지니어링(feature engineering) : 다운스트림 알고리즘이 새로운 데이터를 기반으로 올바른 결과물을 낼 수 있도록 촉진하기 위해 입력 데이터를 변환하는 작업, 피처 엔지니어링은 다운스트림 알고리즘이 문제를 풀 수 있도록 올바른 변환 규칙을들 포함한다.

반면, 딥러닝은 원본 데이터로부터 자동으로 표현들을 찾아낸다.딥러닝이 부상한다 하더라도 피처 엔지니어링이 사라지는 것은 아니지만, 신경망 내부의 수학적 개체를 조작해 훈련 데이터로부터 표현을 자동으로 훈련시키는데 집중하기에 좋은 결과를 이끌어낼 수 있다. (성능 최적화의 유도 과정에 따라 저수준에서 고수준으로 피처들이 자동으로 추출된다.)

(출처 : Freshdesk)

엄청 간단해 보이지 않는가? 여기서 딥러닝을 성공적으로 실행하기 위해 필요한 요구사항들을 살펴볼 수 있다.

  • 가지고 있는 데이터가 무엇이든 일단 넣을 수 있어야한다.
  • 딥러닝 머신을 정의해야한다.
  • 유용한 표현을 얻고 머신이 원하는 출력 결과를 낼 수 있도록 자동화된 훈련 방법을 만들어야한다.

✌🏻 딥러닝을 위한 파이토치

자, 우리가 책을 통해 배우려는 파이토치 란?

딥러닝 프로젝트를 위한 파이썬 프로그램 라이브러리이다. 파이토치는 현재 고수준의 작업을 위한 전문적인 도구로도 전혀 손색이 없음이 검증되었다.
파이토치에서는 텐서(tensor) 라는 핵심 데이터 구조를 제공하여 전용 하드웨어를 활용하여 수학 연산을 빠르게 수행한다. 덕분에 파이토치는 신경망 아키텍처를 설계하고 개별 혹은 분산 컴퓨팅 자원에서 훈련하기 매우 편리하다는 장점을 제공받는다.

텐서(tensor) 란?
넘파이(NumPy) 배열과 여러면에서 유사한 다차원 배열. 차후 파트에서 배운다.

❓ 왜 파이토치인가?

딥러닝을 학습시키기 위해서는 다양한 문제에 적용할 수 있을 정도로 유연하면서도, 적당한 시간 안에 많은 양의 데이터로 훈련 가능한 효율적인 도구가 필요하다.

여기서 파이토치는 어떤 중요한 역할을 수행할까?

첫 번째, 단순함이다.

많은 연구원과 실무자의 이야기를 들어보면, 파이토치는 학습이나 활용, 확장, 디버깅 면에서 모두 수월하다고한다. 파이토치는 파이썬스러운 면이 강하다. (텐서가 넘파이 구조체와 비슷하기 때문에, 파이썬처럼 interactive 하게 사용 가능하다. )

두 번째, 정교한 딥러닝에 최적화되어있다.

파이토치는 딥러닝을 위해 그래픽 연산 유닛인 GPU 로 연산을 가속할 수 있다. 이는 CPU 에서 처리하는 것보다 50배나 빠른 결과를 보여준다. 또한 훈련을 위해 딥러닝이 사용하는 일반 수학식에 대해 산술 최적화를 지원한다. (이런 기능은 과학 계산에서도 유용하다.) 마지막으로 파이토치는 파이썬 코드로 즉시 매끈하게 불필요한 복잡함 없이 정교하게 모델을 구현할 수 있다.

세 번째, 다른 모델, 언어와 인터렉트가 가능하다.

파이썬에 의존하지 않고 추론 가능한 모델을 배포하기 위해 C++ 런타임을 갖추면서 다른 언어를 지원하는 바인딩과 모바일 장비에 배포하기 위한 인터페이스를 늘리고 있다. 파이토치의 유연함을 잘 보여준다.

🧭 파이토치 흐름 맛보기

자세히 들어가기 전, 파이토치의 전반적인 흐름에 대해서 살펴보자.

  1. 파이토치는 기본적으로 다차원 배열 혹은 파이토치 언어로는 텐서라 부르는 자료구조를 사용하는 라이브러리이다. 따라서 텐서를 사용하는 다양한 연산 라이브러리를 torch 모듈 로 제공한다.

  2. 텐서 자료구조나 이를 사용한 연산은 CPU 나 GPU 함수 호출로 가능하다. 특정 텐서에 수행한 모든 연산을 기억해뒀다가 주어진 입력값을 기준으로 미분값을 자동 계산해준다.
    파이토치의 계산 최적화 기능내부적으로 파이토치의 자동미분 엔진이 텐서를 사용하기 때문에 가능하다.

  3. 신경망 구축을 지원하는 파이토치 핵심 모듈은 torch.nn 에 있으며 공통적인 신경망과 아키텍처적인 구성 요소를 제공한다. (여기에 완전 연결 계층이나 컨볼루션층, 활성화 함수, 손실 함수가 모두 포함된다.)

  4. 추가적으로 모델 훈련을 위해 모델을 훈련 데이터에 맞춰주는 옵티마이저(optimizer) 와 모델과 데이터로 모델 훈련을 위해 필요한 계산을 수행할 하드웨어 등이 필요하다.

  5. 가져온 데이터의 각각 샘플을 파이토치가 다룰 수 있는 텐서로 변환을 해야하는데, 이 때 torch.utils.data 에 있는 Dataset 클래스 가 필요하며 다양한 타입의 데이터를 원하는 형태의 텐서로 표현가능하다.

  6. 이렇게 변환된 텐서를 여러 개의 훈련 샘플을 묶어놓은 텐서 형태인 배치(batch) 로 데이터를 묶기 위해 병렬 처리가 필요하게된다. 이때 DataLoader 클래스 를 사용한다.

  7. 자, 이제 훈련을 진행하면, 훈련 루프는 매번 데이터 로더에서 얻은 샘플로 모델을 평가한다. 모델의 출력을 기대값과 비교하는 이때 criterion 혹은 손실 함수(loss function) 를 사용한다. 손실 함수 역시 torch.nn 에 있다.

  8. 손실 함수로 출력 결과를 이상적인 결과와 비교한 후 다음 출력이 목표 출력을 더 잘 모사하게끔 모델을 조정하는데, 여기서 파이토치 자동 미분 엔진 을 사용한다.

이런 식으로 파이토치는 굴러간다. 앞으로 상세한 내용들과 이야기들은 파이토치 딥러닝 마스터 시리즈를 스터딩하며 남기도록 하겠다. Pytorch 이해하기, 시작해보자 !

출처 : 파이토치 딥러닝 마스터

profile
어서오세요.

0개의 댓글