대학교 수업/AI 실무 특강 (방학특강)

1.3 딥러닝 개요 _ 딥러닝 개념 이해

kicdor 2024. 9. 5. 20:00
반응형

1.0 학습 목표와 핵심 용어

1) 학습 목표  

: 딥러닝 개념 이해, Pytorch 코딩 스타일, 기초적인 통계 개념, 시각화 기법

 

 

2) 핵심 용어

- 머신러닝 (ML, Machine Learning)

  : 입력 데이터를 반복 학습해서, 처음 보는 변수의 값을 예측

 

- 딥러닝 (DL, Deep Learning)

  : 인공신경망(ANN)을 사용한 머신러닝 알고리즘

  (딥러닝 프로세스 : 문제 정의 >> 데이터 수집 >> 데이터 가공 >> 딥러닝 모델 설계 >> 딥러닝 모델 학습 >> 성능평가)

 

- 지도학습 (supervised learning)

  : 데이터와 정답 데이터(ground truth)를 함께 제공.  (문제집과 답지를 같이 줌)

 

- 비지도 학습 (unsupervised learning)

  : 데이터만 제공 (정답 데이터를 주지 않음) (문제집만 줌)

 

- 강화학습 (reinforcement learning)

  : 데이터 없이 인공지능이 스스로 시행착오를 통해 학습

  +) 예시 : 알파고, 게임 (사람보다 게임을 잘하는 인공지능은 강화학습을 통해 만들어짐)

 

- 생성형 AI (Generative AI)

  : 딥러닝 모델의 한 종류. 새로운 데이터를 생성하는 AI. (새로운 이미지 생성, 새로운 곡 작곡, 새로운 글 작성 등)

 

- 독립변수 

  : 입력값 (x). 다른 변수의 값을 결정하는 변수  ( y = f(x) 에서 x)

 

- 종속변수

  : 출력값 (y). 독립변수로 인해 값이 결정되는 변수. ( y = f(x) 에서 y)

 


1.1 머신러닝과 딥러닝

1)  ML과 DL의 역사

- 1950년대,   ANN등장

- 1960~1980년대,   규칙 기반 전문가 시스템 등장

                              +) 규칙 기반 전문가 시스템 (Rule-based expert system) : 실용화 된 시스템. If...else...then 구문 사용. 

- 1980~,   이후 여러 데이터를 기반으로 회귀 문제, 분류 문제로 발전

                +) 회귀 (regression) : 값을 예측.

                +) 분류 (classification) : 범주를 나눔. 

 

 

2) 선형 회귀와 분류

(1) 선형 회귀
     : 결정 경계 (decision boundary)(파란선)를 이용해서 입력값(x)에 대한 정답(y)를 예측.

      (예를 들어, 밑에 사진에서 x값이 2.7일 때, 2.7에 대한 y값을 예측하는 것)

 

(2) 분류

   : 결정 경계(decision boundary)를 기준으로, 결정 경계의 위쪽은 A, 결정 경계의 아래쪽은 B라고 분류.

사진출처 - 위키백과(선형회귀)

 

 

3) 머신러닝과 딥러닝 차이

(1) 머신러닝

: 훈련 데이터 셋(training data set)을 입력(input) >>  사람이 수동으로 특징 설계(Feature extraction) >> (이 데이터를 기반으로) 분류(classification) >> 출력(output)

+) 예시 : 강아지 사진 데이터들을 훈련시킴 >> 사람이 강아지는 이런 특징이 있다~ 하고 특징 설계 >> 강아지들 분류 >> 새로운 사진을 주고 얘는 강아지야? 물어봄 >> 강아지인지 아닌지 판단

     

(2) 딥러닝

: 훈련 데이터 셋  >> 기계가 자동으로 특징 설계 및 분류 (ANN 또는 Deep ANN을 사용) >> 출력   (효율적)

 

+) 딥러닝은 신경망(ANN)의 일종이고, 신경망(ANN)은 기계학습(ML)의 일종이고, 기계학습(ML)은 인공지능(AI)의 일종.

사진출처-위키백과(선형회귀)

 


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

(1) 지도 학습 (supervised learning)

- 회귀 (regression) : 예측하는 것

