머신러닝

머신러닝 심화과정(딥러닝)

골드인생 2024. 8. 21. 21:26
  머신러닝 딥러닝
공통점 데이터로부터 가중치를 학습하여 패턴을 인식하고 결정을 내리는 알고리즘 개발과 관련된 인공지능(AI)의 하위 분야
차이점 데이터 안의 통계적 관계를 찾아내며 예측이나 분류를 하는 방법 머신러닝의 한 분야로 신경세포 구조를 모방한 인공 신경망을 사용함

 

■ 가중치 구하기

 # 회귀 문제에서 최소화 하려는 값

- Mean Squared Error(MSE) : 에러를 제곱한 총합의 평균

- 가중치(weight)를 이리 저리 움직이면서 최소의 MSE를 도출해내면 된다.

- 이렇게 최소화 하려는 값을 목적함수 또는 손실함수(cost function) 라고 한다.

 

# 경사 하강법(Gradient Descent) : 모델의 손실함수를 최소화하기 위해 모델의 가중치를 반복적으로 조정하는 최적화 알고리즘 (+a 배치 하강법, 확률적 경사하강법)

 

# 명칭 정리

- Input Layer : 주어진 데이터가 벡터(Vector)의 형태로 입력됨

- Hidden Layer : Input Layer와 Output Layer를 매개하는 레이어로 이를 통해 비선형 문제를 해결할 수 있게 됨

- Output Layer : 최종적으로 도착하게 되는 Layer

--- Activation function(활성화 함수) : 인공신경망의 비선형성을 추가하며 기울기 소실 문제 해결함

 

- epoch : 전체 데이터가 신경망을 통과하는 한 번의 사이클(ex. 1000 epoch: 데이터 전체를 1000번 학습)

- batch : 전체 훈련 데이터 셋을 일정한 크기의 소 그룹으로 나눈 것

- iteration : 전체 훈련 데이터 셋을 여러 개(=batch)로 나누었을 때 배치가 학습되는 횟수

(ex. 1000개의 데이터 batch size 100개라면, 1 epoch에는 iteration은 10번 일어나며 가중치 업데이트도 10번 진행)

# epoch = batch * iteration

 

# 딥러닝 실습

Tensorflow 패키지

tensorflow.keras.model.Sequential
 - model.add: 모델에 대한 새로운 층을 추가함
    - unit

 - model.compile: 모델 구조를 컴파일하며 학습 과정을 설정
    - optimizer : 최적화 방법, Gradient Descent 종류 선택
    - loss : 학습 중 손실 함수 설정
        - 회귀: mean_squared_error(회귀)
        - 분류: categorical_crossentropy

    - metrics : 평가척도
        - mse: Mean Squared Error
        - acc : 정확도
        - f1_score: f1 score

 - model.fit: 모델을 훈련 시키는 과정
    - epochs: 전체 훈련 데이터 셋에 대해 학습을 반복하는 횟수

 - model.summary(): 모델의 구조를 요약하여 출력

tensorflow.keras.model.Dense: 완전 연결된 층
 - unit: 층에 있는 유닛의 수. 출력에 대한 차원 개수
 - input_shape : 1번째 층에만 필요하면 입력데이터의 형태를 지정
model.evaluate : 테스트 데이터를 사용하여 평가
model.predict : 새로운 데이터에 대해서 예측 수행

 

# 코드 실습

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy as np
from sklearn.preprocessing import StandardScaler

weights = np.array([87,81,82,92,90,61,86,66,69,69])
heights = np.array([187,174,179,192,188,160,179,168,168,174])

# Sequential 모델 초기화
model = Sequential()

# 단일을 추가하기

dense_layer = Dense(units= 1, input_shape=[1])
# 단 하나의 Dense 층을 추가합니다. 이 층은 출력 뉴런의 수를 1로 지정(units=1)
# 즉 입력 데이터(체중)에 대해 하나의 값을 출력(키)합니다.
# input_shape=[1]는 입력 데이터가 1차원(체중 데이터 하나)임을 의미

model.add(dense_layer)
model.compile(optimizer='adam', loss = 'mean_squared_error')

model.summary() # 모델 정보 확인
model.fit(weights, heights, epochs= 100)


## HIdden layer를 포함한 아키텍처

model2 = Sequential()

model2.add(Dense(units=64, activation= 'relu', input_shape = [1])) # input layer
model2.add(Dense(units=64, activation= 'relu')) # hidden layer
model2.add(Dense(units=1)) # output layer

model2.compile(optimizer='adam', loss = 'mean_squared_error')

model2.summary()
model2.fit(weights, heights, epochs= 100, batch_size= 10)