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) : 프로그램끼리 상호작용하도록 도와주는 매개체
+) 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
'대학교 수업 > AI 실무 특강 (방학특강)' 카테고리의 다른 글
2.1 ANN의 이해 _ 인공 신경망 이해하기 (8) | 2024.09.06 |
---|---|
1. 딥러닝 개요 (1단원 전체 묶음) (11) | 2024.09.06 |
1.2 딥러닝 개요 _ 인공지능이란 (5) | 2024.09.03 |
1.1 딥러닝 개요 _ 인공지능 역사 (10) | 2024.08.30 |
0. AI 실무 특강 (0) | 2024.07.22 |