본문 바로가기

카테고리 없음

[모두의 딥러닝] 10장. 모델 설계하기

딥러닝의 기본 구조

딥러닝 모델을 설정하고 구동하는 부분은 모두 model 이라는 함수를 선언하여 시작됨
model = Sequential()
딥러닝의 구조를 짜고 층을 설정하는 부분

model.compile()
정해진 모델을 컴퓨터가 알아들을 수 있게끔 컴파일 하는 부분

model.fit()
모델을 실제로 수행하는 부분

입력층, 은닉층, 출력층

딥러닝: 퍼셉트론 위에 숨겨진 퍼셉트론 층을 차곡차곡 추가하는 형태
이 층이 케라스에서는 Sequential()함수로 쉽게 구현 가능하다.

model.add()를 통해 새로운 층을 만들 수 있음

model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

코드를 살펴보면, model.add() 가 2개 있으므로, 두 개의 층을 가진 모델
맨 마지막 층은 결과를 출력하는 '출력층', 나머지는 모두 '은닉층'
Dense()함수를 통해 이 층에 몇 개의 노드를 만들 것인지 정함
30이라고 적힌 숫자는 이 층에 30개의 노드를 만들 겠다는 뜻
input_dim은 입력 데이터에서 몇 개의 값을 가져올지 정하는 것으로, 이를 작성한 층은 은닉층 + 입력층의 역할을 겸함

=> 데이터에서 17개의 값을 받아 은닉층의 30개의 노드로 보낸다는 뜻

은닉층의 각 노드는 17개의 입력 값에서 임의의 가중치를 가지고 각 노드로 전송되어 활성화 함수를 만남활성화 함수를 거친 결괏값이 출력층으로 전달

모델 컴파일

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
metrics=['accuracy']

앞서 지정한 모델이 효과적으로 구현될 수 있게 여러 가지 환경을 설정해 주면서 컴파일하는 부분
오차 함수로 평균 제곱 오차 계열을 사용했는데, 이 외에도 교차 엔트로피 계열의 함수가 존재

  • 교차 엔트로피 계열의 함수 : 출력 값에 로그를 취해서, 오차가 커지면 수렴 속도가 빨라지고, 오차가 작아지면 수렴 속도가 감소하게끔 만든 것

metrics()함수는 모델이 컴파일 될 때 모델 수행 결과를 나타내게끔 설정하는 부분
정확도를 측정하기 위해 사용되는 테스트 샘플을 학습 과정에서 제외시켜 과적합 문제를 방지

교차 엔트로피

교차 엔트로피는 주로 분류 문제에서 많이 사용
예측 값이 참과 거짓 둘 중 하나이면 binary_crossentropy (이항 교차 엔트로피) 사용

모델 실행하기

model.fit(X, Y, epochs=100, batch_size=10)


앞서 컴파일 단계에서 정해진 환경을 주어진 데이터를 불러 실행시킬 때 사용

1 epoch: 학습 프로세스가 모든 샘플에 대해 한 번 실행되는 것
batch_size: 샘플을 한 번에 몇 개씩 처리할지 정하는 부분
(너무 크면 학습 속도가 느려지고, 너무 작으면 각 실행 값의 편차가 생겨 전체 결괏값이 불안정해질 수 있음)

참고: 딥러닝 용어
- 샘플 = instance = example
- 속성 = feature

예를 들어, 570명의 환자에게서 17개의 정보를 통해 생존 여부를 판단하는 데이터가 있다면,
=> 570개의 샘플, 17개의 속성, 1개의 클래스(생존 여부)를 가진 데이터임