- 분류 (classification) : 분류...하는 것

 

 

(2) 비지도 학습 (unsupervised learning)

- 군집 (clustering) : 데이터의 특징이 유사한 값들끼리 모아둠.

 

 

(3) 강화 학습 모형 (reinforcement learning)

출처-네이버지식백과(강화형 기계 학습)

+) 예시 : 마리오 게임을 예시로 들면, 내(agent)가 오른쪽 키를 누르면 (action) >> 마리오 캐릭터(agent)가 움직이는 게 화면에 업데이트 됨 (statement) + 아이템을 먹음 (reward)

 


1.3 파이토치를 사용하는 이유

(1)  Pytorch vs TensorFlow

- 디자인 철학

: 파이토치는 Imperative Programming , 텐서플로는 Detractive Programming.

+) Imperative Programming  : 함수형 언어가 아닌 언어. (C, C++, Java, Python 등)

+)  Detractive Programming  : 함수형 언어 (functional language). 사용하기 복잡하고 어려움.  (스칼라, 헤스칼 등) 

 

- 그래프 생성 

: 파이토치는 Define-by-Run, 텐서플로1은 Define-and-Run, 텐서플로2는  Define-by-Run 

+) 동적 계산 그래프 (Define-by-Run) : 중간에 변수의 값을 바꿀 수 있음. (유연하게 코딩 가능)

+) 정적 계산 그래프 (Define-and-Run) :중간에 변수의 값을 바꿀 수 없음. 속도는 더 빠름(얘 때문에 사용하기 어려움)

 

- 디버깅

: 파이토치는 Pythonic하며, (동적 계산 그래프로 인해) 디버깅이 상대적으로 쉬움, 텐서플로1은 복잡, 텐서플로2는 개선됨.

+) Pythonic 하다 : "Python다운 프로그래밍이 가능하다", "간결하고 쉽다"

 

- 프로덕션

: 파이토치는 TorchScript 사용, 텐서플로는 TensorFlow Serving, TensorFlow Life, TensorFlow.js 사용.

(TorchScript는 연구, TensorFlow Serving은 회사, TensorFlow Life는 모바일, TensorFlow.js는 웹에 사용하기에 적합)

 

- API & 생태계 

:  파이토치는 Python API, Pytorch Lightning 사용, 텐서플로는 많은 API를  Keras로 통합시킴. TFX등 확장 프로그램 사용.

+) API (Application Programming Interface) : 프로그램끼리 상호작용하도록 도와주는 매개체

출처 - blog.wishket.com -위시켓(API란)

+) Python API를 사용해서 Python과 사용법이 유사함. 

+) Pytorch Lightning : 상당히 좋은 알고리즘.  훨씬 간단하게 코딩 가능.

+) Keras : API 종류가 많음 >> Keras라는 프레임워크에 통합시킴 >> 계층적으로 텐서플로 내부에도 k가 작동. (복잡)

 

- 커뮤니티 (주로 사용하는 사람들)

: 파이토치는 Meta(Facebook) 제공, 학계와 연구용으로 사용, 텐서플로는 Google 제공, 주로 상용 애플리케이션으로 사용

 


1.4 파이토치 권고 코딩 스타일

- Pythonic하게, 쉽게 코딩. 

- 클래스 사용 권고

+) Module class (nn.Module) : 신경망 동작 정의. (AI는 데이터를 준비 >> 데이터를 딥러닝으로 처리에서 "데이터 처리") 

+) Dataset class : 데이터 처리. (AI는 데이터를 준비 >> 데이터를 딥러닝으로 처리에서 "데이터 준비") 

 

 

1) 신경망 정의 (Module class 사용)

출처 - ≪파이썬으로 만드는 인공지능 ≫

+) 클래스와 인스턴스

: 클래스는 붕어빵 틀, 인스턴스는 붕어빵

 

- nn.Module

: Module (기존 클래스)의 기능들이, Net (새로운 클래스) 상속됨.   (Net에서 Module Class기능 사용 가능)

 

- def

: 정의를 하겠다.

 

- __init__(self)

: 클래스를 생성할 때 실행되는 생성자 메서드 (initialize, 초기화).  객체의 성질들을 정해줌.

