본문 바로가기
ML | DL/딥러닝 이론|실습

[딥러닝] 딥러닝 기초

by Leeys 2020. 10. 13.
반응형

머신러닝을 배우다 딥러닝으로 넘어온 오늘.. 내가 딥러닝을 배우다니!

 

 

다층 퍼셉트론

- 입력층(input layer) 한개, 은닉충(hidden layer) 한개이상, 출력층(output layer)으로 구성되있는걸 다층 퍼셉트론이라 부른다. 이 때 은닉충이 두개 이상이면 심층 신경망 이라 부르며 딥러닝은 이 심층 신경망을 연구하는 분야 라고 한다!

 

역전파 훈련 알고리즘

- 이 알고리즘은 간단히 말하면 효율적인 기법으로 그레이디언트를 자동으로 계산하는 경사하강법 이라고 한다.

네크워크를 정방향으로 한 번, 역방향으로 한 번 통과하여 모든 모델 파라미터에 대한 네크워크 오차의 그레이디언트를 계산할 수 있다.

 

순서대로 써보면

 

1) 각 훈련 샘플에 대해 역전파 알고리즘이 먼저 예측을 만들고 오차를 측정(정방향 계산)

2) 역방향으로 각 층을 거치면서 각 연결이 오차에 기여한 정도를 측정한다(역방향 계산)

3) 이 오차가 감소하도록 가중치를 조정한다(경사 하강법)

 

역전파 알고리즘은 로지스틱 함수뿐만 아니라 다른 활성화 함수와도 사용된다.

널리 쓰이는 함수는

 

하이퍼볼릭 탄젠트 함수(쌍곡 탄젠트 함수) - 로지스틱 함수처럼 S자 모양이고 연속적이며 미분 가능, 출력범위가 -1 ~ 1이다.

ReLU 함수 - 연속적이지만, z = 0에서 미분이 불가능, z < 0일 경우 도함수는 0이다. 계산속도가 빠르다는 장점이 있어 기본 활성화 함수라고함, 무엇보다 출력에 최댓값이 없다는 점이 경사 하강법에 일부 문제를 해결해준다.

 

결론은 ReLU를 기본적으로 사용한다고 한다.

 

이제 실습으로 넘어가 보자!

 

keras를 사용한다고 하는데,

 

import tensorflow as tf

from tensorflow import keras

 

나는 tensorflow랑 keras가 다른 라이브러리라고 생각했는데.. 알고보니 tensorflow를 쉽게 사용할수 있도록 한게 keras란다.. 하지만 keras만으로 해결할 수 없는 것들은 tensorflow를 사용해야 한다고 하니 결국 둘다 배워야 한다는것!

 

의류를 분류하는 모델을 만들어보자!

일단 keras를 import 하고

keras안에 있는 데이터셋 fashion_mnist를 불러온 후 데이터를 훈련셋과 테스트셋으로 나눈다

 

60000개의 데이터가 있는 X_train값 그리고 28 x 28의 크기의 배열로 되어있다. (2차원)

경사하강법을 사용하기 때문에 픽셀강도를 255.0으로 나눈다. (픽셀은 0~255 사이로 되어있음)

클래스의 이름을 정해준다!

 

이제 드디어 모델을 만들어 보자~

굉장히 간단해 보인다.

Sequential 모델을 첫번째 라인에 정의하는데 순서대로 연결된 층을 일렬로 쌓아서 구성한다는 것이다.

Flatten층은 입력 이미지를 1D 배열로 변환한다! (X.reshape(-1,1) 과 같음) input_shape에는 샘플 크기를 적어준다.

Dense층은 300개의 뉴런을 가진 은닉층을 의미한다. 이 때 아까본 ReLU 활성화 함수를 사용!

다음엔 100개를 가진 두번 째 은닉충

마지막으로 뉴런 10개를 가진 Dense 출력층을 추가한다. 이 때 softmax 활성화 함수를 사용한다(다중 클래스 이기 때문에)

밑에 코드는 위 코드를 간단히 작성할 수 있게 한 것이다.

 

summary() 함수를 사용하면 모델에 추가한 모든 층을 볼 수 있다. 

 

모델을 compile하여 사용할 손실 함수와 옵티마이저를 지정해야 한다. 부가적으로 훈련과 평가 시에 계산할 지표를 추가로 지정할 수 있다.

 

클래스가 0~9까지 정수인 배타적인 클래스 이므로 'sparse_categorical_crossentropy' 손실,

원 핫 인코딩을 사용한 것이면 'categorical_crossentropy'를 사용,

클래스가 이진 레이블이면 softmax 함수 대신 sgimoid 함수를 사용하며, 'binary_crossentropy' 손실을 사용한다.

 

옵티마이저로는 sgd(확률적 경사하강법)을 사용한다.

 

 

* 요상한 언어가 자주 등장하는데 참고하자

wikidocs.net/36033

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

이제 모델을 훈련해보자.. epochs는 학습횟수다.

검증 데이터로는 아까 만들어 뒀던 X_valid, y_valid를 사용한다

이 때 훈련세트와 검증세트의 정확도가 차이가 많이 나면 과대적합 된거고

많이 안나면 과대적합이 많이 안일어난 것이다!

 

 

반응형

댓글