AIVLE School DX 3기

[에이블스쿨 8주차] 딥러닝1(딥러닝의 개념)

김보통김보름 2023. 3. 20. 15:37
728x90
반응형

 

📝지난 수업을 정리해 봅시다~

 

더보기

⭐알고리즘 한판 정리

 

모델 : 데이터로부터 패턴을 찾는 것

모델링 : 오차(train srror)가 적은 모델을 만드는 것

모델 튜닝 : validation error를 최소화하는 모델 선정

 

모델의 성능

# 오차의 제곱의 평균
# squared=False 를 하면 RMSE
print(f'RMSE  : {mean_squared_error(y_val, pred, squared=False)}')

# 오차의 절댓값의 평균
print(f'MAE   : {mean_absolute_error(y_val, pred)}')

 


딥러닝

딥러닝과 머신러닝의 차이

▪ 인공지능> 머신러닝 > 딥러닝 (인공지능이 가장 넓은 개념)

▪ 특성 추출(전처리) + 분류를 컴퓨터가 처리
  : 머신러닝은 특성 추출을 인간이 처리 ← 개인의 의견이 개입됨(ex. 햇빛이 밝다, 어둡다)

 

출처 : https://www.manning.com/books/deep-learning-with-python-second-edition

 

구분 머신 러닝(범용적) 딥러닝
동작 원리 입력 데이터에 알고리즘을 적용하여 예측을 수행한다. 정보를 전달하는 신경망을 사용하여 데이터 특징 및 관계를 해석한다.
재사용 입력 데이터를 분석하기 위해 다양한 알고리즘을 사용하며, 동일한 유형의 데이터 분석을 위해 재사용은 불가능하다. 구현된 알고리즘은 동일한 유형의 데이터를 분석하는 데 사용된다.
데이터 일반적으로 수천 개의 데이터가 필요하다. 수백만 개 이상의 데이터가 필요하다.
훈련시간 단시간 장시간
결과 일반적으로 점수 또는 분류 등 숫자 값 출력은 점수, 텍스트, 소리 등 어떤 것이든 가능

[출처 : 딥러닝 텐서플로 교과서]

 

  1. 스케일링이 필수
  2. 모델 선언대신 모델구조, 컴파일이 있음
  3. 학습 후 학습곡선을 시각적으로 확인 

딥러닝 개념 이해

가중치

w = 가중치

 

최적의 가중치를 찾기 위해

  1. 조금씩 가중치(weight)를 조정하며
  2. 오차가 줄어드는지 확인한다.
  3. 언제까지? 지정한 횟수만큼 or 더 이상 오차가 줄어들지 않을 때까지

 


학습절차

node : 어떤 정보
학습 과정 동안 인공 신경망으로서 예시 데이터에서 얻은 일반적인 규칙을 독립적으로 구축(훈련)

 

model.fit(x_train, y_train) 하는 순간!

  1. 가중치에 (초기) 값을 할당한다. [초기값은 랜덤으로 지정 → 돌릴 때마다 그래프가 다르게 나옴]
  2. (예측) 결과를 뽑는다.
  3. 오차를 계산한다.
  4. 오차를 줄이는 방향으로 가중치를 조정
  5. 다시 1단계로 올라가 반복한다.

epochs = ep == 반복 횟수 == 학습곡선의 x축
learning_rate=lr == 학습률 == (오차를) 학습하는 정도


Regression

  • 딥러닝 전처리 : 스케일링
  • 네트워크 ↔ 모델구조
  • compile
  • 학습곡선
  • 회귀모델 평가 Review

⭐딥러닝은 스케일링을 필요로 합니다.

# 스케일러 선언
scaler = MinMaxScaler()
# train 셋으로 fitting & 적용
x_train = scaler.fit_transform(x_train)
# validation 셋은 적용만!
x_val = scaler.transform(x_val)

 

딥러닝 구조

출처 : https://tensorflow.blog/파이썬-머신러닝/2-3-8-신경망딥러닝/
출처 : https://tensorflow.blog/파이썬-머신러닝/2-3-8-신경망딥러닝/

  • Hidden Layer(은닉층)이 없으면 단층-퍼셉트론, Hidden Layer가 존재하면 다층 퍼셉트론(Multi-layer Perceptron, MLP)
  • 퍼셉트론이란?  입력->연산->출력 시스템

Process

각 단계(task)는

  • 이전 단계의 Output을 Input으로 받아
  • 처리한 후
  • 다음 단계로 전달

②공통의 목표를 달성하기 위해서 동작

 


Dense

# 메모리 정리
clear_session()

# Sequential 타입 
model = Sequential([Dense(1), (input_shape=(nfeaturs, ))] ) # 1은 Output, nfeaturs는 Input

# 모델요약
model.s

Dense(❔)

노드를 몇 개를 출력할 것인가

 

input_shape(❔, )

input, 분석단위

 

🤔왜 (nfeatures, ) 공백이 오는 건가요

⭐1차원의 shape (방향이 없습니다❗)

# 1차원 array
a = np.array([1, 2, 3])
a.shape

# 결과
(3, )

 


Compile

선언된 모델에 대해 몇 가지 설정을 한 후, 컴퓨터가 이해할 수 있는 형태로 변환하는 작업

 

model.compile(
		optimizer = Adam(learning_rate = 0.1)
                , loss='mse')

 

loss function(오차함수)

  • 오차 계산을 무엇으로 할지 결정
  • 회귀모델은 보통 mse로 오차 계산

 

optimiser

  • 오차를 줄이는(최소화하도록) 가중치를 조절하는 역할
  • optimizer = 'adam’ : learning_rate 기본값 = 0.001
  • optimizer = Adam(lr = 0.1) : 옵션 값 조정 가능

 

learning_rate

https://www.jeremyjordan.me/nn-learning-rate/


학습

✅epochs 반복 횟수

  • 가중치 조정 반복 횟수
  • 전체 데이터를 몇 번 학습할 것인지 정해 줌

✅validation_split = 0.2

  • train 데이터에서 20%를 검증 셋으로 분리

✅. history

  • train 데이터에서 20%를 검증 셋으로 분리
history = model.fit(x_train, y_train, 
                    epochs = 20, validation_split=0.2).history
               

# loss 와 val_loss를 보면 오차가 줄어드는 걸 볼 수 있다.
# .history 는 loss, val_loss 의 값을 저장하고 있다.

 

입력이 여러 개일 경우 리스트로 만들어 줌.

728x90