(self는 class member기 때문에 항상 있어야 함. )

 

 

- forward ( =앞으로 진행한다)

: 정의를 한 후에 오버라이딩을 시켜야 함 >> forward 함수 사용 

(신경망에서 데이터가 처음부터 끝까지 어떻게 동작할지 정함.)(나만의 클래스(Net)에서 나만의 동작을 정의)

 

 

2) 데이터 가져오기 + 학습

출처 - ≪파이썬으로 만드는 인공지능 ≫

+) 클래스와 인스턴스

: 클래스는 붕어빵 틀, 인스턴스는 붕어빵

 

- Dataset()

: 상속하는 경우도 있는데 지금은 상속 안하는 버젼으로 작성함

 

- def

: 정의를 하겠다.

 

- __init__(self)

: 클래스를 생성할 때 실행되는 생성자 메서드 (initialize, 초기화).  객체의 성질들을 정해줌.

(self는 class member기 때문에 항상 있어야 함. )

 

-  __len__(self)

: 길이 반환. 원소의 대수를 셀 때 접근되는 메서드.

 

- return len(data)

: (data가 list형식으로 작성되어 있다고 가정) 데이터의 개수 반환.

 

- __getitem__(self,i)

: 인덱스에 접근할 때 호출되는 메서드. 

클래스의 인스턴스 자체도 슬라이싱 가능. (클래스 내부에서 슬라이싱 기능 사용 가능하게 함)

(객체에 [ ] 연산자 사용 (리스트가 되)  >>  내부적으로  __getitem__ 메소드가 자동으로 실행)

 

+) 예시

: a=[1,2,3,4] 일 때, a[i]로 들어가고, 이에 대한 값이 반환되게 함.

( a[0] = 1, a[1] = 2, a[2] = 3, a[3] = 4)    (i자리는 인덱스 자리)

 

+) 슬라이싱(slicing)

: a=[1,2,3,4] 일 때, a[:], a[1:3], a[0:2:3] 같은 것.

 

- return data[i], label[i]

: i 번쨰 data값(문제 x), i 번쨰 label값(정답y) 반환.  (튜플로 반환됨)

 

 

3) 구성

: 모듈 클래스 (동작, 구조) + 데이터셋(data).   (딥러닝 학습 수행 코드)

 

+) 예시

출처 - ≪파이썬으로 만드는 인공지능 ≫

★이거 전체가 학습(training)과정

- 목표 : 가중치 결정

- 가중치 : 뇌세포들 사이에 연결 상태를 나타내는 것 (얼마나 강하게/약하게 연결되어있는지)

 

- for data, label in DataLoader()

: 문제(data)와 정답(label)이 있는 지도학습(supervised learning)

 

- loss (오차)  ( = (y hat-y)^2 = |y hat - y|)

: 예측값(y hat, prediction)과 정답(y, label)이 얼마나 차이가 나는가

(보통 y hat과 y는  벡터나 텐서로 나타남) 

 

- weight (가중치)

: 오차역전파(back propagation)를 이용해서 신경망 가중치를 수정한다. 

 

- optimizer (최적화)

: 경사하강법을 푸는 방법. 


+)참고

1) 클래스의 특별한 메서드  

(1) __del__

: 소멸자 (Destructor). 인스턴스 삭제할 떄 자동 호출. (생성자__init__와 반대)

 

(2) __repr__

: 인스턴스를 print()문으로 출력할 때 실행.

 

(3) __add__

: 인스턴스끼리 더할 때 실행.

 

(4) 비교 메서드

: 인스턴스 사이의 비교 연산자 (<, <=, >, >=, ==, != 등) 사용할 때 호출.

( __lt__() ,  __le()__ ,  __gt__() ,  __ge__() ,  __eq__() ,  __ne__() )

 

 

2) 예시

출처 -

>> self.numbers

: [0, 1, ..., 9]

 

>> T = Test()

: Test 함수 실행

(T는 instance, Test는 class)

 

>> len(T)

: __len__메서드 실행    

10

(계속 instance T를 사용하고 있음)

 

>>T[3]

: __getitem__메서드 실행

3

반응형