딥러닝의 회귀,, 선형,, 비선형,,, 이런 이론들을 일단 접어두고 튜토리얼을 무작정 구현하면서 케라스로 딥러닝 모델을 구현하는 방법에 대해 살짝 알아봅시다.
개발 환경 : 아나콘다 가상환경에 2.0.0버전의 텐서플로우와 케라스 설치, 파이썬 3.7.4버전 비주얼 스튜디오 코드 IDE사용.
선형회귀모델을 사용해서 딥러닝을 구현한다는 뜻은 선형회귀 수식 Y = WX + B를 이용하여, X라는 입력자료와 Y라는 출력자료가 주어졌을 때 최적의 W,B를 구한다는 뜻이 됩니다. 여기서 X, Y는 정제된 데이터이며 사람이 해야할 일을 의미하는 것입니다. 우리는 잘 정제된 X, Y 데이터를 넣어주고 노드와 레이어를 구성하여 모델을 만들어주면 케라스 라이브러리는 알아서 최적의 W(Weight)와 B(Bias)를 찾아줍니다.
input_dim = 1, 입력 차원이 1이라는 뜻이며 입력 노드가 한개라고 생각하면 됩니다.
만약 x배열의 데이터가 2개라면 2, 3개라면 3으로 지정을 해줍니다.
그 다음, 만든 시퀀스 오브젝트 model에 5개의 노드를 Dense레이어를 통해 연결해줍니다. 여기서 add를 통해 하나의 레이어를 추가해주는 것입니다.
Dense 레이어는 입력과 출력을 모두 연결해주며 입력과 출력을 각각 연결해주는 가중치를 포함하고 있습니다. 입력이 3개 출력이 4개라면 가중치는 총 3X4인 12개가 존재하게 됩니다. Dense레이어는 머신러닝의 기본층으로 영상이나 서로 연속적으로 상관관계가 있는 데이터가 아니라면 Dense레이어를 통해 학습시킬 수 있는 데이터가 많다는 뜻이 됩니다.
Dense의 첫번째 인자 : 출력 뉴런(노드)의 수를 결정
Dense의 두번째 인자 : input_dim은 입력 뉴런(노드)의 수를 결정, 맨 처음 입력층에서만 사용
Dense의 세번째 인자 : activation 활성화 함수를 선택
활성화 함수 종류
relu
은닉 층으로 학습 'relu' 는 은닉층으로 역전파를 통해 좋은 성능이 나오기 때문에 마지막 층이 아니고서야 거의 relu 를 이용한다.
sigmond
yes or no 와 같은 이진 분류 문제
softmax
확률 값을 이용해 다양한 클래스를 분류하기 위한 문데
model.add(Dense(3))
두번째 레이어의 노드의 갯수는 3개
model.add(Dense(1))
마지막 레이어의 노드의 갯수는 출력 데이터 y의 갯수와 동일하게 1개로 지정
이렇게 만들어진 시퀀스 모델의 모양은 대략 이렇습니다.
model.compile(loss='mse', optimizer='adam')
이제 만들어진 모델을 컴파일 합니다.
여기서 들어간 인자값 loss, optimizer는 무엇이냐 하면,
loss는 손실함수를 의미합니다. 얼마나 입력데이터가 출력데이터와 일치하는지 평가해주는 함수를 의미합니다. 여기서는 손실함수를 'mse'를 사용하겠다는 의미가 됩니다. mse는 평균제곱오차(mean squared error)를 의미합니다. 나중에 자세히 다룰 내용이고 여기서는 그냥 얼마나 예측과 다른지 평가해주는 값이라고 생각하시면 됩니다. 예측값과의 차이를 의미하므로 작으면 작을수록 좋은 모델이라는 의미가 됩니다.
이제 컴파일한 모델을 드디어 훈련을 시킵니다. 입력데이터와 출력데이터를 인자로 넣고, epochs = 100, 100번 훈련을 시킨다는 의미입니다. batch_size는 작업단위를 의미합니다. 머신은 1차 함수를 100번 그린 것 중 1개씩 잡아서 작업을 합니다. 배치 사이즈는 몇 문항을 풀고 해답을 맞추는지 의미하기도 합니다. 여기서 그린 1차함수 100개 중 예측값과 거리를 이용해 오차값 즉, 손실함수(여기서는 mse)를 구하게 되는 것입니다.
배치사이즈의 디폴트 값은 32 입니다. 명시를 해주지 않으면 머신은 32개씩 잡아서 훈련을 합니다.
mse = model.evaluate(x, y, batch_size=1)
배치사이즈를 1로 잡아 손실 함수를 계산합니다.
print('mse : ', mse)
mse : 0.0758705266751349
결과가 출력된 모습입니다. 데이터를 돌릴때마다 값이 다르게 나오고, 여기서 mse값을 더 좋게 만드는 것이 사람이 해주는 일입니다. 이것을 하이퍼파라미터 튜닝이라고 하는데, 결국엔 하이퍼파라미터 튜닝을 통해 적은 손실함수를 얻고 높은 예측률을 얻도록 해야하는 것이 인공지능 개발입니다. 하이퍼파라미터 튜닝에 대해서는 다음 장에서 더 설명하도록 하겠습니다.