저번주 머신러닝에 이어 이번주에는 딥러닝을 배웠다. 지난주에 배운 머신러닝도 5일만에 머신러닝의 기초를 다뤄야했기 때문에 너무 방대한 양의 정보가 머릿속으로 들어와 혼란스러웠다. 게다가 다음주에는 바로 미니프로젝트가 진행되어 같은 팀원 분들에게 민폐를 끼치지 않으려면 복습이 필수일 것 같다. 에이블 스쿨에서 진행하는 코딩마스터즈도 70문제를 넘어가니 슬슬 안 풀리기 시작했다. 잘 하시는 에이블러 분들은 치고 올라가는데 나만 정체된 기분이다. 에이블 스쿨을 다양한 사정과 이유로 AI 교육을 들으러 수강을 하고 있지만 대학생 때 부터 직무를 정해 부트캠프를 듣는 에이블러분들을 보니 나도 좀 더 열심히 취준을 해야겠다는 생각을 하는 계기가 되었다.
2월 28일인 어제 에이블러 1,2반 에이블러분들과 오프라인 술자리를 가졌다. 약 30명 정도 모였는데 어색하면서도 술이 들어가니 다들 좋으신 분들 같았다. 다들 궁극적으로 취업을 하기 위해 한 자리에 모였지만 여기서 좋은 인연을 만들어 나가는것도 좋을 것 같다는 생각을 했다.
딥러닝 1일차
- 선형 회귀, 로지스틱 회귀
# 라이브러리
import tensorflow as tf
from tensorflow import keras
# 1. 모델 청소
keras.backend.clear_session()
# 2. 모델 선언
model = keras.models.Sequential()
# 3. 모델 조립
model.add(keras.layers.Input(shape=(n,)))
model.add(keras.layers.Dense(m))
# 로지스틱 회귀일 경우
model.add(keras.layers.Dense(m, activation = ‘sigmoid’))
# 4. 컴파일
model.compile(loss = ‘mse’, optimizer = ‘adam’)
# 로지스틱 회귀일 경우
model.compile(loss = ‘’, metrics = [‘accuracy’], optimizer = ‘adam’)
- 다중 분류 회귀
# 먼저 다중 분류를 one-hot encoding을 사용해 나눔
# One-Hot Encoding
from tensorflow.keras.utils import to_categorical
y = to_categorical(y, n)
# 모델 비우기
keras.backend.clear_session()
# 모델 선언
model = keras.models.Sequential()
# 모델 조립
model.add(keras.layers.Input(shape = (n,)))
model.add(keras.layers.Dense(m, activation = 'softmax'))
# 컴파일
model.compile(loss = 'categorical_crossentropy', metrics = ['accuracy'], optimizer = 'adam')
선형회귀 | 로지스틱회귀 | 멀티클래스 분류 | |
ouput layer activation |
x | sigmoid | softmax |
loss | mse | binary_corssentropy | categorical_crossentropy |
딥러닝 2일차
- hidden layer 추가해서 모델링
: 히든 레이어를 추가 함으로써 연결된 것으로부터 기존에 새로운 feature를 추출할 수 있다.
# 모델 비우기
keras.backend.clear_session()
# 모델 선언
model = keras.models.Sequential()
# 모델 조립
model.add(keras.layers.Input(shape = (n,)))
# 히든 레이어 추가
model.add(keras.layers.Dense(m1, activation = 'relu'))
model.add(keras.layers.Dense(m2, activation = 'relu'))
model.add(keras.layers.Dense(k)
# 컴파일
model.compile(loss = 'mse', optimizer = 'adam')
- 머신러닝과 딥러닝의 차이
머신러닝은 사람이 정한 모델과 특징 추출 방법을 이용해서 데이터 기반으로 학습해서 추론할 수 있게 하는 기술인 반면, 딥러닝은 인공 신경망 방법을 이용해 만든 머신러닝 기술로 사람이 학습할 데이터를 직접 제공하지 않아도 스스로 학습하고 예측한다. 즉 머신러닝은 학습하는 데이터를 제공해야하고 딥러닝은 데이터를 스스로 학습할 수 있다는 차이점이 있다.
- ANN
# 모델 fit할 때 필요한 라이브러리
from tensorflow.keras.callbacks import EarlyStopping
# 모델 비우기
keras.backend.clear_session()
# 모델 선언
model = keras.models.Sequential()
# 모델 조립
model.add(keras.layers.Input(shape=(train_x.shape[1],)) )
model.add(keras.layers.Dense(10, activation='softmax') )
# 컴파일
model.compile(loss=keras.losses.categorical_crossentropy, metrics=['accuracy'],optimizer='adam')
# EarlyStopping 설정
es = EarlyStopping(monitor='val_loss', # 관측 대상
min_delta=0, # Threshold -> 지정한 값만큼 나아져야 학습이 되었다고 볼것이다 (0 정확도가 낮아지기 전에 멈춘다)
# 개선되고 있다고 판단하기 위한 최소 변화량을 나타냅니다. 만약 변화량이 min_delta 보다 적은 경우에는 개선이 없다고 판단합니다
patience=5, # 성능 개선되지 않더라도 몇 번 참을래?
verbose=1,
restore_best_weights=True) # 가장 성능이 좋았던 epochs의 가중치를 쓰겠다
# 학습
# validation_split=0.2 => trainning 과정에서 알아서 0.2비율로 잘라서 해줌
model.fit(train_x, train_y, validation_split=0.2, callbacks=[es], verbose=1, epochs=50)
딥러닝 3일차
ANN(Artificial Intelligence)을 이용해 MNIST, Fashion, CIFAR-10 그림을 예측해보는 실습을 진행했다. 그림을 0~255까지의 수를 이용해 그림의 픽셀을 만들어 컴퓨터에 학습 시킨다는 점이 신기했다. 28x28 크기의 그림을 컴퓨터가 예측하여 맞추는 실습이었는데 중간에 hidden layer도 넣어보고 정확도를 높이는 노가다 작업과 model fitting을 할 때 오래 걸리는 점이 다소 지루했다.
이번주 딥러닝은 수학의 덧셈 뺄셈과 같은 기초적인 모델링을 배웠고, 미프가 끝난 다음주에 시각 딥러닝을 들어가면 CNN과 같은 좀 더 복잡하고 정확도가 높은 모델링을 한다고 한다. 그 이후의 미프부터는 아마 죽음이지 않을까 싶다..
- Functional API
# 모델 비우기
keras.backend.clear_session()
# 레이어 연결
il = keras.layers.Input(shape = (n,))
ol = keras.layers.Dense(m)(il)
# 모델 시작과 끝 지정
model = keras.models.Model(inputs = il, outputs = ol)
# 컴파일
model.compile(loss = 'mse', optimizer = 'adam')
- Hidden layer
: 연결된 것으로부터 기존에 없었던 새로운 feature을 추출
= Feature representation ( = Feature Learning)
- Hidden layer 수:
: 얼마나 고수준의 feature을 추출한 것 인가
- 노드 수
: 추출하려는 feature의 수
딥러닝 4일차
- Connection
1. Fully Connected
: 모든 노드 간 연결
2. Locally Connected
: 노드의 연결을 제어해서 연결
< 총 정리 >
- 연결주의 알고리즘
-> Tensorflow
-> keras
1. Sequential API: 차곡차곡 레이어를 쌓는다
2. Functional API: custom 설계 가능
Sequential API | Functional API |
1. 세션 클리어 2. 모델 선언 3. 모델 조립(add) 4. 모델 컴파일 |
1. 클리어 2. Layer 엮기 3. 모델 시작 끝 지정 4. 모델 컴파일 |
선형회귀 | 로지스틱 회귀 | 멀티클래스 회귀 | |
output activation | x | sigmoid | softmax |
compile loss | mse | binary_crossentropy metrics = [‘accuracy’] |
categorical_crossentropy metrics = [‘accuracy’] |
- hidden layer
: 연결된 것으로부터 기존에 없던 새로운 feature 추출 (Feature representation (= Feature Learning))
- hidden layer의 수 => 얼마나 고수준의 feature를 추출한 것인가
- 노드 수 => 추출하려는 feature의 수
- Flatten
: ex) 3x28x28 같은 고차원을 3xn 저차원으로 만들어줌
- One-hot encoding
: 멀티클래스 분류할 때 사용 (to_categorical())
- Scaling
1. Min-Max Scaling
2. Standardization
- .fit(validation_split = )
: 모델 fit할 때 validation 비율을 알아서 나누어 줌
- .fit(callbaks = [])
: EarlyStopping을 이용해 모델링을 빨리 멈춰줌
설명 | |
monitor | 무엇을 보고 멈출 것 인가 |
min_delta | 그 판단의 임계값은 얼마? |
patience | 몇 번 참을 것인지 |
restore_best_weights | 최적 가중치로 돌려줌 |