1-1. 인공신경망과 딥러닝
- 딥러닝 정의
- 딥러닝은 머신러닝 알고리즘의 집합
- 최근의 딥러닝은 인공신경망 CNN을 기반으로 함
- 비선형 변환으로 구성된 아키텍처를 사용하여 데이터로부터 모델을 만듬
1-2. 인공신경망의 구조
- 심층 신경망
-
- 비선형 문제를 해결해야 할 경우면 더 깊은 신경망이 필요함
- 은닉층이 여러 개로 구성된 인공 신경망을 다층신경망(Multi Layered Perceptron)이라고 불렀음
- DNN(Deep Neural Network)은 다층 인공신경망임
- 실제로 구현된 DNN의 경우에는 단순히 층을 쌓는 구조는 아님
- GPT3는 파라미터 개수가 1750억 개로 층이 깊고 구조가 복잡함
- 입력 계층(Input layer)
- 입력 값으로 구성된 레이어
- 학습 데이터셋의 "입력 변수의 개수" 만큼의 노드로 구성
- IRIS 중 분류를 할 경우 입력층의 뉴런은 4개
- 은닉 계층(Hidden layer)
- 입력층과 출력층 사이의 레이어
- 뉴런(neuron)과 시냅스(synapse)로 구성된 인간의 두뇌를 모방하는 레이어
- 은닉층으로 들어오는 입력값의 합을 계산한 후 활성화 함수를 적용(활성화 함수에 따라 출력되는 값이 다름)
- 은닉층의 개수와 각 층의 뉴런의 수를 정하는 것은 연구자의 몫
- 출력 계층(Output layer)
- 모델의 출력값을 만들어 내는 레이어
- 멀티 클래스 분류 문제의 경우 소프트맥스(softmax) 함수를 출력함수로 사용
- IRIS 종 분류를 할 경우 출력층의 뉴런은 3개
- 인공신경망 모델을 정의할 때에 연구자가 고려해야 할 사항
- 레이어의 수 : 인공신경망 모델에서 은닉층의 수를 지정하는 것
- 뉴런의 수 : 입력층의 뉴런의 수는 입력데이터 변수의 수와 동일해야 하며, 출력츠의 뉴런의 수는 분류분석의 경우 분류 레이블의 수이며, 회귀분석의 경우 1개, 은닉층의 개수와 구조는 연구자가 선택함
- 활성화 함수 : 각 계층에서 사용할 활성화 함수를 지정하는 것
- 가중치 초기 값 : 각 층의 가중치 초기 값을 지정
- 드롭아웃 비율 : 과적합을 줄이기 위해 일부 뉴런의 출력을 0으로 하기 위한 비율
- 배치정규화 : 오차의 경사가 묻히는 현상(gradient vanishing)을 줄이기 위해 은닉층 뉴런의 출력값을 정규화 할지 여부
- 손실함수 : 예측한 값과 실제 값과의 차이를 계산하는 함수를 지정
- 옵티마이저 : 손실함수를 최소화 하도록 가중치를 갱신시키기 위한 옵티마이저
- 학습률 : 옵티마이저가 사용할 학습률
- 학습 횟수(epoch) : 모든 데이터가 입력되어 가중치가 업데이트 되는 학습 횟수
- 배치 크기 : 1회 epoch가 학습될 동안 가중치가 업데이트 되어야 하는 입력데이터의 크기
1-3. 인공신경망 딥러닝 모델 구현
from sklearn import datasets
iris = datasets.load_iris()
iris
{'data': array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
[5. , 3.4, 1.5, 0.2],
[4.4, 2.9, 1.4, 0.2],
[4.9, 3.1, 1.5, 0.1],
[5.4, 3.7, 1.5, 0.2],
[4.8, 3.4, 1.6, 0.2],
[4.8, 3. , 1.4, 0.1],
[4.3, 3. , 1.1, 0.1],
[5.8, 4. , 1.2, 0.2],
[5.7, 4.4, 1.5, 0.4],
[5.4, 3.9, 1.3, 0.4],
[5.1, 3.5, 1.4, 0.3],
[5.7, 3.8, 1.7, 0.3],
[5.1, 3.8, 1.5, 0.3],
[5.4, 3.4, 1.7, 0.2],
[5.1, 3.7, 1.5, 0.4],
[4.6, 3.6, 1. , 0.2],
[5.1, 3.3, 1.7, 0.5],
[4.8, 3.4, 1.9, 0.2],
...
'sepal width (cm)',
'petal length (cm)',
'petal width (cm)'],
'filename': 'iris.csv',
'data_module': 'sklearn.datasets.data'}
from sklearn import datasets
iris = datasets.load_iris()
iris
X_iris = iris.data
y_iris = iris.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_iris, y_iris, random_state=1)
- MLPClassifier 클래스를 이용한 분류 모델 생성
from sklearn.neural_network import MLPClassifier
model = MLPClassifier(hidden_layer_sizes=(50,30))
model.fit(X_train, y_train)
model.score(X_test, y_test)